.GetElse()
parent
a4952668c3
commit
ac10a7a79c
23
optional.go
23
optional.go
|
@ -141,6 +141,29 @@ func (receiver Optional[T]) Get() (T, bool) {
|
||||||
return receiver.value, receiver.something
|
return receiver.value, receiver.something
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetElse returns the value inside of the optional-type if it is holding something.
|
||||||
|
// Else it returns the alternstive value passed as a parameter.
|
||||||
|
// Example usage:
|
||||||
|
//
|
||||||
|
// var op opt.Optional[string]
|
||||||
|
//
|
||||||
|
// // ...
|
||||||
|
//
|
||||||
|
// value := op.GetElse(alternative)
|
||||||
|
//
|
||||||
|
// if found {
|
||||||
|
// fmt.Println("VALUE:", value)
|
||||||
|
// } else {
|
||||||
|
// fmt.Println("nothing")
|
||||||
|
// }
|
||||||
|
func (receiver Optional[T]) GetElse(alternative T) T {
|
||||||
|
if receiver.isnothing() {
|
||||||
|
return alternative
|
||||||
|
}
|
||||||
|
|
||||||
|
return receiver.value
|
||||||
|
}
|
||||||
|
|
||||||
// GoString makes it that when the fmt.Fprintf(), fmt.Printf(), and fmt.Sprintf() family of functions
|
// GoString makes it that when the fmt.Fprintf(), fmt.Printf(), and fmt.Sprintf() family of functions
|
||||||
// renders this type with the %#v verb, that it will be easier to understand.
|
// renders this type with the %#v verb, that it will be easier to understand.
|
||||||
//
|
//
|
||||||
|
|
|
@ -0,0 +1,213 @@
|
||||||
|
package opt_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"sourcecode.social/reiver/go-opt"
|
||||||
|
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestOptional_GetElse_string(t *testing.T) {
|
||||||
|
|
||||||
|
tests := []struct{
|
||||||
|
Optional opt.Optional[string]
|
||||||
|
Alternative string
|
||||||
|
Expected string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
Optional: opt.Nothing[string](),
|
||||||
|
Alternative: "alternative",
|
||||||
|
Expected: "alternative",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Optional: opt.Nothing[string](),
|
||||||
|
Alternative: "",
|
||||||
|
Expected: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Optional: opt.Nothing[string](),
|
||||||
|
Alternative: "apple",
|
||||||
|
Expected: "apple",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Optional: opt.Nothing[string](),
|
||||||
|
Alternative: "banana",
|
||||||
|
Expected: "banana",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Optional: opt.Nothing[string](),
|
||||||
|
Alternative: "cherry",
|
||||||
|
Expected: "cherry",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Optional: opt.Nothing[string](),
|
||||||
|
Alternative: "ONCE TWICE THRICE FOURCE",
|
||||||
|
Expected: "ONCE TWICE THRICE FOURCE",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Optional: opt.Nothing[string](),
|
||||||
|
Alternative: "😈",
|
||||||
|
Expected: "😈",
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
Optional: opt.Something("ONCE TWICE THRICE FOURCE"),
|
||||||
|
Alternative: "😈",
|
||||||
|
Expected: "ONCE TWICE THRICE FOURCE",
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
Optional: opt.Something("۰۱۲۳۴۵۶۷۸۹"),
|
||||||
|
Alternative: "😈",
|
||||||
|
Expected: "۰۱۲۳۴۵۶۷۸۹",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for testNumber, test := range tests {
|
||||||
|
|
||||||
|
actual := test.Optional.GetElse(test.Alternative)
|
||||||
|
|
||||||
|
{
|
||||||
|
expected := test.Expected
|
||||||
|
|
||||||
|
if expected != actual {
|
||||||
|
t.Errorf("For test #%d, the actual value is not what was expected.", testNumber)
|
||||||
|
t.Logf("EXPECTED VALUE: %q", expected)
|
||||||
|
t.Logf("ACTUAL VALUE: %q", actual)
|
||||||
|
t.Logf("OPTIONAL: %#v", test.Optional)
|
||||||
|
/////////////////////// CONTINUE
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestOptional_GetElse_int8(t *testing.T) {
|
||||||
|
|
||||||
|
tests := []struct{
|
||||||
|
Optional opt.Optional[int8]
|
||||||
|
Alternative int8
|
||||||
|
Expected int8
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
Optional: opt.Nothing[int8](),
|
||||||
|
Alternative: -2,
|
||||||
|
Expected: -2,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Optional: opt.Nothing[int8](),
|
||||||
|
Alternative: -1,
|
||||||
|
Expected: -1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Optional: opt.Nothing[int8](),
|
||||||
|
Alternative: 0,
|
||||||
|
Expected: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Optional: opt.Nothing[int8](),
|
||||||
|
Alternative: 1,
|
||||||
|
Expected: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Optional: opt.Nothing[int8](),
|
||||||
|
Alternative: 2,
|
||||||
|
Expected: 2,
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
Optional: opt.Something[int8](-127),
|
||||||
|
Alternative: 42,
|
||||||
|
Expected: -127,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Optional: opt.Something[int8](0),
|
||||||
|
Alternative: 42,
|
||||||
|
Expected: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Optional: opt.Something[int8](127),
|
||||||
|
Alternative: 42,
|
||||||
|
Expected: 127,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for testNumber, test := range tests {
|
||||||
|
|
||||||
|
actual := test.Optional.GetElse(test.Alternative)
|
||||||
|
|
||||||
|
{
|
||||||
|
expected := test.Expected
|
||||||
|
|
||||||
|
if expected != actual {
|
||||||
|
t.Errorf("For test #%d, the actual value is not what was expected.", testNumber)
|
||||||
|
t.Logf("EXPECTED VALUE: %q", expected)
|
||||||
|
t.Logf("ACTUAL VALUE: %q", actual)
|
||||||
|
t.Logf("OPTIONAL: %#v", test.Optional)
|
||||||
|
/////////////////////// CONTINUE
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestOptional_GetElse_uint8(t *testing.T) {
|
||||||
|
|
||||||
|
tests := []struct{
|
||||||
|
Optional opt.Optional[uint8]
|
||||||
|
Alternative uint8
|
||||||
|
Expected uint8
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
Optional: opt.Nothing[uint8](),
|
||||||
|
Alternative: 0,
|
||||||
|
Expected: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Optional: opt.Nothing[uint8](),
|
||||||
|
Alternative: 1,
|
||||||
|
Expected: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Optional: opt.Nothing[uint8](),
|
||||||
|
Alternative: 2,
|
||||||
|
Expected: 2,
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
Optional: opt.Something[uint8](0),
|
||||||
|
Alternative: 42,
|
||||||
|
Expected: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Optional: opt.Something[uint8](127),
|
||||||
|
Alternative: 42,
|
||||||
|
Expected: 127,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for testNumber, test := range tests {
|
||||||
|
|
||||||
|
actual := test.Optional.GetElse(test.Alternative)
|
||||||
|
|
||||||
|
{
|
||||||
|
expected := test.Expected
|
||||||
|
|
||||||
|
if expected != actual {
|
||||||
|
t.Errorf("For test #%d, the actual value is not what was expected.", testNumber)
|
||||||
|
t.Logf("EXPECTED VALUE: %q", expected)
|
||||||
|
t.Logf("ACTUAL VALUE: %q", actual)
|
||||||
|
t.Logf("OPTIONAL: %#v", test.Optional)
|
||||||
|
/////////////////////// CONTINUE
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue