RegressionTests__TypedArrayTests.st
author Claus Gittinger <cg@exept.de>
Tue, 09 Jul 2019 18:53:03 +0200
changeset 2327 bf482d49aeaf
parent 2273 10561d004455
permissions -rw-r--r--
#QUALITY by exept class: RegressionTests::StringTests added: #test82c_expanding

"{ Encoding: utf8 }"

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

"{ NameSpace: RegressionTests }"

TestCase subclass:#TypedArrayTests
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'tests-Regression-Collections'
!


!TypedArrayTests class methodsFor:'queries'!

coveredClassNames
    ^ #( FloatArray )
! !

!TypedArrayTests methodsFor:'tests'!

test01a_createFloatArray
    |a|

    a := FloatArray new:3.

    self assert:(a size == 3).
    self assert:(a byteSize == (3 * 4)).

    a at:1 put:1.
    a at:2 put:2.
    a at:3 put:3.

    self assert:(a at:1) = 1.0.
    self assert:(a at:2) = 2.0.
    self assert:(a at:3) = 3.0.

    "Created: / 06-06-2019 / 12:32:04 / Claus Gittinger"
!

test01b_createDoubleArray
    |a|

    a := DoubleArray new:3.

    self assert:(a size == 3).
    self assert:(a byteSize == (3 * 8)).

    a at:1 put:1.
    a at:2 put:2.
    a at:3 put:3.

    self assert:(a at:1) = 1.0.
    self assert:(a at:2) = 2.0.
    self assert:(a at:3) = 3.0.

    "Created: / 06-06-2019 / 12:32:23 / Claus Gittinger"
!

test01c_createByteArray
    |a|

    a := ByteArray new:3.

    self assert:(a size == 3).
    self assert:(a byteSize == (3 * 1)).

    a at:1 put:1.
    a at:2 put:2.
    a at:3 put:3.

    self assert:(a at:1) = 1.
    self assert:(a at:2) = 2.
    self assert:(a at:3) = 3.

    "Created: / 06-06-2019 / 12:33:08 / Claus Gittinger"
!

test01d_createSignedByteArray
    |a|

    a := SignedByteArray new:3.

    self assert:(a size == 3).
    self assert:(a byteSize == (3 * 1)).

    a at:1 put:1.
    a at:2 put:-2.
    a at:3 put:3.

    self assert:(a at:1) = 1.
    self assert:(a at:2) = -2.
    self assert:(a at:3) = 3.

    "Created: / 06-06-2019 / 12:33:30 / Claus Gittinger"
!

test01e_createWordArray
    |a|

    a := WordArray new:3.

    self assert:(a size == 3).
    self assert:(a byteSize == (3 * 2)).

    a at:1 put:1.
    a at:2 put:2.
    a at:3 put:3.

    self assert:(a at:1) = 1.
    self assert:(a at:2) = 2.
    self assert:(a at:3) = 3.

    "Created: / 06-06-2019 / 12:33:50 / Claus Gittinger"
!

test01f_createSignedWordArray
    |a|

    a := SignedWordArray new:3.

    self assert:(a size == 3).
    self assert:(a byteSize == (3 * 2)).

    a at:1 put:1.
    a at:2 put:-2.
    a at:3 put:3.

    self assert:(a at:1) = 1.
    self assert:(a at:2) = -2.
    self assert:(a at:3) = 3.

    "Created: / 06-06-2019 / 12:34:19 / Claus Gittinger"
!

test01g_createIntegerArray
    |a|

    a := IntegerArray new:3.

    self assert:(a size == 3).
    self assert:(a byteSize == (3 * 4)).

    a at:1 put:1.
    a at:2 put:2.
    a at:3 put:3.

    self assert:(a at:1) = 1.
    self assert:(a at:2) = 2.
    self assert:(a at:3) = 3.

    "Created: / 06-06-2019 / 12:34:40 / Claus Gittinger"
!

test01h_createSignedIntegerArray
    |a|

    a := SignedIntegerArray new:3.

    self assert:(a size == 3).
    self assert:(a byteSize == (3 * 4)).

    a at:1 put:1.
    a at:2 put:-2.
    a at:3 put:3.

    self assert:(a at:1) = 1.
    self assert:(a at:2) = -2.
    self assert:(a at:3) = 3.

    "Created: / 06-06-2019 / 12:34:52 / Claus Gittinger"
!

