allocators/fs/process/socket/log/trace/test move under modules/std/ (allocators.sx becomes std/mem.sx; the Allocator protocol moves into the std.sx prelude, impls stay in mem.sx). New std/xml.sx holds xml_escape as xml.escape. std.sx gains the carried namespace tail — flat-importing std.sx now also provides mem./xml./log. — with the remaining modules (fs/process/socket/json/cli/hash/test) deferred from the tail until the global last-wins maps are fully own-wins (pulling them into every closure collides bare names corpus-wide; they stay direct imports: modules/std/fs.sx etc.). log.sx's internal emit renamed log_emit (it clobbered consumer fns named emit program-wide). bundle.sx uses xml.escape via the carried alias. Consumer import paths swept mechanically; .ir snapshots recaptured for the larger std closure. m3te + game build unchanged.
44 lines
2.1 KiB
Plaintext
44 lines
2.1 KiB
Plaintext
#import "modules/std.sx";
|
|
#import "modules/std/fs.sx";
|
|
|
|
// fs.sx smoke test: every primitive the bundling phase needs.
|
|
// Creates a temp tree, writes/reads/copies/renames/chmod/deletes
|
|
// through it, then exercises basename/dirname.
|
|
|
|
main :: () {
|
|
if !create_dir_all("/tmp/sx_fs_test/a/b/c") { print("FAIL mkdir_all\n"); return; }
|
|
if !exists("/tmp/sx_fs_test/a/b/c") { print("FAIL exists after mkdir_all\n"); return; }
|
|
|
|
if !write_file("/tmp/sx_fs_test/hello.txt", "hello fs") { print("FAIL write_file\n"); return; }
|
|
if r := read_file("/tmp/sx_fs_test/hello.txt") {
|
|
if r.len != 8 { print("FAIL read length: got {}\n", r.len); return; }
|
|
print("read: {}\n", r);
|
|
} else {
|
|
print("FAIL read_file\n");
|
|
return;
|
|
}
|
|
|
|
if !copy_file("/tmp/sx_fs_test/hello.txt", "/tmp/sx_fs_test/hello.copy") { print("FAIL copy\n"); return; }
|
|
if !exists("/tmp/sx_fs_test/hello.copy") { print("FAIL exists after copy\n"); return; }
|
|
|
|
if !move("/tmp/sx_fs_test/hello.copy", "/tmp/sx_fs_test/renamed.txt") { print("FAIL rename\n"); return; }
|
|
if exists("/tmp/sx_fs_test/hello.copy") { print("FAIL old still exists after rename\n"); return; }
|
|
if !exists("/tmp/sx_fs_test/renamed.txt") { print("FAIL new missing after rename\n"); return; }
|
|
|
|
if !set_mode("/tmp/sx_fs_test/hello.txt", 493) { print("FAIL chmod\n"); return; }
|
|
|
|
if !delete_file("/tmp/sx_fs_test/hello.txt") { print("FAIL delete_file\n"); return; }
|
|
if !delete_file("/tmp/sx_fs_test/renamed.txt") { print("FAIL delete renamed\n"); return; }
|
|
if !delete_dir("/tmp/sx_fs_test/a/b/c") { print("FAIL delete c\n"); return; }
|
|
if !delete_dir("/tmp/sx_fs_test/a/b") { print("FAIL delete b\n"); return; }
|
|
if !delete_dir("/tmp/sx_fs_test/a") { print("FAIL delete a\n"); return; }
|
|
if !delete_dir("/tmp/sx_fs_test") { print("FAIL delete root\n"); return; }
|
|
|
|
print("basename(/a/b/c.txt) = {}\n", basename("/a/b/c.txt"));
|
|
print("basename(foo) = {}\n", basename("foo"));
|
|
print("dirname(/a/b/c.txt) = {}\n", dirname("/a/b/c.txt"));
|
|
print("dirname(foo) = {}\n", dirname("foo"));
|
|
|
|
print("ok\n");
|
|
}
|