Skip to content

Commit 70de412

Browse files
authored
add triangle template (#488)
[no important files changed]
1 parent 85f8ce9 commit 70de412

3 files changed

Lines changed: 179 additions & 34 deletions

File tree

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{%- import "generator_macros.j2" as macros with context -%}
2+
{{ macros.canonical_ref() }}
3+
4+
{{ macros.header() }}
5+
6+
{% macro invalid_triangle(x, y ,z) -%}
7+
{% if x + y < z or x + z < y or y + z < x or x == 0 or y == 0 or z == 0 -%}
8+
invalid
9+
{% endif %}
10+
{%- endmacro %}
11+
12+
{% for case in cases %}
13+
# {{ case["description"] }}
14+
{% for subcase in case["cases"] %}
15+
test_that("{{ subcase["description"] }}", {
16+
side <- c{{ subcase["input"]["sides"] | list_to_tuple }}
17+
{% set s = subcase["input"]["sides"] -%}
18+
{% if invalid_triangle(s[0], s[1], s[2]) -%}
19+
expect_error(triangle(side[1], side[2], side[3]))
20+
{% else -%}
21+
expect_{{ subcase["expected"] | lower }}("{{ subcase["property"] }}" %in% class(triangle(side[1], side[2], side[3])))
22+
{% endif %}
23+
})
24+
{% endfor %}
25+
{% endfor %}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
source("./triangle.R")
2+
library(testthat)
3+
4+
test_that("true if all sides are equal", {
5+
expect_is(triangle(2, 2, 2), "equilateral")
6+
})
7+
8+
test_that("false if any side is unequal", {
9+
expect_false(any("equilateral" %in% class(triangle(2, 3, 2))))
10+
})
11+
12+
test_that("false if no sides are equal", {
13+
expect_false(any("equilateral" %in% class(triangle(5, 4, 6))))
14+
})
15+
16+
test_that("not equilateral if sides are zero", {
17+
expect_error(triangle(0, 0, 0))
18+
})
19+
20+
test_that("sides may be floats", {
21+
expect_is(triangle(0.5, 0.5, 0.5), "equilateral")
22+
})
23+
24+
test_that("isosceles if last two sides are equal", {
25+
expect_is(triangle(3, 4, 4), "isosceles")
26+
})
27+
28+
test_that("isosceles if first two sides are equal", {
29+
expect_is(triangle(4, 4, 3), "isosceles")
30+
})
31+
32+
test_that("isosceles if first and last sides are equal", {
33+
expect_is(triangle(4, 3, 4), "isosceles")
34+
})
35+
36+
test_that("equilateral triangles are also isosceles", {
37+
expect_is(triangle(4, 4, 4), "isosceles")
38+
})
39+
40+
test_that("not isosceles if no sides are equal", {
41+
expect_false(any("isosceles" %in% class(triangle(2, 3, 4))))
42+
})
43+
44+
test_that("not isosceles if triangle inequality is violated", {
45+
expect_error(triangle(1, 1, 3))
46+
})
47+
48+
test_that("sides may be floats", {
49+
expect_is(triangle(0.5, 0.4, 0.5), "isosceles")
50+
})
51+
52+
test_that("scalene if no sides are equal", {
53+
expect_is(triangle(5, 4, 6), "scalene")
54+
})
55+
56+
test_that("not scalene if all sides are equal", {
57+
expect_false(any("scalene" %in% class(triangle(4, 4, 4))))
58+
})
59+
60+
test_that("not scalene if two sides are equal", {
61+
expect_false(any("scalene" %in% class(triangle(4, 4, 3))))
62+
})
63+
64+
test_that("not scalene if first and third sides are equal", {
65+
expect_false(any("scalene" %in% class(triangle(3, 4, 3))))
66+
})
67+
68+
test_that("not scalene if second and third sides are equal", {
69+
expect_false(any("scalene" %in% class(triangle(4, 3, 3))))
70+
})
71+
72+
test_that("not scalene if triangle inequality is violated", {
73+
expect_error(triangle(7, 3, 2))
74+
})
75+
76+
test_that("sides may be floats", {
77+
expect_is(triangle(0.5, 0.4, 0.6), "scalene")
78+
})
Lines changed: 76 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,120 @@
1+
# These tests are auto-generated with test data from:
2+
# https://github.com/exercism/problem-specifications/tree/main/exercises/triangle/canonical-data.json
3+
# File last updated on 2026-03-14
4+
15
source("./triangle.R")
26
library(testthat)
37

4-
test_that("true if all sides are equal", {
5-
expect_is(triangle(2, 2, 2), "equilateral")
8+
9+
# equilateral triangle
10+
11+
test_that("all sides are equal", {
12+
side <- c(2, 2, 2)
13+
expect_true("equilateral" %in% class(triangle(side[1], side[2], side[3])))
614
})
715

8-
test_that("false if any side is unequal", {
9-
expect_false(any("equilateral" %in% class(triangle(2, 3, 2))))
16+
test_that("any side is unequal", {
17+
side <- c(2, 3, 2)
18+
expect_false("equilateral" %in% class(triangle(side[1], side[2], side[3])))
1019
})
1120

12-
test_that("false if no sides are equal", {
13-
expect_false(any("equilateral" %in% class(triangle(5, 4, 6))))
21+
test_that("no sides are equal", {
22+
side <- c(5, 4, 6)
23+
expect_false("equilateral" %in% class(triangle(side[1], side[2], side[3])))
1424
})
1525

16-
test_that("not equilateral if sides are zero", {
17-
expect_error(triangle(0, 0, 0))
26+
test_that("all zero sides is not a triangle", {
27+
side <- c(0, 0, 0)
28+
expect_error(triangle(side[1], side[2], side[3]))
1829
})
1930

2031
test_that("sides may be floats", {
21-
expect_is(triangle(0.5, 0.5, 0.5), "equilateral")
32+
side <- c(0.5, 0.5, 0.5)
33+
expect_true("equilateral" %in% class(triangle(side[1], side[2], side[3])))
2234
})
2335

24-
test_that("isosceles if last two sides are equal", {
25-
expect_is(triangle(3, 4, 4), "isosceles")
36+
37+
# isosceles triangle
38+
39+
test_that("last two sides are equal", {
40+
side <- c(3, 4, 4)
41+
expect_true("isosceles" %in% class(triangle(side[1], side[2], side[3])))
2642
})
2743

28-
test_that("isosceles if first two sides are equal", {
29-
expect_is(triangle(4, 4, 3), "isosceles")
44+
test_that("first two sides are equal", {
45+
side <- c(4, 4, 3)
46+
expect_true("isosceles" %in% class(triangle(side[1], side[2], side[3])))
3047
})
3148

32-
test_that("isosceles if first and last sides are equal", {
33-
expect_is(triangle(4, 3, 4), "isosceles")
49+
test_that("first and last sides are equal", {
50+
side <- c(4, 3, 4)
51+
expect_true("isosceles" %in% class(triangle(side[1], side[2], side[3])))
3452
})
3553

3654
test_that("equilateral triangles are also isosceles", {
37-
expect_is(triangle(4, 4, 4), "isosceles")
55+
side <- c(4, 4, 4)
56+
expect_true("isosceles" %in% class(triangle(side[1], side[2], side[3])))
3857
})
3958

40-
test_that("not isosceles if no sides are equal", {
41-
expect_false(any("isosceles" %in% class(triangle(2, 3, 4))))
59+
test_that("no sides are equal", {
60+
side <- c(2, 3, 4)
61+
expect_false("isosceles" %in% class(triangle(side[1], side[2], side[3])))
4262
})
4363

44-
test_that("not isosceles if triangle inequality is violated", {
45-
expect_error(triangle(1, 1, 3))
64+
test_that("first triangle inequality violation", {
65+
side <- c(1, 1, 3)
66+
expect_error(triangle(side[1], side[2], side[3]))
67+
})
68+
69+
test_that("second triangle inequality violation", {
70+
side <- c(1, 3, 1)
71+
expect_error(triangle(side[1], side[2], side[3]))
72+
})
73+
74+
test_that("third triangle inequality violation", {
75+
side <- c(3, 1, 1)
76+
expect_error(triangle(side[1], side[2], side[3]))
4677
})
4778

4879
test_that("sides may be floats", {
49-
expect_is(triangle(0.5, 0.4, 0.5), "isosceles")
80+
side <- c(0.5, 0.4, 0.5)
81+
expect_true("isosceles" %in% class(triangle(side[1], side[2], side[3])))
5082
})
5183

52-
test_that("scalene if no sides are equal", {
53-
expect_is(triangle(5, 4, 6), "scalene")
84+
85+
# scalene triangle
86+
87+
test_that("no sides are equal", {
88+
side <- c(5, 4, 6)
89+
expect_true("scalene" %in% class(triangle(side[1], side[2], side[3])))
5490
})
5591

56-
test_that("not scalene if all sides are equal", {
57-
expect_false(any("scalene" %in% class(triangle(4, 4, 4))))
92+
test_that("all sides are equal", {
93+
side <- c(4, 4, 4)
94+
expect_false("scalene" %in% class(triangle(side[1], side[2], side[3])))
5895
})
5996

60-
test_that("not scalene if two sides are equal", {
61-
expect_false(any("scalene" %in% class(triangle(4, 4, 3))))
97+
test_that("first and second sides are equal", {
98+
side <- c(4, 4, 3)
99+
expect_false("scalene" %in% class(triangle(side[1], side[2], side[3])))
62100
})
63101

64-
test_that("not scalene if first and third sides are equal", {
65-
expect_false(any("scalene" %in% class(triangle(3, 4, 3))))
102+
test_that("first and third sides are equal", {
103+
side <- c(3, 4, 3)
104+
expect_false("scalene" %in% class(triangle(side[1], side[2], side[3])))
66105
})
67106

68-
test_that("not scalene if second and third sides are equal", {
69-
expect_false(any("scalene" %in% class(triangle(4, 3, 3))))
107+
test_that("second and third sides are equal", {
108+
side <- c(4, 3, 3)
109+
expect_false("scalene" %in% class(triangle(side[1], side[2], side[3])))
70110
})
71111

72-
test_that("not scalene if triangle inequality is violated", {
73-
expect_error(triangle(7, 3, 2))
112+
test_that("may not violate triangle inequality", {
113+
side <- c(7, 3, 2)
114+
expect_error(triangle(side[1], side[2], side[3]))
74115
})
75116

76117
test_that("sides may be floats", {
77-
expect_is(triangle(0.5, 0.4, 0.6), "scalene")
118+
side <- c(0.5, 0.4, 0.6)
119+
expect_true("scalene" %in% class(triangle(side[1], side[2], side[3])))
78120
})

0 commit comments

Comments
 (0)