RegressionTests__FractionTest.st
author Claus Gittinger <cg@exept.de>
Tue, 09 Jul 2019 18:53:03 +0200
changeset 2327 bf482d49aeaf
parent 2266 43ebfa6688a1
child 2452 88407e46d054
permissions -rw-r--r--
#QUALITY by exept class: RegressionTests::StringTests added: #test82c_expanding

"{ Package: 'stx:goodies/regression' }"

"{ NameSpace: RegressionTests }"

TestCase subclass:#FractionTest
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'tests-Regression-Numbers'
!


!FractionTest methodsFor:'tests'!

testDegreeCos
    "self run: #testDegreeCos"

    self shouldnt: [ (4/3) degreeCos] raise: Error.
    Smalltalk isSmalltalkX ifTrue:[
	self assert: ((1/3) degreeCos printString startsWith:'0.999983')
    ] ifFalse:[
	self assert: (1/3) degreeCos printString =  '0.999983076857744'
    ]
!

testDegreeSin
    "self run: #testDegreeSin"

    self shouldnt: [ (4/3) degreeSin] raise: Error.
    Smalltalk isSmalltalkX ifTrue:[
	self assert: ((1/3) degreeSin printString startsWith:'0.005817')
    ] ifFalse:[
	self assert: (1/3) degreeSin printString =  '0.005817731354993834'
    ]
!

testDivisionResult
    |a b rslt|

    "/ 45 gcd:18 -> 9 

    rslt := Fraction numerator:45 denominator:18.
    self assert:(rslt isFraction).
    self assert:(rslt numerator = 5).
    self assert:(rslt denominator = 2).

    a := 45.
    b := 18.
    rslt := Fraction numerator:a denominator:b.
    self assert:(rslt isFraction).
    self assert:(rslt numerator = 5).
    self assert:(rslt denominator = 2).
    
    rslt := a / b.
    self assert:(rslt isFraction).
    self assert:(rslt numerator = 5).
    self assert:(rslt denominator = 2).

    rslt := Fraction numerator:6 denominator:3.
    self assert:(rslt isInteger).
    self assert:(rslt == 2).

    a := 6.
    b := 3.
    rslt := Fraction numerator:a denominator:b.
    self assert:(rslt isInteger).
    self assert:(rslt == 2).

    rslt := a / b.
    self assert:(rslt isInteger).
    self assert:(rslt == 2).

    "Created: / 05-06-2019 / 18:57:26 / Claus Gittinger"
!

testFractionPrinting
        self assert: (353 / 359) printString = '(353/359)'.

        self assert: (-2 / 3) printString = '(-2/3)'.
        self assert: (-2 / 3) storeString = '(-2/3)'.
        self assert: (5 / -7) printString = '(-5/7)'.
        self assert: (5 / -7) storeString = '(-5/7)'.

        Smalltalk isSmalltalkX ifFalse:[
            self assert: ((2/3) printStringBase: 2) = '(10/11)'.
            self assert: ((2/3) storeStringBase: 2) = '(2r10/2r11)'.
            self assert: ((5/7) printStringBase: 3) = '(12/21)'.
            self assert: ((5/7) storeStringBase: 3) = '(3r12/3r21)'.
            self assert: ((11/13) printStringBase: 4) = '(23/31)'.
            self assert: ((11/13) storeStringBase: 4) = '(4r23/4r31)'.
            self assert: ((17/19) printStringBase: 5) = '(32/34)'.
            self assert: ((17/19) storeStringBase: 5) = '(5r32/5r34)'.
            self assert: ((23/29) printStringBase: 6) = '(35/45)'.
            self assert: ((23/29) storeStringBase: 6) = '(6r35/6r45)'.
            self assert: ((31/37) printStringBase: 7) = '(43/52)'.
            self assert: ((31/37) storeStringBase: 7) = '(7r43/7r52)'.
            self assert: ((41/43) printStringBase: 8) = '(51/53)'.
            self assert: ((41/43) storeStringBase: 8) = '(8r51/8r53)'.
            self assert: ((47/53) printStringBase: 9) = '(52/58)'.
            self assert: ((47/53) storeStringBase: 9) = '(9r52/9r58)'.
            self assert: ((59/61) printStringBase: 10) = '(59/61)'.
            self assert: ((59/61) storeStringBase: 10) = '(59/61)'.
            self assert: ((67/71) printStringBase: 11) = '(61/65)'.
            self assert: ((67/71) storeStringBase: 11) = '(11r61/11r65)'.
            self assert: ((73/79) printStringBase: 12) = '(61/67)'.
            self assert: ((73/79) storeStringBase: 12) = '(12r61/12r67)'.
            self assert: ((83/89) printStringBase: 13) = '(65/6B)'.
            self assert: ((83/89) storeStringBase: 13) = '(13r65/13r6B)'.
            self assert: ((97/101) printStringBase: 14) = '(6D/73)'.
            self assert: ((97/101) storeStringBase: 14) = '(14r6D/14r73)'.
            self assert: ((103/107) printStringBase: 15) = '(6D/72)'.
            self assert: ((103/107) storeStringBase: 15) = '(15r6D/15r72)'.
            self assert: ((109/113) printStringBase: 16) = '(6D/71)'.
            self assert: ((109/113) storeStringBase: 16) = '(16r6D/16r71)'.
            self assert: ((127/131) printStringBase: 17) = '(78/7C)'.
            self assert: ((127/131) storeStringBase: 17) = '(17r78/17r7C)'.
            self assert: ((137/139) printStringBase: 18) = '(7B/7D)'.
            self assert: ((137/139) storeStringBase: 18) = '(18r7B/18r7D)'.
            self assert: ((149/151) printStringBase: 19) = '(7G/7I)'.
            self assert: ((149/151) storeStringBase: 19) = '(19r7G/19r7I)'.
            self assert: ((157/163) printStringBase: 20) = '(7H/83)'.
            self assert: ((157/163) storeStringBase: 20) = '(20r7H/20r83)'.
            self assert: ((167/173) printStringBase: 21) = '(7K/85)'.
            self assert: ((167/173) storeStringBase: 21) = '(21r7K/21r85)'.
            self assert: ((179/181) printStringBase: 22) = '(83/85)'.
            self assert: ((179/181) storeStringBase: 22) = '(22r83/22r85)'.
            self assert: ((191/193) printStringBase: 23) = '(87/89)'.
            self assert: ((191/193) storeStringBase: 23) = '(23r87/23r89)'.
            self assert: ((197/199) printStringBase: 24) = '(85/87)'.
            self assert: ((197/199) storeStringBase: 24) = '(24r85/24r87)'.
            self assert: ((211/223) printStringBase: 25) = '(8B/8N)'.
            self assert: ((211/223) storeStringBase: 25) = '(25r8B/25r8N)'.
            self assert: ((227/229) printStringBase: 26) = '(8J/8L)'.
            self assert: ((227/229) storeStringBase: 26) = '(26r8J/26r8L)'.
            self assert: ((233/239) printStringBase: 27) = '(8H/8N)'.
            self assert: ((233/239) storeStringBase: 27) = '(27r8H/27r8N)'.
            self assert: ((241/251) printStringBase: 28) = '(8H/8R)'.
            self assert: ((241/251) storeStringBase: 28) = '(28r8H/28r8R)'.
            self assert: ((257/263) printStringBase: 29) = '(8P/92)'.
            self assert: ((257/263) storeStringBase: 29) = '(29r8P/29r92)'.
            self assert: ((269/271) printStringBase: 30) = '(8T/91)'.
            self assert: ((269/271) storeStringBase: 30) = '(30r8T/30r91)'.
            self assert: ((277/281) printStringBase: 31) = '(8T/92)'.
            self assert: ((277/281) storeStringBase: 31) = '(31r8T/31r92)'.
            self assert: ((283/293) printStringBase: 32) = '(8R/95)'.
            self assert: ((283/293) storeStringBase: 32) = '(32r8R/32r95)'.
            self assert: ((307/311) printStringBase: 33) = '(9A/9E)'.
            self assert: ((307/311) storeStringBase: 33) = '(33r9A/33r9E)'.
            self assert: ((313/317) printStringBase: 34) = '(97/9B)'.
            self assert: ((313/317) storeStringBase: 34) = '(34r97/34r9B)'.
            self assert: ((331/337) printStringBase: 35) = '(9G/9M)'.
            self assert: ((331/337) storeStringBase: 35) = '(35r9G/35r9M)'.
            self assert: ((347/349) printStringBase: 36) = '(9N/9P)'.
            self assert: ((347/349) storeStringBase: 36) = '(36r9N/36r9P)'.

            self assert: ((-2/3) printStringBase: 2) = '(-10/11)'.
            self assert: ((-2/3) storeStringBase: 2) = '(-2r10/2r11)'.
            self assert: ((5/-7) printStringBase: 3) = '(-12/21)'.
            self assert: ((5/-7) storeStringBase: 3) = '(-3r12/3r21)'.
        ].
!

testFractionReduction
	self assert: (100 factorial / 99 factorial) == 100.
!

testMixedAddition
    self assert:(((1/2) + (1/2)) = 1).
    self assert:(((1/2) + 0.5) = 1).
    self assert:(((1/2) + (0.5 asFixedPoint:2)) = 1).
    self assert:(((1/2) + (0.5 asDouble)) = 1).
    self assert:(((1/2) + (0.5 asFloat)) = 1).
    self assert:(((1/2) + (0.5 asLongFloat)) = 1).
    self assert:(((1/2) + (0.5 asShortFloat)) = 1).

    self assert:(((1/2) + ((1/2) asFixedPoint:2)) = 1).
    self assert:(((1/2) + ((1/2) asDouble)) = 1).
    self assert:(((1/2) + ((1/2) asFloat)) = 1).
    self assert:(((1/2) + ((1/2) asLongFloat)) = 1).
    self assert:(((1/2) + ((1/2) asShortFloat)) = 1).


    self assert:(((1/2) + (1/2)) = 1.0).
    self assert:(((1/2) + 0.5) = 1.0).
    self assert:(((1/2) + (0.5 asFixedPoint:2)) = 1.0).
    self assert:(((1/2) + (0.5 asDouble)) = 1.0).
    self assert:(((1/2) + (0.5 asFloat)) = 1.0).
    self assert:(((1/2) + (0.5 asLongFloat)) = 1.0).
    self assert:(((1/2) + (0.5 asShortFloat)) = 1.0).

    self assert:(((1/2) + ((1/2) asFixedPoint:2)) = 1.0).
    self assert:(((1/2) + ((1/2) asDouble)) = 1.0).
    self assert:(((1/2) + ((1/2) asFloat)) = 1.0).
    self assert:(((1/2) + ((1/2) asLongFloat)) = 1.0).
    self assert:(((1/2) + ((1/2) asShortFloat)) = 1.0).

    self assert:((0.5 + (1/2)) = 1).
    self assert:(((0.5 asFixedPoint:2) + (1/2)) = 1).
    self assert:((((0.5 asFloat) asDouble) + (1/2)) = 1).

    self assert:((1 + (1/2)) = (3/2)).
    self assert:((1.0 + (1/2)) = (3/2)).
    self assert:(((1 asFixedPoint:2) + (1/2)) = (3/2)).
    self assert:((((1 asFloat) asDouble) + (1/2)) = (3/2)).
!

testMixedAddition2
    |fix1 fix2|

    fix1 := (1/2) asFixedPoint:2.
    fix2 := (1/2) asFixedPoint:2.

    self assert:((fix1 + (1/2)) = 1).
    self assert:((fix1 + 0.5) = 1).
    self assert:((fix1 + (0.5 asFixedPoint:2)) = 1).
    self assert:((fix1 + (0.5 asDouble)) = 1).
    self assert:((fix1 + (0.5 asFloat)) = 1).
    self assert:((fix1 + (0.5 asLongFloat)) = 1).
    self assert:((fix1 + (0.5 asShortFloat)) = 1).

    self assert:((fix1 + ((1/2) asFixedPoint:2)) = 1).
    self assert:((fix1 + ((1/2) asDouble)) = 1).
    self assert:((fix1 + ((1/2) asFloat)) = 1).
    self assert:((fix1 + ((1/2) asLongFloat)) = 1).
    self assert:((fix1 + ((1/2) asShortFloat)) = 1).


    self assert:((fix1 + (1/2)) = 1.0).
    self assert:((fix1 + 0.5) = 1.0).
    self assert:((fix1 + (0.5 asFixedPoint:2)) = 1.0).
    self assert:((fix1 + (0.5 asDouble)) = 1.0).
    self assert:((fix1 + (0.5 asFloat)) = 1.0).
    self assert:((fix1 + (0.5 asLongFloat)) = 1.0).
    self assert:((fix1 + (0.5 asShortFloat)) = 1.0).

    self assert:((fix1 + ((1/2) asFixedPoint:2)) = 1.0).
    self assert:((fix1 + ((1/2) asDouble)) = 1.0).
    self assert:((fix1 + ((1/2) asFloat)) = 1.0).
    self assert:((fix1 + ((1/2) asLongFloat)) = 1.0).
    self assert:((fix1 + ((1/2) asShortFloat)) = 1.0).

    self assert:((0.5 + (fix1)) = 1).
    self assert:(((0.5 asFixedPoint:2) + fix1) = 1).
    self assert:((((0.5 asFloat) asDouble) + (fix1)) = 1).

    self assert:((1 + fix1) = (3/2)).
    self assert:((1.0 + fix1) = (3/2)).
    self assert:(((1 asFixedPoint:2) + fix1) = (3/2)).
    self assert:((((1 asFloat) asDouble) + fix1) = (3/2)).
! !

!FractionTest class methodsFor:'documentation'!

version
    ^ '$Header$'
! !