RegressionTests__ImageTests.st
author Claus Gittinger <cg@exept.de>
Tue, 25 Feb 2020 17:19:49 +0100
changeset 2586 7dc7be5a6f3d
parent 2565 13ca115a1cee
permissions -rw-r--r--
#OTHER by cg s

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

"{ NameSpace: RegressionTests }"

TestCase subclass:#ImageTests
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'tests-Regression-Graphics-Images'
!

!ImageTests class methodsFor:'documentation'!

documentation
"
    Tests for the image classes in libview, i.e. Image,
    Depth1Image, Depth2Image, etc.

    [author:]
        mawalch

    [instance variables:]

    [class variables:]

    [see also:]

"
! !

!ImageTests methodsFor:'tests'!

test01_PixelValue1
    |img|

    img := Image extent:1@1 depth:24.
    img photometric:#rgb. "/ that is: ignored,r,g,b    
    img createPixelStore.

    self assert:(img bits at:1) == 0.
    self assert:(img bits at:2) == 0.
    self assert:(img bits at:3) == 0.

    img pixelAtX:0 y:0 put:16rFF0000.

    self assert:(img bits at:1) == 16rFF.
    self assert:(img bits at:2) == 0.
    self assert:(img bits at:3) == 0.

    "/ ----------------------------------
    
    img := Image extent:1@1 depth:32.
    img photometric:#rgb. "/ that is: ignored,r,g,b    
    img createPixelStore.

    self assert:(img bits at:1) == 0.
    self assert:(img bits at:2) == 0.
    self assert:(img bits at:3) == 0.
    self assert:(img bits at:4) == 0.

    img pixelAtX:0 y:0 put:16rFF0000.

    self assert:(img bits at:1) == 0.
    self assert:(img bits at:2) == 16rFF.
    self assert:(img bits at:3) == 0.
    self assert:(img bits at:4) == 0.

    "Created: / 22-08-2017 / 18:43:04 / cg"
!

