Files
ww/test/wcc/data/r804_delete_elem_runtime/case.ww
Hojun-Cho d456263f7e test/wcc/data: grow the declarative compiler corpus to 1,224 fixtures
The r-prefixed waves absorb the runtime, reject, and byte-compare rows
of the migrated native carriers; each fixture is one directory with one
case.ww and a //ww:error, //ww:compile, //ww:run, or //ww:run-exit
directive covering both frontends.
2026-08-07 23:21:04 +09:00

88 lines
3.1 KiB
Plaintext

//ww:run
package main;
type s6 = struct { a: i64, b: i64, c: i64, d: i64, e: i64, f: i64 };
type cell = (s6 | bool);
type thread = struct { pc: i64, matched: bool };
fn i64_first() i32 = {
let xs: []i64 = []; append(xs, 7); append(xs, 11); append(xs, 13);
delete(xs[0]); return (xs[0] + xs[1]): i32 + len(xs)*10;
};
fn i64_middle() i32 = {
let xs: []i64 = []; append(xs, 7); append(xs, 11); append(xs, 13);
delete(xs[1]); return (xs[0] + xs[1]): i32 + len(xs)*10;
};
fn i64_last() i32 = {
let xs: []i64 = []; append(xs, 7); append(xs, 11); append(xs, 13);
delete(xs[2]); return (xs[0] + xs[1]): i32 + len(xs)*10;
};
fn i32_narrow() i32 = {
let xs: []i32 = []; append(xs, 4i32); append(xs, 9i32); append(xs, 2i32);
delete(xs[0]); return xs[0] + xs[1]*10 + len(xs)*100;
};
fn u16_narrow() i32 = {
let xs: []u16 = []; append(xs, 4u16); append(xs, 9u16); append(xs, 2u16);
delete(xs[1]); return (xs[0] + xs[1]): i32 + len(xs)*10;
};
fn u8_narrow() i32 = {
let xs: []u8 = []; append(xs, 5u8); append(xs, 9u8); append(xs, 3u8);
delete(xs[1]); return (xs[0] + xs[1]): i32 + len(xs)*10;
};
fn cap_unchanged() i32 = {
let hb: [8]u8; hb[0] = 4u8; hb[1] = 6u8; hb[2] = 9u8;
let xs: []u8; xs.ptr = &hb[0]; xs.len = 3; xs.cap = 8;
delete(xs[1]); return (xs.cap*10 + xs.len): i32 + xs[1]: i32;
};
fn delete_to_empty() i32 = {
let xs: []u8 = []; append(xs, 5u8); delete(xs[0]); return len(xs) + 7;
};
fn str_elem() i32 = {
let xs: []str = []; let a: str = "abc"; let b: str = "de"; let g: str = "fghi";
append(xs, a); append(xs, b); append(xs, g); delete(xs[1]);
return (xs[0].len*10 + xs[1].len): i32 + len(xs)*100;
};
fn tagged_56b() i32 = {
let xs: []cell = [];
let p0: s6 = s6 { a = 1, b = 2, c = 3, d = 4, e = 5, f = 6 };
let p1: s6 = s6 { a = 7, b = 8, c = 9, d = 10, e = 11, f = 12 };
let p2: s6 = s6 { a = 13, b = 14, c = 15, d = 16, e = 17, f = 18 };
append(xs, p0); append(xs, p1); append(xs, p2); delete(xs[1]);
let r: i32 = 0;
match (xs[1]) { case let s: s6 => r = s.a: i32; case bool => r = 99; };
let bp: *u8 = xs.ptr: *u8; r += bp[104]: i32;
return r + len(xs)*100;
};
fn delete_thread(i: i64, threads: *[]thread) void = { delete((*threads)[i]); };
fn regex_shape() i32 = {
let xs: []thread = [];
append(xs, thread { pc = 1, matched = false });
append(xs, thread { pc = 2, matched = false });
append(xs, thread { pc = 3, matched = false });
delete_thread(1, &xs);
let r: i32 = (xs[0].pc + xs[1].pc): i32;
return r + len(xs)*10;
};
fn delete_in_loop() i32 = {
let xs: []i64 = []; append(xs, 1); append(xs, 2); append(xs, 3); append(xs, 4);
let acc: i64 = 0;
for (len(xs) > 0) { acc = acc*4 + xs[0]; delete(xs[0]); };
return acc: i32 + len(xs)*1000;
};
export fn main() i32 = {
if (i64_first() != 44) { return 1; };
if (i64_middle() != 40) { return 2; };
if (i64_last() != 38) { return 3; };
if (i32_narrow() != 229) { return 4; };
if (u16_narrow() != 26) { return 5; };
if (u8_narrow() != 28) { return 6; };
if (cap_unchanged() != 91) { return 7; };
if (delete_to_empty() != 7) { return 8; };
if (str_elem() != 234) { return 9; };
if (tagged_56b() != 231) { return 10; };
if (regex_shape() != 24) { return 11; };
if (delete_in_loop() != 112) { return 12; };
return 0;
};