File: sass_number_test.go

package info (click to toggle)
golang-github-wellington-go-libsass 0.9.2%2Bgit20181130.4ef5b9d-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 2,128 kB
  • sloc: cpp: 28,607; ansic: 839; makefile: 44
file content (173 lines) | stat: -rw-r--r-- 5,495 bytes parent folder | download | duplicates (2)
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
}