.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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 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
 | 
			
		||||
// 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