authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-04-20 23:02:23+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-04-20 23:36:42+02:00
log342235e5eb30426cf8bba0ad76e14e21fac18e79
tree15feea87308850df8a7e1464bf7d79c0fd36a188
parent4931a291f86410d5c43dd9471d23b7e890f91246

test/link/elf: enhance merge strings tests


1 files changed, 37 insertions(+), 12 deletions(-)

test/link/elf.zig+37-12
...@@ -2328,7 +2328,7 @@ fn testMergeStrings(b: *Build, opts: Options) *Step {...@@ -2328,7 +2328,7 @@ fn testMergeStrings(b: *Build, opts: Options) *Step {
2328fn testMergeStrings2(b: *Build, opts: Options) *Step {2328fn testMergeStrings2(b: *Build, opts: Options) *Step {
2329 const test_step = addTestStep(b, "merge-strings2", opts);2329 const test_step = addTestStep(b, "merge-strings2", opts);
23302330
2331 const obj1 = addObject(b, opts, .{ .name = "a.o", .zig_source_bytes = 2331 const obj1 = addObject(b, opts, .{ .name = "a", .zig_source_bytes =
2332 \\const std = @import("std");2332 \\const std = @import("std");
2333 \\export fn foo() void {2333 \\export fn foo() void {
2334 \\ var arr: [5:0]u16 = [_:0]u16{ 1, 2, 3, 4, 5 };2334 \\ var arr: [5:0]u16 = [_:0]u16{ 1, 2, 3, 4, 5 };
...@@ -2337,7 +2337,7 @@ fn testMergeStrings2(b: *Build, opts: Options) *Step {...@@ -2337,7 +2337,7 @@ fn testMergeStrings2(b: *Build, opts: Options) *Step {
2337 \\}2337 \\}
2338 });2338 });
23392339
2340 const exe = addExecutable(b, opts, .{ .name = "main", .zig_source_bytes = 2340 const obj2 = addObject(b, opts, .{ .name = "b", .zig_source_bytes =
2341 \\const std = @import("std");2341 \\const std = @import("std");
2342 \\extern fn foo() void;2342 \\extern fn foo() void;
2343 \\pub fn main() void {2343 \\pub fn main() void {
...@@ -2347,18 +2347,43 @@ fn testMergeStrings2(b: *Build, opts: Options) *Step {...@@ -2347,18 +2347,43 @@ fn testMergeStrings2(b: *Build, opts: Options) *Step {
2347 \\ std.testing.expectEqualSlices(u16, arr[0..2], slice) catch unreachable;2347 \\ std.testing.expectEqualSlices(u16, arr[0..2], slice) catch unreachable;
2348 \\}2348 \\}
2349 });2349 });
2350 exe.addObject(obj1);
23512350
2352 const run = addRunArtifact(exe);2351 {
2353 run.expectExitCode(0);2352 const exe = addExecutable(b, opts, .{ .name = "main1" });
2354 test_step.dependOn(&run.step);2353 exe.addObject(obj1);
2354 exe.addObject(obj2);
23552355
2356 const check = exe.checkObject();2356 const run = addRunArtifact(exe);
2357 check.dumpSection(".rodata.str");2357 run.expectExitCode(0);
2358 check.checkContains("\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x00\x00");2358 test_step.dependOn(&run.step);
2359 check.dumpSection(".rodata.str");2359
2360 check.checkContains("\x05\x00\x04\x00\x03\x00\x02\x00\x01\x00\x00\x00");2360 const check = exe.checkObject();
2361 test_step.dependOn(&check.step);2361 check.dumpSection(".rodata.str");
2362 check.checkContains("\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x00\x00");
2363 check.dumpSection(".rodata.str");
2364 check.checkContains("\x05\x00\x04\x00\x03\x00\x02\x00\x01\x00\x00\x00");
2365 test_step.dependOn(&check.step);
2366 }
2367
2368 {
2369 const obj3 = addObject(b, opts, .{ .name = "c" });
2370 obj3.addObject(obj1);
2371 obj3.addObject(obj2);
2372
2373 const exe = addExecutable(b, opts, .{ .name = "main2" });
2374 exe.addObject(obj3);
2375
2376 const run = addRunArtifact(exe);
2377 run.expectExitCode(0);
2378 test_step.dependOn(&run.step);
2379
2380 const check = exe.checkObject();
2381 check.dumpSection(".rodata.str");
2382 check.checkContains("\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x00\x00");
2383 check.dumpSection(".rodata.str");
2384 check.checkContains("\x05\x00\x04\x00\x03\x00\x02\x00\x01\x00\x00\x00");
2385 test_step.dependOn(&check.step);
2386 }
23622387
2363 return test_step;2388 return test_step;
2364}2389}