diff --git a/libs/dusk/build.zig b/libs/dusk/build.zig index a139be58..a823b9ed 100644 --- a/libs/dusk/build.zig +++ b/libs/dusk/build.zig @@ -19,6 +19,14 @@ pub fn module(b: *std.Build) *std.build.Module { } pub fn testStep(b: *std.Build, optimize: std.builtin.OptimizeMode, target: std.zig.CrossTarget) *std.build.RunStep { + const lib_tests = b.addTest(.{ + .name = "dusk-lib-tests", + .root_source_file = .{ .path = sdkPath("/src/main.zig") }, + .target = target, + .optimize = optimize, + }); + lib_tests.install(); + const main_tests = b.addTest(.{ .name = "dusk-tests", .root_source_file = .{ .path = sdkPath("/test/main.zig") }, @@ -27,6 +35,9 @@ pub fn testStep(b: *std.Build, optimize: std.builtin.OptimizeMode, target: std.z }); main_tests.addModule("dusk", module(b)); main_tests.install(); + + const run_step = main_tests.run(); + run_step.step.dependOn(&lib_tests.run().step); return main_tests.run(); } diff --git a/libs/dusk/src/Tokenizer.zig b/libs/dusk/src/Tokenizer.zig index 8a26decc..091ab506 100644 --- a/libs/dusk/src/Tokenizer.zig +++ b/libs/dusk/src/Tokenizer.zig @@ -172,7 +172,7 @@ pub fn peek(self: *Tokenizer) Token { }, .number => switch (c) { - '0'...'9', '.', 'i', 'u', 'f', 'h', 'e', '-', '+' => {}, + '0'...'9', '.', 'i', 'u', 'f', 'h', 'e' => {}, else => { result.tag = .number; break; @@ -288,6 +288,7 @@ pub fn peek(self: *Tokenizer) Token { index += 1; break; }, + '0'...'9' => state = .number, else => { result.tag = .minus; break; @@ -331,6 +332,7 @@ pub fn peek(self: *Tokenizer) Token { index += 1; break; }, + '0'...'9' => state = .number, else => { result.tag = .plus; break; @@ -384,8 +386,8 @@ pub fn next(self: *Tokenizer) Token { } test "tokenize identifier and numbers" { - comptime var str: [:0]const u8 = - \\_ __ _iden iden 100.8i // cc + const str = + \\_ __ _iden iden -100i 100.8i // cc \\// commnet \\ ; @@ -394,6 +396,7 @@ test "tokenize identifier and numbers" { try std.testing.expect(tokenizer.next().tag == .ident); try std.testing.expect(tokenizer.next().tag == .ident); try std.testing.expect(tokenizer.next().tag == .ident); + try std.testing.expectEqualStrings("-100i", tokenizer.next().loc.slice(str)); try std.testing.expect(tokenizer.next().tag == .number); try std.testing.expect(tokenizer.next().tag == .eof); } diff --git a/libs/dusk/src/main.zig b/libs/dusk/src/main.zig index 729c7fd8..748b021b 100644 --- a/libs/dusk/src/main.zig +++ b/libs/dusk/src/main.zig @@ -1,8 +1,8 @@ const std = @import("std"); -pub const Ast = @import("Ast.zig"); pub const IR = @import("IR.zig"); pub const printIR = @import("print_ir.zig").printIR; +pub const Ast = @import("Ast.zig"); pub const Parser = @import("Parser.zig"); pub const Token = @import("Token.zig"); pub const Tokenizer = @import("Tokenizer.zig"); @@ -13,3 +13,13 @@ pub const Extension = enum { pub const Array = std.enums.EnumArray(Extension, bool); }; + +test { + std.testing.refAllDecls(IR); + std.testing.refAllDecls(@import("print_ir.zig")); + std.testing.refAllDecls(Ast); + std.testing.refAllDecls(Parser); + std.testing.refAllDecls(Token); + std.testing.refAllDecls(Tokenizer); + std.testing.refAllDecls(ErrorList); +} diff --git a/libs/dusk/test/main.zig b/libs/dusk/test/main.zig index cce90c76..e6842a69 100644 --- a/libs/dusk/test/main.zig +++ b/libs/dusk/test/main.zig @@ -105,71 +105,11 @@ test "boids" { } test "gkurve" { - if (true) return error.SkipZigTest; - const source = @embedFile("gkurve.wgsl"); var ir = try expectIR(source); defer ir.deinit(); } -test "variable & expressions" { - // const source = "var expr = 1 + 5 + 2 * 3 > 6 >> 7;"; - - // var ir = try expectIR(source); - // defer ir.deinit(); - - // const root_node = 0; - // try expect(ir.nodeLHS(root_node) + 1 == ir.nodeRHS(root_node)); - - // const variable = ir.spanToList(root_node)[0]; - // const variable_name = ir.tokenLoc(ir.extraData(dusk.Ast.Node.GlobalVarDecl, ir.nodeLHS(variable)).name); - // try expect(std.mem.eql(u8, "expr", variable_name.slice(source))); - // try expect(ir.nodeTag(variable) == .global_variable); - // try expect(ir.tokenTag(ir.nodeToken(variable)) == .k_var); - - // const expr = ir.nodeRHS(variable); - // try expect(ir.nodeTag(expr) == .greater); - - // const @"1 + 5 + 2 * 3" = ir.nodeLHS(expr); - // try expect(ir.nodeTag(@"1 + 5 + 2 * 3") == .add); - - // const @"1 + 5" = ir.nodeLHS(@"1 + 5 + 2 * 3"); - // try expect(ir.nodeTag(@"1 + 5") == .add); - - // const @"1" = ir.nodeLHS(@"1 + 5"); - // try expect(ir.nodeTag(@"1") == .number_literal); - - // const @"5" = ir.nodeRHS(@"1 + 5"); - // try expect(ir.nodeTag(@"5") == .number_literal); - - // const @"2 * 3" = ir.nodeRHS(@"1 + 5 + 2 * 3"); - // try expect(ir.nodeTag(@"2 * 3") == .mul); - - // const @"6 >> 7" = ir.nodeRHS(expr); - // try expect(ir.nodeTag(@"6 >> 7") == .shift_right); - - // const @"6" = ir.nodeLHS(@"6 >> 7"); - // try expect(ir.nodeTag(@"6") == .number_literal); - - // const @"7" = ir.nodeRHS(@"6 >> 7"); - // try expect(ir.nodeTag(@"7") == .number_literal); -} - -test "simple analyse's result" { - // { - // const source = - // \\type T0 = f32; - // \\type T1 = T0; - // \\type T2 = T1; - // \\type T3 = T2; - // \\struct S0 { m0: T3 } - // ; - // var ir = try expectIR(source); - // // try std.testing.expect(ir.root[0].@"struct".members[0].type.number == .f32); - // ir.deinit(); - // } -} - test "must error" { { const source = "^";