@@ -193,6 +193,39 @@ PMComplexTest >> testBug1 [
193193 self assert: (0.5 * (2 + 0 i) ln) exp equals: (0.5 * 2 ln) exp
194194]
195195
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+
196229{ #category : #tests }
197230PMComplexTest >> testComplexAsComplex [
198231 | ineg |
@@ -472,6 +505,21 @@ PMComplexTest >> testNew [
472505 self assert: c imaginary equals: 0
473506]
474507
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+
475523{ #category : #tests }
476524PMComplexTest >> testNumberAsComplex [
477525 | minusOne |
@@ -646,7 +694,7 @@ PMComplexTest >> testSquareRootOfNegativePureImaginaryNumberIsAComplexNumberWith
646694
647695 squareRoot := pureImaginaryNumber sqrt.
648696
649- expected := 2 sqrt negated + 2 sqrt i.
697+ expected := 2 sqrt - 2 sqrt i.
650698 self assert: squareRoot real closeTo: expected real.
651699 self assert: squareRoot imaginary closeTo: expected imaginary
652700
@@ -681,6 +729,44 @@ PMComplexTest >> testSquareRootOfPositiveRealNumberIsAComplexNumberWithOnlyAReal
681729 self assert: squareRoot equals: expected
682730]
683731
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+
684770{ #category : #tests }
685771PMComplexTest >> testSquareRootOfZeroIsZero [
686772 " comment stating purpose of instance-side method"
0 commit comments