Skip to content

Commit

Permalink
exercises(triangle): simplify error set (exercism#218)
Browse files Browse the repository at this point in the history
Before this commit, the `init` function needed to return the
`InvalidInequality` error when the input sides violated the triangle
inequality.

This error had a strange name, and furthermore, the instructions did not
explain degenerate triangles. So let's just combine the errors into a
single error named `Invalid`.

Closes: exercism#215
  • Loading branch information
booniepepper authored Mar 12, 2023
1 parent 1ae7dda commit 4a4665a
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 9 deletions.
6 changes: 2 additions & 4 deletions exercises/practice/triangle/.meta/example.zig
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
pub const TriangleError = error{
Degenerate,
InvalidInequality,
Invalid,
};

pub const Triangle = struct {
Expand All @@ -9,8 +8,7 @@ pub const Triangle = struct {
c: f64,

pub fn init(a: f64, b: f64, c: f64) TriangleError!Triangle {
if ((a + b == c) or (a + c == b) or (b + c == a)) return TriangleError.Degenerate;
if ((a + b < c) or (a + c < b) or (b + c < a)) return TriangleError.InvalidInequality;
if ((a + b <= c) or (a + c <= b) or (b + c <= a)) return TriangleError.Invalid;
return Triangle{ .a = a, .b = b, .c = c };
}

Expand Down
10 changes: 5 additions & 5 deletions exercises/practice/triangle/test_triangle.zig
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ test "equilateral no sides are equal" {

test "equilateral all zero sides is not a triangle" {
const actual = triangle.Triangle.init(0, 0, 0);
try testing.expectError(triangle.TriangleError.Degenerate, actual);
try testing.expectError(triangle.TriangleError.Invalid, actual);
}

test "equilateral sides may be floats" {
Expand Down Expand Up @@ -55,17 +55,17 @@ test "isosceles no sides are equal" {

test "isosceles first triangle inequality violation" {
const actual = triangle.Triangle.init(1, 1, 3);
try testing.expectError(triangle.TriangleError.InvalidInequality, actual);
try testing.expectError(triangle.TriangleError.Invalid, actual);
}

test "isosceles second triangle inequality violation" {
const actual = triangle.Triangle.init(1, 3, 1);
try testing.expectError(triangle.TriangleError.InvalidInequality, actual);
try testing.expectError(triangle.TriangleError.Invalid, actual);
}

test "isosceles third triangle inequality violation" {
const actual = triangle.Triangle.init(3, 1, 1);
try testing.expectError(triangle.TriangleError.InvalidInequality, actual);
try testing.expectError(triangle.TriangleError.Invalid, actual);
}

test "isosceles sides may be floats" {
Expand Down Expand Up @@ -100,7 +100,7 @@ test "scalene second and third sides are equal" {

test "scalene may not violate triangle inequality" {
const actual = triangle.Triangle.init(7, 3, 2);
try testing.expectError(triangle.TriangleError.InvalidInequality, actual);
try testing.expectError(triangle.TriangleError.Invalid, actual);
}

test "scalene sides may be floats" {
Expand Down

0 comments on commit 4a4665a

Please sign in to comment.