Use a type to express triagles instead of strings (#97)

Use a type to express triangles instead of strings
This commit is contained in:
Louis Pilfold 2016-08-16 01:16:34 +01:00 committed by Erik Simmler
parent 633997e802
commit 4999d42ab5
3 changed files with 34 additions and 16 deletions

View file

@ -1 +1,6 @@
module Triangle exposing (..)
version : Int
version =
2

View file

@ -3,7 +3,18 @@ module Triangle exposing (..)
import Set
triangleKind : number -> number -> number -> Result String String
type Triangle
= Equilateral
| Isosceles
| Scalene
version : Int
version =
2
triangleKind : number -> number -> number -> Result String Triangle
triangleKind x y z =
if x <= 0 || y <= 0 || z <= 0 then
Err "Invalid lengths"
@ -12,10 +23,10 @@ triangleKind x y z =
else
case Set.size (Set.fromList [ x, y, z ]) of
1 ->
Ok "equilateral"
Ok Equilateral
2 ->
Ok "isosceles"
Ok Isosceles
_ ->
Ok "scalene"
Ok Scalene

View file

@ -1,32 +1,34 @@
module Main exposing (..)
import ElmTest exposing (..)
import Triangle exposing (triangleKind)
import Triangle exposing (..)
tests : Test
tests =
suite "triangleKind"
[ test "equilateral triangles have equal sides"
(assertEqual (Ok "equilateral") (triangleKind 2 2 2))
[ test "the solution is for the correct version of the test"
(assertEqual 2 version)
, test "equilateral triangles have equal sides"
(assertEqual (Ok Equilateral) (triangleKind 2 2 2))
, test "larger equilateral triangles also have equal sides"
(assertEqual (Ok "equilateral") (triangleKind 10 10 10))
(assertEqual (Ok Equilateral) (triangleKind 10 10 10))
, test "isosceles triangles have last two sides equal"
(assertEqual (Ok "isosceles") (triangleKind 3 4 4))
(assertEqual (Ok Isosceles) (triangleKind 3 4 4))
, test "isosceles triangles have first and last sides equal"
(assertEqual (Ok "isosceles") (triangleKind 4 3 4))
(assertEqual (Ok Isosceles) (triangleKind 4 3 4))
, test "isosceles triangles have two first sides equal"
(assertEqual (Ok "isosceles") (triangleKind 4 4 3))
(assertEqual (Ok Isosceles) (triangleKind 4 4 3))
, test "isosceles triangles have in fact exactly two sides equal"
(assertEqual (Ok "isosceles") (triangleKind 10 10 2))
(assertEqual (Ok Isosceles) (triangleKind 10 10 2))
, test "scalene triangles have no equal sides"
(assertEqual (Ok "scalene") (triangleKind 3 4 5))
(assertEqual (Ok Scalene) (triangleKind 3 4 5))
, test "scalene triangles have no equal sides at a larger scale too"
(assertEqual (Ok "scalene") (triangleKind 10 11 12))
(assertEqual (Ok Scalene) (triangleKind 10 11 12))
, test "scalene triangles have no equal sides at a larger scale too 2"
(assertEqual (Ok "scalene") (triangleKind 5 4 2))
(assertEqual (Ok Scalene) (triangleKind 5 4 2))
, test "very small triangles are legal"
(assertEqual (Ok "scalene") (triangleKind 0.4 0.6 0.3))
(assertEqual (Ok Scalene) (triangleKind 0.4 0.6 0.3))
, test "triangles with no size are illegal"
(assertEqual (Err "Invalid lengths") (triangleKind 0 0 0))
, test "triangles with negative sides are illegal"