1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
|
package libs
import (
"math"
"testing"
)
var tolerance = float64(0.00001)
func TestSassNumberAddDifferentUnits(t *testing.T) {
var sn1 = SassNumber{50, "px"}
var sn2 = SassNumber{15, "cm"}
res := sn1.Add(sn2)
expectedValue := 50 + ((96.0 / 2.54) * 15)
if res.Unit != sn1.Unit {
t.Errorf("SassNumber Add result Units are: %s, wanted %s", res.Unit, sn1.Unit)
} else if !compareFloats(res.Value, expectedValue) {
t.Errorf("SassNumber Add result Value expected: %f, got %f", expectedValue, res.Value)
}
}
func TestSassNumberAddSameUnits(t *testing.T) {
var sn1 = SassNumber{80.0, "mm"}
var sn2 = SassNumber{25.0, "mm"}
res := sn1.Add(sn2)
expectedValue := 80.0 + 25.0
if res.Unit != sn1.Unit {
t.Errorf("SassNumber Add result Units are: %s, wanted %s", res.Unit, sn1.Unit)
} else if !compareFloats(res.Value, expectedValue) {
t.Errorf("SassNumber Add result Value expected: %f, got %f", expectedValue, res.Value)
}
}
func TestSassNumberSubstractDifferentUnits(t *testing.T) {
var sn1 = SassNumber{60, "grad"}
var sn2 = SassNumber{25, "deg"}
res := sn1.Subtract(sn2)
expectedValue := 60 - ((40.0 / 36.0) * 25.0)
if res.Unit != sn1.Unit {
t.Errorf("SassNumber Subtract result Units are: %s, wanted %s", res.Unit, sn1.Unit)
} else if !compareFloats(res.Value, expectedValue) {
t.Errorf("SassNumber Subtract result Value expected: %f, got %f", expectedValue, res.Value)
}
}
func TestSassNumberSubtractSameUnits(t *testing.T) {
var sn1 = SassNumber{80.0, "mm"}
var sn2 = SassNumber{25.0, "mm"}
res := sn1.Subtract(sn2)
expectedValue := 80.0 - 25.0
if res.Unit != sn1.Unit {
t.Errorf("SassNumber Subtract result Units are: %s, wanted %s", res.Unit, sn1.Unit)
} else if !compareFloats(res.Value, expectedValue) {
t.Errorf("SassNumber Subtract result Value expected: %f, got %f", expectedValue, res.Value)
}
}
func TestSassNumberMultiplyDifferentUnits(t *testing.T) {
var sn1 = SassNumber{15, "mm"}
var sn2 = SassNumber{5, "pt"}
res := sn1.Multiply(sn2)
expectedValue := 15 * ((25.4 / 72.0) * 5)
if res.Unit != sn1.Unit {
t.Errorf("SassNumber Multiply result Units are: %s, wanted %s", res.Unit, sn1.Unit)
} else if !compareFloats(res.Value, expectedValue) {
t.Errorf("SassNumber Multiply result Value expected: %f, got %f", expectedValue, res.Value)
}
}
func TestSassNumberMultiplySameUnits(t *testing.T) {
var sn1 = SassNumber{.4, "rad"}
var sn2 = SassNumber{.7, "rad"}
res := sn1.Multiply(sn2)
expectedValue := .4 * .7
if res.Unit != sn1.Unit {
t.Errorf("SassNumber add result Units are: %s, wanted %s", res.Unit, sn1.Unit)
} else if !compareFloats(res.Value, expectedValue) {
t.Errorf("SassNumber Add result Value expected: %f, got %f", expectedValue, res.Value)
}
}
func TestSassNumberDivideDifferentUnits(t *testing.T) {
var sn1 = SassNumber{5, "in"}
var sn2 = SassNumber{15, "px"}
res := sn1.Divide(sn2)
expectedValue := 5 / ((1.0 / 96.0) * 15)
if res.Unit != sn1.Unit {
t.Errorf("SassNumber Divide result Units are: %s, wanted %s", res.Unit, sn1.Unit)
} else if !compareFloats(res.Value, expectedValue) {
t.Errorf("SassNumber Divide result Value expected: %f, got %f", expectedValue, res.Value)
}
}
func TestSassNumberDivideSameUnits(t *testing.T) {
var sn1 = SassNumber{80.0, "cm"}
var sn2 = SassNumber{25.0, "cm"}
res := sn1.Divide(sn2)
expectedValue := 80.0 / 25.0
if res.Unit != sn1.Unit {
t.Errorf("SassNumber Divide result Units are: %s, wanted %s", res.Unit, sn1.Unit)
} else if !compareFloats(res.Value, expectedValue) {
t.Errorf("SassNumber Divide result Value expected: %f, got %f", expectedValue, res.Value)
}
}
/*
func TestUnknownUnit(t *testing.T) {
var sn1 = SassNumber{80.0, "mm"}
var sn2 = SassNumber{25.0, "TalorSwift"}
_, err := sn1.Divide(sn2)
if err == nil {
t.Errorf("Wanted: %s but did not get an error", fmt.Sprintf("Can not convert from %s to %s", sn2.Unit, sn1.Unit))
} else if err.Error() != fmt.Sprintf("Can not convert from %s to %s", sn2.Unit, sn1.Unit) {
t.Errorf("Wanted: %s got: %s", fmt.Sprintf("Can not convert from %s to %s", sn2.Unit, sn1.Unit), err.Error())
}
}
func TestDistanceToAngleConversion(t *testing.T) {
var sn1 = SassNumber{80.0, "mm"}
var sn2 = SassNumber{25.0, "rad"}
_, err := sn1.Divide(sn2)
if err == nil {
t.Errorf("Wanted: %s but did not get an error", fmt.Sprintf("Can not convert sass Units between angles and distances: %s, %s", sn2.Unit, sn1.Unit))
} else if err.Error() != fmt.Sprintf("Can not convert sass Units between angles and distances: %s, %s", sn2.Unit, sn1.Unit) {
t.Errorf("Wanted: %s got: %s", fmt.Sprintf("Can not convert sass Units between angles and distances: %s, %s", sn2.Unit, sn1.Unit), err.Error())
}
}
*/
func TestChainedOperation(t *testing.T) {
var sn1 = SassNumber{5, "in"}
var sn2 = SassNumber{15, "px"}
var sn3 = SassNumber{55, "px"}
var sn4 = SassNumber{75, "mm"}
var sn5 = SassNumber{25, "pt"}
res := sn1.Add(sn2).Subtract(sn3).Multiply(sn4).Divide(sn5)
expectedValue := (((5.0 + ((1.0 / 96.0) * 15)) - ((1.0 / 96.0) * 55)) * ((1.0 / 25.4) * 75)) / ((1.0 / 72.0) * 25)
if res.Unit != sn1.Unit {
t.Errorf("SassNumber Divide result Units are: %s, wanted %s", res.Unit, sn1.Unit)
} else if !compareFloats(res.Value, expectedValue) {
t.Errorf("SassNumber chained operation result Value expected: %f, got %f", expectedValue, res.Value)
}
}
func compareFloats(f1 float64, f2 float64) bool {
if math.Abs(f1-f2) < tolerance {
return true
}
return false
}
|