| ... | ... | @@ -130,3 +130,82 @@ test "empty array to slice" { |
| 130 | 130 | S.doTheTest(); |
| 131 | 131 | comptime S.doTheTest(); |
| 132 | 132 | } |
| 133 | |
| 134 | test "@ptrCast slice to pointer" { |
| 135 | const S = struct { |
| 136 | fn doTheTest() void { |
| 137 | var array align(@alignOf(u16)) = [5]u8{ 0xff, 0xff, 0xff, 0xff, 0xff }; |
| 138 | var slice: []u8 = &array; |
| 139 | var ptr = @ptrCast(*u16, slice); |
| 140 | expect(ptr.* == 65535); |
| 141 | } |
| 142 | }; |
| 143 | |
| 144 | S.doTheTest(); |
| 145 | comptime S.doTheTest(); |
| 146 | } |
| 147 | |
| 148 | test "slicing producing an array" { |
| 149 | const S = struct { |
| 150 | fn doTheTest() void { |
| 151 | testArray(); |
| 152 | testArrayZ(); |
| 153 | testPointer(); |
| 154 | testPointerZ(); |
| 155 | testSlice(); |
| 156 | testSliceZ(); |
| 157 | } |
| 158 | |
| 159 | fn testArray() void { |
| 160 | var array = [5]u8{ 1, 2, 3, 4, 5 }; |
| 161 | var slice = array[1..3]; |
| 162 | comptime expect(@TypeOf(slice) == *[2]u8); |
| 163 | expect(slice[0] == 2); |
| 164 | expect(slice[1] == 3); |
| 165 | } |
| 166 | |
| 167 | fn testArrayZ() void { |
| 168 | var array = [5:0]u8{ 1, 2, 3, 4, 5 }; |
| 169 | comptime expect(@TypeOf(array[1..3]) == *[2]u8); |
| 170 | comptime expect(@TypeOf(array[1..5]) == *[4:0]u8); |
| 171 | comptime expect(@TypeOf(array[1..]) == *[4:0]u8); |
| 172 | comptime expect(@TypeOf(array[1..3 :4]) == *[2:4]u8); |
| 173 | } |
| 174 | |
| 175 | fn testPointer() void { |
| 176 | var array = [5]u8{ 1, 2, 3, 4, 5 }; |
| 177 | var pointer: [*]u8 = &array; |
| 178 | var slice = pointer[1..3]; |
| 179 | comptime expect(@TypeOf(slice) == *[2]u8); |
| 180 | expect(slice[0] == 2); |
| 181 | expect(slice[1] == 3); |
| 182 | } |
| 183 | |
| 184 | fn testPointerZ() void { |
| 185 | var array = [5:0]u8{ 1, 2, 3, 4, 5 }; |
| 186 | var pointer: [*:0]u8 = &array; |
| 187 | comptime expect(@TypeOf(pointer[1..3]) == *[2]u8); |
| 188 | comptime expect(@TypeOf(pointer[1..3 :4]) == *[2:4]u8); |
| 189 | } |
| 190 | |
| 191 | fn testSlice() void { |
| 192 | var array = [5]u8{ 1, 2, 3, 4, 5 }; |
| 193 | var src_slice: []u8 = &array; |
| 194 | var slice = src_slice[1..3]; |
| 195 | comptime expect(@TypeOf(slice) == *[2]u8); |
| 196 | expect(slice[0] == 2); |
| 197 | expect(slice[1] == 3); |
| 198 | } |
| 199 | |
| 200 | fn testSliceZ() void { |
| 201 | var array = [5:0]u8{ 1, 2, 3, 4, 5 }; |
| 202 | var slice: [:0]u8 = &array; |
| 203 | comptime expect(@TypeOf(slice[1..3]) == *[2]u8); |
| 204 | comptime expect(@TypeOf(slice[1..]) == [:0]u8); |
| 205 | comptime expect(@TypeOf(slice[1..3 :4]) == *[2:4]u8); |
| 206 | } |
| 207 | }; |
| 208 | |
| 209 | S.doTheTest(); |
| 210 | comptime S.doTheTest(); |
| 211 | } |