aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gleam/bool.gleam25
-rw-r--r--test/gleam/bool_test.gleam14
2 files changed, 39 insertions, 0 deletions
diff --git a/src/gleam/bool.gleam b/src/gleam/bool.gleam
index 4a9cebf..e5b079f 100644
--- a/src/gleam/bool.gleam
+++ b/src/gleam/bool.gleam
@@ -30,6 +30,31 @@ pub fn negate(bool: Bool) -> Bool {
}
}
+/// Returns the exclusive or of two bools
+///
+/// ## Examples
+///
+/// > exclusive_or(False, False)
+/// False
+///
+/// > exclusive_or(False, True)
+/// True
+///
+/// > exclusive_or(True, False)
+/// True
+///
+/// > exclusive_or(True, True)
+/// False
+///
+pub fn exclusive_or(a: Bool, b: Bool) -> Bool {
+ case a, b {
+ False, False -> False
+ False, True -> True
+ True, False -> True
+ True, True -> False
+ }
+}
+
/// Compares two bools and returns the first values Order to the second.
///
/// ## Examples
diff --git a/test/gleam/bool_test.gleam b/test/gleam/bool_test.gleam
index a05327f..aced02b 100644
--- a/test/gleam/bool_test.gleam
+++ b/test/gleam/bool_test.gleam
@@ -10,6 +10,20 @@ pub fn negate_test() {
|> should.be_true
}
+pub fn exclusive_or_test() {
+ bool.exclusive_or(True, True)
+ |> should.be_false
+
+ bool.exclusive_or(False, False)
+ |> should.be_false
+
+ bool.exclusive_or(True, False)
+ |> should.be_true
+
+ bool.exclusive_or(False, True)
+ |> should.be_true
+}
+
pub fn compare_test() {
bool.compare(True, True)
|> should.equal(order.Eq)