File test_colors.cpp
File List > isom > tests > test_colors.cpp
Go to the documentation of this file
#include <gtest/gtest.h>
#include "isom/colors.hpp"
// =============================================================================
// RGBColor tests
// =============================================================================
TEST(RGBColor, Construction) {
RGBColor c(128, 64, 32);
EXPECT_EQ(c.getRed(), 128);
EXPECT_EQ(c.getGreen(), 64);
EXPECT_EQ(c.getBlue(), 32);
EXPECT_EQ(c.getAlpha(), 255); // Default alpha
}
TEST(RGBColor, ConstructionWithAlpha) {
RGBColor c(128, 64, 32, 100);
EXPECT_EQ(c.getRed(), 128);
EXPECT_EQ(c.getGreen(), 64);
EXPECT_EQ(c.getBlue(), 32);
EXPECT_EQ(c.getAlpha(), 100);
}
TEST(RGBColor, DefaultConstruction) {
RGBColor c;
EXPECT_EQ(c.getRed(), 0);
EXPECT_EQ(c.getGreen(), 0);
EXPECT_EQ(c.getBlue(), 0);
EXPECT_EQ(c.getAlpha(), 0);
}
TEST(RGBColor, IndexOperator) {
RGBColor c(10, 20, 30, 40);
EXPECT_EQ(c[0], 10);
EXPECT_EQ(c[1], 20);
EXPECT_EQ(c[2], 30);
EXPECT_EQ(c[3], 40);
}
// =============================================================================
// CMYKColor tests
// =============================================================================
TEST(CMYKColor, Construction) {
CMYKColor c(50, 30, 20, 10);
EXPECT_EQ(c.getCyan(), 50);
EXPECT_EQ(c.getMagenta(), 30);
EXPECT_EQ(c.getYellow(), 20);
EXPECT_EQ(c.getBlack(), 10);
}
TEST(CMYKColor, DefaultConstruction) {
CMYKColor c;
EXPECT_EQ(c.getCyan(), 0);
EXPECT_EQ(c.getMagenta(), 0);
EXPECT_EQ(c.getYellow(), 0);
EXPECT_EQ(c.getBlack(), 0);
}
TEST(CMYKColor, Addition) {
CMYKColor a(30, 20, 10, 5);
CMYKColor b(40, 50, 60, 70);
CMYKColor result = a + b;
EXPECT_EQ(result.getCyan(), 70);
EXPECT_EQ(result.getMagenta(), 70);
EXPECT_EQ(result.getYellow(), 70);
EXPECT_EQ(result.getBlack(), 75);
}
TEST(CMYKColor, AdditionClamping) {
CMYKColor a(80, 80, 80, 80);
CMYKColor b(30, 30, 30, 30);
CMYKColor result = a + b;
// Should be clamped to 100
EXPECT_EQ(result.getCyan(), 100);
EXPECT_EQ(result.getMagenta(), 100);
EXPECT_EQ(result.getYellow(), 100);
EXPECT_EQ(result.getBlack(), 100);
}
TEST(CMYKColor, Multiply) {
CMYKColor c(50, 40, 30, 20);
CMYKColor result = c * 0.5;
EXPECT_EQ(result.getCyan(), 25);
EXPECT_EQ(result.getMagenta(), 20);
EXPECT_EQ(result.getYellow(), 15);
EXPECT_EQ(result.getBlack(), 10);
}
// =============================================================================
// CMYK <-> RGB conversion tests
// =============================================================================
TEST(ColorConversion, CMYKToRGB_Black) {
CMYKColor cmyk(0, 0, 0, 100);
RGBColor rgb = cmyk.toRGB();
EXPECT_EQ(rgb.getRed(), 0);
EXPECT_EQ(rgb.getGreen(), 0);
EXPECT_EQ(rgb.getBlue(), 0);
}
TEST(ColorConversion, CMYKToRGB_White) {
CMYKColor cmyk(0, 0, 0, 0);
RGBColor rgb = cmyk.toRGB();
EXPECT_EQ(rgb.getRed(), 255);
EXPECT_EQ(rgb.getGreen(), 255);
EXPECT_EQ(rgb.getBlue(), 255);
}
TEST(ColorConversion, CMYKToRGB_Red) {
CMYKColor cmyk(0, 100, 100, 0);
RGBColor rgb = cmyk.toRGB();
EXPECT_EQ(rgb.getRed(), 255);
EXPECT_EQ(rgb.getGreen(), 0);
EXPECT_EQ(rgb.getBlue(), 0);
}
TEST(ColorConversion, CMYKToRGB_Green) {
CMYKColor cmyk(100, 0, 100, 0);
RGBColor rgb = cmyk.toRGB();
EXPECT_EQ(rgb.getRed(), 0);
EXPECT_EQ(rgb.getGreen(), 255);
EXPECT_EQ(rgb.getBlue(), 0);
}
TEST(ColorConversion, CMYKToRGB_Blue) {
CMYKColor cmyk(100, 100, 0, 0);
RGBColor rgb = cmyk.toRGB();
EXPECT_EQ(rgb.getRed(), 0);
EXPECT_EQ(rgb.getGreen(), 0);
EXPECT_EQ(rgb.getBlue(), 255);
}
TEST(ColorConversion, RGBToCMYK_Black) {
RGBColor rgb(0, 0, 0);
CMYKColor cmyk = rgb.toCMYK();
EXPECT_EQ(cmyk.getCyan(), 0);
EXPECT_EQ(cmyk.getMagenta(), 0);
EXPECT_EQ(cmyk.getYellow(), 0);
EXPECT_EQ(cmyk.getBlack(), 100);
}
TEST(ColorConversion, RGBToCMYK_White) {
RGBColor rgb(255, 255, 255);
CMYKColor cmyk = rgb.toCMYK();
EXPECT_EQ(cmyk.getCyan(), 0);
EXPECT_EQ(cmyk.getMagenta(), 0);
EXPECT_EQ(cmyk.getYellow(), 0);
EXPECT_EQ(cmyk.getBlack(), 0);
}
TEST(ColorConversion, RGBToCMYK_Red) {
RGBColor rgb(255, 0, 0);
CMYKColor cmyk = rgb.toCMYK();
EXPECT_EQ(cmyk.getCyan(), 0);
EXPECT_EQ(cmyk.getMagenta(), 100);
EXPECT_EQ(cmyk.getYellow(), 100);
EXPECT_EQ(cmyk.getBlack(), 0);
}
TEST(ColorConversion, RGBToCMYK_Green) {
RGBColor rgb(0, 255, 0);
CMYKColor cmyk = rgb.toCMYK();
EXPECT_EQ(cmyk.getCyan(), 100);
EXPECT_EQ(cmyk.getMagenta(), 0);
EXPECT_EQ(cmyk.getYellow(), 100);
EXPECT_EQ(cmyk.getBlack(), 0);
}
TEST(ColorConversion, RGBToCMYK_Blue) {
RGBColor rgb(0, 0, 255);
CMYKColor cmyk = rgb.toCMYK();
EXPECT_EQ(cmyk.getCyan(), 100);
EXPECT_EQ(cmyk.getMagenta(), 100);
EXPECT_EQ(cmyk.getYellow(), 0);
EXPECT_EQ(cmyk.getBlack(), 0);
}
TEST(ColorConversion, RoundTripRGBToCMYKToRGB) {
// A mid-range color
RGBColor original(128, 64, 192);
CMYKColor cmyk = original.toCMYK();
RGBColor back = cmyk.toRGB();
// Allow some tolerance due to integer rounding in CMYK (0-100 range)
EXPECT_NEAR(back.getRed(), original.getRed(), 5);
EXPECT_NEAR(back.getGreen(), original.getGreen(), 5);
EXPECT_NEAR(back.getBlue(), original.getBlue(), 5);
}
// =============================================================================
// ColorVariant helper tests
// =============================================================================
TEST(ColorVariant, ToRGB) {
ColorVariant cv_rgb = RGBColor(100, 200, 50);
RGBColor rgb = to_rgb(cv_rgb);
EXPECT_EQ(rgb.getRed(), 100);
EXPECT_EQ(rgb.getGreen(), 200);
EXPECT_EQ(rgb.getBlue(), 50);
ColorVariant cv_cmyk = CMYKColor(0, 0, 0, 0);
RGBColor rgb_from_cmyk = to_rgb(cv_cmyk);
EXPECT_EQ(rgb_from_cmyk.getRed(), 255);
EXPECT_EQ(rgb_from_cmyk.getGreen(), 255);
EXPECT_EQ(rgb_from_cmyk.getBlue(), 255);
}
TEST(ColorVariant, ToCMYK) {
ColorVariant cv_cmyk = CMYKColor(50, 30, 20, 10);
CMYKColor cmyk = to_cmyk(cv_cmyk);
EXPECT_EQ(cmyk.getCyan(), 50);
EXPECT_EQ(cmyk.getMagenta(), 30);
EXPECT_EQ(cmyk.getYellow(), 20);
EXPECT_EQ(cmyk.getBlack(), 10);
}