diff --git a/condition/condition.go b/condition/condition.go index 57bb1f9..e169a9a 100644 --- a/condition/condition.go +++ b/condition/condition.go @@ -13,6 +13,7 @@ import "reflect" // If the type has an IsZero() bool method, the opposite value is returned. // Slices and maps are truthy if they have a length greater than zero. // All other types are truthy if they are not their zero value. +// Play: https://go.dev/play/p/ETzeDJRSvhm func Bool[T any](value T) bool { switch m := any(value).(type) { case interface{ Bool() bool }: @@ -34,16 +35,19 @@ func reflectValue(vp any) bool { } // And returns true if both a and b are truthy. +// Play: https://go.dev/play/p/W1SSUmt6pvr func And[T, U any](a T, b U) bool { return Bool(a) && Bool(b) } // Or returns false iff neither a nor b is truthy. +// Play: https://go.dev/play/p/UlQTxHaeEkq func Or[T, U any](a T, b U) bool { return Bool(a) || Bool(b) } // Xor returns true iff a or b but not both is truthy. +// Play: https://go.dev/play/p/gObZrW7ZbG8 func Xor[T, U any](a T, b U) bool { valA := Bool(a) valB := Bool(b) @@ -51,23 +55,27 @@ func Xor[T, U any](a T, b U) bool { } // Nor returns true iff neither a nor b is truthy. +// Play: https://go.dev/play/p/g2j08F_zZky func Nor[T, U any](a T, b U) bool { return !(Bool(a) || Bool(b)) } // Xnor returns true iff both a and b or neither a nor b are truthy. +// Play: https://go.dev/play/p/OuDB9g51643 func Xnor[T, U any](a T, b U) bool { valA := Bool(a) valB := Bool(b) return (valA && valB) || (!valA && !valB) } -// Nand returns false iff both a and b are truthy. +// Nand returns false if both a and b are truthy. +// Play: https://go.dev/play/p/vSRMLxLIbq8 func Nand[T, U any](a T, b U) bool { return !Bool(a) || !Bool(b) } -// TernaryOperator checks the value of param `isTrue`, if true return ifValue else return elseValue +// TernaryOperator checks the value of param `isTrue`, if true return ifValue else return elseValue. +// Play: https://go.dev/play/p/ElllPZY0guT func TernaryOperator[T, U any](isTrue T, ifValue U, elseValue U) U { if Bool(isTrue) { return ifValue diff --git a/condition/condition_example_test.go b/condition/condition_example_test.go new file mode 100644 index 0000000..f645d8c --- /dev/null +++ b/condition/condition_example_test.go @@ -0,0 +1,163 @@ +package condition + +import "fmt" + +func ExampleBool() { + // bool + result1 := Bool(false) + result2 := Bool(true) + fmt.Println(result1) + fmt.Println(result2) + + // integer + result3 := Bool(0) + result4 := Bool(1) + fmt.Println(result3) + fmt.Println(result4) + + // string + result5 := Bool("") + result6 := Bool(" ") + fmt.Println(result5) + fmt.Println(result6) + + // slice + var nums = []int{} + result7 := Bool(nums) + nums = append(nums, 1, 2) + result8 := Bool(nums) + fmt.Println(result7) + fmt.Println(result8) + + // Output: + // false + // true + // false + // true + // false + // true + // false + // true +} + +func ExampleAnd() { + result1 := And(0, 1) + result2 := And(0, "") + result3 := And(0, "0") + result4 := And(1, "0") + + fmt.Println(result1) + fmt.Println(result2) + fmt.Println(result3) + fmt.Println(result4) + + // Output: + // false + // false + // false + // true +} + +func ExampleOr() { + result1 := Or(0, "") + result2 := Or(0, 1) + result3 := Or(0, "0") + result4 := Or(1, "0") + + fmt.Println(result1) + fmt.Println(result2) + fmt.Println(result3) + fmt.Println(result4) + + // Output: + // false + // true + // true + // true +} + +func ExampleXor() { + result1 := Xor(0, 0) + result2 := Xor(1, 1) + result3 := Xor(0, 1) + result4 := Xor(1, 0) + + fmt.Println(result1) + fmt.Println(result2) + fmt.Println(result3) + fmt.Println(result4) + + // Output: + // false + // false + // true + // true +} + +func ExampleNor() { + result1 := Nor(0, 0) + result2 := Nor(1, 1) + result3 := Nor(0, 1) + result4 := Nor(1, 0) + + fmt.Println(result1) + fmt.Println(result2) + fmt.Println(result3) + fmt.Println(result4) + + // Output: + // true + // false + // false + // false +} + +func ExampleXnor() { + result1 := Xnor(0, 0) + result2 := Xnor(1, 1) + result3 := Xnor(0, 1) + result4 := Xnor(1, 0) + + fmt.Println(result1) + fmt.Println(result2) + fmt.Println(result3) + fmt.Println(result4) + + // Output: + // true + // true + // false + // false +} + +func ExampleNand() { + result1 := Nand(0, 0) + result2 := Nand(1, 0) + result3 := Nand(0, 1) + result4 := Nand(1, 1) + + fmt.Println(result1) + fmt.Println(result2) + fmt.Println(result3) + fmt.Println(result4) + + // Output: + // true + // true + // true + // false +} + +func ExampleTernaryOperator() { + conditionTrue := 2 > 1 + result1 := TernaryOperator(conditionTrue, 0, 1) + fmt.Println(result1) + + conditionFalse := 2 > 3 + result2 := TernaryOperator(conditionFalse, 0, 1) + fmt.Println(result2) + + // Output: + // 0 + // 1 +}