mirror of
https://github.com/correl/elm.git
synced 2025-03-10 17:00:07 -09:00
Use a type to express triagles instead of strings (#97)
Use a type to express triangles instead of strings
This commit is contained in:
parent
633997e802
commit
4999d42ab5
3 changed files with 34 additions and 16 deletions
|
@ -1 +1,6 @@
|
|||
module Triangle exposing (..)
|
||||
|
||||
|
||||
version : Int
|
||||
version =
|
||||
2
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Add table
Reference in a new issue