package pixel_test import ( "fmt" "math" "testing" "github.com/faiface/pixel" ) // closeEnough will shift the decimal point by the accuracy required, truncates the results and compares them. // Effectively this compares two floats to a given decimal point. // Example: // closeEnough(100.125342432, 100.125, 2) == true // closeEnough(math.Pi, 3.14, 2) == true // closeEnough(0.1234, 0.1245, 3) == false func closeEnough(got, expected float64, decimalAccuracy int) bool { gotShifted := got * math.Pow10(decimalAccuracy) expectedShifted := expected * math.Pow10(decimalAccuracy) return math.Trunc(gotShifted) == math.Trunc(expectedShifted) } type clampTest struct { number float64 min float64 max float64 expected float64 } func TestClamp(t *testing.T) { tests := []clampTest{ {number: 1, min: 0, max: 5, expected: 1}, {number: 2, min: 0, max: 5, expected: 2}, {number: 8, min: 0, max: 5, expected: 5}, {number: -5, min: 0, max: 5, expected: 0}, {number: -5, min: -4, max: 5, expected: -4}, } for _, tc := range tests { result := pixel.Clamp(tc.number, tc.min, tc.max) if result != tc.expected { t.Error(fmt.Sprintf("Clamping %v with min %v and max %v should have given %v, but gave %v", tc.number, tc.min, tc.max, tc.expected, result)) } } }