# # Test of data definitions # # Copyright © 2024 Samuel Lidén Borell # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # data bool dd_bool = true data byte dd_byte = 123 data int8 dd_int8 = -123 data uint16 dd_uint16 = 65535 data int dd_int = 1234 data string dd_string_empty = "" data string dd_string_1a = "1" data string dd_string_1b = "1" data string dd_string_2 = "abc123" data string dd_string_3a = "This string is a bit longer" data string dd_string_3b = "This string is a bit longer" data [0]byte dd_empty_bytes = [] data [1]byte dd_single_byte = [255] data [1]int8 dd_negative_int8 = [-127] data [10]bool dd_boolarray = [ true, false, true, false, true, false, true, false, true, false ] data [3][1]int8 dd_nested1 = [ [0x31], [0x32], [0x33] ] data [3][2][4]int32 dd_nested2 = [ [ [111, -112, 113, -114], [-121, 122, -123, 124], ], [ [211, -212, 213, -214], [-221, 222, -223, 224], ], [ [311, -312, 313, -314], [-321, 322, -323, 324], ] ] type DatadefStruct = struct { byte b int i [2]byte b_arr [2]int i_arr DatadefNestedStruct nested } type DatadefNestedStruct = struct { bool b1 DatadefEmptyStruct empty } type DatadefEmptyStruct = struct {} data DatadefStruct dd_struct = ( # FIXME missing comma gives confusing error: "Unbalanced parenthesis (not closed)" .b = 255, .i = 12345, .b_arr = [12,34], # FIXME negative values should give an error! .i_arr = [-1, 2], .nested = (.b1=true, .empty=()) ) data [2]DatadefStruct dd_array_of_struct = [ ( .b = 0, .i = 0, .b_arr = [0,255], .i_arr = [0,-1], .nested = (.b1=false, .empty=()) ), ( .b = 255, .i = 12345, .b_arr = [12,255-34], .i_arr = [-1, 2], .nested = (.b1=true, .empty=()) ), ] func datadefs_test() { # Some of these get evaluated as const-expressions by exprchk # and then optimized out by the backend. assert dd_bool assert dd_byte == 123 assert dd_int8 == -123 assert dd_uint16 == 65535 # FIXME changing == to = gives confusing error: "Incompatible types" assert dd_int == 0x4d2 # 1234 # TODO implement string comparison #assert dd_string_empty == "" #assert dd_string_1a == "1" #assert dd_string_1b == "1" #assert dd_string_2 == "abc123" #assert dd_string_3a == "This string is a bit longer" #assert dd_string_3b == "This string is a bit longer" # TODO implement array comparison #assert dd_empty_bytes == [] assert dd_single_byte[0] == 0xff # 255 assert dd_negative_int8[0] == -127 assert dd_negative_int8[0] < -126 assert dd_negative_int8[0] > -128 assert dd_negative_int8[0] <= -127 assert dd_negative_int8[0] >= -127 assert dd_boolarray[0] assert not dd_boolarray[1] assert dd_boolarray[8] assert not dd_boolarray[9] assert dd_nested1[0][0] == 0x31 assert dd_nested1[1][0] == 0x32 assert dd_nested1[2][0] == 0x33 assert dd_nested2[0][0][0] == 111 assert dd_nested2[0][0][1] == -112 assert dd_nested2[0][0][3] == -114 assert dd_nested2[0][1][3] == 124 assert dd_nested2[1][1][3] == 224 assert dd_nested2[2][1][2] == -323 assert dd_nested2[2][1][3] == 324 assert dd_struct.b == 255 assert dd_struct.i == 12345 assert dd_struct.b_arr[0] == 12 assert dd_struct.b_arr[1] == 34 assert dd_struct.i_arr[0] == -1 assert dd_struct.i_arr[1] == 2 assert dd_struct.nested.b1 assert dd_array_of_struct[0].b == 0 assert dd_array_of_struct[0].i == 0 assert dd_array_of_struct[0].b_arr[0] == 0 assert dd_array_of_struct[0].b_arr[1] == 255 assert dd_array_of_struct[0].i_arr[0] == 0 assert dd_array_of_struct[0].i_arr[1] == -1 assert not dd_array_of_struct[0].nested.b1 assert dd_array_of_struct[1].b == 255 assert dd_array_of_struct[1].i == 12345 assert dd_array_of_struct[1].b_arr[0] == 12 assert dd_array_of_struct[1].b_arr[1] == 255-34 assert dd_array_of_struct[1].i_arr[0] == -1 assert dd_array_of_struct[1].i_arr[1] == 2 assert dd_array_of_struct[1].nested.b1 }