test02_PixelColor
    |img bytes|

    img := Image extent:1@1 depth:24.
    img photometric:#rgb. "/ that is: r,g,b    
    img createPixelStore.
    bytes := img bits.
    
    self assert:(bytes at:1) == 0.
    self assert:(bytes at:2) == 0.
    self assert:(bytes at:3) == 0.

    img colorAtX:0 y:0 put:(Color red).

    self assert:(bytes at:1) == 16rFF.
    self assert:(bytes at:2) == 0.
    self assert:(bytes at:3) == 0.

    "/ ----------------------------------
    
    img := Image extent:1@1 depth:32.
    img photometric:#rgb. "/ that is: r,g,b, ignoredAlpha    
    img createPixelStore.
    bytes := img bits.

    self assert:(bytes at:1) == 0.
    self assert:(bytes at:2) == 0.
    self assert:(bytes at:3) == 0.
    self assert:(bytes at:4) == 0.

    img colorAtX:0 y:0 put:(Color red).

    self assert:(bytes at:1) == 16rFF.  "/ red
    self assert:(bytes at:2) == 0. 
    self assert:(bytes at:3) == 0.
    self assert:(bytes at:4) == 0.      "/ alpha - ignored and 0

    img colorAtX:0 y:0 put:(Color green).

    self assert:(bytes at:1) == 0.     
    self assert:(bytes at:2) == 16rFF.  "/ green
    self assert:(bytes at:3) == 0.
    self assert:(bytes at:4) == 0.      "/ alpha - ignored and 0

    img colorAtX:0 y:0 put:(Color blue).

    self assert:(bytes at:1) == 0.     
    self assert:(bytes at:2) == 0.
    self assert:(bytes at:3) == 16rFF.  "/ blue
    self assert:(bytes at:4) == 0.      "/ alpha - ignored and 0

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

    img := Image extent:1@1 depth:32.
    img photometric:#xrgb. "/ that is: alpha,r,g,b    
    img createPixelStore.
    bytes := img bits.

    self assert:(bytes at:1) == 0.
    self assert:(bytes at:2) == 0.
    self assert:(bytes at:3) == 0.
    self assert:(bytes at:4) == 0.

    img colorAtX:0 y:0 put:(Color red).

    self assert:(bytes at:1) == 0.     "/ alpha - ignored and 0
    self assert:(bytes at:2) == 16rFF. "/ red
    self assert:(bytes at:3) == 0.
    self assert:(bytes at:4) == 0.

    img colorAtX:0 y:0 put:(Color green).

    self assert:(bytes at:1) == 0.     "/ alpha - ignored and 0
    self assert:(bytes at:2) == 0.
    self assert:(bytes at:3) == 16rFF. "/ green
    self assert:(bytes at:4) == 0. 

    img colorAtX:0 y:0 put:(Color blue).

    self assert:(bytes at:1) == 0.     "/ alpha - ignored and 0
    self assert:(bytes at:2) == 0.
    self assert:(bytes at:3) == 0. 
    self assert:(bytes at:4) == 16rFF. "/ blue

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

    img := Image extent:1@1 depth:32.
    img photometric:#rgba.    
    img createPixelStore.
    bytes := img bits.

    img colorAtX:0 y:0 put:(Color red).

    self assert:(bytes at:1) == 16rFF. "/ red
    self assert:(bytes at:2) == 0.     "/ green 
    self assert:(bytes at:3) == 0.     "/ blue 
    self assert:(bytes at:4) == 16rFF. "/ alpha 

    img colorAtX:0 y:0 put:(Color green).

    self assert:(bytes at:1) == 0.     "/ red
    self assert:(bytes at:2) == 16rFF. "/ green 
    self assert:(bytes at:3) == 0.     "/ blue 
    self assert:(bytes at:4) == 16rFF. "/ alpha 

    img colorAtX:0 y:0 put:(Color blue).

    self assert:(bytes at:1) == 0.     "/ red
    self assert:(bytes at:2) == 0.     "/ green 
    self assert:(bytes at:3) == 16rFF. "/ blue 
    self assert:(bytes at:4) == 16rFF. "/ alpha 

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

    img := Image extent:1@1 depth:32.
    img photometric:#argb.    
    img createPixelStore.
    bytes := img bits.

    img colorAtX:0 y:0 put:(Color red).

    self assert:(bytes at:1) == 16rFF. "/ alpha          
    self assert:(bytes at:2) == 16rFF. "/ red 
    self assert:(bytes at:3) == 0.     "/ green  
    self assert:(bytes at:4) == 0.     "/ blue

    img colorAtX:0 y:0 put:(Color green).

    self assert:(bytes at:1) == 16rFF. "/ alpha          
    self assert:(bytes at:2) == 0.     "/ red 
    self assert:(bytes at:3) == 16rFF. "/ green  
    self assert:(bytes at:4) == 0.     "/ blue

    img colorAtX:0 y:0 put:(Color blue).

    self assert:(bytes at:1) == 16rFF. "/ alpha          
    self assert:(bytes at:2) == 0.     "/ red 
    self assert:(bytes at:3) == 0.     "/ green  
    self assert:(bytes at:4) == 16rFF. "/ blue

    "Created: / 22-08-2017 / 18:46:14 / cg"
    "Modified: / 22-07-2019 / 14:05:29 / Claus Gittinger"
!

test09_FillRectangle
    |depths colors rectangle|

    depths := { 16 . 24 . 32 }.
    colors := {
            Color red.
            Color green.
            Color blue.
            Color white.
            Color black
        }.
        
    rectangle := Rectangle left:0 top:0 width:1 height:1.
            
    depths do:[:depth | 
        |img|

        img := Image extent:1 @ 1 depth:depth.
        img createPixelStore.
        colors do:[:color | 
            |colorRetrieved|
            
            img fillRectangle:rectangle withColor:color.
            colorRetrieved := img colorAt: 0@0.
            self assert:(colorRetrieved = color) 
                 message:('depth:%1; expected:%2 / got:%3' 
                            bindWith:depth
                            with:color hexPrintString 
                            with:colorRetrieved hexPrintString).
        ].
    ].

    "Created: / 22-08-2017 / 18:45:44 / cg"
    "Modified: / 22-07-2019 / 14:09:14 / Claus Gittinger"
!

test10_FillRectangle_palette
    |img depths colors rectangle|

    depths := { 2 . 4 . 8 }.
    colors := {
            Color red.
            Color green.
            Color blue.
            Color white.
        }.
        
    rectangle := Rectangle left:0 top:0 width:1 height:1.
            
    depths do:[:depth | 
        img := Image extent:1 @ 1 depth:depth.
        img photometric:#palette.
        img colorMap:colors.
        
        img createPixelStore.
        colors do:[:color | 
            img fillRectangle:rectangle withColor:color.
            self assert:((img colorAt:0 @ 0) = color).
        ].
    ].

    colors := {
            Color red.
            Color green.
        }.

    img := Image extent:1 @ 1 depth:1.
    img photometric:#palette.
    img colorMap:colors.

    img createPixelStore.
    colors do:[:color | 
        img fillRectangle:rectangle withColor:color.
        self assert:((img colorAt:0 @ 0) = color).
    ].

    "Created: / 22-08-2017 / 18:57:19 / cg"