test01i_createLongIntegerArray
    |a|

    a := LongIntegerArray new:3.

    self assert:(a size == 3).
    self assert:(a byteSize == (3 * 8)).

    a at:1 put:1.
    a at:2 put:2.
    a at:3 put:3.

    self assert:(a at:1) = 1.
    self assert:(a at:2) = 2.
    self assert:(a at:3) = 3.

    "Created: / 06-06-2019 / 12:35:07 / Claus Gittinger"
!

test01j_createSignedLongIntegerArray
    |a|

    a := SignedLongIntegerArray new:3.

    self assert:(a size == 3).
    self assert:(a byteSize == (3 * 8)).

    a at:1 put:1.
    a at:2 put:-2.
    a at:3 put:3.

    self assert:(a at:1) = 1.
    self assert:(a at:2) = -2.
    self assert:(a at:3) = 3.

    "Created: / 06-06-2019 / 12:35:19 / Claus Gittinger"
!

test01k_createHalfFloatArray
    |a|

    a := HalfFloatArray new:3.

    self assert:(a size == 3).
    self assert:(a byteSize == (3 * 2)).

    a at:1 put:1.
    a at:2 put:2.
    a at:3 put:3.

    self assert:(a at:1) = 1.0.
    self assert:(a at:2) = 2.0.
    self assert:(a at:3) = 3.0.

    "Created: / 06-06-2019 / 12:36:45 / Claus Gittinger"
!

test02_copyArrays
    |src copy|

"/ -------------------------------------

    src := FloatArray new:5.
    self assert:(src size == 5).

    src at:1 put:1.
    src at:2 put:2.
    src at:3 put:3.

    self assert:(src at:1) = 1.0.
    self assert:(src at:2) = 2.0.
    self assert:(src at:3) = 3.0.

    copy := src copyFrom:1 to:3.
    
    self assert:(copy species == src species).
    self assert:(copy size == 3).
    self assert:(copy at:1) = 1.0.
    self assert:(copy at:2) = 2.0.
    self assert:(copy at:3) = 3.0.

"/ -------------------------------------

    src := DoubleArray new:9.
    self assert:(src size == 9).

    src at:1 put:1.
    src at:2 put:2.
    src at:3 put:3.

    self assert:(src at:1) = 1.0.
    self assert:(src at:2) = 2.0.
    self assert:(src at:3) = 3.0.

    copy := src copyFrom:1 to:3.

    self assert:(copy species == src species).
    self assert:(copy size == 3).
    self assert:(copy at:1) = 1.0.
    self assert:(copy at:2) = 2.0.
    self assert:(copy at:3) = 3.0.

"/ -------------------------------------

    src := HalfFloatArray new:9.
    self assert:(src size == 9).

    src at:1 put:1.
    src at:2 put:2.
    src at:3 put:3.

    self assert:(src at:1) = 1.0.
    self assert:(src at:2) = 2.0.
    self assert:(src at:3) = 3.0.

    copy := src copyFrom:1 to:3.

    self assert:(copy species == src species).
    self assert:(copy size == 3).
    self assert:(copy at:1) = 1.0.
    self assert:(copy at:2) = 2.0.
    self assert:(copy at:3) = 3.0.

"/ -------------------------------------

    src := ByteArray new:9.
    self assert:(src size == 9).

    src at:1 put:1.
    src at:2 put:2.
    src at:3 put:3.

    self assert:(src at:1) = 1.
    self assert:(src at:2) = 2.
    self assert:(src at:3) = 3.

    copy := src copyFrom:1 to:3.

    self assert:(copy species == src species).
    self assert:(copy size == 3).
    self assert:(copy at:1) = 1.
    self assert:(copy at:2) = 2.
    self assert:(copy at:3) = 3.

"/ -------------------------------------

    src := SignedByteArray new:9.
    self assert:(src size == 9).

    src at:1 put:1.
    src at:2 put:-2.
    src at:3 put:3.

    self assert:(src at:1) = 1.
    self assert:(src at:2) = -2.
    self assert:(src at:3) = 3.

    copy := src copyFrom:1 to:3.

    self assert:(copy species == src species).
    self assert:(copy size == 3).
    self assert:(copy at:1) = 1.
    self assert:(copy at:2) = -2.
    self assert:(copy at:3) = 3.

"/ -------------------------------------

    src := WordArray new:9.
    self assert:(src size == 9).

    src at:1 put:1.
    src at:2 put:2.
    src at:3 put:3.

    self assert:(src at:1) = 1.
    self assert:(src at:2) = 2.
    self assert:(src at:3) = 3.

    copy := src copyFrom:1 to:3.

    self assert:(copy species == src species).
    self assert:(copy size == 3).
    self assert:(copy at:1) = 1.
    self assert:(copy at:2) = 2.
    self assert:(copy at:3) = 3.

