blob: 9bc9cbbcec6a5a30b6681b48f2a2d1520ea54cc7 [file] [log] [blame]
// Copyright 2023 The PDFium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "core/fxge/dib/blend.h"
#include "core/fxge/dib/fx_dib.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace fxge {
TEST(Blend, Normal) {
EXPECT_EQ(0, Blend(BlendMode::kNormal, 0, 0));
EXPECT_EQ(0, Blend(BlendMode::kNormal, 99, 0));
EXPECT_EQ(0, Blend(BlendMode::kNormal, 255, 0));
EXPECT_EQ(99, Blend(BlendMode::kNormal, 0, 99));
EXPECT_EQ(99, Blend(BlendMode::kNormal, 99, 99));
EXPECT_EQ(99, Blend(BlendMode::kNormal, 255, 99));
EXPECT_EQ(255, Blend(BlendMode::kNormal, 0, 255));
EXPECT_EQ(255, Blend(BlendMode::kNormal, 99, 255));
EXPECT_EQ(255, Blend(BlendMode::kNormal, 255, 255));
}
TEST(Blend, Multiply) {
EXPECT_EQ(0, Blend(BlendMode::kMultiply, 0, 0));
EXPECT_EQ(0, Blend(BlendMode::kMultiply, 99, 0));
EXPECT_EQ(0, Blend(BlendMode::kMultiply, 255, 0));
EXPECT_EQ(0, Blend(BlendMode::kMultiply, 0, 99));
EXPECT_EQ(38, Blend(BlendMode::kMultiply, 99, 99));
EXPECT_EQ(99, Blend(BlendMode::kMultiply, 255, 99));
EXPECT_EQ(0, Blend(BlendMode::kMultiply, 0, 255));
EXPECT_EQ(99, Blend(BlendMode::kMultiply, 99, 255));
EXPECT_EQ(255, Blend(BlendMode::kMultiply, 255, 255));
}
TEST(Blend, Screen) {
EXPECT_EQ(0, Blend(BlendMode::kScreen, 0, 0));
EXPECT_EQ(99, Blend(BlendMode::kScreen, 99, 0));
EXPECT_EQ(255, Blend(BlendMode::kScreen, 255, 0));
EXPECT_EQ(99, Blend(BlendMode::kScreen, 0, 99));
EXPECT_EQ(160, Blend(BlendMode::kScreen, 99, 99));
EXPECT_EQ(255, Blend(BlendMode::kScreen, 255, 99));
EXPECT_EQ(255, Blend(BlendMode::kScreen, 0, 255));
EXPECT_EQ(255, Blend(BlendMode::kScreen, 99, 255));
EXPECT_EQ(255, Blend(BlendMode::kScreen, 255, 255));
}
TEST(Blend, Overlay) {
EXPECT_EQ(0, Blend(BlendMode::kOverlay, 0, 0));
EXPECT_EQ(0, Blend(BlendMode::kOverlay, 99, 0));
EXPECT_EQ(143, Blend(BlendMode::kOverlay, 199, 0));
EXPECT_EQ(255, Blend(BlendMode::kOverlay, 255, 0));
EXPECT_EQ(0, Blend(BlendMode::kOverlay, 0, 99));
EXPECT_EQ(76, Blend(BlendMode::kOverlay, 99, 99));
EXPECT_EQ(187, Blend(BlendMode::kOverlay, 199, 99));
EXPECT_EQ(255, Blend(BlendMode::kOverlay, 255, 99));
EXPECT_EQ(0, Blend(BlendMode::kOverlay, 0, 199));
EXPECT_EQ(154, Blend(BlendMode::kOverlay, 99, 199));
EXPECT_EQ(231, Blend(BlendMode::kOverlay, 199, 199));
EXPECT_EQ(255, Blend(BlendMode::kOverlay, 255, 199));
EXPECT_EQ(0, Blend(BlendMode::kOverlay, 0, 255));
EXPECT_EQ(198, Blend(BlendMode::kOverlay, 99, 255));
EXPECT_EQ(255, Blend(BlendMode::kOverlay, 199, 255));
EXPECT_EQ(255, Blend(BlendMode::kOverlay, 255, 255));
}
TEST(Blend, Darken) {
EXPECT_EQ(0, Blend(BlendMode::kDarken, 0, 0));
EXPECT_EQ(0, Blend(BlendMode::kDarken, 99, 0));
EXPECT_EQ(0, Blend(BlendMode::kDarken, 255, 0));
EXPECT_EQ(0, Blend(BlendMode::kDarken, 0, 99));
EXPECT_EQ(99, Blend(BlendMode::kDarken, 99, 99));
EXPECT_EQ(99, Blend(BlendMode::kDarken, 255, 99));
EXPECT_EQ(0, Blend(BlendMode::kDarken, 0, 255));
EXPECT_EQ(99, Blend(BlendMode::kDarken, 99, 255));
EXPECT_EQ(255, Blend(BlendMode::kDarken, 255, 255));
}
TEST(Blend, Lighten) {
EXPECT_EQ(0, Blend(BlendMode::kLighten, 0, 0));
EXPECT_EQ(99, Blend(BlendMode::kLighten, 99, 0));
EXPECT_EQ(255, Blend(BlendMode::kLighten, 255, 0));
EXPECT_EQ(99, Blend(BlendMode::kLighten, 0, 99));
EXPECT_EQ(99, Blend(BlendMode::kLighten, 99, 99));
EXPECT_EQ(255, Blend(BlendMode::kLighten, 255, 99));
EXPECT_EQ(255, Blend(BlendMode::kLighten, 0, 255));
EXPECT_EQ(255, Blend(BlendMode::kLighten, 99, 255));
EXPECT_EQ(255, Blend(BlendMode::kLighten, 255, 255));
}
TEST(Blend, ColorDodge) {
EXPECT_EQ(0, Blend(BlendMode::kColorDodge, 0, 0));
EXPECT_EQ(99, Blend(BlendMode::kColorDodge, 99, 0));
EXPECT_EQ(255, Blend(BlendMode::kColorDodge, 255, 0));
EXPECT_EQ(0, Blend(BlendMode::kColorDodge, 0, 99));
EXPECT_EQ(161, Blend(BlendMode::kColorDodge, 99, 99));
EXPECT_EQ(255, Blend(BlendMode::kColorDodge, 255, 99));
EXPECT_EQ(255, Blend(BlendMode::kColorDodge, 0, 255));
EXPECT_EQ(255, Blend(BlendMode::kColorDodge, 99, 255));
EXPECT_EQ(255, Blend(BlendMode::kColorDodge, 255, 255));
}
TEST(Blend, ColorBurn) {
EXPECT_EQ(0, Blend(BlendMode::kColorBurn, 0, 0));
EXPECT_EQ(0, Blend(BlendMode::kColorBurn, 99, 0));
EXPECT_EQ(0, Blend(BlendMode::kColorBurn, 255, 0));
EXPECT_EQ(0, Blend(BlendMode::kColorBurn, 0, 99));
EXPECT_EQ(0, Blend(BlendMode::kColorBurn, 99, 99));
EXPECT_EQ(255, Blend(BlendMode::kColorBurn, 255, 99));
EXPECT_EQ(0, Blend(BlendMode::kColorBurn, 0, 255));
EXPECT_EQ(99, Blend(BlendMode::kColorBurn, 99, 255));
EXPECT_EQ(255, Blend(BlendMode::kColorBurn, 255, 255));
}
TEST(Blend, HardLight) {
EXPECT_EQ(0, Blend(BlendMode::kHardLight, 0, 0));
EXPECT_EQ(0, Blend(BlendMode::kHardLight, 99, 0));
EXPECT_EQ(0, Blend(BlendMode::kHardLight, 255, 0));
EXPECT_EQ(0, Blend(BlendMode::kHardLight, 0, 99));
EXPECT_EQ(76, Blend(BlendMode::kHardLight, 99, 99));
EXPECT_EQ(198, Blend(BlendMode::kHardLight, 255, 99));
EXPECT_EQ(143, Blend(BlendMode::kHardLight, 0, 199));
EXPECT_EQ(187, Blend(BlendMode::kHardLight, 99, 199));
EXPECT_EQ(255, Blend(BlendMode::kHardLight, 255, 199));
EXPECT_EQ(255, Blend(BlendMode::kHardLight, 0, 255));
EXPECT_EQ(255, Blend(BlendMode::kHardLight, 99, 255));
EXPECT_EQ(255, Blend(BlendMode::kHardLight, 255, 255));
}
TEST(Blend, SoftLight) {
EXPECT_EQ(0, Blend(BlendMode::kSoftLight, 0, 0));
EXPECT_EQ(39, Blend(BlendMode::kSoftLight, 99, 0));
EXPECT_EQ(255, Blend(BlendMode::kSoftLight, 255, 0));
EXPECT_EQ(0, Blend(BlendMode::kSoftLight, 0, 99));
EXPECT_EQ(86, Blend(BlendMode::kSoftLight, 99, 99));
EXPECT_EQ(255, Blend(BlendMode::kSoftLight, 255, 99));
EXPECT_EQ(0, Blend(BlendMode::kSoftLight, 0, 199));
EXPECT_EQ(81, Blend(BlendMode::kSoftLight, 47, 199));
EXPECT_EQ(132, Blend(BlendMode::kSoftLight, 99, 199));
EXPECT_EQ(255, Blend(BlendMode::kSoftLight, 255, 199));
EXPECT_EQ(0, Blend(BlendMode::kSoftLight, 0, 255));
EXPECT_EQ(109, Blend(BlendMode::kSoftLight, 47, 255));
EXPECT_EQ(159, Blend(BlendMode::kSoftLight, 99, 255));
EXPECT_EQ(255, Blend(BlendMode::kSoftLight, 255, 255));
}
TEST(Blend, Difference) {
EXPECT_EQ(0, Blend(BlendMode::kDifference, 0, 0));
EXPECT_EQ(99, Blend(BlendMode::kDifference, 99, 0));
EXPECT_EQ(255, Blend(BlendMode::kDifference, 255, 0));
EXPECT_EQ(99, Blend(BlendMode::kDifference, 0, 99));
EXPECT_EQ(0, Blend(BlendMode::kDifference, 99, 99));
EXPECT_EQ(156, Blend(BlendMode::kDifference, 255, 99));
EXPECT_EQ(255, Blend(BlendMode::kDifference, 0, 255));
EXPECT_EQ(156, Blend(BlendMode::kDifference, 99, 255));
EXPECT_EQ(0, Blend(BlendMode::kDifference, 255, 255));
}
TEST(Blend, Exclusion) {
EXPECT_EQ(0, Blend(BlendMode::kExclusion, 0, 0));
EXPECT_EQ(99, Blend(BlendMode::kExclusion, 99, 0));
EXPECT_EQ(255, Blend(BlendMode::kExclusion, 255, 0));
EXPECT_EQ(99, Blend(BlendMode::kExclusion, 0, 99));
EXPECT_EQ(122, Blend(BlendMode::kExclusion, 99, 99));
EXPECT_EQ(156, Blend(BlendMode::kExclusion, 255, 99));
EXPECT_EQ(255, Blend(BlendMode::kExclusion, 0, 255));
EXPECT_EQ(156, Blend(BlendMode::kExclusion, 99, 255));
EXPECT_EQ(0, Blend(BlendMode::kExclusion, 255, 255));
}
} // namespace fxge