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

189 lines
8.4 KiB
Plaintext

//ww:run
package main;
type p2t = struct { x: i64, y: i64 };
type s6 = struct { a: i64, b: i64, c: i64, d: i64, e: i64, f: i64 };
type cell = (s6 | bool);
type inst_lit = rune;
type inst_split = i64;
type inst = (inst_lit | inst_split);
type un_size_void = (size | void);
type un_void_size = (void | size);
type un_str_void = (str | void);
type minrep_split = size;
type minrep_un = (minrep_split | void);
fn i64_front() i32 = {
let xs: []i64 = []; append(xs, 7); append(xs, 11); append(xs, 13);
insert(xs[0], 5); return (xs[0] + xs[1]*10): i32 + len(xs)*10;
};
fn i64_middle() i32 = {
let xs: []i64 = []; append(xs, 7); append(xs, 11); append(xs, 13);
insert(xs[1], 5); return (xs[0] + xs[1]*10): i32 + len(xs)*10;
};
fn i64_end() i32 = {
let xs: []i64 = []; append(xs, 7); append(xs, 11); append(xs, 13);
insert(xs[3], 5); return (xs[0] + xs[1]*10): i32 + len(xs)*10;
};
fn end_insert_len() i32 = {
let xs: []i64 = []; append(xs, 7); append(xs, 11); insert(xs[len(xs)], 13);
if (len(xs) != 3) { return 1; }; return xs[2]: i32;
};
fn pregrow_len_idx() i32 = {
let xs: []i64 = []; append(xs, 7); append(xs, 11); insert(xs[len(xs)-1], 13);
if (len(xs) != 3) { return 1; };
if (xs[0] != 7) { return 2; }; if (xs[1] != 13) { return 3; };
if (xs[2] != 11) { return 4; }; return 48;
};
fn i32_narrow() i32 = {
let xs: []i32 = []; append(xs, 4i32); append(xs, 2i32); insert(xs[1], 9i32);
if (len(xs) != 3) { return 1; };
if (xs[0] != 4i32) { return 2; }; if (xs[1] != 9i32) { return 3; };
if (xs[2] != 2i32) { return 4; }; return 42;
};
fn u16_narrow() i32 = {
let xs: []u16 = []; append(xs, 4u16); append(xs, 2u16); insert(xs[1], 9u16);
if (len(xs) != 3) { return 1; };
if (xs[0] != 4u16) { return 2; }; if (xs[1] != 9u16) { return 3; };
if (xs[2] != 2u16) { return 4; }; return 43;
};
fn u8_narrow() i32 = {
let xs: []u8 = []; append(xs, 5u8); append(xs, 3u8); insert(xs[0], 2u8);
if (len(xs) != 3) { return 1; };
if (xs[0] != 2u8) { return 2; }; if (xs[1] != 5u8) { return 3; };
if (xs[2] != 3u8) { return 4; }; return 44;
};
fn empty_insert() i32 = {
let xs: []i64 = []; insert(xs[0], 5); return xs[0]: i32 + len(xs)*10;
};
fn str_elem() i32 = {
let xs: []str = []; let a: str = "abc"; let g: str = "fghi";
append(xs, a); append(xs, g); let b: str = "de"; insert(xs[1], b);
if (len(xs) != 3) { return 1; };
if (xs[0].len != 3) { return 2; }; if (xs[1].len != 2) { return 3; };
if (xs[2].len != 4) { return 4; }; return 45;
};
fn struct_elem() i32 = {
let xs: []p2t = [];
append(xs, p2t { x = 1, y = 2 }); append(xs, p2t { x = 5, y = 6 });
insert(xs[1], p2t { x = 3, y = 4 });
if (len(xs) != 3) { return 1; };
if (xs[0].x != 1 || xs[0].y != 2) { return 2; };
if (xs[1].x != 3 || xs[1].y != 4) { return 3; };
if (xs[2].x != 5 || xs[2].y != 6) { return 4; }; return 46;
};
fn tagged_56b() i32 = {
let xs: []cell = [];
let p0: s6 = s6 { a = 1, b = 2, c = 3, d = 4, e = 5, f = 6 };
let p2: s6 = s6 { a = 13, b = 14, c = 15, d = 16, e = 17, f = 18 };
append(xs, p0); append(xs, p2);
let p1: cell = (s6 { a = 7, b = 8, c = 9, d = 10, e = 11, f = 12 });
insert(xs[1], p1); 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[160]: i32) * 10;
return r + len(xs)*10;
};
fn tagged_cast() i32 = {
let insts: []inst = []; append(insts, ('a': inst_lit)); append(insts, ('b': inst_lit));
insert(insts[1], (7: inst_split)); if (len(insts) != 3) { return 1; };
let r: i32 = 0;
match (insts[1]) { case let z: inst_split => r += z: i32; case => return 2; };
match (insts[2]) {
case let l: inst_lit => { if ((l: rune) == 'b') { r += 20; }; };
case => return 3;
}; return r;
};
fn ins_at(i: i64, p: *[]i64, v: i64) void = { insert((*p)[i], v); };
fn regex_shape() i32 = {
let xs: []i64 = []; append(xs, 1); append(xs, 3); ins_at(1, &xs, 2);
if (len(xs) != 3) { return 1; }; return (xs[0] + xs[1]*10 + xs[2]*50): i32;
};
fn insert_in_loop() i32 = {
let xs: []i64 = []; let v: i64 = 1;
for (v <= 4) { insert(xs[0], v); v += 1; };
if (len(xs) != 4) { return 1; }; let k: i32 = 0;
for (k < 4) { if (xs[k] != (4-k): i64) { return 2+k; }; k += 1; };
return 47;
};
fn tagged_pregrow_val() i32 = {
let xs: []un_size_void = [];
append(xs, 10: size); append(xs, 20: size); insert(xs[1], (xs.len: size)+2);
match (xs[1]) { case let v: size => { if (v != 4) { return (v: i32)+10; }; }; case void => return 2; };
if (len(xs) != 3) { return 3; }; return 50;
};
fn scalar_pregrow_val() i32 = {
let xs: []size = []; append(xs, 10: size); append(xs, 20: size);
insert(xs[1], len(xs): size); if (xs[1] != 2) { return 1; };
if (len(xs) != 3) { return 2; }; return 55;
};
fn tagged_selfref_val() i32 = {
let xs: []un_size_void = [];
append(xs, 10: size); append(xs, 20: size); insert(xs[0], xs[1]);
match (xs[0]) { case let v: size => { if (v != 20) { return 1; }; }; case void => return 2; };
match (xs[1]) { case let v: size => { if (v != 10) { return 3; }; }; case void => return 4; };
match (xs[2]) { case let v: size => { if (v != 20) { return 5; }; }; case void => return 6; };
if (len(xs) != 3) { return 7; }; return 51;
};
fn tagged_str_payload() i32 = {
let ss: []un_str_void = []; append(ss, "aa"); insert(ss[0], "bb");
match (ss[0]) { case let s: str => { if (s.len != 2) { return 1; }; if (s[0] != 'b') { return 2; }; }; case void => return 3; };
match (ss[1]) { case let s: str => { if (s[0] != 'a') { return 4; }; }; case void => return 5; };
return 52;
};
fn tagged_regex_minrep() i32 = {
let xs: []minrep_un = [];
append(xs, 7: minrep_split); append(xs, 8: minrep_split); insert(xs[0], ((xs.len: size)+2): minrep_split);
match (xs[0]) { case let v: minrep_split => { if (v != 4) { return (v: i32)+10; }; }; case void => return 2; };
if (len(xs) != 3) { return 3; }; return 53;
};
fn tagged_realloc_selfref_loop() i32 = {
let xs: []un_void_size = []; append(xs, 100: size); let i: size = 0;
for (i < 30) { append(xs, (xs[0] as size)+i); i += 1; };
if (len(xs) != 31) { return 1; }; let k: size = 1;
for (k < 31) {
match (xs[k]) { case let v: size => { if (v != 100+(k-1)) { return 2; }; }; case void => return 3; };
k += 1;
}; return 56;
};
fn tagged_append_pregrow_val() i32 = {
let xs: []un_size_void = [];
append(xs, 10: size); append(xs, 20: size); append(xs, (xs.len: size)+2);
match (xs[2]) { case let v: size => { if (v != 4) { return (v: i32)+10; }; }; case void => return 2; };
if (len(xs) != 3) { return 3; }; return 54;
};
fn tagged_seq_positions() i32 = {
let xs: []un_void_size = [];
append(xs, 10: size); append(xs, 20: size); insert(xs[0], (xs.len: size)*100);
match (xs[0]) { case let v: size => { if (v != 200) { return 1; }; }; case void => return 2; };
insert(xs[2], (xs.len: size)+1);
match (xs[2]) { case let v: size => { if (v != 4) { return 3; }; }; case void => return 4; };
match (xs[1]) { case let v: size => { if (v != 10) { return 5; }; }; case void => return 6; };
match (xs[3]) { case let v: size => { if (v != 20) { return 7; }; }; case void => return 8; };
if (len(xs) != 4) { return 9; }; return 57;
};
fn tagged_void_variant() i32 = {
let xs: []un_void_size = []; append(xs, 5: size); insert(xs[0], void);
if (!(xs[0] is void)) { return 1; };
match (xs[1]) { case let v: size => { if (v != 5) { return 2; }; }; case void => return 3; };
insert(xs[1], xs.len: size);
match (xs[1]) { case let v: size => { if (v != 2) { return 4; }; }; case void => return 5; };
if (len(xs) != 3) { return 6; }; return 58;
};
export fn main() i32 = {
if (i64_front() != 115) { return 1; }; if (i64_middle() != 97) { return 2; };
if (i64_end() != 157) { return 3; }; if (end_insert_len() != 13) { return 4; };
if (pregrow_len_idx() != 48) { return 5; }; if (i32_narrow() != 42) { return 6; };
if (u16_narrow() != 43) { return 7; }; if (u8_narrow() != 44) { return 8; };
if (empty_insert() != 15) { return 9; }; if (str_elem() != 45) { return 10; };
if (struct_elem() != 46) { return 11; }; if (tagged_56b() != 217) { return 12; };
if (tagged_cast() != 27) { return 13; }; if (regex_shape() != 171) { return 14; };
if (insert_in_loop() != 47) { return 15; }; if (tagged_pregrow_val() != 50) { return 16; };
if (scalar_pregrow_val() != 55) { return 17; }; if (tagged_selfref_val() != 51) { return 18; };
if (tagged_str_payload() != 52) { return 19; }; if (tagged_regex_minrep() != 53) { return 20; };
if (tagged_realloc_selfref_loop() != 56) { return 21; };
if (tagged_append_pregrow_val() != 54) { return 22; };
if (tagged_seq_positions() != 57) { return 23; }; if (tagged_void_variant() != 58) { return 24; };
return 0;
};