"/ -------------------------------------

    src := SignedWordArray new:9.
    self assert:(src size == 9).

    src at:1 put:1.
    src at:2 put:-2.
    src at:3 put:3.

    self assert:(src at:1) = 1.
    self assert:(src at:2) = -2.
    self assert:(src at:3) = 3.

    copy := src copyFrom:1 to:3.

    self assert:(copy species == src species).
    self assert:(copy size == 3).
    self assert:(copy at:1) = 1.
    self assert:(copy at:2) = -2.
    self assert:(copy at:3) = 3.

"/ -------------------------------------

    src := IntegerArray new:9.
    self assert:(src size == 9).

    src at:1 put:1.
    src at:2 put:2.
    src at:3 put:3.

    self assert:(src at:1) = 1.
    self assert:(src at:2) = 2.
    self assert:(src at:3) = 3.

    copy := src copyFrom:1 to:3.

    self assert:(copy species == src species).
    self assert:(copy size == 3).
    self assert:(copy at:1) = 1.
    self assert:(copy at:2) = 2.
    self assert:(copy at:3) = 3.

"/ -------------------------------------

    src := SignedIntegerArray new:9.
    self assert:(src size == 9).

    src at:1 put:1.
    src at:2 put:-2.
    src at:3 put:3.

    self assert:(src at:1) = 1.
    self assert:(src at:2) = -2.
    self assert:(src at:3) = 3.

    copy := src copyFrom:1 to:3.

    self assert:(copy species == src species).
    self assert:(copy size == 3).
    self assert:(copy at:1) = 1.
    self assert:(copy at:2) = -2.
    self assert:(copy at:3) = 3.

"/ -------------------------------------

    src := LongIntegerArray new:9.
    self assert:(src size == 9).

    src at:1 put:1.
    src at:2 put:2.
    src at:3 put:3.

    self assert:(src at:1) = 1.
    self assert:(src at:2) = 2.
    self assert:(src at:3) = 3.

    copy := src copyFrom:1 to:3.

    self assert:(copy species == src species).
    self assert:(copy size == 3).
    self assert:(copy at:1) = 1.
    self assert:(copy at:2) = 2.
    self assert:(copy at:3) = 3.

"/ -------------------------------------

    src := SignedLongIntegerArray new:9.
    self assert:(src size == 9).

    src at:1 put:1.
    src at:2 put:-2.
    src at:3 put:3.

    self assert:(src at:1) = 1.
    self assert:(src at:2) = -2.
    self assert:(src at:3) = 3.

    copy := src copyFrom:1 to:3.

    self assert:(copy species == src species).
    self assert:(copy size == 3).
    self assert:(copy at:1) = 1.
    self assert:(copy at:2) = -2.
    self assert:(copy at:3) = 3.

    "Modified: / 06-06-2019 / 12:38:41 / Claus Gittinger"
!

test03_byteAt
    |a flt1 flt2 flt3|

"/ -------------------------------------

    a := FloatArray new:3.

    a at:1 put:1.
    a at:2 put:2.
    a at:3 put:99.

    flt1 := 1 asShortFloat.
    flt2 := 2 asShortFloat.
    flt3 := 3 asShortFloat.

    self assert:(a byteAt:1) = (flt1 byteAt:1).
    self assert:(a byteAt:2) = (flt1 byteAt:2).
    self assert:(a byteAt:3) = (flt1 byteAt:3).
    self assert:(a byteAt:4) = (flt1 byteAt:4).

    self assert:(a byteAt:5) = (flt2 byteAt:1).
    self assert:(a byteAt:6) = (flt2 byteAt:2).
    self assert:(a byteAt:7) = (flt2 byteAt:3).
    self assert:(a byteAt:8) = (flt2 byteAt:4).

    a byteAt:5 put:(flt3 byteAt:1).
    a byteAt:6 put:(flt3 byteAt:2).
    a byteAt:7 put:(flt3 byteAt:3).
    a byteAt:8 put:(flt3 byteAt:4).

    self assert:(a at:1) = flt1.
    self assert:(a at:2) = flt3.
    self assert:(a at:3) = 99.

