imported from "final" folder

This commit is contained in:
2025-11-28 12:12:50 +01:00
parent f9288986cf
commit ff8e725b35
1061 changed files with 225150 additions and 96 deletions

View File

@@ -0,0 +1,127 @@
// g++ --std=c++11 test.cpp
#include "test.h"
#include "fl/downscale.h"
#include "fl/dbg.h"
#include "test.h"
using namespace fl;
TEST_CASE("downscale 2x2 to 1x1") {
CRGB red = CRGB(255, 0, 0);
CRGB black = CRGB(0, 0, 0);
// We are going to simulate a 4x4 image with a 2x2 image. The source
// image is square-cartesian while the dst image is square-serpentine.
CRGB src[4] = {black, red, black, red};
SUBCASE("downscaleHalf from 2x2 to 1x1") {
CRGB dst[1];
downscaleHalf(src, 2, 2, dst);
INFO("Src: " << src);
INFO("Dst: " << dst);
CHECK(dst[0].r == 128);
CHECK(dst[0].g == 0);
CHECK(dst[0].b == 0);
}
SUBCASE("downscale from 2x2 to 1x1") {
CRGB dst[1];
XYMap srcMap = XYMap::constructRectangularGrid(2, 2);
XYMap dstMap = XYMap::constructRectangularGrid(1, 1);
downscale(src, srcMap, dst, dstMap);
INFO("Src: " << src);
INFO("Dst: " << dst);
CHECK(dst[0].r == 128);
CHECK(dst[0].g == 0);
CHECK(dst[0].b == 0);
}
SUBCASE("4x4 rectangle to 2x2 serpentine") {
// We are going to simulate a 4x4 image with a 2x2 image. The source
// image is square-cartesian while the dst image is square-serpentine.
CRGB src[16] = {// Upper left red, lower right red, upper right black,
// lower left black
red, red, black, black, red, red, black, black,
black, black, red, red, black, black, red, red};
CRGB dst[4];
XYMap srcMap = XYMap::constructRectangularGrid(4, 4);
XYMap dstMap = XYMap::constructSerpentine(2, 2);
downscale(src, srcMap, dst, dstMap);
INFO("Src: " << src);
INFO("Dst: " << dst);
CRGB lowerLeft = dst[dstMap.mapToIndex(0, 0)];
CRGB lowerRight = dst[dstMap.mapToIndex(1, 0)];
CRGB upperLeft = dst[dstMap.mapToIndex(0, 1)];
CRGB upperRight = dst[dstMap.mapToIndex(1, 1)];
REQUIRE(lowerLeft == red);
REQUIRE(lowerRight == black);
REQUIRE(upperLeft == black);
REQUIRE(upperRight == red);
}
}
TEST_CASE("downscale 3x3 to 2x2") {
CRGB red = CRGB(255, 0, 0);
CRGB black = CRGB(0, 0, 0);
// Create a 3x3 checkerboard pattern:
CRGB src[9];
src[0] = red;
src[1] = black;
src[2] = red;
src[3] = black;
src[4] = red;
src[5] = black;
src[6] = red;
src[7] = black;
src[8] = red;
CRGB dst[4]; // 2x2 result
XYMap srcMap = XYMap::constructRectangularGrid(3, 3);
XYMap dstMap = XYMap::constructRectangularGrid(2, 2);
downscale(src, srcMap, dst, dstMap);
for (int i = 0; i < 4; ++i) {
INFO("Dst[" << i << "]: " << dst[i]);
CHECK(dst[i] == CRGB(142, 0, 0)); // Averaged color
}
}
TEST_CASE("downscale 11x11 to 2x2") {
CRGB red = CRGB(255, 0, 0);
CRGB black = CRGB(0, 0, 0);
// Create a 3x3 checkerboard pattern:
CRGB src[11*11];
for (int i = 0; i < 11*11; ++i) {
src[i] = (i % 2 == 0) ? red : black;
}
CRGB dst[4]; // 2x2 result
XYMap srcMap = XYMap::constructRectangularGrid(11, 11);
XYMap dstMap = XYMap::constructRectangularGrid(2, 2);
downscale(src, srcMap, dst, dstMap);
for (int i = 0; i < 4; ++i) {
INFO("Dst[" << i << "]: " << dst[i]);
CHECK(dst[i] == CRGB(129, 0, 0)); // Averaged color
}
}