| ... | ... | @@ -145,15 +145,21 @@ test "@ptrCast slice to pointer" { |
| 145 | 145 | comptime S.doTheTest(); |
| 146 | 146 | } |
| 147 | 147 | |
| 148 | | test "slicing producing an array" { |
| 148 | test "slice syntax resulting in pointer-to-array" { |
| 149 | 149 | const S = struct { |
| 150 | 150 | fn doTheTest() void { |
| 151 | 151 | testArray(); |
| 152 | 152 | testArrayZ(); |
| 153 | testArray0(); |
| 154 | testArrayAlign(); |
| 153 | 155 | testPointer(); |
| 154 | 156 | testPointerZ(); |
| 157 | testPointer0(); |
| 158 | testPointerAlign(); |
| 155 | 159 | testSlice(); |
| 156 | 160 | testSliceZ(); |
| 161 | testSlice0(); |
| 162 | testSliceAlign(); |
| 157 | 163 | } |
| 158 | 164 | |
| 159 | 165 | fn testArray() void { |
| ... | ... | @@ -172,6 +178,28 @@ test "slicing producing an array" { |
| 172 | 178 | comptime expect(@TypeOf(array[1..3 :4]) == *[2:4]u8); |
| 173 | 179 | } |
| 174 | 180 | |
| 181 | fn testArray0() void { |
| 182 | { |
| 183 | var array = [0]u8{}; |
| 184 | var slice = array[0..0]; |
| 185 | comptime expect(@TypeOf(slice) == *[0]u8); |
| 186 | } |
| 187 | { |
| 188 | var array = [0:0]u8{}; |
| 189 | var slice = array[0..0]; |
| 190 | comptime expect(@TypeOf(slice) == *[0:0]u8); |
| 191 | expect(slice[0] == 0); |
| 192 | } |
| 193 | } |
| 194 | |
| 195 | fn testArrayAlign() void { |
| 196 | var array align(4) = [5]u8{ 1, 2, 3, 4, 5 }; |
| 197 | var slice = array[4..5]; |
| 198 | comptime expect(@TypeOf(slice) == *align(4) [1]u8); |
| 199 | expect(slice[0] == 5); |
| 200 | comptime expect(@TypeOf(array[0..2]) == *align(4) [2]u8); |
| 201 | } |
| 202 | |
| 175 | 203 | fn testPointer() void { |
| 176 | 204 | var array = [5]u8{ 1, 2, 3, 4, 5 }; |
| 177 | 205 | var pointer: [*]u8 = &array; |
| ... | ... | @@ -188,6 +216,22 @@ test "slicing producing an array" { |
| 188 | 216 | comptime expect(@TypeOf(pointer[1..3 :4]) == *[2:4]u8); |
| 189 | 217 | } |
| 190 | 218 | |
| 219 | fn testPointer0() void { |
| 220 | var pointer: [*]u0 = &[1]u0{0}; |
| 221 | var slice = pointer[0..1]; |
| 222 | comptime expect(@TypeOf(slice) == *[1]u0); |
| 223 | expect(slice[0] == 0); |
| 224 | } |
| 225 | |
| 226 | fn testPointerAlign() void { |
| 227 | var array align(4) = [5]u8{ 1, 2, 3, 4, 5 }; |
| 228 | var pointer: [*]align(4) u8 = &array; |
| 229 | var slice = pointer[4..5]; |
| 230 | comptime expect(@TypeOf(slice) == *align(4) [1]u8); |
| 231 | expect(slice[0] == 5); |
| 232 | comptime expect(@TypeOf(pointer[0..2]) == *align(4) [2]u8); |
| 233 | } |
| 234 | |
| 191 | 235 | fn testSlice() void { |
| 192 | 236 | var array = [5]u8{ 1, 2, 3, 4, 5 }; |
| 193 | 237 | var src_slice: []u8 = &array; |
| ... | ... | @@ -204,6 +248,30 @@ test "slicing producing an array" { |
| 204 | 248 | comptime expect(@TypeOf(slice[1..]) == [:0]u8); |
| 205 | 249 | comptime expect(@TypeOf(slice[1..3 :4]) == *[2:4]u8); |
| 206 | 250 | } |
| 251 | |
| 252 | fn testSlice0() void { |
| 253 | { |
| 254 | var array = [0]u8{}; |
| 255 | var src_slice: []u8 = &array; |
| 256 | var slice = src_slice[0..0]; |
| 257 | comptime expect(@TypeOf(slice) == *[0]u8); |
| 258 | } |
| 259 | { |
| 260 | var array = [0:0]u8{}; |
| 261 | var src_slice: [:0]u8 = &array; |
| 262 | var slice = src_slice[0..0]; |
| 263 | comptime expect(@TypeOf(slice) == *[0]u8); |
| 264 | } |
| 265 | } |
| 266 | |
| 267 | fn testSliceAlign() void { |
| 268 | var array align(4) = [5]u8{ 1, 2, 3, 4, 5 }; |
| 269 | var src_slice: []align(4) u8 = &array; |
| 270 | var slice = src_slice[4..5]; |
| 271 | comptime expect(@TypeOf(slice) == *align(4) [1]u8); |
| 272 | expect(slice[0] == 5); |
| 273 | comptime expect(@TypeOf(src_slice[0..2]) == *align(4) [2]u8); |
| 274 | } |
| 207 | 275 | }; |
| 208 | 276 | |
| 209 | 277 | S.doTheTest(); |