mirror of
https://github.com/ziglang/zig.git
synced 2026-01-20 22:35:24 +00:00
add behavior test for @memset on slices
and avoid new language feature in std.ArrayList for now, until x86_64 self-hosted backend can implement it.
This commit is contained in:
parent
482a0f648c
commit
7c56145a76
@ -121,7 +121,13 @@ pub fn ArrayListAligned(comptime T: type, comptime alignment: ?u29) type {
|
||||
|
||||
const new_memory = try allocator.alignedAlloc(T, alignment, self.items.len);
|
||||
mem.copy(T, new_memory, self.items);
|
||||
@memset(self.items, undefined);
|
||||
|
||||
// TODO: write like this instead:
|
||||
//@memset(self.items, undefined);
|
||||
// first we need to implement memset with element ABI size > 1 in
|
||||
// the x86_64 selfhosted backend.
|
||||
@memset(@ptrCast([*]u8, self.items.ptr)[0..self.items.len * @sizeOf(T)], undefined);
|
||||
|
||||
self.clearAndFree();
|
||||
return new_memory;
|
||||
}
|
||||
@ -597,7 +603,13 @@ pub fn ArrayListAlignedUnmanaged(comptime T: type, comptime alignment: ?u29) typ
|
||||
|
||||
const new_memory = try allocator.alignedAlloc(T, alignment, self.items.len);
|
||||
mem.copy(T, new_memory, self.items);
|
||||
@memset(self.items, undefined);
|
||||
|
||||
// TODO: write like this instead:
|
||||
//@memset(self.items, undefined);
|
||||
// first we need to implement memset with element ABI size > 1 in
|
||||
// the x86_64 selfhosted backend.
|
||||
@memset(@ptrCast([*]u8, self.items.ptr)[0..self.items.len * @sizeOf(T)], undefined);
|
||||
|
||||
self.clearAndFree(allocator);
|
||||
return new_memory;
|
||||
}
|
||||
|
||||
@ -357,6 +357,14 @@ test "@memset on array pointers" {
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_wasm) {
|
||||
// TODO: implement memset when element ABI size > 1
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
if (builtin.zig_backend == .stage2_x86_64) {
|
||||
// TODO: implement memset when element ABI size > 1
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
try testMemsetArray();
|
||||
try comptime testMemsetArray();
|
||||
@ -381,6 +389,48 @@ fn testMemsetArray() !void {
|
||||
}
|
||||
}
|
||||
|
||||
test "@memset on slices" {
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_wasm) {
|
||||
// TODO: implement memset when element ABI size > 1
|
||||
// TODO: implement memset on slices
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
if (builtin.zig_backend == .stage2_x86_64) {
|
||||
// TODO: implement memset when element ABI size > 1
|
||||
// TODO: implement memset on slices
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
try testMemsetSlice();
|
||||
try comptime testMemsetSlice();
|
||||
}
|
||||
|
||||
fn testMemsetSlice() !void {
|
||||
{
|
||||
// memset slice to non-undefined, ABI size == 1
|
||||
var array: [20]u8 = undefined;
|
||||
var len = array.len;
|
||||
var slice = array[0..len];
|
||||
@memset(slice, 'A');
|
||||
try expect(slice[0] == 'A');
|
||||
try expect(slice[11] == 'A');
|
||||
try expect(slice[19] == 'A');
|
||||
}
|
||||
{
|
||||
// memset slice to non-undefined, ABI size > 1
|
||||
var array: [20]u32 = undefined;
|
||||
var len = array.len;
|
||||
var slice = array[0..len];
|
||||
@memset(slice, 1234);
|
||||
try expect(slice[0] == 1234);
|
||||
try expect(slice[11] == 1234);
|
||||
try expect(slice[19] == 1234);
|
||||
}
|
||||
}
|
||||
|
||||
test "memcpy and memset intrinsics" {
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user