From ca40c93d1cc219db2f0b19eda8782a604e434592 Mon Sep 17 00:00:00 2001 From: nick black Date: Sun, 29 Dec 2019 17:54:56 -0500 Subject: [PATCH] properly weigh colors for blending #234 --- tests/channel.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/tests/channel.cpp b/tests/channel.cpp index c18290dcb..95fb8af25 100644 --- a/tests/channel.cpp +++ b/tests/channel.cpp @@ -67,13 +67,14 @@ TEST_CASE("ChannelSetDefault") { } } -// blend of 0 ought perfectly set +// blend of 0 ought set c1 to c2 TEST_CASE("ChannelBlend0") { uint32_t c1 = 0; uint32_t c2 = 0; channel_set_rgb(&c1, 0x80, 0x40, 0x20); channel_set_rgb(&c2, 0x88, 0x44, 0x22); uint32_t c = channels_blend(c1, c2, 0); + CHECK(!channel_default_p(c)); unsigned r, g, b; channel_get_rgb(c, &r, &g, &b); CHECK(0x88 == r); @@ -81,13 +82,14 @@ TEST_CASE("ChannelBlend0") { CHECK(0x22 == b); } -// blend of 1 ought perfectly average +// blend of 1 ought perfectly average c1 and c2 TEST_CASE("ChannelBlend1") { uint32_t c1 = 0; uint32_t c2 = 0; channel_set_rgb(&c1, 0x80, 0x40, 0x20); channel_set_rgb(&c2, 0x0, 0x0, 0x0); uint32_t c = channels_blend(c1, c2, 1); + CHECK(!channel_default_p(c)); unsigned r, g, b; channel_get_rgb(c, &r, &g, &b); CHECK(0x40 == r); @@ -95,6 +97,21 @@ TEST_CASE("ChannelBlend1") { CHECK(0x10 == b); } +// blend of 2 ought weigh c1 twice as much as c2 +TEST_CASE("ChannelBlend2") { + uint32_t c1 = 0; + uint32_t c2 = 0; + channel_set_rgb(&c1, 0x60, 0x30, 0x0f); + channel_set_rgb(&c2, 0x0, 0x0, 0x0); + uint32_t c = channels_blend(c1, c2, 2); + CHECK(!channel_default_p(c)); + unsigned r, g, b; + channel_get_rgb(c, &r, &g, &b); + CHECK(0x40 == r); + CHECK(0x20 == g); + CHECK(0x0a == b); +} + // you can't blend into a default color, at any number of blends TEST_CASE("ChannelBlendDefaultLeft") { uint32_t c1 = 0;