47 lines
1.3 KiB
Go
47 lines
1.3 KiB
Go
|
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))
|
||
|
}
|
||
|
}
|
||
|
}
|