@@ -315,6 +315,15 @@ ColorTypes.comp2(c::RGBA32) = alpha(c)
315
315
@test @inferred (GrayA32 (0.8 ,0.2 )/ 2 ) === GrayA (0.5f0 * N0f8 (0.8 ),0.5f0 * N0f8 (0.2 ))
316
316
@test @inferred (GrayA32 (0.8 ,0.2 )/ 2.0 ) === GrayA (0.4 ,0.1 )
317
317
@test @inferred (GrayA32 (1 , 0.4 ) - GrayA32 (0.2 , 0.2 )) === GrayA32 (0.8 , 0.2 )
318
+
319
+ # Multiplication
320
+ cf = AGray {Float32} (0.8 , 0.2 )
321
+ @test_throws MethodError cf * cf
322
+ @test_throws MethodError cf ⋅ cf
323
+ @test_throws MethodError cf ⊗ cf
324
+ cf64 = mapc (Float64, cf)
325
+ @test @inferred (cf ⊙ cf) === AGray {Float32} (0.8f0 ^ 2 , 0.2f0 ^ 2 )
326
+ @test @inferred (cf ⊙ cf64) === AGray {Float64} (0.8f0 * (0.8f0 * 1.0 ), 0.2f0 * (0.2f0 * 1.0 ))
318
327
end
319
328
320
329
@testset " Arithemtic with RGB" begin
@@ -508,6 +517,15 @@ ColorTypes.comp2(c::RGBA32) = alpha(c)
508
517
@test @inferred (RGBA32 (1 ,0 ,0 ,0.8 )/ 2 ) === RGBA (0.5f0 ,0 ,0 ,0.5f0 * N0f8 (0.8 ))
509
518
@test @inferred (RGBA32 (1 ,0 ,0 ,0.8 )/ 2.0 ) === RGBA (0.5 ,0 ,0 ,0.4 )
510
519
@test @inferred (RGBA32 (1 , 0 , 0 , 0.2 ) + RGBA32 (0 , 0 , 1 , 0.2 )) === RGBA32 (1 , 0 , 1 , 0.4 )
520
+
521
+ # Multiplication
522
+ @test_throws MethodError cf * cf
523
+ @test_throws MethodError cf ⋅ cf
524
+ @test_throws MethodError cf ⊗ cf
525
+ cf64 = mapc (Float64, cf)
526
+ @test @inferred (cf ⊙ cf) === RGBA {Float32} (0.1f0 ^ 2 , 0.2f0 ^ 2 , 0.3f0 ^ 2 , 0.4f0 ^ 2 )
527
+ @test @inferred (cf ⊙ cf64) === RGBA {Float64} (0.1f0 * (0.1f0 * 1.0 ), 0.2f0 * (0.2f0 * 1.0 ),
528
+ 0.3f0 * (0.3f0 * 1.0 ), 0.4f0 * (0.4f0 * 1.0 ))
511
529
end
512
530
513
531
@testset " Mixed-type arithmetic" begin
@@ -524,11 +542,28 @@ ColorTypes.comp2(c::RGBA32) = alpha(c)
524
542
@test ARGB32 (0.4 , 0 , 0.2 , 0.5 ) + Gray24 (0.4 ) === ARGB32 (0.8 , 0.4 , 0.6 , 0.5 N0f8+ 1 N0f8)
525
543
@test ARGB32 (0.4 , 0 , 0.2 , 0.5 ) + AGray32 (0.4 , 0.2 ) === ARGB32 (0.8 , 0.4 , 0.6 , 0.5 N0f8+ 0.2 N0f8)
526
544
527
- g, rgb = Gray (0.2 ), RGB (0.1 , 0.2 , 0.3 )
528
- @test g ⋅ rgb == rgb ⋅ g ≈ 0.2 * (0.1 + 0.2 + 0.3 )/ 3
529
- @test g ⊙ rgb == rgb ⊙ g ≈ RGB (0.2 * 0.1 , 0.2 ^ 2 , 0.2 * 0.3 )
530
- @test g ⊗ rgb == RGB (g) ⊗ rgb
531
- @test rgb ⊗ g == rgb ⊗ RGB (g)
545
+ g, rgb = Gray {Float32} (0.2 ), RGB {Float64} (0.1 , 0.2 , 0.3 )
546
+ ag, argb = AGray {Float64} (0.2 , 0.8 ), ARGB {Float32} (0.1 , 0.2 , 0.3 , 0.4 )
547
+ @test g ⋅ rgb === rgb ⋅ g === 0.2f0 * (0.1 + 0.2 + 0.3 )/ 3
548
+ @test_throws MethodError g ⋅ ag
549
+ @test_throws MethodError g ⋅ argb
550
+ @test_throws MethodError ag ⋅ rgb
551
+ @test_throws MethodError ag ⋅ argb
552
+ @test_throws MethodError rgb ⋅ argb
553
+ @test g ⊙ rgb === rgb ⊙ g === RGB {Float64} (0.2f0 * 0.1 , 0.2f0 * 0.2 , 0.2f0 * 0.3 )
554
+ @test g ⊙ ag === ag ⊙ g === AGray {Float64} (0.2f0 * 0.2 , 1.0f0 * 0.8 )
555
+ @test g ⊙ argb === argb ⊙ g === ARGB {Float32} (0.2f0 * 0.1f0 , 0.2f0 * 0.2f0 , 0.2f0 * 0.3f0 , 1.0f0 * 0.4f0 )
556
+ @test ag ⊙ rgb === rgb ⊙ ag === ARGB {Float64} (0.2 * 0.1 , 0.2 * 0.2 , 0.2 * 0.3 , 0.8 * 1.0 )
557
+ @test ag ⊙ argb === argb ⊙ ag === ARGB {Float64} (0.2 * 0.1f0 , 0.2 * 0.2f0 , 0.2 * 0.3f0 , 0.8 * 0.4f0 )
558
+ @test rgb ⊙ argb === argb ⊙ rgb === ARGB {Float64} (0.1 * 0.1f0 , 0.2 * 0.2f0 , 0.3 * 0.3f0 , 1.0 * 0.4f0 )
559
+ @test g ⊗ rgb === RGB (g) ⊗ rgb
560
+ @test rgb ⊗ g === rgb ⊗ RGB (g)
561
+ @test Matrix (g ⊗ rgb) == Matrix (rgb ⊗ g)'
562
+ @test_throws MethodError g ⊗ ag
563
+ @test_throws MethodError g ⊗ argb
564
+ @test_throws MethodError ag ⊗ rgb
565
+ @test_throws MethodError ag ⊗ argb
566
+ @test_throws MethodError rgb ⊗ argb
532
567
end
533
568
534
569
@testset " Custom RGB arithmetic" begin # see also the `RGBA32` cases above
0 commit comments