| 1 | // vtest retry: 3 |
| 2 | // vtest build: present_node? |
| 3 | |
| 4 | const a = 3 |
| 5 | const u = u64(1) |
| 6 | |
| 7 | fn test_const() { |
| 8 | b := (true && true) || false |
| 9 | assert b == true |
| 10 | assert a == 3 |
| 11 | assert u == u64(1) |
| 12 | assert u == 1 // make sure this works without the cast |
| 13 | } |
| 14 | |
| 15 | fn test_str_methods() { |
| 16 | assert i8(1).str() == '1' |
| 17 | assert i8(-1).str() == '-1' |
| 18 | assert i16(1).str() == '1' |
| 19 | assert i16(-1).str() == '-1' |
| 20 | assert int(1).str() == '1' |
| 21 | assert int(-1).str() == '-1' |
| 22 | assert int(2147483647).str() == '2147483647' |
| 23 | // todo: overflow check for integers |
| 24 | // assert int(2147483648).str() == '-2147483648' |
| 25 | // assert int(-2147483648).str() == '-2147483648' |
| 26 | assert i64(1).str() == '1' |
| 27 | assert i64(-1).str() == '-1' |
| 28 | assert u16(1).str() == '1' |
| 29 | // assert u16(-1).str() == '65535' |
| 30 | assert u32(1).str() == '1' |
| 31 | // assert u32(-1).str() == '4294967295' |
| 32 | assert u64(1).str() == '1' |
| 33 | // assert u64(-1).str() == '18446744073709551615' |
| 34 | } |
| 35 | |
| 36 | fn test_and_precedence() { |
| 37 | assert (2 & 0 == 0) == ((2 & 0) == 0) |
| 38 | assert (2 & 0 != 0) == ((2 & 0) != 0) |
| 39 | assert (0 & 0 >= 0) == ((0 & 0) >= 0) |
| 40 | assert (0 & 0 <= 0) == ((0 & 0) <= 0) |
| 41 | assert (0 & 0 < 1) == ((0 & 0) < 1) |
| 42 | assert (1 & 2 > 0) == ((1 & 2) > 0) |
| 43 | } |
| 44 | |
| 45 | fn test_or_precedence() { |
| 46 | assert (1 | 0 == 0) == ((1 | 0) == 0) |
| 47 | assert (1 | 0 != 1) == ((1 | 0) != 1) |
| 48 | assert (1 | 0 >= 2) == ((1 | 0) >= 2) |
| 49 | assert (1 | 0 <= 0) == ((1 | 0) <= 0) |
| 50 | assert (1 | 0 < 0) == ((1 | 0) < 0) |
| 51 | assert (1 | 0 > 1) == ((1 | 0) > 1) |
| 52 | } |
| 53 | |
| 54 | fn test_xor_precedence() { |
| 55 | assert (1 ^ 0 == 2) == ((1 ^ 0) == 2) |
| 56 | assert (1 ^ 0 != 2) == ((1 ^ 0) != 2) |
| 57 | assert (1 ^ 0 >= 0) == ((1 ^ 0) >= 0) |
| 58 | assert (1 ^ 0 <= 1) == ((1 ^ 0) <= 1) |
| 59 | assert (1 ^ 0 < 0) == ((1 ^ 0) < 0) |
| 60 | assert (1 ^ 0 > 1) == ((1 ^ 0) > 1) |
| 61 | } |
| 62 | |
| 63 | fn test_left_shift_precedence() { |
| 64 | assert (2 << 4 | 3) == ((2 << 4) | 3) |
| 65 | assert (2 << 4 | 3) != (2 << (4 | 3)) |
| 66 | } |
| 67 | |
| 68 | fn test_right_shift_precedence() { |
| 69 | assert (256 >> 4 | 3) == ((256 >> 4) | 3) |
| 70 | assert (256 >> 4 | 3) != (256 >> (4 | 3)) |
| 71 | } |
| 72 | |
| 73 | fn test_i8_print() { |
| 74 | b := i8(0) |
| 75 | println(b) |
| 76 | c := i16(7) |
| 77 | println(c) |
| 78 | d := u16(6) |
| 79 | println(d) |
| 80 | assert true |
| 81 | } |
| 82 | |
| 83 | /* |
| 84 | fn test_cmp() { |
| 85 | assert 1 ≠ 2 |
| 86 | assert 1 ⩽ 2 |
| 87 | assert 1 ⩾ 0 |
| 88 | } |
| 89 | */ |
| 90 | type MyInt = int |
| 91 | |
| 92 | fn test_int_alias() { |
| 93 | i := MyInt(2) |
| 94 | assert i + 10 == 12 |
| 95 | } |
| 96 | |
| 97 | fn test_hex() { |
| 98 | x := u64(10) |
| 99 | assert x.hex() == 'a' |
| 100 | b := 1234 |
| 101 | assert b.hex() == '4d2' |
| 102 | b1 := -1 |
| 103 | println(b1) |
| 104 | // assert b1.hex() == 'ffffffff' |
| 105 | // unsigned tests |
| 106 | // assert u8(12).hex() == '0c' |
| 107 | // assert u8(255).hex() == 'ff' |
| 108 | assert u16(65535).hex() == 'ffff' |
| 109 | // assert u32(-1).hex() == 'ffffffff' |
| 110 | // assert u64(-1).hex() == 'ffffffffffffffff' |
| 111 | // signed tests |
| 112 | // assert i8(-1).hex() == 'ff' |
| 113 | assert i8(12).hex() == '0c' |
| 114 | assert i16(32767).hex() == '7fff' |
| 115 | assert int(2147483647).hex() == '7fffffff' |
| 116 | assert i64(9223372036854775807).hex() == '7fffffffffffffff' |
| 117 | } |
| 118 | |
| 119 | fn test_bin() { |
| 120 | x1 := 0b10 |
| 121 | assert x1 == 2 |
| 122 | x2 := 0b10101010 |
| 123 | assert x2 == 0xAA |
| 124 | x3 := -0b0000001 |
| 125 | assert x3 == -1 |
| 126 | x4 := 0b11111111 |
| 127 | assert x4 == 255 |
| 128 | x5 := u8(0b11111111) |
| 129 | assert x5 == 255 |
| 130 | x6 := char(0b11111111) |
| 131 | assert int(x6) == -1 |
| 132 | x7 := 0b0 |
| 133 | assert x7 == 0 |
| 134 | x8 := -0b0 |
| 135 | assert x8 == 0 |
| 136 | } |
| 137 | |
| 138 | fn test_oct() { |
| 139 | x1 := 0o12 |
| 140 | assert x1 == 10 |
| 141 | x2 := 0o350 |
| 142 | assert x2 == 232 |
| 143 | x3 := 0o00073 |
| 144 | assert x3 == 59 |
| 145 | x4 := 0 |
| 146 | assert x4 == 0 |
| 147 | x5 := 195 |
| 148 | assert x5 == 195 |
| 149 | x6 := -0o744 |
| 150 | assert x6 == -484 |
| 151 | x7 := -0o000042 |
| 152 | assert x7 == -34 |
| 153 | x8 := -112 |
| 154 | assert x8 == -112 |
| 155 | x9 := -0 |
| 156 | assert x9 == 0 |
| 157 | } |
| 158 | |
| 159 | fn test_num_separator() { |
| 160 | // int |
| 161 | assert 100_000_0 == 1000000 |
| 162 | assert -2_23_4_6 == -22346 |
| 163 | |
| 164 | // bin |
| 165 | assert 0b0_11 == 3 |
| 166 | assert -0b0_100 == -4 |
| 167 | |
| 168 | // oct |
| 169 | assert 0o1_73 == 123 |
| 170 | assert -0o17_5 == -125 |
| 171 | assert -0o175 == -125 |
| 172 | |
| 173 | // hex |
| 174 | assert 0xFF == 255 |
| 175 | assert 0xF_F == 255 |
| 176 | |
| 177 | // f32 or f64 |
| 178 | assert 312_2.55 == 3122.55 |
| 179 | assert 312_2.55 == 3122.55 |
| 180 | } |
| 181 | |
| 182 | fn test_int_decl() { |
| 183 | x1 := 0 |
| 184 | x2 := 1333 |
| 185 | x3 := -88955 |
| 186 | x4 := 2000000000 |
| 187 | x5 := -1999999999 |
| 188 | assert typeof(x1).name == 'int' |
| 189 | assert typeof(x2).name == 'int' |
| 190 | assert typeof(x3).name == 'int' |
| 191 | assert typeof(x4).name == 'int' |
| 192 | assert typeof(x5).name == 'int' |
| 193 | x7 := u64(-321314588900011) |
| 194 | assert typeof(x7).name == 'u64' |
| 195 | } |
| 196 | |
| 197 | fn test_int_to_hex() { |
| 198 | // array hex |
| 199 | /* |
| 200 | st := [u8(`V`), `L`, `A`, `N`, `G`] |
| 201 | assert st.hex() == '564c414e47' |
| 202 | assert st.hex().len == 10 |
| 203 | st1 := [u8(0x41)].repeat(100) |
| 204 | assert st1.hex() == '41'.repeat(100)*/ |
| 205 | // --- int to hex tests |
| 206 | c := 12 |
| 207 | // 8Bit |
| 208 | assert u8(0).hex() == '00' |
| 209 | assert u8(c).hex() == '0c' |
| 210 | assert i8(c).hex() == '0c' |
| 211 | assert u8(127).hex() == '7f' |
| 212 | assert i8(127).hex() == '7f' |
| 213 | assert u8(255).hex() == 'ff' |
| 214 | // assert u8(-1).hex() == 'ff' |
| 215 | // 16bit |
| 216 | assert u16(0).hex() == '0' |
| 217 | assert i16(c).hex() == 'c' |
| 218 | assert u16(c).hex() == 'c' |
| 219 | assert i16(32767).hex() == '7fff' |
| 220 | assert u16(32767).hex() == '7fff' |
| 221 | // assert i16(-1).hex() == 'ffff' |
| 222 | assert u16(65535).hex() == 'ffff' |
| 223 | // 32bit |
| 224 | assert u32(0).hex() == '0' |
| 225 | assert c.hex() == 'c' |
| 226 | assert u32(c).hex() == 'c' |
| 227 | assert 2147483647.hex() == '7fffffff' |
| 228 | assert u32(2147483647).hex() == '7fffffff' |
| 229 | // assert (-1).hex() == 'ffffffffffffffff' |
| 230 | // assert u32(4294967295).hex() == 'ffffffff' |
| 231 | // 64 bit |
| 232 | assert u64(0).hex() == '0' |
| 233 | assert i64(c).hex() == 'c' |
| 234 | assert u64(c).hex() == 'c' |
| 235 | assert i64(9223372036854775807).hex() == '7fffffffffffffff' |
| 236 | assert u64(9223372036854775807).hex() == '7fffffffffffffff' |
| 237 | // assert i64(-1).hex() == 'ffffffffffffffff' |
| 238 | assert u64(18446744073709551615).hex() == 'ffffffffffffffff' |
| 239 | } |
| 240 | |
| 241 | fn test_repeat() { |
| 242 | b := u8(`V`) |
| 243 | assert b.repeat(5) == 'VVVVV' |
| 244 | assert b.repeat(1) == b.ascii_str() |
| 245 | assert b.repeat(0) == '' |
| 246 | } |
| 247 | |