aboutsummaryrefslogtreecommitdiff
path: root/src/bool.gleam
diff options
context:
space:
mode:
Diffstat (limited to 'src/bool.gleam')
-rw-r--r--src/bool.gleam102
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)
+}