"/ -------------------------------------

    a := DoubleArray new:3.

    a at:1 put:1.
    a at:2 put:2.
    a at:3 put:99.

    flt1 := 1 asFloat.
    flt2 := 2 asFloat.
    flt3 := 3 asFloat.

    self assert:(a byteAt:1) = (flt1 byteAt:1).
    self assert:(a byteAt:2) = (flt1 byteAt:2).
    self assert:(a byteAt:3) = (flt1 byteAt:3).
    self assert:(a byteAt:4) = (flt1 byteAt:4).
    self assert:(a byteAt:5) = (flt1 byteAt:5).
    self assert:(a byteAt:6) = (flt1 byteAt:6).
    self assert:(a byteAt:7) = (flt1 byteAt:7).
    self assert:(a byteAt:8) = (flt1 byteAt:8).

    self assert:(a byteAt:9)  = (flt2 byteAt:1).
    self assert:(a byteAt:10) = (flt2 byteAt:2).
    self assert:(a byteAt:11) = (flt2 byteAt:3).
    self assert:(a byteAt:12) = (flt2 byteAt:4).
    self assert:(a byteAt:13) = (flt2 byteAt:5).
    self assert:(a byteAt:14) = (flt2 byteAt:6).
    self assert:(a byteAt:15) = (flt2 byteAt:7).
    self assert:(a byteAt:16) = (flt2 byteAt:8).

    a byteAt:9  put:(flt3 byteAt:1).
    a byteAt:10 put:(flt3 byteAt:2).
    a byteAt:11 put:(flt3 byteAt:3).
    a byteAt:12 put:(flt3 byteAt:4).
    a byteAt:13 put:(flt3 byteAt:5).
    a byteAt:14 put:(flt3 byteAt:6).
    a byteAt:15 put:(flt3 byteAt:7).
    a byteAt:16 put:(flt3 byteAt:8).

    self assert:(a at:1) = flt1.
    self assert:(a at:2) = flt3.
    self assert:(a at:3) = 99.

"/ -------------------------------------

    a := IntegerArray new:3.

    a at:1 put:1.
    a at:2 put:2.
    a at:3 put:99.

    "/ this depends on the machine's byte order!!
    UninterpretedBytes isBigEndian ifTrue:[
        self assert:(a byteAt:1) = 0.
        self assert:(a byteAt:2) = 0.
        self assert:(a byteAt:3) = 0.
        self assert:(a byteAt:4) = 1.

        self assert:(a byteAt:5) = 0.
        self assert:(a byteAt:6) = 0.
        self assert:(a byteAt:7) = 0.
        self assert:(a byteAt:8) = 2.

        a byteAt:5 put:(flt3 byteAt:1).
        a byteAt:6 put:(flt3 byteAt:2).
        a byteAt:7 put:(flt3 byteAt:3).
        a byteAt:8 put:(flt3 byteAt:4).

        a byteAt:8 put:3.
    ] ifFalse:[
        self assert:(a byteAt:1) = 1.
        self assert:(a byteAt:2) = 0.
        self assert:(a byteAt:3) = 0.
        self assert:(a byteAt:4) = 0.

        self assert:(a byteAt:5) = 2.
        self assert:(a byteAt:6) = 0.
        self assert:(a byteAt:7) = 0.
        self assert:(a byteAt:8) = 0.

        a byteAt:5 put:3.
    ].

    self assert:(a at:1) = 1.
    self assert:(a at:2) = 3.
    self assert:(a at:3) = 99.

"/ -------------------------------------

    a := LongIntegerArray new:3.

    a at:1 put:1.
    a at:2 put:2.
    a at:3 put:99.

    "/ this depends on the machine's byte order!!
    UninterpretedBytes isBigEndian ifTrue:[
        self assert:(a byteAt:1) = 0.
        self assert:(a byteAt:2) = 0.
        self assert:(a byteAt:3) = 0.
        self assert:(a byteAt:4) = 0.
        self assert:(a byteAt:5) = 0.
        self assert:(a byteAt:6) = 0.
        self assert:(a byteAt:7) = 0.
        self assert:(a byteAt:8) = 1.

        self assert:(a byteAt:8+1) = 0.
        self assert:(a byteAt:8+2) = 0.
        self assert:(a byteAt:8+3) = 0.
        self assert:(a byteAt:8+4) = 0.
        self assert:(a byteAt:8+5) = 0.
        self assert:(a byteAt:8+6) = 0.
        self assert:(a byteAt:8+7) = 0.
        self assert:(a byteAt:8+8) = 2.

        a byteAt:8+8 put:3.
    ] ifFalse:[
        self assert:(a byteAt:1) = 1.
        self assert:(a byteAt:2) = 0.
        self assert:(a byteAt:3) = 0.
        self assert:(a byteAt:4) = 0.
        self assert:(a byteAt:5) = 0.
        self assert:(a byteAt:6) = 0.
        self assert:(a byteAt:7) = 0.
        self assert:(a byteAt:8) = 0.

        self assert:(a byteAt:8+1) = 2.
        self assert:(a byteAt:8+2) = 0.
        self assert:(a byteAt:8+3) = 0.
        self assert:(a byteAt:8+4) = 0.
        self assert:(a byteAt:8+5) = 0.
        self assert:(a byteAt:8+6) = 0.
        self assert:(a byteAt:8+7) = 0.
        self assert:(a byteAt:8+8) = 0.

        a byteAt:8+1 put:3.
    ].

    self assert:(a at:1) = 1.
    self assert:(a at:2) = 3.
    self assert:(a at:3) = 99.

