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

99 lines
2.3 KiB
Plaintext

//ww:run
package main;
import os;
import fmt;
import io;
import memio;
import temp;
fn fresh() i32 = {
let fd: i32 = -1;
let path: str;
match (temp.named(&fd, &path, "/tmp", temp.mode.RDWR, 0o600: i32)) {
case void => void;
case let e: os.oserror => return -1;
};
if (os.remove(path) != 0) { os.close(fd); return -1; };
return fd;
};
fn fileexpect(fd: i32, nw: size, want: str) bool = {
if (os.lseek(fd, 0i64, os.whence.SET) != 0i64) {
os.close(fd);
return false;
};
let buf: [16]u8;
let n: i64 = os.read(fd, &buf[0], 16u64);
let closed: i32 = os.close(fd);
if (closed != 0 || n != want.len: i64 || nw != want.len: size) {
return false;
};
let i: i32 = 0;
for (i < want.len) {
if (buf[i] != want[i]) { return false; };
i += 1;
};
return true;
};
fn streq(a: str, b: str) bool = {
if (a.len != b.len) { return false; };
let i: i32 = 0;
for (i < a.len) {
if (a[i] != b[i]) { return false; };
i += 1;
};
return true;
};
export fn main() i32 = {
let fd: i32 = fresh();
if (fd < 0) { return 1; };
match (fmt.fprintln(fd: io.file, 1i64, "hi", true)) {
case let n: size => { if (!fileexpect(fd, n, "1 hi true\n")) { return 2; }; };
case io.error => { os.close(fd); return 3; };
};
fd = fresh();
if (fd < 0) { return 4; };
match (fmt.fprintfln(fd: io.file, "x={}", 7i64)) {
case let n: size => { if (!fileexpect(fd, n, "x=7\n")) { return 5; }; };
case io.error => { os.close(fd); return 6; };
};
let buf1: [16]u8;
let st1: memio.stream = memio.fixed(buf1[0:16]);
let s1: io.stream = &st1.vt;
match (fmt.fprintln(s1, 1i64, "hi", true)) {
case let n: size => {
if (n != 10: size || !streq(memio.string(&st1), "1 hi true\n")) { return 7; };
};
case io.error => return 8;
};
let buf2: [16]u8;
let st2: memio.stream = memio.fixed(buf2[0:16]);
let s2: io.stream = &st2.vt;
match (fmt.fprintfln(s2, "x={}", 7i64)) {
case let n: size => {
if (n != 4: size || !streq(memio.string(&st2), "x=7\n")) { return 9; };
};
case io.error => return 10;
};
let buf3: [16]u8;
match (fmt.bsprintf(buf3[0:16], "v={}", 42i64)) {
case let view: str => {
if (!streq(view, "v=42") || buf3[0] != 118u8 || buf3[3] != 50u8) { return 11; };
};
case io.error => return 12;
};
let view: str = fmt.asprintf("hello={}", 9i64);
let asok: bool = streq(view, "hello=9");
os.free(view.ptr: *void, view.len: u64);
if (!asok) { return 13; };
return 0;
};