test: migrate 700_e2e rows to corpus fixtures; retire the carrier
136 rows migrated, 0 already owned, 3 wwstage-failing rows held out.
This commit is contained in:
5
test/wcc/data/r700_add_call/case.ww
Normal file
5
test/wcc/data/r700_add_call/case.ww
Normal file
@@ -0,0 +1,5 @@
|
||||
//ww:run-exit 42
|
||||
// Migrated from 700_e2e row 1.
|
||||
package main;
|
||||
fn add(a: i32, b: i32) i32 = { return a + b; };
|
||||
fn main() i32 = { return add(7, 35); };
|
||||
16
test/wcc/data/r700_alias_union_arg/case.ww
Normal file
16
test/wcc/data/r700_alias_union_arg/case.ww
Normal file
@@ -0,0 +1,16 @@
|
||||
//ww:run-exit 107
|
||||
// Migrated from 700_e2e row 73.
|
||||
package main;
|
||||
type result = (i64 | i32);
|
||||
fn unwrap(r: result) i64 = {
|
||||
match (r) {
|
||||
case let v: i64 => return v;
|
||||
case let e: i32 => return e: i64;
|
||||
};
|
||||
return -1;
|
||||
};
|
||||
fn main() i32 = {
|
||||
let r1: result = 100;
|
||||
let r2: result = 7: i32;
|
||||
return (unwrap(r1) + unwrap(r2)): i32;
|
||||
};
|
||||
13
test/wcc/data/r700_alloc_free_assert/case.ww
Normal file
13
test/wcc/data/r700_alloc_free_assert/case.ww
Normal file
@@ -0,0 +1,13 @@
|
||||
//ww:run-exit 42
|
||||
// Migrated from 700_e2e row 45.
|
||||
package main;
|
||||
import os;
|
||||
import rt;
|
||||
type point = struct { x: i64, y: i64 };
|
||||
fn main() i32 = {
|
||||
let p: *point = alloc(point { x = 7, y = 35 })!;
|
||||
let r: i64 = p.x + p.y;
|
||||
free(p);
|
||||
assert(r == 42, "sum mismatch\n");
|
||||
return r: i32;
|
||||
};
|
||||
10
test/wcc/data/r700_alloc_shadow_myos/case.ww
Normal file
10
test/wcc/data/r700_alloc_shadow_myos/case.ww
Normal file
@@ -0,0 +1,10 @@
|
||||
//ww:run-exit 107
|
||||
// Migrated from 700_e2e row 40.
|
||||
package myos;
|
||||
fn alloc(n: i64) i64 = { return n + 100; };
|
||||
fn run() i64 = { return alloc(7); };
|
||||
package main;
|
||||
import myos;
|
||||
fn main() i32 = {
|
||||
return myos.run(): i32;
|
||||
};
|
||||
9
test/wcc/data/r700_alloc_slice_cap/case.ww
Normal file
9
test/wcc/data/r700_alloc_slice_cap/case.ww
Normal file
@@ -0,0 +1,9 @@
|
||||
//ww:run-exit 16
|
||||
// Migrated from 700_e2e row 36.
|
||||
package main;
|
||||
import rt;
|
||||
fn main() i32 = {
|
||||
let s: []u8 = alloc([], 16)!;
|
||||
append(s, 72u8, 105u8);
|
||||
return s.cap;
|
||||
};
|
||||
11
test/wcc/data/r700_alloc_slice_prop/case.ww
Normal file
11
test/wcc/data/r700_alloc_slice_prop/case.ww
Normal file
@@ -0,0 +1,11 @@
|
||||
//ww:run-exit 12
|
||||
// Migrated from 700_e2e row 39.
|
||||
package main;
|
||||
import rt;
|
||||
fn doit() (i32 | nomem) = {
|
||||
let s: []str = alloc([], 12)?;
|
||||
return s.cap: i32;
|
||||
};
|
||||
fn main() i32 = {
|
||||
return doit()!;
|
||||
};
|
||||
8
test/wcc/data/r700_alloc_slice_rune/case.ww
Normal file
8
test/wcc/data/r700_alloc_slice_rune/case.ww
Normal file
@@ -0,0 +1,8 @@
|
||||
//ww:run-exit 8
|
||||
// Migrated from 700_e2e row 37.
|
||||
package main;
|
||||
import rt;
|
||||
fn main() i32 = {
|
||||
let s: []rune = alloc([], 8)!;
|
||||
return s.cap;
|
||||
};
|
||||
8
test/wcc/data/r700_alloc_slice_str/case.ww
Normal file
8
test/wcc/data/r700_alloc_slice_str/case.ww
Normal file
@@ -0,0 +1,8 @@
|
||||
//ww:run-exit 4
|
||||
// Migrated from 700_e2e row 38.
|
||||
package main;
|
||||
import rt;
|
||||
fn main() i32 = {
|
||||
let s: []str = alloc([], 4)!;
|
||||
return s.cap;
|
||||
};
|
||||
9
test/wcc/data/r700_alloc_struct/case.ww
Normal file
9
test/wcc/data/r700_alloc_struct/case.ww
Normal file
@@ -0,0 +1,9 @@
|
||||
//ww:run-exit 25
|
||||
// Migrated from 700_e2e row 34.
|
||||
package main;
|
||||
import rt;
|
||||
type point = struct { x: i32, y: i32 };
|
||||
fn main() i32 = {
|
||||
let p: *point = alloc(point { x = 3, y = 4 })!;
|
||||
return p.x * p.x + p.y * p.y;
|
||||
};
|
||||
10
test/wcc/data/r700_andand_rhs/case.ww
Normal file
10
test/wcc/data/r700_andand_rhs/case.ww
Normal file
@@ -0,0 +1,10 @@
|
||||
//ww:run-exit 42
|
||||
// Migrated from 700_e2e row 135.
|
||||
package main;
|
||||
type point = struct { x: i32, y: i32 };
|
||||
fn main() i32 = {
|
||||
let pt: point = point { x = 5, y = 10 };
|
||||
let p: *point = &pt;
|
||||
if (p != nil && p.x > 0) { return 42; };
|
||||
return 1;
|
||||
};
|
||||
9
test/wcc/data/r700_andand_short/case.ww
Normal file
9
test/wcc/data/r700_andand_short/case.ww
Normal file
@@ -0,0 +1,9 @@
|
||||
//ww:run-exit 42
|
||||
// Migrated from 700_e2e row 133.
|
||||
package main;
|
||||
type point = struct { x: i32, y: i32 };
|
||||
fn main() i32 = {
|
||||
let p: *point = nil;
|
||||
if (p != nil && p.x > 0) { return 1; };
|
||||
return 42;
|
||||
};
|
||||
9
test/wcc/data/r700_andor_precedence/case.ww
Normal file
9
test/wcc/data/r700_andor_precedence/case.ww
Normal file
@@ -0,0 +1,9 @@
|
||||
//ww:run-exit 42
|
||||
// Migrated from 700_e2e row 137.
|
||||
package main;
|
||||
type point = struct { x: i32, y: i32 };
|
||||
fn main() i32 = {
|
||||
let p: *point = nil;
|
||||
if (p != nil && p.x > 0 || p == nil) { return 42; };
|
||||
return 1;
|
||||
};
|
||||
12
test/wcc/data/r700_append_len/case.ww
Normal file
12
test/wcc/data/r700_append_len/case.ww
Normal file
@@ -0,0 +1,12 @@
|
||||
//ww:run-exit 3
|
||||
// Migrated from 700_e2e row 31.
|
||||
package main;
|
||||
import os;
|
||||
fn main() i32 = {
|
||||
let s: []u8;
|
||||
s.ptr = nil; s.len = 0; s.cap = 0;
|
||||
append(s, 88u8); append(s, 89u8); append(s, 90u8);
|
||||
os.write(1, s.ptr, len(s): u64);
|
||||
os.write(1, "\n".ptr, 1u64);
|
||||
return len(s);
|
||||
};
|
||||
15
test/wcc/data/r700_append_spread/case.ww
Normal file
15
test/wcc/data/r700_append_spread/case.ww
Normal file
@@ -0,0 +1,15 @@
|
||||
//ww:run-exit 3
|
||||
// Migrated from 700_e2e row 41.
|
||||
package main;
|
||||
import os;
|
||||
fn main() i32 = {
|
||||
let src: []u8;
|
||||
src.ptr = nil; src.len = 0; src.cap = 0;
|
||||
append(src, 65u8, 66u8, 67u8);
|
||||
let dst: []u8;
|
||||
dst.ptr = nil; dst.len = 0; dst.cap = 0;
|
||||
append(dst, src...);
|
||||
os.write(1, dst.ptr, dst.len: u64);
|
||||
os.write(1, "\n".ptr, 1u64);
|
||||
return dst.len;
|
||||
};
|
||||
4
test/wcc/data/r700_argc/case.ww
Normal file
4
test/wcc/data/r700_argc/case.ww
Normal file
@@ -0,0 +1,4 @@
|
||||
//ww:run-exit 1
|
||||
// Migrated from 700_e2e row 21.
|
||||
package main;
|
||||
fn main(argc: i32, argv: **u8) i32 = { return argc; };
|
||||
7
test/wcc/data/r700_args9_spill/case.ww
Normal file
7
test/wcc/data/r700_args9_spill/case.ww
Normal file
@@ -0,0 +1,7 @@
|
||||
//ww:run-exit 45
|
||||
// Migrated from 700_e2e row 12.
|
||||
package main;
|
||||
fn s9(a: i32, b: i32, c: i32, d: i32, e: i32, f: i32, g: i32, h: i32, i: i32) i32 = {
|
||||
return a + b + c + d + e + f + g + h + i;
|
||||
};
|
||||
fn main() i32 = { return s9(1,2,3,4,5,6,7,8,9); };
|
||||
11
test/wcc/data/r700_arr_i64_index/case.ww
Normal file
11
test/wcc/data/r700_arr_i64_index/case.ww
Normal file
@@ -0,0 +1,11 @@
|
||||
//ww:run-exit 100
|
||||
// Migrated from 700_e2e row 22.
|
||||
package main;
|
||||
fn main() i32 = {
|
||||
let arr: [4]i64;
|
||||
arr[0] = 10; arr[1] = 20; arr[2] = 30; arr[3] = 40;
|
||||
let sum: i64 = 0;
|
||||
let i: i32 = 0;
|
||||
for (i < 4) { sum += arr[i]; i += 1; };
|
||||
return sum: i32;
|
||||
};
|
||||
14
test/wcc/data/r700_arr_u8_rw/case.ww
Normal file
14
test/wcc/data/r700_arr_u8_rw/case.ww
Normal file
@@ -0,0 +1,14 @@
|
||||
//ww:run-exit 10
|
||||
// Migrated from 700_e2e row 6.
|
||||
package main;
|
||||
fn main() i32 = {
|
||||
let buf: [4]u8;
|
||||
buf[0] = 1: u8;
|
||||
buf[1] = 2: u8;
|
||||
buf[2] = 3: u8;
|
||||
buf[3] = 4: u8;
|
||||
let sum: i32 = 0;
|
||||
let i: i32 = 0;
|
||||
for (i < 4) { sum += buf[i]: i32; i += 1; };
|
||||
return sum;
|
||||
};
|
||||
9
test/wcc/data/r700_as_str_variant/case.ww
Normal file
9
test/wcc/data/r700_as_str_variant/case.ww
Normal file
@@ -0,0 +1,9 @@
|
||||
//ww:run-exit 3
|
||||
// Migrated from 700_e2e row 114.
|
||||
package main;
|
||||
fn fail() (i64 | str) = { return "bad"; };
|
||||
fn main() i32 = {
|
||||
let r: (i64 | str) = fail();
|
||||
let e: str = r as str;
|
||||
return e.len: i32;
|
||||
};
|
||||
17
test/wcc/data/r700_bang_alias_param/case.ww
Normal file
17
test/wcc/data/r700_bang_alias_param/case.ww
Normal file
@@ -0,0 +1,17 @@
|
||||
//ww:run-exit 7
|
||||
// Migrated from 700_e2e row 56.
|
||||
package main;
|
||||
type invalid = !i32;
|
||||
type overflow = !void;
|
||||
type error = !(invalid | overflow);
|
||||
fn errcode(e: error) i32 = {
|
||||
match (e) {
|
||||
case let v: invalid => return v: i32;
|
||||
case let v: overflow => return 99;
|
||||
};
|
||||
return 0;
|
||||
};
|
||||
fn main() i32 = {
|
||||
let e: error = 7: invalid;
|
||||
return errcode(e);
|
||||
};
|
||||
11
test/wcc/data/r700_bang_unwrap_str/case.ww
Normal file
11
test/wcc/data/r700_bang_unwrap_str/case.ww
Normal file
@@ -0,0 +1,11 @@
|
||||
//ww:run-exit 2
|
||||
// Migrated from 700_e2e row 70.
|
||||
package main;
|
||||
fn make() (str | i64) = {
|
||||
return "ok";
|
||||
};
|
||||
fn main() i32 = {
|
||||
let r: (str | i64) = make();
|
||||
let v: str = r!;
|
||||
return v.len: i32;
|
||||
};
|
||||
23
test/wcc/data/r700_bang_variants_remap/case.ww
Normal file
23
test/wcc/data/r700_bang_variants_remap/case.ww
Normal file
@@ -0,0 +1,23 @@
|
||||
//ww:run-exit 107
|
||||
// Migrated from 700_e2e row 68.
|
||||
package main;
|
||||
type invalid = !i32;
|
||||
type overflow = !void;
|
||||
fn inner(n: i32) (invalid | i64 | overflow) = {
|
||||
if (n == 0) { return 7: invalid; };
|
||||
if (n < 0) { return void: overflow; };
|
||||
return n: i64 + 1000;
|
||||
};
|
||||
fn outer(n: i32) (overflow | i64 | invalid) = {
|
||||
let v: i64 = inner(n)?;
|
||||
return v + 1;
|
||||
};
|
||||
fn main() i32 = {
|
||||
let r: (overflow | i64 | invalid) = outer(0);
|
||||
match (r) {
|
||||
case let v: i64 => return v: i32;
|
||||
case let e: invalid => return e + 100;
|
||||
case let e: overflow => return 999;
|
||||
};
|
||||
return 0;
|
||||
};
|
||||
39
test/wcc/data/r700_bufio_scanline_discard/case.ww
Normal file
39
test/wcc/data/r700_bufio_scanline_discard/case.ww
Normal file
@@ -0,0 +1,39 @@
|
||||
//ww:run-exit 13
|
||||
// Migrated from 700_e2e row 104.
|
||||
package main;
|
||||
import bufio;
|
||||
import io;
|
||||
import memio;
|
||||
fn main() i32 = {
|
||||
let raw: [11]u8;
|
||||
raw[0] = 102u8; raw[1] = 111u8; raw[2] = 111u8; raw[3] = 10u8;
|
||||
raw[4] = 98u8; raw[5] = 97u8; raw[6] = 114u8; raw[7] = 10u8;
|
||||
raw[8] = 98u8; raw[9] = 97u8; raw[10] = 122u8;
|
||||
let mst: memio.stream = memio.fixed(raw[0:11]);
|
||||
let m: io.stream = &mst.vt;
|
||||
let buf: [16]u8;
|
||||
let sc: bufio.scanner = bufio.newscannerbuf(m, buf[0:16]);
|
||||
let acc: i32 = 0;
|
||||
let l1: (str | io.eof | io.error | bufio.overflow) = bufio.scanline(&sc);
|
||||
match (l1) {
|
||||
case let s: str => acc += s.len;
|
||||
case io.eof => acc += -100;
|
||||
case let _e: io.error => acc += -1000;
|
||||
case bufio.overflow => acc += -10000;
|
||||
};
|
||||
let l2: (str | io.eof | io.error | bufio.overflow) = bufio.scanline(&sc);
|
||||
match (l2) {
|
||||
case let s: str => acc += s.len;
|
||||
case io.eof => acc += -100;
|
||||
case let _e: io.error => acc += -1000;
|
||||
case bufio.overflow => acc += -10000;
|
||||
};
|
||||
let l3: (str | io.eof | io.error | bufio.overflow) = bufio.scanline(&sc);
|
||||
match (l3) {
|
||||
case let s: str => acc += -100;
|
||||
case io.eof => acc += 7;
|
||||
case let _e: io.error => acc += -1000;
|
||||
case bufio.overflow => acc += -10000;
|
||||
};
|
||||
return acc;
|
||||
};
|
||||
18
test/wcc/data/r700_bytes_index/case.ww
Normal file
18
test/wcc/data/r700_bytes_index/case.ww
Normal file
@@ -0,0 +1,18 @@
|
||||
//ww:run-exit 7
|
||||
// Migrated from 700_e2e row 101.
|
||||
package main;
|
||||
import bytes;
|
||||
fn main() i32 = {
|
||||
let buf: [12]u8;
|
||||
buf[0] = 104u8; buf[1] = 101u8; buf[2] = 108u8; buf[3] = 108u8;
|
||||
buf[4] = 111u8; buf[5] = 44u8; buf[6] = 32u8; buf[7] = 119u8;
|
||||
buf[8] = 111u8; buf[9] = 114u8; buf[10] = 108u8; buf[11] = 100u8;
|
||||
let needle: [3]u8;
|
||||
needle[0] = 119u8; needle[1] = 111u8; needle[2] = 114u8;
|
||||
let r: (i32 | void) = bytes.index(buf[0:12], needle[0:3]);
|
||||
match (r) {
|
||||
case let i: i32 => return i;
|
||||
case void => return -1;
|
||||
};
|
||||
return 0;
|
||||
};
|
||||
13
test/wcc/data/r700_chain3_ptrfield/case.ww
Normal file
13
test/wcc/data/r700_chain3_ptrfield/case.ww
Normal file
@@ -0,0 +1,13 @@
|
||||
//ww:run-exit 99
|
||||
// Migrated from 700_e2e row 110.
|
||||
package main;
|
||||
type leaf = struct { v: i32 };
|
||||
type mid = struct { l: *leaf };
|
||||
type top = struct { m: *mid };
|
||||
fn main() i32 = {
|
||||
let lf: leaf = leaf { v = 0 };
|
||||
let md: mid = mid { l = &lf };
|
||||
let tp: top = top { m = &md };
|
||||
tp.m.l.v = 99;
|
||||
return tp.m.l.v;
|
||||
};
|
||||
12
test/wcc/data/r700_chain_ptrfield_write/case.ww
Normal file
12
test/wcc/data/r700_chain_ptrfield_write/case.ww
Normal file
@@ -0,0 +1,12 @@
|
||||
//ww:run-exit 47
|
||||
// Migrated from 700_e2e row 109.
|
||||
package main;
|
||||
type inner = struct { tag: u8, pad: u8, flag: i32 };
|
||||
type outer = struct { sym: *inner };
|
||||
fn main() i32 = {
|
||||
let i: inner = inner { tag = 0u8, pad = 0u8, flag = 10 };
|
||||
let r: outer = outer { sym = &i };
|
||||
r.sym.flag += 32;
|
||||
r.sym.tag = 5u8;
|
||||
return r.sym.flag + (r.sym.tag: i32);
|
||||
};
|
||||
9
test/wcc/data/r700_compound_bitops/case.ww
Normal file
9
test/wcc/data/r700_compound_bitops/case.ww
Normal file
@@ -0,0 +1,9 @@
|
||||
//ww:run-exit 96
|
||||
// Migrated from 700_e2e row 30.
|
||||
package main;
|
||||
fn main() i32 = {
|
||||
let x: i32 = 100;
|
||||
x &= 0x3f; x |= 0x80; x ^= 0xc4;
|
||||
x *= 2; x <<= 1; x >>= 2;
|
||||
return x;
|
||||
};
|
||||
30
test/wcc/data/r700_def_sentinel_err/case.ww
Normal file
30
test/wcc/data/r700_def_sentinel_err/case.ww
Normal file
@@ -0,0 +1,30 @@
|
||||
//ww:run-exit 19
|
||||
// Migrated from 700_e2e row 96.
|
||||
package main;
|
||||
type error = str;
|
||||
def eEOF: error = "eof";
|
||||
def eShortRead: error = "short read";
|
||||
fn read(n: i64) (i64 | error) = {
|
||||
if (n < 0) { return eEOF; };
|
||||
if (n == 0) { return eShortRead; };
|
||||
return n + 1;
|
||||
};
|
||||
fn main() i32 = {
|
||||
let r0: (i64 | error) = read(0);
|
||||
let r1: (i64 | error) = read(-1);
|
||||
let r2: (i64 | error) = read(5);
|
||||
let acc: i32 = 0;
|
||||
match (r0) {
|
||||
case let v: i64 => acc += 100;
|
||||
case let e: error => acc += e.len: i32;
|
||||
};
|
||||
match (r1) {
|
||||
case let v: i64 => acc += 100;
|
||||
case let e: error => acc += e.len: i32;
|
||||
};
|
||||
match (r2) {
|
||||
case let v: i64 => acc += v: i32;
|
||||
case let e: error => acc += 100;
|
||||
};
|
||||
return acc;
|
||||
};
|
||||
5
test/wcc/data/r700_def_str_len/case.ww
Normal file
5
test/wcc/data/r700_def_str_len/case.ww
Normal file
@@ -0,0 +1,5 @@
|
||||
//ww:run-exit 11
|
||||
// Migrated from 700_e2e row 111.
|
||||
package main;
|
||||
def MSG: str = "hello world";
|
||||
fn main() i32 = { return MSG.len: i32; };
|
||||
9
test/wcc/data/r700_def_str_write/case.ww
Normal file
9
test/wcc/data/r700_def_str_write/case.ww
Normal file
@@ -0,0 +1,9 @@
|
||||
//ww:run-exit 3
|
||||
// Migrated from 700_e2e row 112.
|
||||
package main;
|
||||
import os;
|
||||
def GREETING: str = "hi\n";
|
||||
fn main() i32 = {
|
||||
os.write(1, GREETING.ptr, GREETING.len: u64);
|
||||
return GREETING.len: i32;
|
||||
};
|
||||
17
test/wcc/data/r700_defer_implicit_ret/case.ww
Normal file
17
test/wcc/data/r700_defer_implicit_ret/case.ww
Normal file
@@ -0,0 +1,17 @@
|
||||
//ww:run-exit 87
|
||||
// Migrated from 700_e2e row 63.
|
||||
package main;
|
||||
fn rec(p: *i32, c: i32) i32 = {
|
||||
*p = *p * 10 + c;
|
||||
return 0;
|
||||
};
|
||||
fn run(p: *i32) void = {
|
||||
defer rec(p, 7);
|
||||
defer rec(p, 8);
|
||||
// no explicit return — implicit fall-through path
|
||||
};
|
||||
fn main() i32 = {
|
||||
let acc: i32 = 0;
|
||||
run(&acc);
|
||||
return acc;
|
||||
};
|
||||
14
test/wcc/data/r700_defer_lifo_acc/case.ww
Normal file
14
test/wcc/data/r700_defer_lifo_acc/case.ww
Normal file
@@ -0,0 +1,14 @@
|
||||
//ww:run-exit 65
|
||||
// Migrated from 700_e2e row 62.
|
||||
package main;
|
||||
fn rec(p: *i32, c: i32) i32 = {
|
||||
*p = *p * 10 + c;
|
||||
return 0;
|
||||
};
|
||||
fn main() i32 = {
|
||||
let acc: i32 = 0;
|
||||
defer rec(&acc, 1);
|
||||
defer rec(&acc, 2);
|
||||
defer rec(&acc, 3);
|
||||
return acc;
|
||||
};
|
||||
14
test/wcc/data/r700_defer_lifo_syscall/case.ww
Normal file
14
test/wcc/data/r700_defer_lifo_syscall/case.ww
Normal file
@@ -0,0 +1,14 @@
|
||||
//ww:run-exit 0
|
||||
// Migrated from 700_e2e row 13.
|
||||
package main;
|
||||
@symbol("rt_syscall") fn rt_syscall(num: i64, a: i64, b: i64, c: i64) i64;
|
||||
fn out(c: i32) void = { rt_syscall(1, 1, (&c): i64, 1); };
|
||||
fn main() i32 = {
|
||||
let c1: i32 = 0;
|
||||
let c2: i32 = 0;
|
||||
c1 = 65;
|
||||
c2 = 66;
|
||||
defer out(c1);
|
||||
defer out(c2);
|
||||
return 0;
|
||||
};
|
||||
8
test/wcc/data/r700_divmod_multiret/case.ww
Normal file
8
test/wcc/data/r700_divmod_multiret/case.ww
Normal file
@@ -0,0 +1,8 @@
|
||||
//ww:run-exit 5
|
||||
// Migrated from 700_e2e row 5.
|
||||
package main;
|
||||
fn divmod(a: i64, b: i64) (i64, i64) = { return a / b, a % b; };
|
||||
fn main() i32 = {
|
||||
let q, r = divmod(17, 5);
|
||||
return (q + r): i32;
|
||||
};
|
||||
5
test/wcc/data/r700_enum_auto/case.ww
Normal file
5
test/wcc/data/r700_enum_auto/case.ww
Normal file
@@ -0,0 +1,5 @@
|
||||
//ww:run-exit 2
|
||||
// Migrated from 700_e2e row 115.
|
||||
package main;
|
||||
type color = enum { RED, GREEN, BLUE };
|
||||
fn main() i32 = { return color.BLUE as i32; };
|
||||
8
test/wcc/data/r700_enum_bitor/case.ww
Normal file
8
test/wcc/data/r700_enum_bitor/case.ww
Normal file
@@ -0,0 +1,8 @@
|
||||
//ww:run-exit 3
|
||||
// Migrated from 700_e2e row 117.
|
||||
package main;
|
||||
type mode = enum u8 { R = 1, W = 2 };
|
||||
fn main() i32 = {
|
||||
let m: mode = mode.R | mode.W;
|
||||
return m as i32;
|
||||
};
|
||||
12
test/wcc/data/r700_enum_cross_module/case.ww
Normal file
12
test/wcc/data/r700_enum_cross_module/case.ww
Normal file
@@ -0,0 +1,12 @@
|
||||
//ww:run-exit 42
|
||||
// Migrated from 700_e2e row 123.
|
||||
package pkg;
|
||||
export type base = enum i32 { DEC = 10, HEX = 16 };
|
||||
package main;
|
||||
import pkg;
|
||||
fn pick(b: pkg.base) i32 = { return b as i32; };
|
||||
fn main() i32 = {
|
||||
let a: i32 = pick(pkg.base.DEC);
|
||||
let b: i32 = pick(pkg.base.HEX);
|
||||
return a + b + 16;
|
||||
};
|
||||
7
test/wcc/data/r700_enum_pkg_qual/case.ww
Normal file
7
test/wcc/data/r700_enum_pkg_qual/case.ww
Normal file
@@ -0,0 +1,7 @@
|
||||
//ww:run-exit 1
|
||||
// Migrated from 700_e2e row 118.
|
||||
package pkg;
|
||||
type dir = enum { NORTH, SOUTH, EAST, WEST };
|
||||
package main;
|
||||
import pkg;
|
||||
fn main() i32 = { return pkg.dir.SOUTH as i32; };
|
||||
8
test/wcc/data/r700_enum_u8_sibling/case.ww
Normal file
8
test/wcc/data/r700_enum_u8_sibling/case.ww
Normal file
@@ -0,0 +1,8 @@
|
||||
//ww:run-exit 3
|
||||
// Migrated from 700_e2e row 116.
|
||||
package main;
|
||||
type mode = enum u8 { R = 1, W = 2, RW = R | W };
|
||||
fn main() i32 = {
|
||||
let m: mode = mode.RW;
|
||||
return m as i32;
|
||||
};
|
||||
16
test/wcc/data/r700_error_alias_str/case.ww
Normal file
16
test/wcc/data/r700_error_alias_str/case.ww
Normal file
@@ -0,0 +1,16 @@
|
||||
//ww:run-exit 3
|
||||
// Migrated from 700_e2e row 71.
|
||||
package main;
|
||||
type error = str;
|
||||
fn read(n: i64) (i64 | error) = {
|
||||
if (n < 0) { return "eof": error; };
|
||||
return n + 1;
|
||||
};
|
||||
fn main() i32 = {
|
||||
let r: (i64 | error) = read(-1);
|
||||
match (r) {
|
||||
case let v: i64 => return v: i32;
|
||||
case let e: error => return e.len: i32;
|
||||
};
|
||||
return 0;
|
||||
};
|
||||
25
test/wcc/data/r700_errors_tags/case.ww
Normal file
25
test/wcc/data/r700_errors_tags/case.ww
Normal file
@@ -0,0 +1,25 @@
|
||||
//ww:run-exit 11
|
||||
// Migrated from 700_e2e row 102.
|
||||
package main;
|
||||
import errors;
|
||||
fn parse(n: i64) (i64 | errors.invalid | errors.noentry) = {
|
||||
if (n < 0) { let e: errors.invalid; return e; };
|
||||
if (n == 0) { let e: errors.noentry; return e; };
|
||||
return n;
|
||||
};
|
||||
fn main() i32 = {
|
||||
let r1: (i64 | errors.invalid | errors.noentry) = parse(-1);
|
||||
let r2: (i64 | errors.invalid | errors.noentry) = parse(0);
|
||||
let acc: i32 = 0;
|
||||
match (r1) {
|
||||
case let v: i64 => acc += -100;
|
||||
case let e: errors.invalid => acc += 1;
|
||||
case let e: errors.noentry => acc += -100;
|
||||
};
|
||||
match (r2) {
|
||||
case let v: i64 => acc += -100;
|
||||
case let e: errors.invalid => acc += -100;
|
||||
case let e: errors.noentry => acc += 10;
|
||||
};
|
||||
return acc;
|
||||
};
|
||||
22
test/wcc/data/r700_errors_tags_rest/case.ww
Normal file
22
test/wcc/data/r700_errors_tags_rest/case.ww
Normal file
@@ -0,0 +1,22 @@
|
||||
//ww:run-exit 60
|
||||
// Migrated from 700_e2e row 103.
|
||||
package main;
|
||||
import errors;
|
||||
fn classify(n: i32) (i32 | errors.noaccess | errors.exists | errors.unsupported) = {
|
||||
if (n == 1) { let e: errors.noaccess; return e; };
|
||||
if (n == 2) { let e: errors.exists; return e; };
|
||||
if (n == 3) { let e: errors.unsupported; return e; };
|
||||
return n;
|
||||
};
|
||||
fn dispatch(r: (i32 | errors.noaccess | errors.exists | errors.unsupported)) i32 = {
|
||||
match (r) {
|
||||
case let v: i32 => return v;
|
||||
case let e: errors.noaccess => return 10;
|
||||
case let e: errors.exists => return 20;
|
||||
case let e: errors.unsupported => return 30;
|
||||
};
|
||||
return -1;
|
||||
};
|
||||
fn main() i32 = {
|
||||
return dispatch(classify(1)) + dispatch(classify(2)) + dispatch(classify(3));
|
||||
};
|
||||
8
test/wcc/data/r700_f32_add/case.ww
Normal file
8
test/wcc/data/r700_f32_add/case.ww
Normal file
@@ -0,0 +1,8 @@
|
||||
//ww:run-exit 10
|
||||
// Migrated from 700_e2e row 15.
|
||||
package main;
|
||||
fn add32(a: f32, b: f32) f32 = { return a + b; };
|
||||
fn main() i32 = {
|
||||
let r: f32 = add32(2.5: f32, 7.5: f32);
|
||||
return r: i32;
|
||||
};
|
||||
5
test/wcc/data/r700_f64_area/case.ww
Normal file
5
test/wcc/data/r700_f64_area/case.ww
Normal file
@@ -0,0 +1,5 @@
|
||||
//ww:run-exit 78
|
||||
// Migrated from 700_e2e row 7.
|
||||
package main;
|
||||
fn area(r: f64) f64 = { return 3.14 * r * r; };
|
||||
fn main() i32 = { let a: f64 = area(5.0); return a: i32; };
|
||||
9
test/wcc/data/r700_f64_cmp/case.ww
Normal file
9
test/wcc/data/r700_f64_cmp/case.ww
Normal file
@@ -0,0 +1,9 @@
|
||||
//ww:run-exit 7
|
||||
// Migrated from 700_e2e row 8.
|
||||
package main;
|
||||
fn main() i32 = {
|
||||
let a: f64 = 1.5;
|
||||
let b: f64 = 2.5;
|
||||
if (a < b) { if (b > a) { return 7; }; };
|
||||
return 0;
|
||||
};
|
||||
11
test/wcc/data/r700_f64_compound_global/case.ww
Normal file
11
test/wcc/data/r700_f64_compound_global/case.ww
Normal file
@@ -0,0 +1,11 @@
|
||||
//ww:run-exit 2
|
||||
// Migrated from 700_e2e row 120.
|
||||
package main;
|
||||
let G: f64 = 10.0;
|
||||
fn main() i32 = {
|
||||
G += 5.0;
|
||||
G *= 2.0;
|
||||
G -= 20.0;
|
||||
G /= 5.0;
|
||||
return G: i32;
|
||||
};
|
||||
11
test/wcc/data/r700_f64_compound_local/case.ww
Normal file
11
test/wcc/data/r700_f64_compound_local/case.ww
Normal file
@@ -0,0 +1,11 @@
|
||||
//ww:run-exit 2
|
||||
// Migrated from 700_e2e row 119.
|
||||
package main;
|
||||
fn main() i32 = {
|
||||
let a: f64 = 1.5;
|
||||
a += 0.5;
|
||||
a -= 1.0;
|
||||
a *= 4.0;
|
||||
a /= 2.0;
|
||||
return a: i32;
|
||||
};
|
||||
9
test/wcc/data/r700_f64_eq/case.ww
Normal file
9
test/wcc/data/r700_f64_eq/case.ww
Normal file
@@ -0,0 +1,9 @@
|
||||
//ww:run-exit 11
|
||||
// Migrated from 700_e2e row 9.
|
||||
package main;
|
||||
fn main() i32 = {
|
||||
let a: f64 = 3.14;
|
||||
let b: f64 = 3.14;
|
||||
if (a == b) { return 11; };
|
||||
return 0;
|
||||
};
|
||||
11
test/wcc/data/r700_fmt_println/case.ww
Normal file
11
test/wcc/data/r700_fmt_println/case.ww
Normal file
@@ -0,0 +1,11 @@
|
||||
//ww:run-exit 0
|
||||
// Migrated from 700_e2e row 25.
|
||||
package main;
|
||||
import fmt;
|
||||
import strconv;
|
||||
fn main() i32 = {
|
||||
fmt.println("ww");
|
||||
fmt.println(strconv.i64tos(42, strconv.base.DEC));
|
||||
fmt.println(strconv.i64tos(-7, strconv.base.DEC));
|
||||
return 0;
|
||||
};
|
||||
11
test/wcc/data/r700_fmt_println_size/case.ww
Normal file
11
test/wcc/data/r700_fmt_println_size/case.ww
Normal file
@@ -0,0 +1,11 @@
|
||||
//ww:run-exit 8
|
||||
// Migrated from 700_e2e row 132.
|
||||
package main;
|
||||
import fmt;
|
||||
import io;
|
||||
fn main() i32 = {
|
||||
match (fmt.println("hello", 7i64)) {
|
||||
case let n: size => return n: i32;
|
||||
case let _e: io.error => return -1;
|
||||
};
|
||||
};
|
||||
8
test/wcc/data/r700_fnptr_indirect/case.ww
Normal file
8
test/wcc/data/r700_fnptr_indirect/case.ww
Normal file
@@ -0,0 +1,8 @@
|
||||
//ww:run-exit 42
|
||||
// Migrated from 700_e2e row 10.
|
||||
package main;
|
||||
fn add(a: i32, b: i32) i32 = { return a + b; };
|
||||
fn main() i32 = {
|
||||
let fp: fn(a: i32, b: i32) i32 = add;
|
||||
return fp(20, 22);
|
||||
};
|
||||
12
test/wcc/data/r700_for_range/case.ww
Normal file
12
test/wcc/data/r700_for_range/case.ww
Normal file
@@ -0,0 +1,12 @@
|
||||
//ww:run-exit 100
|
||||
// Migrated from 700_e2e row 35.
|
||||
package main;
|
||||
import os;
|
||||
fn main() i32 = {
|
||||
let s: []u8;
|
||||
s.ptr = nil; s.len = 0; s.cap = 0;
|
||||
append(s, 10u8, 20u8, 30u8, 40u8);
|
||||
let total: i32 = 0;
|
||||
for (let b .. s) { total += b: i32; };
|
||||
return total;
|
||||
};
|
||||
9
test/wcc/data/r700_for_sum/case.ww
Normal file
9
test/wcc/data/r700_for_sum/case.ww
Normal file
@@ -0,0 +1,9 @@
|
||||
//ww:run-exit 45
|
||||
// Migrated from 700_e2e row 2.
|
||||
package main;
|
||||
fn main() i32 = {
|
||||
let i: i32 = 0;
|
||||
let s: i32 = 0;
|
||||
for (i < 10) { s += i; i += 1; };
|
||||
return s;
|
||||
};
|
||||
11
test/wcc/data/r700_global_arr_addr/case.ww
Normal file
11
test/wcc/data/r700_global_arr_addr/case.ww
Normal file
@@ -0,0 +1,11 @@
|
||||
//ww:run-exit 42
|
||||
// Migrated from 700_e2e row 122.
|
||||
package main;
|
||||
let buf: [4]u8;
|
||||
fn main() i32 = {
|
||||
let p: *u8 = &buf[0];
|
||||
*p = 41u8;
|
||||
let q: *u8 = &buf[1];
|
||||
*q = 1u8;
|
||||
return (buf[0] + buf[1]): i32;
|
||||
};
|
||||
9
test/wcc/data/r700_global_arr_u8/case.ww
Normal file
9
test/wcc/data/r700_global_arr_u8/case.ww
Normal file
@@ -0,0 +1,9 @@
|
||||
//ww:run-exit 42
|
||||
// Migrated from 700_e2e row 121.
|
||||
package main;
|
||||
let buf: [4]u8;
|
||||
fn main() i32 = {
|
||||
buf[0] = 7u8;
|
||||
buf[1] = 35u8;
|
||||
return (buf[0] + buf[1]): i32;
|
||||
};
|
||||
8
test/wcc/data/r700_if_gt/case.ww
Normal file
8
test/wcc/data/r700_if_gt/case.ww
Normal file
@@ -0,0 +1,8 @@
|
||||
//ww:run-exit 1
|
||||
// Migrated from 700_e2e row 3.
|
||||
package main;
|
||||
fn main() i32 = {
|
||||
let x: i32 = 100;
|
||||
if (x > 50) { return 1; };
|
||||
return 0;
|
||||
};
|
||||
19
test/wcc/data/r700_is_as_scalar/case.ww
Normal file
19
test/wcc/data/r700_is_as_scalar/case.ww
Normal file
@@ -0,0 +1,19 @@
|
||||
//ww:run-exit 49
|
||||
// Migrated from 700_e2e row 113.
|
||||
package main;
|
||||
fn classify(n: i64) (i64 | i32) = {
|
||||
if (n < 0) { return 7: i32; };
|
||||
return n;
|
||||
};
|
||||
fn main() i32 = {
|
||||
let ok: (i64 | i32) = classify(40);
|
||||
let bad: (i64 | i32) = classify(-1);
|
||||
let s: i32 = 0;
|
||||
if (ok is i64) { s += 1; };
|
||||
if (bad is i32) { s += 1; };
|
||||
if (ok is i32) { s += 100; };
|
||||
if (bad is i64) { s += 100; };
|
||||
let v: i64 = ok as i64;
|
||||
let e: i32 = bad as i32;
|
||||
return (v: i32) + s + e;
|
||||
};
|
||||
14
test/wcc/data/r700_match_call_expr/case.ww
Normal file
14
test/wcc/data/r700_match_call_expr/case.ww
Normal file
@@ -0,0 +1,14 @@
|
||||
//ww:run-exit 3
|
||||
// Migrated from 700_e2e row 78.
|
||||
package main;
|
||||
fn make(n: i64) (i64 | str) = {
|
||||
if (n < 0) { return "neg"; };
|
||||
return n + 1;
|
||||
};
|
||||
fn main() i32 = {
|
||||
match (make(-1)) {
|
||||
case let v: i64 => return v: i32;
|
||||
case let e: str => return e.len: i32;
|
||||
};
|
||||
return 0;
|
||||
};
|
||||
15
test/wcc/data/r700_match_default_arm/case.ww
Normal file
15
test/wcc/data/r700_match_default_arm/case.ww
Normal file
@@ -0,0 +1,15 @@
|
||||
//ww:run-exit 7
|
||||
// Migrated from 700_e2e row 54.
|
||||
package main;
|
||||
fn parse(n: i64) (i64 | i32) = {
|
||||
if (n < 0) { return 1: i32; };
|
||||
return n;
|
||||
};
|
||||
fn main() i32 = {
|
||||
let r: (i64 | i32) = parse(-1);
|
||||
match (r) {
|
||||
case let v: i64 => return 1;
|
||||
case => return 7;
|
||||
};
|
||||
return 0;
|
||||
};
|
||||
15
test/wcc/data/r700_match_rev_order/case.ww
Normal file
15
test/wcc/data/r700_match_rev_order/case.ww
Normal file
@@ -0,0 +1,15 @@
|
||||
//ww:run-exit 7
|
||||
// Migrated from 700_e2e row 50.
|
||||
package main;
|
||||
fn parse(n: i64) (i64 | i32) = {
|
||||
if (n < 0) { return 7: i32; };
|
||||
return n;
|
||||
};
|
||||
fn main() i32 = {
|
||||
let r: (i64 | i32) = parse(-1);
|
||||
match (r) {
|
||||
case let e: i32 => return e;
|
||||
case let v: i64 => return (v + 1000): i32;
|
||||
};
|
||||
return 0;
|
||||
};
|
||||
15
test/wcc/data/r700_match_unbound_case/case.ww
Normal file
15
test/wcc/data/r700_match_unbound_case/case.ww
Normal file
@@ -0,0 +1,15 @@
|
||||
//ww:run-exit 40
|
||||
// Migrated from 700_e2e row 55.
|
||||
package main;
|
||||
fn parse(n: i64) (i64 | i32) = {
|
||||
if (n < 0) { return 1: i32; };
|
||||
return n;
|
||||
};
|
||||
fn main() i32 = {
|
||||
let r: (i64 | i32) = parse(40);
|
||||
match (r) {
|
||||
case i32 => return 1;
|
||||
case let v: i64 => return v: i32;
|
||||
};
|
||||
return 0;
|
||||
};
|
||||
15
test/wcc/data/r700_match_yield_i32/case.ww
Normal file
15
test/wcc/data/r700_match_yield_i32/case.ww
Normal file
@@ -0,0 +1,15 @@
|
||||
//ww:run-exit 8
|
||||
// Migrated from 700_e2e row 64.
|
||||
package main;
|
||||
fn pick(b: bool) (i32 | str) = {
|
||||
if (b) { return 7; };
|
||||
return "abc";
|
||||
};
|
||||
fn main() i32 = {
|
||||
let r: (i32 | str) = pick(true);
|
||||
let v: i32 = match (r) {
|
||||
case let n: i32 => yield n + 1;
|
||||
case let s: str => yield s.len: i32 + 100;
|
||||
};
|
||||
return v;
|
||||
};
|
||||
15
test/wcc/data/r700_match_yield_str/case.ww
Normal file
15
test/wcc/data/r700_match_yield_str/case.ww
Normal file
@@ -0,0 +1,15 @@
|
||||
//ww:run-exit 103
|
||||
// Migrated from 700_e2e row 65.
|
||||
package main;
|
||||
fn pick(b: bool) (i32 | str) = {
|
||||
if (b) { return 7; };
|
||||
return "abc";
|
||||
};
|
||||
fn main() i32 = {
|
||||
let r: (i32 | str) = pick(false);
|
||||
let v: i32 = match (r) {
|
||||
case let n: i32 => yield n + 1;
|
||||
case let s: str => yield s.len: i32 + 100;
|
||||
};
|
||||
return v;
|
||||
};
|
||||
8
test/wcc/data/r700_mul_locals/case.ww
Normal file
8
test/wcc/data/r700_mul_locals/case.ww
Normal file
@@ -0,0 +1,8 @@
|
||||
//ww:run-exit 42
|
||||
// Migrated from 700_e2e row 4.
|
||||
package main;
|
||||
fn main() i32 = {
|
||||
let a: i32 = 6;
|
||||
let b: i32 = 7;
|
||||
return a * b;
|
||||
};
|
||||
24
test/wcc/data/r700_nullable_arr_elems/case.ww
Normal file
24
test/wcc/data/r700_nullable_arr_elems/case.ww
Normal file
@@ -0,0 +1,24 @@
|
||||
//ww:run-exit 201
|
||||
// Migrated from 700_e2e row 95.
|
||||
package main;
|
||||
fn pickptr(b: bool) *i32 = {
|
||||
let x: i32 = 42;
|
||||
if (b) { return &x; };
|
||||
return nil;
|
||||
};
|
||||
fn main() i32 = {
|
||||
let arr: [3](*i32 | void);
|
||||
arr[0] = nil;
|
||||
arr[1] = pickptr(true);
|
||||
arr[2] = pickptr(false);
|
||||
let s: i32 = 0;
|
||||
let i: i32 = 0;
|
||||
for (i < 3) {
|
||||
match (arr[i]) {
|
||||
case let p: *i32 => s += 1;
|
||||
case => s += 100;
|
||||
};
|
||||
i += 1;
|
||||
};
|
||||
return s;
|
||||
};
|
||||
18
test/wcc/data/r700_nullable_is_as/case.ww
Normal file
18
test/wcc/data/r700_nullable_is_as/case.ww
Normal file
@@ -0,0 +1,18 @@
|
||||
//ww:run-exit 7
|
||||
// Migrated from 700_e2e row 67.
|
||||
package main;
|
||||
fn lookup(p: *i32, b: bool) (*i32 | void) = {
|
||||
if (b) { return p; };
|
||||
return;
|
||||
};
|
||||
fn main() i32 = {
|
||||
let x: i32 = 42;
|
||||
let r1: (*i32 | void) = lookup(&x, true);
|
||||
let r2: (*i32 | void) = lookup(&x, false);
|
||||
let acc: i32 = 0;
|
||||
if (r1 is *i32) { acc += 1; };
|
||||
if (r2 is void) { acc += 2; };
|
||||
let p: *i32 = r1 as *i32;
|
||||
if (*p == 42) { acc += 4; };
|
||||
return acc;
|
||||
};
|
||||
22
test/wcc/data/r700_nullable_match/case.ww
Normal file
22
test/wcc/data/r700_nullable_match/case.ww
Normal file
@@ -0,0 +1,22 @@
|
||||
//ww:run-exit 7
|
||||
// Migrated from 700_e2e row 66.
|
||||
package main;
|
||||
fn lookup(p: *i32, b: bool) (*i32 | void) = {
|
||||
if (b) { return p; };
|
||||
return;
|
||||
};
|
||||
fn use_arg(r: (*i32 | void)) i32 = {
|
||||
match (r) {
|
||||
case let q: *i32 => return *q;
|
||||
case void => return 99;
|
||||
};
|
||||
return 0;
|
||||
};
|
||||
fn main() i32 = {
|
||||
let x: i32 = 42;
|
||||
let ok: i32 = use_arg(lookup(&x, true));
|
||||
let no: i32 = use_arg(lookup(&x, false));
|
||||
if (ok != 42) { return 1; };
|
||||
if (no != 99) { return 2; };
|
||||
return 7;
|
||||
};
|
||||
10
test/wcc/data/r700_oror_rhs/case.ww
Normal file
10
test/wcc/data/r700_oror_rhs/case.ww
Normal file
@@ -0,0 +1,10 @@
|
||||
//ww:run-exit 42
|
||||
// Migrated from 700_e2e row 136.
|
||||
package main;
|
||||
type point = struct { x: i32, y: i32 };
|
||||
fn main() i32 = {
|
||||
let pt: point = point { x = 7, y = 0 };
|
||||
let p: *point = &pt;
|
||||
if (p == nil || p.x > 0) { return 42; };
|
||||
return 1;
|
||||
};
|
||||
9
test/wcc/data/r700_oror_short/case.ww
Normal file
9
test/wcc/data/r700_oror_short/case.ww
Normal file
@@ -0,0 +1,9 @@
|
||||
//ww:run-exit 42
|
||||
// Migrated from 700_e2e row 134.
|
||||
package main;
|
||||
type point = struct { x: i32, y: i32 };
|
||||
fn main() i32 = {
|
||||
let p: *point = nil;
|
||||
if (p == nil || p.x > 0) { return 42; };
|
||||
return 1;
|
||||
};
|
||||
20
test/wcc/data/r700_os_trywrite/case.ww
Normal file
20
test/wcc/data/r700_os_trywrite/case.ww
Normal file
@@ -0,0 +1,20 @@
|
||||
//ww:run-exit 10
|
||||
// Migrated from 700_e2e row 97.
|
||||
package main;
|
||||
import os;
|
||||
fn main() i32 = {
|
||||
let buf: [3]u8;
|
||||
buf[0] = 88: u8;
|
||||
let ok: (i64 | os.oserror) = os.trywrite(1, buf.ptr, 1u64);
|
||||
let bad: (i64 | os.oserror) = os.trywrite(999: i32, buf.ptr, 1u64);
|
||||
let acc: i32 = 0;
|
||||
match (ok) {
|
||||
case let n: i64 => acc += n: i32;
|
||||
case let e: os.oserror => acc += -100;
|
||||
};
|
||||
match (bad) {
|
||||
case let n: i64 => acc += -100;
|
||||
case let e: os.oserror => acc += (- (e: i64)): i32;
|
||||
};
|
||||
return acc;
|
||||
};
|
||||
5
test/wcc/data/r700_os_write/case.ww
Normal file
5
test/wcc/data/r700_os_write/case.ww
Normal file
@@ -0,0 +1,5 @@
|
||||
//ww:run-exit 3
|
||||
// Migrated from 700_e2e row 17.
|
||||
package main;
|
||||
import os;
|
||||
fn main() i32 = { return os.write(1, "ok\n".ptr, 3): i32; };
|
||||
12
test/wcc/data/r700_ptr_struct_move/case.ww
Normal file
12
test/wcc/data/r700_ptr_struct_move/case.ww
Normal file
@@ -0,0 +1,12 @@
|
||||
//ww:run-exit 7
|
||||
// Migrated from 700_e2e row 28.
|
||||
package main;
|
||||
type point = struct { x: i32, y: i32 };
|
||||
fn move(p: *point, dx: i32, dy: i32) void = {
|
||||
p.x += dx; p.y += dy;
|
||||
};
|
||||
fn main() i32 = {
|
||||
let pt: point = point { x = 0, y = 0 };
|
||||
move(&pt, 3, 4);
|
||||
return pt.x + pt.y;
|
||||
};
|
||||
4
test/wcc/data/r700_ret_const/case.ww
Normal file
4
test/wcc/data/r700_ret_const/case.ww
Normal file
@@ -0,0 +1,4 @@
|
||||
//ww:run-exit 42
|
||||
// Migrated from 700_e2e row 0.
|
||||
package main;
|
||||
fn main() i32 = { return 42; };
|
||||
14
test/wcc/data/r700_rt_malloc_free/case.ww
Normal file
14
test/wcc/data/r700_rt_malloc_free/case.ww
Normal file
@@ -0,0 +1,14 @@
|
||||
//ww:run-exit 0
|
||||
// Migrated from 700_e2e row 20.
|
||||
package main;
|
||||
import os;
|
||||
import rt;
|
||||
fn main() i32 = {
|
||||
let p: *void = rt.malloc(4096u64);
|
||||
if (p == nil) { return 1; };
|
||||
let bp: *u8 = p: *u8;
|
||||
bp[0] = 65u8;
|
||||
os.write(1, bp, 1u64);
|
||||
os.free(p, 4096u64);
|
||||
return 0;
|
||||
};
|
||||
11
test/wcc/data/r700_shortcircuit_bool/case.ww
Normal file
11
test/wcc/data/r700_shortcircuit_bool/case.ww
Normal file
@@ -0,0 +1,11 @@
|
||||
//ww:run-exit 42
|
||||
// Migrated from 700_e2e row 138.
|
||||
package main;
|
||||
fn main() i32 = {
|
||||
let a: bool = (1 > 0) && (2 < 1);
|
||||
let b: bool = (1 < 0) || (2 > 1);
|
||||
let n: i32 = 0;
|
||||
if (!a) { n += 10; };
|
||||
if (b) { n += 32; };
|
||||
return n;
|
||||
};
|
||||
13
test/wcc/data/r700_slice_from_array/case.ww
Normal file
13
test/wcc/data/r700_slice_from_array/case.ww
Normal file
@@ -0,0 +1,13 @@
|
||||
//ww:run-exit 60
|
||||
// Migrated from 700_e2e row 16.
|
||||
package main;
|
||||
fn main() i32 = {
|
||||
let arr: [4]u8;
|
||||
arr[0] = 10: u8; arr[1] = 20: u8;
|
||||
arr[2] = 30: u8; arr[3] = 99: u8;
|
||||
let s: []u8 = arr[0:3];
|
||||
let sum: i32 = 0;
|
||||
let i: i32 = 0;
|
||||
for (i < s.len) { sum += s[i]: i32; i += 1; };
|
||||
return sum;
|
||||
};
|
||||
11
test/wcc/data/r700_static_append/case.ww
Normal file
11
test/wcc/data/r700_static_append/case.ww
Normal file
@@ -0,0 +1,11 @@
|
||||
//ww:run-exit 4
|
||||
// Migrated from 700_e2e row 33.
|
||||
package main;
|
||||
import os;
|
||||
fn main() i32 = {
|
||||
let s: []u8;
|
||||
s.ptr = nil; s.len = 0; s.cap = 0;
|
||||
static append(s, 72u8, 105u8, 33u8, 10u8);
|
||||
os.write(1, s.ptr, len(s): u64);
|
||||
return len(s);
|
||||
};
|
||||
12
test/wcc/data/r700_str_eq/case.ww
Normal file
12
test/wcc/data/r700_str_eq/case.ww
Normal file
@@ -0,0 +1,12 @@
|
||||
//ww:run-exit 30
|
||||
// Migrated from 700_e2e row 27.
|
||||
package main;
|
||||
fn main() i32 = {
|
||||
let a: str = "hello";
|
||||
let b: str = "hello";
|
||||
let c: str = "world";
|
||||
let n: i32 = 0;
|
||||
if (a == b) { n += 10; };
|
||||
if (a != c) { n += 20; };
|
||||
return n;
|
||||
};
|
||||
11
test/wcc/data/r700_strconv_i64tos/case.ww
Normal file
11
test/wcc/data/r700_strconv_i64tos/case.ww
Normal file
@@ -0,0 +1,11 @@
|
||||
//ww:run-exit 5
|
||||
// Migrated from 700_e2e row 19.
|
||||
package main;
|
||||
import os;
|
||||
import strconv;
|
||||
fn main() i32 = {
|
||||
let s: str = strconv.i64tos(12345, strconv.base.DEC);
|
||||
os.write(1, s.ptr, s.len: u64);
|
||||
os.write(1, "\n".ptr, 1u64);
|
||||
return s.len;
|
||||
};
|
||||
27
test/wcc/data/r700_strconv_stoi64/case.ww
Normal file
27
test/wcc/data/r700_strconv_stoi64/case.ww
Normal file
@@ -0,0 +1,27 @@
|
||||
//ww:run-exit 35
|
||||
// Migrated from 700_e2e row 98.
|
||||
package main;
|
||||
import strconv;
|
||||
type r_t = (i64 | strconv.invalid | strconv.overflow);
|
||||
fn main() i32 = {
|
||||
let r1: r_t = strconv.stoi64("42", strconv.base.DEC);
|
||||
let r2: r_t = strconv.stoi64("-7", strconv.base.DEC);
|
||||
let r3: r_t = strconv.stoi64("abc", strconv.base.DEC);
|
||||
let acc: i32 = 0;
|
||||
match (r1) {
|
||||
case let v: i64 => acc += v: i32;
|
||||
case let e: strconv.invalid => acc += -100;
|
||||
case let e: strconv.overflow => acc += -200;
|
||||
};
|
||||
match (r2) {
|
||||
case let v: i64 => acc += v: i32;
|
||||
case let e: strconv.invalid => acc += -100;
|
||||
case let e: strconv.overflow => acc += -200;
|
||||
};
|
||||
match (r3) {
|
||||
case let v: i64 => acc += -100;
|
||||
case let e: strconv.invalid => acc += e: i32;
|
||||
case let e: strconv.overflow => acc += -200;
|
||||
};
|
||||
return acc;
|
||||
};
|
||||
21
test/wcc/data/r700_strconv_stou64/case.ww
Normal file
21
test/wcc/data/r700_strconv_stou64/case.ww
Normal file
@@ -0,0 +1,21 @@
|
||||
//ww:run-exit 130
|
||||
// Migrated from 700_e2e row 99.
|
||||
package main;
|
||||
import strconv;
|
||||
type r_t = (u64 | strconv.invalid | strconv.overflow);
|
||||
fn main() i32 = {
|
||||
let r1: r_t = strconv.stou64("123", strconv.base.DEC);
|
||||
let r2: r_t = strconv.stou64("-1", strconv.base.DEC);
|
||||
let acc: i32 = 0;
|
||||
match (r1) {
|
||||
case let v: u64 => acc += v: i32;
|
||||
case let e: strconv.invalid => acc += -100;
|
||||
case let e: strconv.overflow => acc += -200;
|
||||
};
|
||||
match (r2) {
|
||||
case let v: u64 => acc += 100;
|
||||
case let e: strconv.invalid => acc += 200;
|
||||
case let e: strconv.overflow => acc += 7;
|
||||
};
|
||||
return acc;
|
||||
};
|
||||
19
test/wcc/data/r700_strings_byteindex/case.ww
Normal file
19
test/wcc/data/r700_strings_byteindex/case.ww
Normal file
@@ -0,0 +1,19 @@
|
||||
//ww:run-exit 10
|
||||
// Migrated from 700_e2e row 100.
|
||||
package main;
|
||||
import strings;
|
||||
fn pick(r: (i32 | void), miss: i32) i32 = {
|
||||
match (r) {
|
||||
case let i: i32 => return i;
|
||||
case void => return miss;
|
||||
};
|
||||
return 0;
|
||||
};
|
||||
fn main() i32 = {
|
||||
let s: str = "hello, world";
|
||||
let i1: i32 = pick(strings.byteindex(s, ','), -1);
|
||||
let i2: i32 = pick(strings.byteindex(s, 'z'), -1);
|
||||
let i3: i32 = pick(strings.byteindex(s, "world"), -1);
|
||||
let i4: i32 = pick(strings.byteindex(s, "nope"), -1);
|
||||
return i1 + i2 + i3 + i4;
|
||||
};
|
||||
10
test/wcc/data/r700_strings_concat/case.ww
Normal file
10
test/wcc/data/r700_strings_concat/case.ww
Normal file
@@ -0,0 +1,10 @@
|
||||
//ww:run-exit 12
|
||||
// Migrated from 700_e2e row 32.
|
||||
package main;
|
||||
import strings;
|
||||
import fmt;
|
||||
fn main() i32 = {
|
||||
let r: str = strings.concat("hello, ", "world");
|
||||
fmt.println(r);
|
||||
return r.len;
|
||||
};
|
||||
9
test/wcc/data/r700_struct_byval/case.ww
Normal file
9
test/wcc/data/r700_struct_byval/case.ww
Normal file
@@ -0,0 +1,9 @@
|
||||
//ww:run-exit 42
|
||||
// Migrated from 700_e2e row 14.
|
||||
package main;
|
||||
type pair = struct { a: i64, b: i64 };
|
||||
fn sum(p: pair) i64 = { return p.a + p.b; };
|
||||
fn main() i32 = {
|
||||
let p: pair = pair { a = 10, b = 32 };
|
||||
return sum(p): i32;
|
||||
};
|
||||
13
test/wcc/data/r700_struct_embed/case.ww
Normal file
13
test/wcc/data/r700_struct_embed/case.ww
Normal file
@@ -0,0 +1,13 @@
|
||||
//ww:run-exit 42
|
||||
// Migrated from 700_e2e row 46.
|
||||
package main;
|
||||
type point = struct { x: i32, y: i32 };
|
||||
type vec = struct {
|
||||
point,
|
||||
struct { z: i32 },
|
||||
w: i32,
|
||||
};
|
||||
fn main() i32 = {
|
||||
let v: vec = vec { x = 1, y = 2, z = 3, w = 36 };
|
||||
return v.x + v.y + v.z + v.w;
|
||||
};
|
||||
9
test/wcc/data/r700_struct_i32_fields/case.ww
Normal file
9
test/wcc/data/r700_struct_i32_fields/case.ww
Normal file
@@ -0,0 +1,9 @@
|
||||
//ww:run-exit 25
|
||||
// Migrated from 700_e2e row 26.
|
||||
package main;
|
||||
type point = struct { x: i32, y: i32 };
|
||||
fn distsq(p: point) i32 = { return p.x * p.x + p.y * p.y; };
|
||||
fn main() i32 = {
|
||||
let p: point = point { x = 3, y = 4 };
|
||||
return distsq(p);
|
||||
};
|
||||
14
test/wcc/data/r700_sum_param_str_rune/case.ww
Normal file
14
test/wcc/data/r700_sum_param_str_rune/case.ww
Normal file
@@ -0,0 +1,14 @@
|
||||
//ww:run-exit 42
|
||||
// Migrated from 700_e2e row 124.
|
||||
package main;
|
||||
fn pick(n: (str | rune)) i32 = {
|
||||
match (n) {
|
||||
case let s: str => return s.len + 100;
|
||||
case let r: rune => return r: i32;
|
||||
};
|
||||
};
|
||||
fn main() i32 = {
|
||||
let a: i32 = pick("hi");
|
||||
let b: i32 = pick('?');
|
||||
return a + b - 123;
|
||||
};
|
||||
23
test/wcc/data/r700_sum_param_u8_slice/case.ww
Normal file
23
test/wcc/data/r700_sum_param_u8_slice/case.ww
Normal file
@@ -0,0 +1,23 @@
|
||||
//ww:run-exit 40
|
||||
// Migrated from 700_e2e row 125.
|
||||
package main;
|
||||
import bytes;
|
||||
fn main() i32 = {
|
||||
let buf: [4]u8;
|
||||
buf[0] = 1u8; buf[1] = 2u8; buf[2] = 3u8; buf[3] = 4u8;
|
||||
let needle: [2]u8;
|
||||
needle[0] = 3u8; needle[1] = 4u8;
|
||||
let r1: (i32 | void) = bytes.index(buf[0:4], 3u8);
|
||||
let r2: (i32 | void) = bytes.index(buf[0:4], needle[0:2]);
|
||||
let a: i32 = 99;
|
||||
let b: i32 = 99;
|
||||
match (r1) {
|
||||
case let i: i32 => a = i;
|
||||
case void => a = -1;
|
||||
};
|
||||
match (r2) {
|
||||
case let i: i32 => b = i;
|
||||
case void => b = -1;
|
||||
};
|
||||
return a * 10 + b + 18;
|
||||
};
|
||||
14
test/wcc/data/r700_switch_multi/case.ww
Normal file
14
test/wcc/data/r700_switch_multi/case.ww
Normal file
@@ -0,0 +1,14 @@
|
||||
//ww:run-exit 159
|
||||
// Migrated from 700_e2e row 24.
|
||||
package main;
|
||||
fn classify(x: i32) i32 = {
|
||||
switch (x) {
|
||||
case 1, 2, 3: return 10;
|
||||
case 10: return 99;
|
||||
case: return 50;
|
||||
};
|
||||
return -1;
|
||||
};
|
||||
fn main() i32 = {
|
||||
return classify(2) + classify(10) + classify(99);
|
||||
};
|
||||
6
test/wcc/data/r700_syscall_write/case.ww
Normal file
6
test/wcc/data/r700_syscall_write/case.ww
Normal file
@@ -0,0 +1,6 @@
|
||||
//ww:run-exit 13
|
||||
// Migrated from 700_e2e row 11.
|
||||
package main;
|
||||
@symbol("rt_syscall") fn rt_syscall(num: i64, a: i64, b: i64, c: i64) i64;
|
||||
fn print(s: str) i64 = { return rt_syscall(1, 1, s.ptr: i64, s.len: i64); };
|
||||
fn main() i32 = { return print("hello, world\n"): i32; };
|
||||
16
test/wcc/data/r700_tagged24_arg/case.ww
Normal file
16
test/wcc/data/r700_tagged24_arg/case.ww
Normal file
@@ -0,0 +1,16 @@
|
||||
//ww:run-exit 6
|
||||
// Migrated from 700_e2e row 74.
|
||||
package main;
|
||||
type result = (i64 | str);
|
||||
fn classify(r: result) i32 = {
|
||||
match (r) {
|
||||
case let v: i64 => return 1;
|
||||
case let e: str => return e.len: i32;
|
||||
};
|
||||
return -1;
|
||||
};
|
||||
fn main() i32 = {
|
||||
let r1: result = "hello";
|
||||
let r2: result = 42;
|
||||
return classify(r1) + classify(r2);
|
||||
};
|
||||
21
test/wcc/data/r700_tagged_alias_arr/case.ww
Normal file
21
test/wcc/data/r700_tagged_alias_arr/case.ww
Normal file
@@ -0,0 +1,21 @@
|
||||
//ww:run-exit 42
|
||||
// Migrated from 700_e2e row 127.
|
||||
package main;
|
||||
type formattable = (i64 | str | bool);
|
||||
fn main() i32 = {
|
||||
let args: [3]formattable;
|
||||
args[0] = 1i64: formattable;
|
||||
args[1] = "hi": formattable;
|
||||
args[2] = true: formattable;
|
||||
let s: i32 = 0;
|
||||
let i: i32 = 0;
|
||||
for (i < args.len) {
|
||||
match (args[i]) {
|
||||
case let n: i64 => s += n: i32;
|
||||
case let v: str => s += v.len;
|
||||
case let b: bool => { if (b) { s += 39; }; };
|
||||
};
|
||||
i += 1;
|
||||
};
|
||||
return s;
|
||||
};
|
||||
19
test/wcc/data/r700_tagged_arr_elems/case.ww
Normal file
19
test/wcc/data/r700_tagged_arr_elems/case.ww
Normal file
@@ -0,0 +1,19 @@
|
||||
//ww:run-exit 17
|
||||
// Migrated from 700_e2e row 88.
|
||||
package main;
|
||||
fn main() i32 = {
|
||||
let arr: [3](i32 | str);
|
||||
arr[0] = 10;
|
||||
arr[1] = "hi";
|
||||
arr[2] = 5;
|
||||
let s: i32 = 0;
|
||||
let i: i32 = 0;
|
||||
for (i < 3) {
|
||||
match (arr[i]) {
|
||||
case let v: i32 => s += v;
|
||||
case let t: str => s += t.len: i32;
|
||||
};
|
||||
i += 1;
|
||||
};
|
||||
return s;
|
||||
};
|
||||
22
test/wcc/data/r700_tagged_arr_struct/case.ww
Normal file
22
test/wcc/data/r700_tagged_arr_struct/case.ww
Normal file
@@ -0,0 +1,22 @@
|
||||
//ww:run-exit 34
|
||||
// Migrated from 700_e2e row 89.
|
||||
package main;
|
||||
type pair = struct { a: i32, b: i32 };
|
||||
fn main() i32 = {
|
||||
let arr: [4](i32 | pair | str);
|
||||
arr[0] = 5;
|
||||
arr[1] = pair { a = 7, b = 11 };
|
||||
arr[2] = "yo";
|
||||
arr[3] = 9;
|
||||
let s: i32 = 0;
|
||||
let i: i32 = 0;
|
||||
for (i < 4) {
|
||||
match (arr[i]) {
|
||||
case let v: i32 => s += v;
|
||||
case let p: pair => s += p.a + p.b;
|
||||
case let t: str => s += t.len: i32;
|
||||
};
|
||||
i += 1;
|
||||
};
|
||||
return s;
|
||||
};
|
||||
12
test/wcc/data/r700_tagged_assign_synth/case.ww
Normal file
12
test/wcc/data/r700_tagged_assign_synth/case.ww
Normal file
@@ -0,0 +1,12 @@
|
||||
//ww:run-exit 9
|
||||
// Migrated from 700_e2e row 53.
|
||||
package main;
|
||||
fn main() i32 = {
|
||||
let r: (i64 | i32) = 0;
|
||||
r = 9: i32;
|
||||
match (r) {
|
||||
case let v: i64 => return 1;
|
||||
case let e: i32 => return e;
|
||||
};
|
||||
return 0;
|
||||
};
|
||||
23
test/wcc/data/r700_tagged_elem_arg/case.ww
Normal file
23
test/wcc/data/r700_tagged_elem_arg/case.ww
Normal file
@@ -0,0 +1,23 @@
|
||||
//ww:run-exit 42
|
||||
// Migrated from 700_e2e row 91.
|
||||
package main;
|
||||
fn weight(v: (i32 | str)) i32 = {
|
||||
match (v) {
|
||||
case let n: i32 => return n;
|
||||
case let s: str => return s.len: i32 * 10;
|
||||
};
|
||||
return 0;
|
||||
};
|
||||
fn main() i32 = {
|
||||
let arr: [3](i32 | str);
|
||||
arr[0] = 5;
|
||||
arr[1] = "abc";
|
||||
arr[2] = 7;
|
||||
let s: i32 = 0;
|
||||
let i: i32 = 0;
|
||||
for (i < 3) {
|
||||
s += weight(arr[i]);
|
||||
i += 1;
|
||||
};
|
||||
return s;
|
||||
};
|
||||
15
test/wcc/data/r700_tagged_elem_let/case.ww
Normal file
15
test/wcc/data/r700_tagged_elem_let/case.ww
Normal file
@@ -0,0 +1,15 @@
|
||||
//ww:run-exit 3
|
||||
// Migrated from 700_e2e row 92.
|
||||
package main;
|
||||
fn main() i32 = {
|
||||
let arr: [3](i32 | str);
|
||||
arr[0] = 11;
|
||||
arr[1] = "ww!";
|
||||
arr[2] = 7;
|
||||
let r: (i32 | str) = arr[1];
|
||||
match (r) {
|
||||
case let n: i32 => return n;
|
||||
case let s: str => return s.len: i32;
|
||||
};
|
||||
return 0;
|
||||
};
|
||||
17
test/wcc/data/r700_tagged_elem_ret/case.ww
Normal file
17
test/wcc/data/r700_tagged_elem_ret/case.ww
Normal file
@@ -0,0 +1,17 @@
|
||||
//ww:run-exit 3
|
||||
// Migrated from 700_e2e row 94.
|
||||
package main;
|
||||
fn pick(i: i32) (i32 | str) = {
|
||||
let arr: [2](i32 | str);
|
||||
arr[0] = 21;
|
||||
arr[1] = "abc";
|
||||
return arr[i];
|
||||
};
|
||||
fn main() i32 = {
|
||||
let r: (i32 | str) = pick(1);
|
||||
match (r) {
|
||||
case let n: i32 => return n;
|
||||
case let s: str => return s.len: i32;
|
||||
};
|
||||
return 0;
|
||||
};
|
||||
19
test/wcc/data/r700_tagged_forward_ret/case.ww
Normal file
19
test/wcc/data/r700_tagged_forward_ret/case.ww
Normal file
@@ -0,0 +1,19 @@
|
||||
//ww:run-exit 3
|
||||
// Migrated from 700_e2e row 77.
|
||||
package main;
|
||||
type result = (i64 | str);
|
||||
fn inner(n: i64) result = {
|
||||
if (n < 0) { return "neg"; };
|
||||
return n + 1;
|
||||
};
|
||||
fn outer(n: i64) result = {
|
||||
return inner(n);
|
||||
};
|
||||
fn main() i32 = {
|
||||
let r: result = outer(-1);
|
||||
match (r) {
|
||||
case let v: i64 => return v: i32;
|
||||
case let e: str => return e.len: i32;
|
||||
};
|
||||
return 0;
|
||||
};
|
||||
16
test/wcc/data/r700_tagged_match/case.ww
Normal file
16
test/wcc/data/r700_tagged_match/case.ww
Normal file
@@ -0,0 +1,16 @@
|
||||
//ww:run-exit 42
|
||||
// Migrated from 700_e2e row 48.
|
||||
package main;
|
||||
fn parse(n: i64) (i64 | i32) = {
|
||||
if (n < 0) { return 1: i32; };
|
||||
return n;
|
||||
};
|
||||
fn main() i32 = {
|
||||
let r: (i64 | i32) = parse(40);
|
||||
let s: i64 = 0;
|
||||
match (r) {
|
||||
case let v: i64 => s = v;
|
||||
case let e: i32 => s = -1;
|
||||
};
|
||||
return (s + 2): i32;
|
||||
};
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user