| ... | @@ -145,15 +145,21 @@ test "@ptrCast slice to pointer" { | ... | @@ -145,15 +145,21 @@ test "@ptrCast slice to pointer" { |
| 145 | comptime S.doTheTest(); | 145 | comptime S.doTheTest(); |
| 146 | } | 146 | } |
| 147 | | 147 | |
| 148 | test "slicing producing an array" { | 148 | test "slice syntax resulting in pointer-to-array" { |
| 149 | const S = struct { | 149 | const S = struct { |
| 150 | fn doTheTest() void { | 150 | fn doTheTest() void { |
| 151 | testArray(); | 151 | testArray(); |
| 152 | testArrayZ(); | 152 | testArrayZ(); |
| | 153 | testArray0(); |
| | 154 | testArrayAlign(); |
| 153 | testPointer(); | 155 | testPointer(); |
| 154 | testPointerZ(); | 156 | testPointerZ(); |
| | 157 | testPointer0(); |
| | 158 | testPointerAlign(); |
| 155 | testSlice(); | 159 | testSlice(); |
| 156 | testSliceZ(); | 160 | testSliceZ(); |
| | 161 | testSlice0(); |
| | 162 | testSliceAlign(); |
| 157 | } | 163 | } |
| 158 | | 164 | |
| 159 | fn testArray() void { | 165 | fn testArray() void { |
| ... | @@ -172,6 +178,28 @@ test "slicing producing an array" { | ... | @@ -172,6 +178,28 @@ test "slicing producing an array" { |
| 172 | comptime expect(@TypeOf(array[1..3 :4]) == *[2:4]u8); | 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 | fn testPointer() void { | 203 | fn testPointer() void { |
| 176 | var array = [5]u8{ 1, 2, 3, 4, 5 }; | 204 | var array = [5]u8{ 1, 2, 3, 4, 5 }; |
| 177 | var pointer: [*]u8 = &array; | 205 | var pointer: [*]u8 = &array; |
| ... | @@ -188,6 +216,22 @@ test "slicing producing an array" { | ... | @@ -188,6 +216,22 @@ test "slicing producing an array" { |
| 188 | comptime expect(@TypeOf(pointer[1..3 :4]) == *[2:4]u8); | 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 | fn testSlice() void { | 235 | fn testSlice() void { |
| 192 | var array = [5]u8{ 1, 2, 3, 4, 5 }; | 236 | var array = [5]u8{ 1, 2, 3, 4, 5 }; |
| 193 | var src_slice: []u8 = &array; | 237 | var src_slice: []u8 = &array; |
| ... | @@ -204,6 +248,30 @@ test "slicing producing an array" { | ... | @@ -204,6 +248,30 @@ test "slicing producing an array" { |
| 204 | comptime expect(@TypeOf(slice[1..]) == [:0]u8); | 248 | comptime expect(@TypeOf(slice[1..]) == [:0]u8); |
| 205 | comptime expect(@TypeOf(slice[1..3 :4]) == *[2:4]u8); | 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 | S.doTheTest(); | 277 | S.doTheTest(); |