From e12233a19d37a50e92973bd296a26f90528f8a4c Mon Sep 17 00:00:00 2001 From: Gaspar Capello Date: Sun, 1 Sep 2024 18:00:08 -0300 Subject: [PATCH] Tests for new function make_aligned_mask --- src/doc/grid_tests.cpp | 78 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) diff --git a/src/doc/grid_tests.cpp b/src/doc/grid_tests.cpp index abe8bcc51..01c923706 100644 --- a/src/doc/grid_tests.cpp +++ b/src/doc/grid_tests.cpp @@ -1,5 +1,5 @@ // Aseprite Document Library -// Copyright (c) 2019 Igara Studio S.A. +// Copyright (c) 2019-2024 Igara Studio S.A. // // This file is released under the terms of the MIT license. // Read LICENSE.txt for more information. @@ -11,6 +11,8 @@ #include #include "doc/grid.h" +#include "doc/mask.h" +#include "doc/util.h" #include "gfx/rect_io.h" #include "gfx/region.h" @@ -79,6 +81,80 @@ TEST(Grid, RectWithOffset) EXPECT_EQ(Rect(1, 1, 1, 1), grid.canvasToTile(Rect(30, 30, 1, 1))); } +TEST(Grid, MakeAlignedMask) +{ + auto grid = Grid::MakeRect(Size(4, 4)); + grid.origin(gfx::Point(1,1)); + auto mask = Mask(); + mask.replace(gfx::Rect(3, 3, 4, 4)); + auto gridAlignedMask = make_aligned_mask(&grid, &mask); + EXPECT_EQ(gfx::Rect(1,1,8,8), gridAlignedMask.bounds()); + + mask.replace(gfx::Rect(1, 1, 4, 4)); + auto gridAlignedMask2 = make_aligned_mask(&grid, &mask); + EXPECT_EQ(gfx::Rect(1,1,4,4), gridAlignedMask2.bounds()); + + mask.add(gfx::Rect(8, 4, 1, 1)); + mask.add(gfx::Rect(7, 7, 1, 1)); + auto gridAlignedMask3 = make_aligned_mask(&grid, &mask); + const bool _ = false; + const bool X = true; + bool expected[8*8] = { + X, X, X, X, X, X, X, X, + X, X, X, X, X, X, X, X, + X, X, X, X, X, X, X, X, + X, X, X, X, X, X, X, X, + + _, _, _, _, X, X, X, X, + _, _, _, _, X, X, X, X, + _, _, _, _, X, X, X, X, + _, _, _, _, X, X, X, X, + }; + int c=0; + for (int j=0; j<8; ++j) + for (int i=0; i<8; ++i) + EXPECT_EQ(expected[c++], gridAlignedMask3.bitmap()->getPixel(i, j)); + + mask.replace(gfx::Rect(4, 4, 1, 1)); + mask.add(gfx::Rect(5, 5, 1, 1)); + mask.add(gfx::Rect(8, 4, 1, 1)); + mask.add(gfx::Rect(9, 1, 1, 1)); + auto gridAlignedMask4 = make_aligned_mask(&grid, &mask); + bool expected2[12*8] = { + X, X, X, X, X, X, X, X, X, X, X, X, + X, X, X, X, X, X, X, X, X, X, X, X, + X, X, X, X, X, X, X, X, X, X, X, X, + X, X, X, X, X, X, X, X, X, X, X, X, + + _, _, _, _, X, X, X, X, _, _, _, _, + _, _, _, _, X, X, X, X, _, _, _, _, + _, _, _, _, X, X, X, X, _, _, _, _, + _, _, _, _, X, X, X, X, _, _, _, _, + }; + c=0; + for (int j=0; j<8; ++j) + for (int i=0; i<12; ++i) + EXPECT_EQ(expected2[c++], gridAlignedMask4.bitmap()->getPixel(i, j)); + + grid.origin(gfx::Point(2,1)); + auto gridAlignedMask5 = make_aligned_mask(&grid, &mask); + bool expected3[8*8] = { + X, X, X, X, X, X, X, X, + X, X, X, X, X, X, X, X, + X, X, X, X, X, X, X, X, + X, X, X, X, X, X, X, X, + + X, X, X, X, _, _, _, _, + X, X, X, X, _, _, _, _, + X, X, X, X, _, _, _, _, + X, X, X, X, _, _, _, _, + }; + c=0; + for (int j=0; j<8; ++j) + for (int i=0; i<8; ++i) + EXPECT_EQ(expected3[c++], gridAlignedMask5.bitmap()->getPixel(i, j)); +} + int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv);