RegressionTests__NumberTest.st
author Claus Gittinger <cg@exept.de>
Fri, 17 Feb 2006 16:23:37 +0100
changeset 315 dca04b42fcf3
parent 311 097badcf10ec
child 327 05cf0c282e59
permissions -rw-r--r--
read checks

"{ Package: 'exept:regression' }"

"{ NameSpace: RegressionTests }"

TestCase subclass:#NumberTest
	instanceVariableNames:'a b'
	classVariableNames:''
	poolDictionaries:''
	category:'tests-Regression'
!


!NumberTest methodsFor:'accessing'!

a
    ^ a
!

a:something
    a := something.
!

b
    ^ b
!

b:something
    b := something.
! !

!NumberTest methodsFor:'tests-concrete bugs'!

test_eqNumberBug
    "reported 09-09-2004;
     stc generated wrong code for some inlined = - compare (shame)."

    Class withoutUpdatingChangesDo:[
        self class 
            compile:
'testEQ
    a = b ifTrue:[^ false].
    ^ true.
'
            classified:'temporary'.
    ].

    self assert: (
       (self
           a:0;
           b:0) testEQ ) == false.

    self assert: (
       (self
           a:0;
           b:0.0) testEQ ) == false.

    self assert: (
       (self
           a:0.0;
           b:0) testEQ ) == false.

    self assert: (
       (self
           a:0.0;
           b:0.0) testEQ ) == false.

    Class withoutUpdatingChangesDo:[
        Compiler
            stcCompileMethod:(self class compiledMethodAt:#testEQ).
    ].

    self assert: (
       (self
           a:0;
           b:0) testEQ ) == false.

    self assert: (
       (self
           a:0;
           b:0.0) testEQ ) == false.

    self assert: (
       (self
           a:0.0;
           b:0) testEQ ) == false.

    self assert: (
       (self
           a:0.0;
           b:0.0) testEQ ) == false.

    Class withoutUpdatingChangesDo:[
        self class removeSelector:#testEQ
    ].

    "
     self new test_eqNumberBug
    "
! !

!NumberTest methodsFor:'tests-reading'!

testReadFrom
    self assert: 1.0e-14    = (Number readFrom: '1.0e-14').

    self assert: ('1' asNumber = 1).
    self assert: ('10' asNumber = 10).

    self assert: ('-1' asNumber = -1).
    self assert: ('-10' asNumber = -10).

    self assert: ('1e' asNumber = 1).
    self assert: ('1e1' asNumber = 10).
    self assert: ('1e10' asNumber = 10000000000).

    self assert: ('-1e' asNumber = -1).
    self assert: ('-1e1' asNumber = -10).
    self assert: ('-1e10' asNumber = -10000000000).

    self assert: ('1.0e' asNumber = 1.0).
    self assert: ('1.0e1' asNumber = 10.0).
    self assert: ('1.0e10' asNumber = 10000000000.0).

    self assert: ('-1.0e' asNumber = -1.0).
    self assert: ('-1.0e1' asNumber = -10.0).
    self assert: ('-1.0e10' asNumber = -10000000000.0).

    self assert: ('22.2' asNumber = 22.2).
    self assert: ('-22.2' asNumber = -22.2).

    Smalltalk isSmalltalkX ifTrue:[
        "/ st/x requires this:

        self assert: ((Number readSmalltalkSyntaxFrom:'10r22.2') = 22.2).
        self assert: ((Number readSmalltalkSyntaxFrom:'10r22.2s5') = 22.2).

        self assert: ((Number readSmalltalkSyntaxFrom:'10r-22.2') = -22.2).
        self assert: ((Number readSmalltalkSyntaxFrom:'10r-22.2s5') = -22.2).

        self assert: 2r1e26     = (Number readSmalltalkSyntaxFrom: '2r1e26').
    ] ifFalse:[
        "/ squeak allows this:
        self assert: 2r1e26     = (Number readFrom: '2r1e26').

        self assert: ('10r22.2' asNumber = 22.2).
        self assert: ('10r22.2s5' asNumber = 22.2).

        self assert: ('10r-22.2' asNumber = -22.2).
        self assert: ('10r-22.2s5' asNumber = -22.2).
    ].
! !

!NumberTest class methodsFor:'documentation'!

version
    ^ '$Header$'
! !