Skip to content

Commit d9a495e

Browse files
authored
Merge pull request #319 from jecisc/better-equality-assertions
Better equality assertions
2 parents ce92f8d + f1e2a10 commit d9a495e

File tree

53 files changed

+1881
-1793
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+1881
-1793
lines changed

src/Math-AutomaticDifferenciation/PMDualNumber.class.st

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,13 @@ PMDualNumber >> asInteger [
135135
{ #category : #comparing }
136136
PMDualNumber >> closeTo: aDualNumber [
137137

138-
^ (value closeTo: aDualNumber value) and: [
139-
eps closeTo: aDualNumber eps ]
138+
^ self closeTo: aDualNumber precision: Float defaultComparisonPrecision
139+
]
140+
141+
{ #category : #comparing }
142+
PMDualNumber >> closeTo: aDualNumber precision: aPrecision [
143+
144+
^ (value closeTo: aDualNumber value precision: aPrecision) and: [ eps closeTo: aDualNumber eps precision: aPrecision ]
140145
]
141146

142147
{ #category : #'mathematical functions' }

src/Math-AutomaticDifferenciation/PMHyperDualNumber.class.st

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,10 @@ PMHyperDualNumber >> arcTan [
9797
]
9898

9999
{ #category : #comparing }
100-
PMHyperDualNumber >> closeTo: aHyperDualNumber [
100+
PMHyperDualNumber >> closeTo: aHyperDualNumber precision: aPrecision [
101101

102-
^ (super closeTo: aHyperDualNumber) and: [
103-
(eps2 closeTo: aHyperDualNumber eps2) and: [
104-
eps1eps2 closeTo: aHyperDualNumber eps1eps2 ] ]
102+
^ (super closeTo: aHyperDualNumber precision: aPrecision) and: [
103+
(eps2 closeTo: aHyperDualNumber eps2 precision: aPrecision) and: [ eps1eps2 closeTo: aHyperDualNumber eps1eps2 precision: aPrecision ] ]
105104
]
106105

107106
{ #category : #'mathematical functions' }
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
Extension { #name : #SequenceableCollection }
2+
3+
{ #category : #'*Math-CompatibilityUpToPharo11' }
4+
SequenceableCollection >> closeTo: aSequenceableCollection precision: aPrecision [
5+
"Return true if all my elements are close to the elements of same index of the parameter with a certain precision"
6+
7+
"(#(1.9283 2.3029) closeTo: #(1.9284 2.3028) precision: 0.001) >>> true"
8+
9+
self with: aSequenceableCollection do: [ :a :b | (a closeTo: b precision: aPrecision) ifFalse: [ ^ false ] ].
10+
^ true
11+
]

src/Math-Tests-Accuracy/PMAccuracyTest.class.st

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -185,21 +185,21 @@ PMAccuracyTest >> testIfSeveralterations [
185185

186186
{ #category : #tests }
187187
PMAccuracyTest >> testIterations [
188+
188189
| s d |
189190
a
190191
iterations: 2;
191192
run.
192193
d := a dataTree at: 'names'.
193-
s := (d atPath: #('Aaa' #(1 2) #(5 3) '+dev')) first negated.
194-
self
195-
assert: ((d atPath: #('Aaa' #(1 2) #(5 3) '-dev')) first closeTo: s).
196-
s := d atPath: #('Aaa' #(3 2.8888) #(5 3) 'standard deviation').
194+
s := (d atPath: #( 'Aaa' #( 1 2 ) #( 5 3 ) '+dev' )) first negated.
195+
self assert: (d atPath: #( 'Aaa' #( 1 2 ) #( 5 3 ) '-dev' )) first closeTo: s.
196+
s := d atPath: #( 'Aaa' #( 3 2.8888 ) #( 5 3 ) 'standard deviation' ).
197197
self assert: s first > 0.
198198
self assert: s second equals: 0.
199-
self assert: (d atPath: #('Ddd' 'data')) equals: #(#(2 3) #(2 3)).
200-
s := d atPath: #('Ddd' 'error').
201-
self assert: (s first closeTo: -45).
202-
self assert: (s second closeTo: -26.6666667)
199+
self assert: (d atPath: #( 'Ddd' 'data' )) equals: #( #( 2 3 ) #( 2 3 ) ).
200+
s := d atPath: #( 'Ddd' 'error' ).
201+
self assert: s first closeTo: -45.
202+
self assert: s second closeTo: -26.6666667
203203
]
204204

205205
{ #category : #tests }

src/Math-Tests-AutomaticDifferenciation/PMDualNumberTest.class.st

Lines changed: 27 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,9 @@ PMDualNumberTest >> testAdd [
5656
PMDualNumberTest >> testArcCos [
5757

5858
| a |
59-
self assert:
60-
(zero arcCos closeTo: (PMDualNumber value: Float halfPi eps: -1)).
59+
self assert: zero arcCos closeTo: (PMDualNumber value: Float halfPi eps: -1).
6160
a := (PMDualNumber value: -1.0 successor eps: 1) arcCos.
62-
self assert: (a value closeTo: Float pi).
61+
self assert: a value closeTo: Float pi.
6362
self assert: a eps < -1e6
6463
]
6564

@@ -69,7 +68,7 @@ PMDualNumberTest >> testArcSin [
6968
| a |
7069
self assert: zero arcSin equals: zero.
7170
a := (PMDualNumber value: 1.0 predecessor eps: 1) arcSin.
72-
self assert: (a value closeTo: Float halfPi).
71+
self assert: a value closeTo: Float halfPi.
7372
self assert: a eps > 1e6.
7473
a := (PMDualNumber value: -0.5 eps: 1) arcSin.
7574
self assert: a value equals: -0.5 arcSin.
@@ -80,10 +79,8 @@ PMDualNumberTest >> testArcSin [
8079
PMDualNumberTest >> testArcTan [
8180

8281
self assertEquality: zero arcTan and: zero.
83-
self
84-
assertEquality: one negated arcTan
85-
and: (PMDualNumber value: -1 arcTan eps: -1 / 2).
86-
self assert: (three arcTan eps closeTo: 0.1)
82+
self assertEquality: one negated arcTan and: (PMDualNumber value: -1 arcTan eps: -1 / 2).
83+
self assert: three arcTan eps closeTo: 0.1
8784
]
8885

8986
{ #category : #test }
@@ -117,13 +114,9 @@ PMDualNumberTest >> testConverting [
117114
{ #category : #'tests-mathematical functions' }
118115
PMDualNumberTest >> testCos [
119116

120-
self assert:
121-
((PMDualNumber value: Float halfPi negated eps: 1) cos closeTo:
122-
(PMDualNumber value: 0 eps: 1)).
123-
self assert: ((PMDualNumber value: Float halfPi eps: 1) cos closeTo:
124-
(PMDualNumber value: 0 eps: -1)).
125-
self assert:
126-
((PMDualNumber value: Float halfPi eps: 0) cos closeTo: zeroc)
117+
self assert: (PMDualNumber value: Float halfPi negated eps: 1) cos closeTo: (PMDualNumber value: 0 eps: 1).
118+
self assert: (PMDualNumber value: Float halfPi eps: 1) cos closeTo: (PMDualNumber value: 0 eps: -1).
119+
self assert: (PMDualNumber value: Float halfPi eps: 0) cos closeTo: zeroc
127120
]
128121

129122
{ #category : #'tests-arithmetic' }
@@ -167,16 +160,13 @@ PMDualNumberTest >> testEqual [
167160
{ #category : #tests }
168161
PMDualNumberTest >> testEqualsTo [
169162

170-
self assert: (zeroc closeTo: zeroc).
171-
self deny: (zeroc closeTo: zero).
172-
self assert: (zero closeTo: zero).
173-
self assert:
174-
(one closeTo: (PMDualNumber value: 1.0000000001 eps: 1.0000000001)).
175-
self deny:
176-
(one closeTo: (PMDualNumber value: 1.0000000001 eps: 1.001)).
177-
self deny:
178-
(one closeTo: (PMDualNumber value: 1.001 eps: 1.0000000001)).
179-
self deny: (one closeTo: (PMDualNumber value: 1.001 eps: 1.001))
163+
self assert: zeroc closeTo: zeroc.
164+
self deny: zeroc closeTo: zero.
165+
self assert: zero closeTo: zero.
166+
self assert: one closeTo: (PMDualNumber value: 1.0000000001 eps: 1.0000000001).
167+
self deny: one closeTo: (PMDualNumber value: 1.0000000001 eps: 1.001).
168+
self deny: one closeTo: (PMDualNumber value: 1.001 eps: 1.0000000001).
169+
self deny: one closeTo: (PMDualNumber value: 1.001 eps: 1.001)
180170
]
181171

182172
{ #category : #'tests-mathematical functions' }
@@ -185,7 +175,7 @@ PMDualNumberTest >> testExp [
185175
| a b |
186176
b := 3 exp.
187177
a := three exp.
188-
self assert: (a eps closeTo: b).
178+
self assert: a eps closeTo: b.
189179
self assert: a value equals: b.
190180
self assert: one equals: zero exp
191181
]
@@ -209,7 +199,7 @@ PMDualNumberTest >> testLn [
209199

210200
| a |
211201
a := three ln.
212-
self assert: (a eps closeTo: 1 / 3).
202+
self assert: a eps closeTo: 1 / 3.
213203
self assert: a value equals: 3 ln.
214204
self assert: one ln equals: zero
215205
]
@@ -259,21 +249,17 @@ PMDualNumberTest >> testRaisedTo [
259249
| a |
260250
self assertEquality: (three raisedTo: 2) and: three squared.
261251
self assertEquality: (three raisedTo: 0) and: onec.
262-
self
263-
assertEquality: (three + one raisedTo: 1 / 2)
264-
and: (PMDualNumber value: 2 eps: 1 / 2).
265-
self assert:
266-
((three + one raisedTo: 3 / 2) closeTo:
267-
(PMDualNumber value: 8 eps: 6)).
252+
self assertEquality: (three + one raisedTo: 1 / 2) and: (PMDualNumber value: 2 eps: 1 / 2).
253+
self assert: (three + one raisedTo: 3 / 2) closeTo: (PMDualNumber value: 8 eps: 6).
268254
self assertEquality: (zero raisedTo: 1.4) and: zeroc.
269255
a := 2 raisedTo: three.
270-
self assert: (a value closeTo: 8).
271-
self assert: (a eps closeTo: 2 ln * (2 raisedTo: 3)).
256+
self assert: a value closeTo: 8.
257+
self assert: a eps closeTo: 2 ln * (2 raisedTo: 3).
272258
self assertEquality: (1 raisedTo: three) and: onec.
273259
self assertEquality: (one raisedTo: one) and: one.
274260
a := three raisedTo: three.
275-
self assert: (a value closeTo: 27).
276-
self assert: (a eps closeTo: (3 raisedTo: 3) * (3 ln + 1))
261+
self assert: a value closeTo: 27.
262+
self assert: a eps closeTo: (3 raisedTo: 3) * (3 ln + 1)
277263
]
278264

279265
{ #category : #'tests-mathematical functions' }
@@ -303,11 +289,8 @@ PMDualNumberTest >> testReciprocal [
303289
{ #category : #'tests-mathematical functions' }
304290
PMDualNumberTest >> testSin [
305291

306-
self assert:
307-
((PMDualNumber value: Float halfPi negated eps: 1) sin closeTo:
308-
(PMDualNumber value: -1.0 eps: 0.0)).
309-
self assert: ((PMDualNumber value: Float halfPi eps: 1) sin closeTo:
310-
(PMDualNumber value: 1.0 eps: 0.0)).
292+
self assert: (PMDualNumber value: Float halfPi negated eps: 1) sin closeTo: (PMDualNumber value: -1.0 eps: 0.0).
293+
self assert: (PMDualNumber value: Float halfPi eps: 1) sin closeTo: (PMDualNumber value: 1.0 eps: 0.0).
311294
self assertEquality: zero sin and: zero
312295
]
313296

@@ -359,11 +342,11 @@ PMDualNumberTest >> testTan [
359342
| a b |
360343
a := three tan.
361344
self assert: a value equals: 3 tan.
362-
self assert: (a eps closeTo: 3 tan squared + 1).
345+
self assert: a eps closeTo: 3 tan squared + 1.
363346
b := Float halfPi - 0.000000000001.
364347
a := (PMDualNumber value: b eps: 1) tan.
365348
self assert: a value equals: b tan.
366-
self assert: (a eps closeTo: b tan squared + 1)
349+
self assert: a eps closeTo: b tan squared + 1
367350
]
368351

369352
{ #category : #'tests-testing' }

src/Math-Tests-AutomaticDifferenciation/PMGradientAndHessianTest.class.st

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,9 @@ PMGradientAndHessianTest >> test2 [
3636
g := PMGradient of: f.
3737
(h := PMHessian of: f) value: #( 0 0 ).
3838
r := #( 0.5 0.5 ).
39-
self assert: ((g value: #( 0 0 )) closeTo: r).
40-
self assert: (h gradient closeTo: r).
39+
self assert: (g value: #( 0 0 )) closeTo: r.
40+
self assert: h gradient closeTo: r.
4141
r := (-1 exp + 1 exp) reciprocal.
42-
self assert: ((g value: #( -1 1 )) closeTo: r * #( -1 1 ) exp).
43-
self assert: (h result closeTo:
44-
(PMMatrix rows: #( #( 0.25 -0.25 ) #( -0.25 0.25 ) )))
42+
self assert: (g value: #( -1 1 )) closeTo: r * #( -1 1 ) exp.
43+
self assert: h result closeTo: (PMMatrix rows: #( #( 0.25 -0.25 ) #( -0.25 0.25 ) ))
4544
]

0 commit comments

Comments
 (0)