@@ -10,35 +10,134 @@ func fptr(f float64) *float64 {
1010 return & f
1111}
1212
13+ func fbool (b bool ) * bool {
14+ return & b
15+ }
16+
17+ func TestEquals (t * testing.T ) {
18+ tcs := []struct {
19+ a Pack
20+ b Pack
21+ res bool
22+ }{
23+ {
24+ a : Pack {
25+ {Name : "foo" , Value : fptr (1 )},
26+ {Name : "bar" , BoolValue : fbool (true )},
27+ },
28+ b : Pack {
29+ {Name : "foo" , Value : fptr (1 )},
30+ {Name : "bar" , BoolValue : fbool (true )},
31+ },
32+ res : true ,
33+ },
34+ {
35+ a : Pack {
36+ {Name : "foo" , Value : fptr (1 )},
37+ },
38+ b : nil ,
39+ res : false ,
40+ },
41+ {
42+ a : nil ,
43+ b : Pack {
44+ {Name : "foo" , Value : fptr (1 )},
45+ },
46+ res : false ,
47+ },
48+ {
49+ a : Pack {
50+ {Name : "foo" , Value : fptr (1 )},
51+ },
52+ b : Pack {
53+ {Name : "foo" , Value : fptr (1 )},
54+ {Name : "foo" , Value : fptr (1 )},
55+ },
56+ res : false ,
57+ },
58+ {
59+ a : Pack {
60+ {Name : "foo" , Value : fptr (1 )},
61+ {Name : "foo" , Value : fptr (1 )},
62+ },
63+ b : Pack {
64+ {Name : "foo" , Value : fptr (1 )},
65+ },
66+ res : false ,
67+ },
68+ {
69+ a : Pack {
70+ {Name : "foo" , Value : fptr (1 )},
71+ },
72+ b : Pack {
73+ {Name : "foo" , Value : fptr (2 )},
74+ },
75+ res : false ,
76+ },
77+ {
78+ a : Pack {
79+ {Name : "foo" , Value : fptr (1 )},
80+ },
81+ b : Pack {
82+ {Name : "foo" },
83+ },
84+ res : false ,
85+ },
86+ {
87+ a : Pack {
88+ {Name : "foo" , BoolValue : fbool (true )},
89+ },
90+ b : Pack {
91+ {Name : "foo" , BoolValue : fbool (false )},
92+ },
93+ res : false ,
94+ },
95+ {
96+ a : Pack {
97+ {Name : "foo" , BoolValue : fbool (true )},
98+ },
99+ b : Pack {
100+ {Name : "foo" },
101+ },
102+ res : false ,
103+ },
104+ }
105+ for _ , tc := range tcs {
106+ if tc .a .Equals (tc .b ) != tc .res {
107+ t .Errorf ("Equals with %+v and %+v should return %v" , tc .a , tc .b , tc .res )
108+ }
109+ }
110+ }
111+
13112func TestNormalize (t * testing.T ) {
14113 tcs := []struct {
15114 src Pack
16115 norm Pack
17116 }{
18117 {
19118 src : Pack {
20- {BaseName : "urn:dev:ow:10e2073a01080063" , BaseTime : 1.320067464e+09 , BaseUnit : "%RH" , Value : fptr (20 )},
21- {Unit : "lon" , Value : fptr (24.30621 )},
22- {Unit : "lat" , Value : fptr (60.07965 )},
119+ {BaseName : "urn:dev:ow:10e2073a01080063" , BaseTime : 1.320067464e+09 , BaseUnit : RelativeHumidity , Value : fptr (20 )},
120+ {Unit : DegreesLongitude , Value : fptr (24.30621 )},
121+ {Unit : DegreesLatitude , Value : fptr (60.07965 )},
23122 {Time : 60 , Value : fptr (20.3 )},
24- {Unit : "lon" , Time : 60 , Value : fptr (24.30622 )},
25- {Unit : "lat" , Time : 60 , Value : fptr (60.07965 )},
123+ {Unit : DegreesLongitude , Time : 60 , Value : fptr (24.30622 )},
124+ {Unit : DegreesLatitude , Time : 60 , Value : fptr (60.07965 )},
26125 {Time : 120 , Value : fptr (20.7 )},
27- {Unit : "lon" , Time : 120 , Value : fptr (24.30623 )},
28- {Unit : "lat" , Time : 120 , Value : fptr (60.07966 )},
29- {Unit : "%EL" , Time : 150 , Value : fptr (98 )},
126+ {Unit : DegreesLongitude , Time : 120 , Value : fptr (24.30623 )},
127+ {Unit : DegreesLatitude , Time : 120 , Value : fptr (60.07966 )},
128+ {Unit : EnergyLevel , Time : 150 , Value : fptr (98 )},
30129 },
31130 norm : Pack {
32- {Name : "urn:dev:ow:10e2073a01080063" , Time : 1.320067464e+09 , Unit : "%RH" , Value : fptr (20 ), Version : 5 },
33- {Name : "urn:dev:ow:10e2073a01080063" , Time : 1.320067464e+09 , Unit : "lon" , Value : fptr (24.30621 ), Version : 5 },
34- {Name : "urn:dev:ow:10e2073a01080063" , Time : 1.320067464e+09 , Unit : "lat" , Value : fptr (60.07965 ), Version : 5 },
35- {Name : "urn:dev:ow:10e2073a01080063" , Time : 1.320067524e+09 , Unit : "%RH" , Value : fptr (20.3 ), Version : 5 },
36- {Name : "urn:dev:ow:10e2073a01080063" , Time : 1.320067524e+09 , Unit : "lon" , Value : fptr (24.30622 ), Version : 5 },
37- {Name : "urn:dev:ow:10e2073a01080063" , Time : 1.320067524e+09 , Unit : "lat" , Value : fptr (60.07965 ), Version : 5 },
38- {Name : "urn:dev:ow:10e2073a01080063" , Time : 1.320067584e+09 , Unit : "%RH" , Value : fptr (20.7 ), Version : 5 },
39- {Name : "urn:dev:ow:10e2073a01080063" , Time : 1.320067584e+09 , Unit : "lon" , Value : fptr (24.30623 ), Version : 5 },
40- {Name : "urn:dev:ow:10e2073a01080063" , Time : 1.320067584e+09 , Unit : "lat" , Value : fptr (60.07966 ), Version : 5 },
41- {Name : "urn:dev:ow:10e2073a01080063" , Time : 1.320067614e+09 , Unit : "%EL" , Value : fptr (98 ), Version : 5 },
131+ {Name : "urn:dev:ow:10e2073a01080063" , Time : 1.320067464e+09 , Unit : RelativeHumidity , Value : fptr (20 )},
132+ {Name : "urn:dev:ow:10e2073a01080063" , Time : 1.320067464e+09 , Unit : DegreesLongitude , Value : fptr (24.30621 )},
133+ {Name : "urn:dev:ow:10e2073a01080063" , Time : 1.320067464e+09 , Unit : DegreesLatitude , Value : fptr (60.07965 )},
134+ {Name : "urn:dev:ow:10e2073a01080063" , Time : 1.320067524e+09 , Unit : RelativeHumidity , Value : fptr (20.3 )},
135+ {Name : "urn:dev:ow:10e2073a01080063" , Time : 1.320067524e+09 , Unit : DegreesLongitude , Value : fptr (24.30622 )},
136+ {Name : "urn:dev:ow:10e2073a01080063" , Time : 1.320067524e+09 , Unit : DegreesLatitude , Value : fptr (60.07965 )},
137+ {Name : "urn:dev:ow:10e2073a01080063" , Time : 1.320067584e+09 , Unit : RelativeHumidity , Value : fptr (20.7 )},
138+ {Name : "urn:dev:ow:10e2073a01080063" , Time : 1.320067584e+09 , Unit : DegreesLongitude , Value : fptr (24.30623 )},
139+ {Name : "urn:dev:ow:10e2073a01080063" , Time : 1.320067584e+09 , Unit : DegreesLatitude , Value : fptr (60.07966 )},
140+ {Name : "urn:dev:ow:10e2073a01080063" , Time : 1.320067614e+09 , Unit : EnergyLevel , Value : fptr (98 )},
42141 },
43142 },
44143 {
@@ -47,7 +146,7 @@ func TestNormalize(t *testing.T) {
47146 {Name : "bar" , Value : fptr (1 )},
48147 },
49148 norm : Pack {
50- {Name : "foo.bar" , Value : fptr (1 ), Version : 5 },
149+ {Name : "foo.bar" , Value : fptr (1 )},
51150 },
52151 },
53152 {
@@ -56,7 +155,7 @@ func TestNormalize(t *testing.T) {
56155 {Name : "foo" , Value : fptr (1 )},
57156 },
58157 norm : Pack {
59- {Name : "foo" , Value : fptr (2 ), Version : 5 },
158+ {Name : "foo" , Value : fptr (2 )},
60159 },
61160 },
62161 {
@@ -65,12 +164,31 @@ func TestNormalize(t *testing.T) {
65164 {Name : "foo" , Sum : fptr (1 )},
66165 },
67166 norm : Pack {
68- {Name : "foo" , Sum : fptr (2 ), Version : 5 },
167+ {Name : "foo" , Sum : fptr (2 )},
168+ },
169+ },
170+ {
171+ src : Pack {
172+ {BaseTime : 1 },
173+ {Name : "foo" , Time : 1 , Value : fptr (1 )},
174+ },
175+ norm : Pack {
176+ {Name : "foo" , Time : 2 , Value : fptr (1 )},
177+ },
178+ },
179+ {
180+ src : Pack {
181+ {Name : "foo" , Time : 2 , Value : fptr (1 )},
182+ {Name : "foo" , Time : 1 , Value : fptr (2 )},
183+ },
184+ norm : Pack {
185+ {Name : "foo" , Time : 1 , Value : fptr (2 )},
186+ {Name : "foo" , Time : 2 , Value : fptr (1 )},
69187 },
70188 },
71189 }
72190 for _ , tc := range tcs {
73- norm := tc .norm .Normalize ()
191+ norm := tc .src .Normalize ()
74192 if ! norm .Equals (tc .norm ) {
75193 t .Errorf ("Normalized version of %+v should be %+v not %+v" , tc .src , tc .norm , norm )
76194 }
@@ -97,8 +215,18 @@ func TestJSON(t *testing.T) {
97215 if string (enc ) != tc .json {
98216 t .Errorf ("JSON encoding of %+v should be %s not %s" , tc .src , tc .json , enc )
99217 }
218+
219+ dec := Pack {}
220+ err = json .Unmarshal ([]byte (tc .json ), & dec )
221+ if err != nil {
222+ t .Errorf ("JSON decoding of %s returned an error : %s" , tc .json , err )
223+ }
224+ if ! tc .src .Equals (dec ) {
225+ t .Errorf ("JSON decoding of %s should be %+v not %+v" , tc .json , tc .src , dec )
226+ }
100227 }
101228}
229+
102230func TestXML (t * testing.T ) {
103231 tcs := []struct {
104232 src Pack
@@ -131,5 +259,14 @@ func TestXML(t *testing.T) {
131259 if string (enc ) != tc .xml {
132260 t .Errorf ("XML encoding of %+v should be %s not %s" , tc .src , tc .xml , enc )
133261 }
262+
263+ dec := Pack {}
264+ err = xml .Unmarshal ([]byte (tc .xml ), & dec )
265+ if err != nil {
266+ t .Errorf ("XML decoding of %s returned an error : %s" , tc .xml , err )
267+ }
268+ if ! tc .src .Equals (dec ) {
269+ t .Errorf ("XML decoding of %s should be %+v not %+v" , tc .xml , tc .src , dec )
270+ }
134271 }
135272}
0 commit comments