! !

!ImageTests methodsFor:'tests - converting'!

test49_24bit
    |img24|

    img24 := Depth24Image
                 width:4
                 height:4
                 fromArray:#[
                        16rFF 16r00 16r00   16rFF 16r00 16r00   16rFF 16r00 16r00   16rFF 16r00 16r00 
                        16r00 16rFF 16r00   16r00 16rFF 16r00   16r00 16rFF 16r00   16r00 16rFF 16r00 
                        16r00 16r00 16rFF   16r00 16r00 16rFF   16r00 16r00 16rFF   16r00 16r00 16rFF 
                        16rFF 16rFF 16rFF   16rFF 16rFF 16rFF   16rFF 16rFF 16rFF   16rFF 16rFF 16rFF 
                            ].
    img24 photometric:#rgb.
    img24 samplesPerPixel:3.
    img24 bitsPerSample:#(8 8 8).

    self assert:(img24 pixelAtX:0 y:0) = 16rFF0000.
    self assert:(img24 colorAtX:0 y:0) = Color red.

    "Created: / 12-07-2019 / 14:34:50 / Stefan Reise"
!

test49_32bit
    |img32|

    img32 := Depth32Image
                 width:4
                 height:4
                 fromArray:#[
                        16rFF 16r00 16r00 16r00  16rFF 16r00 16r00 16r00  16rFF 16r00 16r00 16r00  16rFF 16r00 16r00 16r00
                        16r00 16rFF 16r00 16r00  16r00 16rFF 16r00 16r00  16r00 16rFF 16r00 16r00  16r00 16rFF 16r00 16r00
                        16r00 16r00 16rFF 16r00  16r00 16r00 16rFF 16r00  16r00 16r00 16rFF 16r00  16r00 16r00 16rFF 16r00
                        16rFF 16rFF 16rFF 16r00  16rFF 16rFF 16rFF 16r00  16rFF 16rFF 16rFF 16r00  16rFF 16rFF 16rFF 16r00
                            ].
    img32 photometric:#rgb.
    img32 samplesPerPixel:4.
    img32 bitsPerSample:#(8 8 8 8).

    self assert:(img32 pixelAtX:0 y:0) = 16rFF000000.
    self assert:(img32 colorAtX:0 y:0) = Color red.

    "Created: / 12-07-2019 / 14:35:43 / Stefan Reise"
!

test50_32_to_24
    |img32 img24|

    img32 := Depth32Image
                 width:4
                 height:4
                 fromArray:#[
                        16rFF 16r00 16r00 16r00  16rFF 16r00 16r00 16r00  16rFF 16r00 16r00 16r00  16rFF 16r00 16r00 16r00
                        16r00 16rFF 16r00 16r00  16r00 16rFF 16r00 16r00  16r00 16rFF 16r00 16r00  16r00 16rFF 16r00 16r00
                        16r00 16r00 16rFF 16r00  16r00 16r00 16rFF 16r00  16r00 16r00 16rFF 16r00  16r00 16r00 16rFF 16r00
                        16rFF 16rFF 16rFF 16r00  16rFF 16rFF 16rFF 16r00  16rFF 16rFF 16rFF 16r00  16rFF 16rFF 16rFF 16r00
                            ].
    img32 photometric:#rgb.
    img32 samplesPerPixel:4.
    img32 bitsPerSample:#(8 8 8 8).

    self assert:(img32 pixelAtX:0 y:0) = 16rFF000000.
    self assert:(img32 colorAtX:0 y:0) = Color red.

    self assert:(img32 pixelAtX:0 y:1) = 16r00FF0000.
    self assert:(img32 colorAtX:0 y:1) = Color green.

    img24 := img32 asImageWithDepth:24.
    self assert:(img24 pixelAtX:0 y:0) = 16r00FF0000.
    self assert:(img24 colorAtX:0 y:0) = Color red.

    self assert:(img24 pixelAtX:0 y:1) = 16r0000FF00.
    self assert:(img24 colorAtX:0 y:1) = Color green.

    "Created: / 12-07-2019 / 14:32:48 / Stefan Reise"
    "Modified (format): / 22-07-2019 / 14:10:04 / Claus Gittinger"
! !

!ImageTests class methodsFor:'documentation'!

version
    ^ '$Header$'
!

version_CVS
    ^ '$Header$'
! !