Files
ww/test/wcc/data/r809del_delete_range_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

113 lines
4.7 KiB
Plaintext

//ww:run
package main;
type pair = struct { a: i64, b: i64 };
fn full_range() i32 = {
let xs: []i64 = []; append(xs, 7); append(xs, 11); append(xs, 13);
delete(xs[:]); return len(xs): i32 + 7;
};
fn full_explicit() i32 = {
let xs: []i64 = []; append(xs, 7); append(xs, 11); append(xs, 13);
delete(xs[0:3]); return len(xs): i32 + 8;
};
fn full_twice() i32 = {
let xs: []i64 = []; append(xs, 7); append(xs, 11);
delete(xs[:]); delete(xs[:]); return len(xs): i32 + 9;
};
fn head() i32 = {
let xs: []i64 = []; append(xs, 1); append(xs, 2); append(xs, 3);
delete(xs[:2]); return xs[0]: i32 + len(xs)*10;
};
fn mid() i32 = {
let xs: []i64 = []; append(xs, 1); append(xs, 2); append(xs, 3); append(xs, 4); append(xs, 5);
delete(xs[1:3]); return (xs[0]*100 + xs[1]*10 + xs[2]): i32 + len(xs);
};
fn tail_open() i32 = {
let xs: []i64 = []; append(xs, 1); append(xs, 2); append(xs, 3);
delete(xs[1:]); return xs[0]: i32 + len(xs)*10;
};
fn empty_range() i32 = {
let xs: []i64 = []; append(xs, 1); append(xs, 2); delete(xs[1:1]);
return (xs[0] + xs[1]): i32 + len(xs)*10;
};
fn end_boundary() i32 = {
let xs: []i64 = []; append(xs, 1); append(xs, 2);
delete(xs[len(xs):len(xs)]); return (xs[0]*10 + xs[1]): i32 + len(xs)*100;
};
fn empty_explicit() i32 = {
let xs: []i64 = []; delete(xs[0:0]); return len(xs): i32 + 31;
};
fn single_via_range() i32 = {
let xs: []i64 = []; append(xs, 7); append(xs, 11); append(xs, 13); delete(xs[1:2]);
let ys: []i64 = []; append(ys, 7); append(ys, 11); append(ys, 13); delete(ys[1]);
if (len(xs) != len(ys)) { return 99; };
if (xs[0] != ys[0]) { return 98; }; if (xs[1] != ys[1]) { return 97; };
return 42;
};
fn cap_preserved() 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[:]); return (xs.cap*10 + xs.len): i32;
};
fn u8_narrow() i32 = {
let xs: []u8 = []; append(xs, 1u8); append(xs, 2u8); append(xs, 3u8); append(xs, 4u8); append(xs, 5u8);
delete(xs[1:4]); return (xs[0]*10u8 + xs[1]): i32 + len(xs)*100;
};
fn u16_narrow() i32 = {
let xs: []u16 = []; append(xs, 1u16); append(xs, 2u16); append(xs, 3u16); append(xs, 4u16);
delete(xs[1:3]); return (xs[0] + xs[1]): i32 + len(xs)*10;
};
fn i32_narrow() i32 = {
let xs: []i32 = []; append(xs, 10i32); append(xs, 20i32); append(xs, 30i32); append(xs, 40i32);
delete(xs[2:4]); return xs[0] + xs[1] + len(xs)*10;
};
fn struct16() i32 = {
let xs: []pair = [];
append(xs, pair { a = 1, b = 2 }); append(xs, pair { a = 3, b = 4 }); append(xs, pair { a = 5, b = 6 });
delete(xs[1:2]); return (xs[0].a*10 + xs[1].b): i32 + len(xs)*100;
};
fn str_elem() i32 = {
let xs: []str = []; let a: str = "abc"; let b: str = "de"; let g: str = "fghi"; let h: str = "jklmn";
append(xs, a); append(xs, b); append(xs, g); append(xs, h); delete(xs[1:3]);
return (xs[0].len*10 + xs[1].len): i32 + len(xs)*100;
};
fn regex_exact() i32 = {
let jump_idxs: [][]size = []; let lvl0: []size = [];
let a: size = 3; let b: size = 9; append(lvl0, a); append(lvl0, b); append(jump_idxs, lvl0);
let group_level: size = 0; delete(jump_idxs[group_level][:]);
return len(jump_idxs[0]): i32 + len(jump_idxs): i32 * 10;
};
fn clear(p: *[]u8) void = { delete((*p)[:]); };
fn deref_shape() i32 = {
let xs: []u8 = []; append(xs, 5u8); append(xs, 6u8); clear(&xs);
return len(xs): i32 + 17;
};
let trace: i64 = 0;
fn lof() size = { trace = trace*10 + 1; return 1; };
fn hif() size = { trace = trace*10 + 2; return 3; };
fn order_of_eval() i32 = {
trace = 0; let xs: []i64 = []; append(xs, 1); append(xs, 2); append(xs, 3); append(xs, 4);
delete(xs[lof():hif()]); if (trace != 12) { return 90; };
return (xs[0]*10 + xs[1]): i32 + len(xs);
};
fn poke(p: *[]i64) size = { (*p)[0] = 9; return 1; };
fn alias_visible() i32 = {
let xs: []i64 = []; append(xs, 1); append(xs, 2); append(xs, 3);
delete(xs[poke(&xs):]); return xs[0]: i32 * 10 + len(xs);
};
export fn main() i32 = {
if (full_range() != 7) { return 1; }; if (full_explicit() != 8) { return 2; };
if (full_twice() != 9) { return 3; }; if (head() != 13) { return 4; };
if (mid() != 148) { return 5; }; if (tail_open() != 11) { return 6; };
if (empty_range() != 23) { return 7; }; if (end_boundary() != 212) { return 8; };
if (empty_explicit() != 31) { return 9; }; if (single_via_range() != 42) { return 10; };
if (cap_preserved() != 80) { return 11; }; if (u8_narrow() != 215) { return 12; };
if (u16_narrow() != 25) { return 13; }; if (i32_narrow() != 50) { return 14; };
if (struct16() != 216) { return 15; }; if (str_elem() != 235) { return 16; };
if (regex_exact() != 10) { return 17; }; if (deref_shape() != 17) { return 18; };
if (order_of_eval() != 16) { return 19; }; if (alias_visible() != 91) { return 20; };
return 0;
};