test: prove package initialization semantics
This commit is contained in:
@@ -140,6 +140,7 @@ main(void)
|
||||
"import io;",
|
||||
"import io.bufio;",
|
||||
"import stable io.bufio;",
|
||||
"import _ io.bufio;",
|
||||
"def MAX: i32 = 4096;",
|
||||
"export def MAX: i32 = 4096;",
|
||||
"type point = struct { x: i32, y: i32 };",
|
||||
@@ -149,6 +150,7 @@ main(void)
|
||||
"type arr = [16]u8;",
|
||||
|
||||
"fn nop() void = {};",
|
||||
"fn init() void = {}; fn init() void = {};",
|
||||
"export fn id(x: i32) i32 = { return x; };",
|
||||
"fn add(a: i32, b: i32) i32 = { return a + b; };",
|
||||
"@symbol(\"malloc\") fn cmalloc(n: u64) *void;",
|
||||
|
||||
@@ -49,6 +49,15 @@ struct row { const char *src, *expect; };
|
||||
|
||||
static const struct row rows[] = {
|
||||
{ "fn main() void = {};", "ok" },
|
||||
{ "fn init() void = {}; fn init() void = {};", "ok" },
|
||||
{ "fn init(x: i32) void = {};", "func init must have no arguments and no return values" },
|
||||
{ "fn init() i32 = { return 1; };", "func init must have no arguments and no return values" },
|
||||
{ "fn init() void;", "func init must have a body" },
|
||||
{ "export fn init() void = {};", "func init cannot be exported" },
|
||||
{ "fn init() void = {}; fn f() void = { init(); };", "undefined: init" },
|
||||
{ "fn make() i32 = { return 7; }; let state: i32 = make();", "ok" },
|
||||
{ "fn left() i32 = { return right; }; let first: i32 = left(); let right: i32 = 3;", "ok" },
|
||||
{ "fn readb() i32 = { return b; }; let a: i32 = readb(); let b: i32 = a;", "initialization cycle for a" },
|
||||
{ "fn id(x: i32) i32 = { return x; };", "ok" },
|
||||
{ "fn add(a: i32, b: i32) i32 = { return a + b; };", "ok" },
|
||||
{ "def MAX: i32 = 4096;", "ok" },
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
//ww:run-exit 42
|
||||
package main;
|
||||
type bs = struct { rbuf: []u8, mark: i32 };
|
||||
fn init(b: *bs, rbuf: []u8) void = { b.rbuf = rbuf; b.mark = 9; };
|
||||
fn setup(b: *bs, rbuf: []u8) void = { b.rbuf = rbuf; b.mark = 9; };
|
||||
fn main() i32 = {
|
||||
let raw: [8]u8; raw[0] = 0u8; let b: bs; init(&b, raw[0:5]);
|
||||
let raw: [8]u8; raw[0] = 0u8; let b: bs; setup(&b, raw[0:5]);
|
||||
if (b.rbuf.len != 5) { return 1; }; if (b.rbuf.cap != 8) { return 2; };
|
||||
if (b.mark != 9) { return 3; }; return 42;
|
||||
};
|
||||
|
||||
@@ -16,7 +16,7 @@ export fn main() i32 = {
|
||||
if (sel == 0) { src = &mstB.vt; };
|
||||
let rbuf: [4]u8;
|
||||
let wbuf: [4]u8;
|
||||
let bc: bufio.stream = bufio.init(src, rbuf[0:4], wbuf[0:4]);
|
||||
let bc: bufio.stream = bufio.newstream(src, rbuf[0:4], wbuf[0:4]);
|
||||
let vs: io.stream = &bc.vt;
|
||||
let out: [4]u8;
|
||||
let rd = io.read(vs, out[0:4]);
|
||||
|
||||
@@ -10,7 +10,7 @@ export fn main() i32 = {
|
||||
let msrc: io.stream = &mst.vt;
|
||||
let rbuf: [4]u8;
|
||||
let wbuf: [4]u8;
|
||||
let bc: bufio.stream = bufio.init(msrc, rbuf[0:4], wbuf[0:4]);
|
||||
let bc: bufio.stream = bufio.newstream(msrc, rbuf[0:4], wbuf[0:4]);
|
||||
let vs: io.stream = &bc.vt;
|
||||
if (!bufio.isbuffered(vs)) { return 91; };
|
||||
if (bufio.isbuffered(msrc)) { return 92; };
|
||||
|
||||
@@ -10,7 +10,7 @@ export fn main() i32 = {
|
||||
let msrc: io.stream = &mst.vt;
|
||||
let rbuf: [4]u8;
|
||||
let wbuf: [4]u8;
|
||||
let b: bufio.stream = bufio.init(msrc, rbuf[0:4], wbuf[0:4]);
|
||||
let b: bufio.stream = bufio.newstream(msrc, rbuf[0:4], wbuf[0:4]);
|
||||
let vsbuf: io.stream = &b.vt;
|
||||
let buf2: [4]u8;
|
||||
let st2: memio.stream = memio.fixed(buf2[0:4]);
|
||||
|
||||
@@ -12,7 +12,7 @@ export fn main() i32 = {
|
||||
let msrc: io.stream = &mst.vt;
|
||||
let rbuf: [8]u8;
|
||||
let wbuf: [4]u8;
|
||||
let b: bufio.stream = bufio.init(msrc, rbuf[0:8], wbuf[0:4]);
|
||||
let b: bufio.stream = bufio.newstream(msrc, rbuf[0:8], wbuf[0:4]);
|
||||
let vs: io.stream = &b.vt;
|
||||
let out: [4]u8;
|
||||
let rd1 = io.read(vs, out[0:3]);
|
||||
|
||||
@@ -10,7 +10,7 @@ export fn main() i32 = {
|
||||
let sinkvs: io.stream = &sink.vt;
|
||||
let rb: [4]u8;
|
||||
let wb: [8]u8;
|
||||
let b: bufio.stream = bufio.init(sinkvs, rb[0:4], wb[0:8]);
|
||||
let b: bufio.stream = bufio.newstream(sinkvs, rb[0:4], wb[0:8]);
|
||||
let bvs: io.stream = &b.vt;
|
||||
let semi: [1]u8;
|
||||
semi[0] = 59u8;
|
||||
|
||||
@@ -11,7 +11,7 @@ export fn main() i32 = {
|
||||
let vs: io.stream = &mst.vt;
|
||||
let rbuf: [4]u8;
|
||||
let wbuf: [4]u8;
|
||||
let b: bufio.stream = bufio.init(vs, rbuf[0:4], wbuf[0:4]);
|
||||
let b: bufio.stream = bufio.newstream(vs, rbuf[0:4], wbuf[0:4]);
|
||||
let bvs: io.stream = &b.vt;
|
||||
let out: [4]u8;
|
||||
let rd = io.read(bvs, out[0:3]);
|
||||
|
||||
@@ -10,7 +10,7 @@ export fn main() i32 = {
|
||||
let msrc: io.stream = &mst.vt;
|
||||
let rbuf: [8]u8;
|
||||
let wbuf: [8]u8;
|
||||
let b: bufio.stream = bufio.init(msrc, rbuf[0:8], wbuf[0:8]);
|
||||
let b: bufio.stream = bufio.newstream(msrc, rbuf[0:8], wbuf[0:8]);
|
||||
let vs: io.stream = &b.vt;
|
||||
let payload: [5]u8;
|
||||
payload[0] = 104u8; payload[1] = 105u8;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
package main;
|
||||
import math.random;
|
||||
export fn main() int = {
|
||||
let g: random.random = random.init(1u64);
|
||||
let g: random.random = random.fromseed(1u64);
|
||||
let x: u32 = random.u32n(&g, 1u32);
|
||||
if (x >= 1u32) { return 1; };
|
||||
return 0;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
package main;
|
||||
import math.random;
|
||||
export fn main() int = {
|
||||
let g: random.random = random.init(1u64);
|
||||
let g: random.random = random.fromseed(1u64);
|
||||
let x: u32 = random.u32n(&g, 10u32);
|
||||
if (x >= 10u32) { return 1; };
|
||||
return 0;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
package main;
|
||||
import math.random;
|
||||
export fn main() int = {
|
||||
let g: random.random = random.init(1u64);
|
||||
let g: random.random = random.fromseed(1u64);
|
||||
let x: u64 = random.u64n(&g, 1u64);
|
||||
if (x >= 1u64) { return 1; };
|
||||
return 0;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
package main;
|
||||
import math.random;
|
||||
export fn main() int = {
|
||||
let g: random.random = random.init(1u64);
|
||||
let g: random.random = random.fromseed(1u64);
|
||||
let x: u64 = random.u64n(&g, 10u64);
|
||||
if (x >= 10u64) { return 1; };
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user