From 12bd93dad4c46b4f1300278b4f1b70135786b77c Mon Sep 17 00:00:00 2001 From: Eric Willigers Date: Sun, 11 Oct 2026 22:32:56 +1100 Subject: [PATCH 1/2] piecing-it-together: extra tests --- .../.docs/instructions.append.md | 5 + .../.meta/supplements.json | 102 +++++++++++++++++ .../test_piecing_it_together.zig | 108 ++++++++++++++++++ 3 files changed, 215 insertions(+) create mode 100644 exercises/practice/piecing-it-together/.docs/instructions.append.md diff --git a/exercises/practice/piecing-it-together/.docs/instructions.append.md b/exercises/practice/piecing-it-together/.docs/instructions.append.md new file mode 100644 index 00000000..17b766e2 --- /dev/null +++ b/exercises/practice/piecing-it-together/.docs/instructions.append.md @@ -0,0 +1,5 @@ +# Instructions append + +## Constraints + +You may assume that each puzzle has at least 2 rows and at least 2 columns. diff --git a/exercises/practice/piecing-it-together/.meta/supplements.json b/exercises/practice/piecing-it-together/.meta/supplements.json index 9de7a34c..8a96bf7a 100644 --- a/exercises/practice/piecing-it-together/.meta/supplements.json +++ b/exercises/practice/piecing-it-together/.meta/supplements.json @@ -17,6 +17,108 @@ "aspectRatio": 1.6180257510729614, "format": "landscape" } + }, + { + "description": "portrait puzzle with 8 border pieces", + "property": "jigsawData", + "input": { + "border": 8, + "format": "portrait" + }, + "expected": { + "pieces": 8, + "border": 8, + "inside": 0, + "rows": 4, + "columns": 2, + "aspectRatio": 0.5, + "format": "portrait" + } + }, + { + "description": "landscape puzzle with 8 border pieces", + "property": "jigsawData", + "input": { + "border": 8, + "format": "landscape" + }, + "expected": { + "pieces": 8, + "border": 8, + "inside": 0, + "rows": 2, + "columns": 4, + "aspectRatio": 2.0, + "format": "landscape" + } + }, + { + "description": "puzzle with no inside pieces and aspect ratio 5", + "property": "jigsawData", + "input": { + "inside": 0, + "aspectRatio": 5.0 + }, + "expected": { + "pieces": 20, + "border": 20, + "inside": 0, + "rows": 2, + "columns": 10, + "aspectRatio": 5.0, + "format": "landscape" + } + }, + { + "description": "puzzle with no inside pieces and aspect ratio 0.2", + "property": "jigsawData", + "input": { + "inside": 0, + "aspectRatio": 0.2 + }, + "expected": { + "pieces": 20, + "border": 20, + "inside": 0, + "rows": 10, + "columns": 2, + "aspectRatio": 0.2, + "format": "portrait" + } + }, + { + "description": "puzzle with 87 rows and 94/87 aspect ratio", + "property": "jigsawData", + "input": { + "rows": 87, + "aspectRatio": 1.0804597701149425 + }, + "expected": { + "pieces": 8178, + "border": 358, + "inside": 7820, + "rows": 87, + "columns": 94, + "aspectRatio": 1.0804597701149425, + "format": "landscape" + } + }, + { + "description": "puzzle with 94 columns and 94/87 aspect ratio", + "property": "jigsawData", + "input": { + "columns": 94, + "aspectRatio": 1.0804597701149425 + }, + "expected": { + "pieces": 8178, + "border": 358, + "inside": 7820, + "rows": 87, + "columns": 94, + "aspectRatio": 1.0804597701149425, + "format": "landscape" + } } ] } diff --git a/exercises/practice/piecing-it-together/test_piecing_it_together.zig b/exercises/practice/piecing-it-together/test_piecing_it_together.zig index 6a65f5c7..eba72a90 100644 --- a/exercises/practice/piecing-it-together/test_piecing_it_together.zig +++ b/exercises/practice/piecing-it-together/test_piecing_it_together.zig @@ -136,3 +136,111 @@ test "very large landscape" { const actual = try jigsawData(puzzle); try testing.expectEqual(expected, actual); } + +test "portrait puzzle with 8 border pieces" { + const puzzle = PartialInformation{ + .border = 8, + .format = .portrait, + }; + const expected = FullInformation{ + .pieces = 8, + .border = 8, + .inside = 0, + .rows = 4, + .columns = 2, + .aspectRatio = 0.5, + .format = .portrait, + }; + const actual = try jigsawData(puzzle); + try testing.expectEqual(expected, actual); +} + +test "landscape puzzle with 8 border pieces" { + const puzzle = PartialInformation{ + .border = 8, + .format = .landscape, + }; + const expected = FullInformation{ + .pieces = 8, + .border = 8, + .inside = 0, + .rows = 2, + .columns = 4, + .aspectRatio = 2.0, + .format = .landscape, + }; + const actual = try jigsawData(puzzle); + try testing.expectEqual(expected, actual); +} + +test "puzzle with no inside pieces and aspect ratio 5" { + const puzzle = PartialInformation{ + .inside = 0, + .aspectRatio = 5.0, + }; + const expected = FullInformation{ + .pieces = 20, + .border = 20, + .inside = 0, + .rows = 2, + .columns = 10, + .aspectRatio = 5.0, + .format = .landscape, + }; + const actual = try jigsawData(puzzle); + try testing.expectEqual(expected, actual); +} + +test "puzzle with no inside pieces and aspect ratio 0.2" { + const puzzle = PartialInformation{ + .inside = 0, + .aspectRatio = 0.2, + }; + const expected = FullInformation{ + .pieces = 20, + .border = 20, + .inside = 0, + .rows = 10, + .columns = 2, + .aspectRatio = 0.2, + .format = .portrait, + }; + const actual = try jigsawData(puzzle); + try testing.expectEqual(expected, actual); +} + +test "puzzle with 87 rows and 94/87 aspect ratio" { + const puzzle = PartialInformation{ + .rows = 87, + .aspectRatio = 1.0804597701149425, + }; + const expected = FullInformation{ + .pieces = 8178, + .border = 358, + .inside = 7820, + .rows = 87, + .columns = 94, + .aspectRatio = 1.0804597701149425, + .format = .landscape, + }; + const actual = try jigsawData(puzzle); + try testing.expectEqual(expected, actual); +} + +test "puzzle with 94 columns and 94/87 aspect ratio" { + const puzzle = PartialInformation{ + .columns = 94, + .aspectRatio = 1.0804597701149425, + }; + const expected = FullInformation{ + .pieces = 8178, + .border = 358, + .inside = 7820, + .rows = 87, + .columns = 94, + .aspectRatio = 1.0804597701149425, + .format = .landscape, + }; + const actual = try jigsawData(puzzle); + try testing.expectEqual(expected, actual); +} From 5e3f5d5e05854a9db7e4ced0af419c2ed06066a0 Mon Sep 17 00:00:00 2001 From: Eric Willigers Date: Sun, 11 Oct 2026 23:35:07 +1100 Subject: [PATCH 2/2] Contradictory data tests --- .../.meta/supplements.json | 24 +++++++++++++++++++ .../test_piecing_it_together.zig | 20 ++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/exercises/practice/piecing-it-together/.meta/supplements.json b/exercises/practice/piecing-it-together/.meta/supplements.json index 8a96bf7a..7c4ad3ff 100644 --- a/exercises/practice/piecing-it-together/.meta/supplements.json +++ b/exercises/practice/piecing-it-together/.meta/supplements.json @@ -119,6 +119,30 @@ "aspectRatio": 1.0804597701149425, "format": "landscape" } + }, + { + "description": "portrait puzzle with no inside pieces and aspect ratio 1", + "property": "jigsawData", + "input": { + "inside": 0, + "aspectRatio": 1.0, + "format": "portrait" + }, + "expected": { + "error": "Contradictory data" + } + }, + { + "description": "landscape puzzle with no inside pieces and aspect ratio 1", + "property": "jigsawData", + "input": { + "inside": 0, + "aspectRatio": 1.0, + "format": "landscape" + }, + "expected": { + "error": "Contradictory data" + } } ] } diff --git a/exercises/practice/piecing-it-together/test_piecing_it_together.zig b/exercises/practice/piecing-it-together/test_piecing_it_together.zig index eba72a90..882f5b9f 100644 --- a/exercises/practice/piecing-it-together/test_piecing_it_together.zig +++ b/exercises/practice/piecing-it-together/test_piecing_it_together.zig @@ -244,3 +244,23 @@ test "puzzle with 94 columns and 94/87 aspect ratio" { const actual = try jigsawData(puzzle); try testing.expectEqual(expected, actual); } + +test "portrait puzzle with no inside pieces and aspect ratio 1" { + const puzzle = PartialInformation{ + .inside = 0, + .aspectRatio = 1.0, + .format = .portrait, + }; + const actual = jigsawData(puzzle); + try testing.expectError(PuzzleError.ContradictoryData, actual); +} + +test "landscape puzzle with no inside pieces and aspect ratio 1" { + const puzzle = PartialInformation{ + .inside = 0, + .aspectRatio = 1.0, + .format = .landscape, + }; + const actual = jigsawData(puzzle); + try testing.expectError(PuzzleError.ContradictoryData, actual); +}