default struct fields
This commit is contained in:
@@ -13325,3 +13325,44 @@ main func() void {
|
||||
testing.expect(t, unresolved_ok)
|
||||
testing.expect_value(t, unresolved, types.U64)
|
||||
}
|
||||
|
||||
@(test)
|
||||
milestone_44_struct_field_defaults_compile_and_run :: proc(t: ^testing.T) {
|
||||
directory := "/tmp/brolang-test-struct-field-defaults"
|
||||
main_path := "/tmp/brolang-test-struct-field-defaults/main.bro"
|
||||
output := "/tmp/brolang-test-struct-field-defaults-output"
|
||||
text := `Config :: struct {
|
||||
count int = 7
|
||||
enabled bool = true
|
||||
name []u8 = "bro"
|
||||
required i32
|
||||
}
|
||||
|
||||
Lists :: struct { items [][]u8 = &[] }
|
||||
|
||||
read func(value Config) i32 {
|
||||
return value.required + value.count
|
||||
}
|
||||
|
||||
ANSWER :: $read(Config{required = 35})
|
||||
|
||||
main func() i32 {
|
||||
defaults Config = Config{required = 35}
|
||||
overridden Config = Config{count = 1, enabled = false, name = "x", required = 40}
|
||||
lists Lists = Lists{}
|
||||
if (ANSWER != 42) return 1
|
||||
if (defaults.count != 7 or defaults.enabled == false) return 2
|
||||
if (defaults.name.len != 3 or lists.items.len != 0) return 3
|
||||
if (overridden.count != 1 or overridden.enabled or overridden.name.len != 1) return 4
|
||||
return 0
|
||||
}
|
||||
`
|
||||
_ = os2.remove_all(directory)
|
||||
defer _ = os2.remove_all(directory)
|
||||
defer _ = os.remove(output)
|
||||
testing.expect(t, os.make_directory(directory) == nil)
|
||||
testing.expect(t, os.write_entire_file(main_path, transmute([]byte)text))
|
||||
testing.expect_value(t, compiler_core.compile_package(directory, output), 0)
|
||||
state := run_executable(output)
|
||||
testing.expect_value(t, state.exit_code, 0)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user