@@ -193,6 +193,39 @@ PMComplexTest >> testBug1 [
193
193
self assert: (0.5 * (2 + 0 i) ln) exp equals: (0.5 * 2 ln) exp
194
194
]
195
195
196
+ { #category : #' testing - close to' }
197
+ PMComplexTest >> testCloseTo [
198
+
199
+ self assert: 2 + 3. 000000000000001i closeTo: 2 + 3i.
200
+ self assert: 2.000000000000001 + 3i closeTo: 2 + 3i.
201
+ self assert: 2.000000000000001 + 3. 000000000000001i closeTo: 2 + 3i.
202
+ ]
203
+
204
+ { #category : #' testing - close to' }
205
+ PMComplexTest >> testCloseToReal [
206
+
207
+ self assert: 2 + 0. 000000000000001i closeTo: 2 .
208
+ self assert: 2.000000000000001 + 0. 000000000000001i closeTo: 2 .
209
+
210
+ self assert: 2 + 0i closeTo: 2.000000000000001 .
211
+ self deny: 2 + 3i closeTo: 2.000000000000001
212
+ ]
213
+
214
+ { #category : #' testing - close to' }
215
+ PMComplexTest >> testCloseToRealWithPrecision [
216
+
217
+ self assert: 2 + 0. 001i closeTo: 2 precision: 0.01 .
218
+ self assert: 2.001 + 0. 001i closeTo: 2 precision: 0.01 .
219
+ ]
220
+
221
+ { #category : #' testing - close to' }
222
+ PMComplexTest >> testCloseToWithPrecision [
223
+
224
+ self assert: 2 + 3. 001i closeTo: 2 + 3i precision: 0.01 .
225
+ self assert: 2.001 + 3i closeTo: 2 + 3i precision: 0.01 .
226
+ self assert: 2.001 + 3. 001i closeTo: 2 + 3i precision: 0.01 .
227
+ ]
228
+
196
229
{ #category : #tests }
197
230
PMComplexTest >> testComplexAsComplex [
198
231
| ineg |
@@ -472,6 +505,21 @@ PMComplexTest >> testNew [
472
505
self assert: c imaginary equals: 0
473
506
]
474
507
508
+ { #category : #' testing - close to' }
509
+ PMComplexTest >> testNotCloseToRealWithPrecision [
510
+
511
+ self deny: 2 + 0. 001i closeTo: 2 precision: 0.000001 .
512
+ self deny: 2.001 + 0. 001i closeTo: 2 precision: 0.000001 .
513
+ ]
514
+
515
+ { #category : #' testing - close to' }
516
+ PMComplexTest >> testNotCloseToWithPrecision [
517
+
518
+ self deny: 2 + 3. 001i closeTo: 2 + 3i precision: 0.000001 .
519
+ self deny: 2.001 + 3i closeTo: 2 + 3i precision: 0.000001 .
520
+ self deny: 2.001 + 3. 001i closeTo: 2 + 3i precision: 0.000001 .
521
+ ]
522
+
475
523
{ #category : #tests }
476
524
PMComplexTest >> testNumberAsComplex [
477
525
| minusOne |
@@ -646,7 +694,7 @@ PMComplexTest >> testSquareRootOfNegativePureImaginaryNumberIsAComplexNumberWith
646
694
647
695
squareRoot := pureImaginaryNumber sqrt.
648
696
649
- expected := 2 sqrt negated + 2 sqrt i.
697
+ expected := 2 sqrt - 2 sqrt i.
650
698
self assert: squareRoot real closeTo: expected real.
651
699
self assert: squareRoot imaginary closeTo: expected imaginary
652
700
@@ -681,6 +729,44 @@ PMComplexTest >> testSquareRootOfPositiveRealNumberIsAComplexNumberWithOnlyAReal
681
729
self assert: squareRoot equals: expected
682
730
]
683
731
732
+ { #category : #tests }
733
+ PMComplexTest >> testSquareRootOfVeryLargeRealAndVerySmallImaginary [
734
+ " This may cause problems because of the loss of precision.
735
+ Very large and very small floating point numbers have different units of least precision.
736
+
737
+ verySmall ~= 0.
738
+ veryLarge + verySmall = veryLarge."
739
+
740
+ | veryLarge verySmall complexNumber expected |
741
+
742
+ veryLarge := 1e20 .
743
+ verySmall := 1e-20 .
744
+
745
+ complexNumber := veryLarge + verySmall i.
746
+ expected := 1e10 + 1e-31 i.
747
+
748
+ self assert: complexNumber sqrt closeTo: expected
749
+ ]
750
+
751
+ { #category : #tests }
752
+ PMComplexTest >> testSquareRootOfVerySmallRealAndVeryLargeImaginary [
753
+ " This may cause problems because of the loss of precision.
754
+ Very large and very small floating point numbers have different units of least precision.
755
+
756
+ verySmall ~= 0.
757
+ veryLarge + verySmall = veryLarge."
758
+
759
+ | veryLarge verySmall complexNumber expected |
760
+
761
+ veryLarge := 1e20 .
762
+ verySmall := 1e-20 .
763
+
764
+ complexNumber := verySmall + veryLarge i.
765
+ expected := 7071067811.865476 + 7071067811.865475 i.
766
+
767
+ self assert: complexNumber sqrt closeTo: expected
768
+ ]
769
+
684
770
{ #category : #tests }
685
771
PMComplexTest >> testSquareRootOfZeroIsZero [
686
772
" comment stating purpose of instance-side method"
0 commit comments