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:
2026-08-08 14:02:17 +09:00
parent ddb44405ea
commit 956246b3f0
141 changed files with 1850 additions and 1894 deletions

View 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); };

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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()!;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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);
};

View 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;
};

View 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; };

View 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); };

View 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;
};

View 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;
};

View 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;
};

View 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);
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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);
};

View 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;
};

View 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;
};

View 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; };

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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; };

View 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;
};

View 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;
};

View 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; };

View 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;
};

View 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;
};

View 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;
};

View 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));
};

View 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;
};

View 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; };

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};
};

View 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);
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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; };

View 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;
};

View File

@@ -0,0 +1,4 @@
//ww:run-exit 42
// Migrated from 700_e2e row 0.
package main;
fn main() i32 = { return 42; };

View 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;
};

View 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;
};

View 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;
};

View 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);
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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);
};

View 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;
};

View 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;
};

View 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);
};

View 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; };

View 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);
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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;
};

View 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