opt.Optional[T].Filter()
							parent
							
								
									4cd974c11f
								
							
						
					
					
						commit
						bb61bb0854
					
				
							
								
								
									
										40
									
								
								optional.go
								
								
								
								
							
							
						
						
									
										40
									
								
								optional.go
								
								
								
								
							| 
						 | 
					@ -80,7 +80,45 @@ func Something[T any](value T) Optional[T] {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Get return the value inside of the optional-type if it is holding something.
 | 
					// Filter returns itself if it is holding something and ‘fn’ applied to its value returns true.
 | 
				
			||||||
 | 
					// Else it return nothing.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// For example:
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//	fn := func(value int) bool {
 | 
				
			||||||
 | 
					//		return 0 == (value % 2)
 | 
				
			||||||
 | 
					//	}
 | 
				
			||||||
 | 
					//	
 | 
				
			||||||
 | 
					//	// ...
 | 
				
			||||||
 | 
					//	
 | 
				
			||||||
 | 
					//	var op1 opt.Optional[int] = opt.Something[int](10)
 | 
				
			||||||
 | 
					//	
 | 
				
			||||||
 | 
					//	op1 = op1.Filter(fn)
 | 
				
			||||||
 | 
					//	
 | 
				
			||||||
 | 
					//	// ...
 | 
				
			||||||
 | 
					//	
 | 
				
			||||||
 | 
					//	var op2 opt.Optional[int] = opt.Something[int](11)
 | 
				
			||||||
 | 
					//	
 | 
				
			||||||
 | 
					//	op2 = op2.Filter(fn)
 | 
				
			||||||
 | 
					//	
 | 
				
			||||||
 | 
					//	// ...
 | 
				
			||||||
 | 
					//	
 | 
				
			||||||
 | 
					//	var op3 opt.Optional[int] = opt.Nothing[int]()
 | 
				
			||||||
 | 
					//	
 | 
				
			||||||
 | 
					//	op3 = op3.Filter(fn)
 | 
				
			||||||
 | 
					func (receiver Optional[T]) Filter(fn func(T)bool) Optional[T] {
 | 
				
			||||||
 | 
						if !receiver.something {
 | 
				
			||||||
 | 
							return Nothing[T]()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if !fn(receiver.value) {
 | 
				
			||||||
 | 
							return Nothing[T]()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return receiver
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get returns the value inside of the optional-type if it is holding something.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// Example usage:
 | 
					// Example usage:
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,61 @@
 | 
				
			||||||
 | 
					package opt_test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"github.com/reiver/go-opt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"testing"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestOptional_Filter_int(t *testing.T) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						tests := []struct{
 | 
				
			||||||
 | 
							Optional opt.Optional[int]
 | 
				
			||||||
 | 
							Expected opt.Optional[int]
 | 
				
			||||||
 | 
						}{
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								Optional: opt.Nothing[int](),
 | 
				
			||||||
 | 
								Expected: opt.Nothing[int](),
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								Optional: opt.Something[int](-2),
 | 
				
			||||||
 | 
								Expected: opt.Something[int](-2),
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								Optional: opt.Something[int](-1),
 | 
				
			||||||
 | 
								Expected: opt.Nothing[int](),
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								Optional: opt.Something[int](0),
 | 
				
			||||||
 | 
								Expected: opt.Something[int](0),
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								Optional: opt.Something[int](1),
 | 
				
			||||||
 | 
								Expected: opt.Nothing[int](),
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								Optional: opt.Something[int](2),
 | 
				
			||||||
 | 
								Expected: opt.Something[int](2),
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for testNumber, test := range tests {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							fn := func(value int) bool {
 | 
				
			||||||
 | 
								return 0 == (value % 2)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							actual   := test.Optional.Filter(fn)
 | 
				
			||||||
 | 
							expected := test.Expected
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if expected != actual {
 | 
				
			||||||
 | 
								t.Errorf("For test #%d, the actual value is not what was expected.", testNumber)
 | 
				
			||||||
 | 
								t.Logf("EXPECTED: %#v", expected)
 | 
				
			||||||
 | 
								t.Logf("ACTUAL:   %#v", actual)
 | 
				
			||||||
 | 
						/////////////// CONTINUE
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue