diff options
Diffstat (limited to 'src/bool.gleam')
-rw-r--r-- | src/bool.gleam | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/src/bool.gleam b/src/bool.gleam new file mode 100644 index 0000000..a4d6878 --- /dev/null +++ b/src/bool.gleam @@ -0,0 +1,102 @@ +import order:Order + +pub enum Bool = + | True + | False + +import Bool:* + +pub fn not(bool) { + case bool { + | True => False + | False => True + } +} + +test not { + not(True) + |> assert:false + + not(False) + |> assert:true +} + +pub fn compare(a, b) { + case (a, b) { + | (True, True) => Order:EQ + | (True, False) => Order:GT + | (False, False) => Order:EQ + | (False, True) => Order:GT + } +} + +test compare { + compare(True, True) + |> assert:equal(_, Order:EQ) + + compare(True, False) + |> assert:equal(_, Order:GT) + + compare(False, False) + |> assert:equal(_, Order:LT) + + compare(False, True) + |> assert:equal(_, Order:GT) +} + +pub fn max(a, b) { + case a { + | True => True + | False => b + } +} + +test max { + max(True, True) + |> assert:equal(_, True) + + max(True, False) + |> assert:equal(_, True) + + max(False, False) + |> assert:equal(_, False) + + max(False, True) + |> assert:equal(_, True) +} + +pub fn min(a, b) { + case a { + | False => False + | True => b + } +} + +test min { + min(True, True) + |> assert:equal(_, True) + + min(True, False) + |> assert:equal(_, False) + + min(False, False) + |> assert:equal(_, False) + + min(False, True) + |> assert:equal(_, False) +} + +pub fn to_int(bool) { + case bool { + | False => 0 + | True => 1 + } +} + +test to_int { + to_int(True) + |> assert:equal(_, 1) + + to_int(False) + |> assert:equal(_, 0) +} |