"/ -------------------------------------

    a := SignedLongIntegerArray new:3.

    a at:1 put:1.
    a at:2 put:-2.
    a at:3 put:99.

    "/ this depends on the machine's byte order!!
    UninterpretedBytes isBigEndian ifTrue:[
        self assert:(a byteAt:1) = 0.
        self assert:(a byteAt:2) = 0.
        self assert:(a byteAt:3) = 0.
        self assert:(a byteAt:4) = 0.
        self assert:(a byteAt:5) = 0.
        self assert:(a byteAt:6) = 0.
        self assert:(a byteAt:7) = 0.
        self assert:(a byteAt:8) = 1.

        self assert:(a byteAt:8+1) = 16rFF.
        self assert:(a byteAt:8+2) = 16rFF.
        self assert:(a byteAt:8+3) = 16rFF.
        self assert:(a byteAt:8+4) = 16rFF.
        self assert:(a byteAt:8+5) = 16rFF.
        self assert:(a byteAt:8+6) = 16rFF.
        self assert:(a byteAt:8+7) = 16rFF.
        self assert:(a byteAt:8+8) = 16rFE.

        a byteAt:8+8 put:16rFD.
    ] ifFalse:[
        self assert:(a byteAt:1) = 1.
        self assert:(a byteAt:2) = 0.
        self assert:(a byteAt:3) = 0.
        self assert:(a byteAt:4) = 0.
        self assert:(a byteAt:5) = 0.
        self assert:(a byteAt:6) = 0.
        self assert:(a byteAt:7) = 0.
        self assert:(a byteAt:8) = 0.

        self assert:(a byteAt:8+1) = 16rFE.
        self assert:(a byteAt:8+2) = 16rFF.
        self assert:(a byteAt:8+3) = 16rFF.
        self assert:(a byteAt:8+4) = 16rFF.
        self assert:(a byteAt:8+5) = 16rFF.
        self assert:(a byteAt:8+6) = 16rFF.
        self assert:(a byteAt:8+7) = 16rFF.
        self assert:(a byteAt:8+8) = 16rFF.

        a byteAt:8+1 put:16rFD.
    ].

    self assert:(a at:1) = 1.
    self assert:(a at:2) = -3.
    self assert:(a at:3) = 99.

"/ -------------------------------------
"/ -------------------------------------

    "Modified: / 26-08-2016 / 13:27:57 / cg"
!

test04a_halfFloatArray
    |a|

"/ -------------------------------------

    a := HalfFloatArray new:1.

    a at:1 put:(1/3) asFloat.

    "/ halfFloats have only rougly 3.5 digits precision
    self assert:((a at:1) closeTo:0.3333333333 withEpsilon:0.001).
    self assert:((a at:1) - 0.333333333333333) <= (HalfFloatArray epsilon * 2).

    "Created: / 06-06-2019 / 13:09:08 / Claus Gittinger"
    "Modified: / 06-06-2019 / 16:53:53 / Claus Gittinger"
!

test04b_floatArray
    |a|

"/ -------------------------------------

    a := FloatArray new:1.

    a at:1 put:(1/3) asFloat.

    "/ floats have only rougly 6 digits precision
    self assert:((a at:1) closeTo:0.3333333333 withEpsilon:0.0000001).
    self assert:((a at:1) - 0.333333333333333) <= (ShortFloat epsilon * 2).

    "Created: / 06-06-2019 / 13:09:33 / Claus Gittinger"
!

test04c_doubleArray
    |a|

"/ -------------------------------------

    a := DoubleArray new:1.

    a at:1 put:(1/3) asFloat.

    self assert:((a at:1) closeTo:0.333333333333333).
    self assert:((a at:1) - 0.333333333333333) < 1E-15.
    self assert:((a at:1) - 0.333333333333333) <= (Float epsilon * 2).

    "Created: / 06-06-2019 / 13:10:09 / Claus Gittinger"
! !

!TypedArrayTests class methodsFor:'documentation'!

version
    ^ '$Header$'
!

version_CVS
    ^ '$Header$'
! !