//ww:run package main; import os; import fmt; import io; 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 expect(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; }; export fn main() i32 = { let fd: i32 = fresh(); if (fd < 0) { return 1; }; match (fmt.fprintf(fd: io.file, "{:5}", 42i64)) { case let n: size => { if (!expect(fd, n, " 42")) { return 2; }; }; case io.error => { os.close(fd); return 3; }; }; fd = fresh(); if (fd < 0) { return 4; }; match (fmt.fprintf(fd: io.file, "{:.3}", "hello")) { case let n: size => { if (!expect(fd, n, "hel")) { return 5; }; }; case io.error => { os.close(fd); return 6; }; }; fd = fresh(); if (fd < 0) { return 7; }; match (fmt.fprintf(fd: io.file, "{:x}", 255i64)) { case let n: size => { if (!expect(fd, n, "ff")) { return 8; }; }; case io.error => { os.close(fd); return 9; }; }; fd = fresh(); if (fd < 0) { return 10; }; match (fmt.fprintf(fd: io.file, "{:+}", 7i64)) { case let n: size => { if (!expect(fd, n, "+7")) { return 11; }; }; case io.error => { os.close(fd); return 12; }; }; fd = fresh(); if (fd < 0) { return 13; }; match (fmt.fprintf(fd: io.file, "{:_05}", 42i64)) { case let n: size => { if (!expect(fd, n, "00042")) { return 14; }; }; case io.error => { os.close(fd); return 15; }; }; return 0; };