diff options
| author | Laytan Laats <laytanlaats@hotmail.com> | 2024-04-10 00:57:21 +0200 |
|---|---|---|
| committer | Laytan Laats <laytanlaats@hotmail.com> | 2024-04-10 01:01:32 +0200 |
| commit | af6d2480fa7202924ea05d65cdad65aa9e764d05 (patch) | |
| tree | 802356a4a4dd38aaccf88972b09bb9b03cf544b0 /tests | |
| parent | a00d96c0de2c0b6e4df76e58c1c394373e173751 (diff) | |
add bit_field parsing to `core:odin/parser`
Also adds it to the core type thingy like it is in the compiler.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/core/odin/test_parser.odin | 50 |
1 files changed, 47 insertions, 3 deletions
diff --git a/tests/core/odin/test_parser.odin b/tests/core/odin/test_parser.odin index 3837436bc..08f73a732 100644 --- a/tests/core/odin/test_parser.odin +++ b/tests/core/odin/test_parser.odin @@ -1,9 +1,12 @@ package test_core_odin_parser -import "core:testing" import "core:fmt" -import "core:os" +import "core:odin/ast" import "core:odin/parser" +import "core:odin/printer" +import "core:os" +import "core:strings" +import "core:testing" TEST_count := 0 @@ -30,6 +33,7 @@ when ODIN_TEST { main :: proc() { t := testing.T{} test_parse_demo(&t) + test_parse_bitfield(&t) fmt.printf("%v/%v tests successful.\n", TEST_count - TEST_fail, TEST_count) if TEST_fail > 0 { @@ -47,4 +51,44 @@ test_parse_demo :: proc(t: ^testing.T) { for key, value in pkg.files { expect(t, value.syntax_error_count == 0, fmt.tprintf("%v should contain zero errors", key)) } -}
\ No newline at end of file +} + +@test +test_parse_bitfield :: proc(t: ^testing.T) { + file := ast.File{ + fullpath = "test.odin", + src = ` +package main + +Foo :: bit_field uint {} + +Foo :: bit_field uint {hello: bool | 1} + +Foo :: bit_field uint { + hello: bool | 1, + hello: bool | 5, +} + +// Hellope 1. +Foo :: bit_field uint { + // Hellope 2. + hello: bool | 1, + hello: bool | 5, // Hellope 3. +} + `, + } + + p := parser.default_parser() + ok := parser.parse_file(&p, &file) + expect(t, ok == true, "bad parse") + + cfg := printer.default_style + cfg.newline_style = .LF + print := printer.make_printer(cfg) + out := printer.print(&print, &file) + + tsrc := strings.trim_space(file.src) + tout := strings.trim_space(out) + + expect(t, tsrc == tout, fmt.tprintf("\n%s\n!=\n%s", tsrc, tout)) +} |