first commit

This commit is contained in:
stuce-bot 2025-06-30 20:47:33 +02:00
commit 5893b00dd2
1669 changed files with 1982740 additions and 0 deletions

View file

@ -0,0 +1,177 @@
// g++ --std=c++11 test.cpp
#include "test.h"
#include "test.h"
#include "lib8tion/intmap.h"
#include "lib8tion/brightness_bitshifter.h"
#include <iostream>
#include <bitset>
#include "fl/namespace.h"
FASTLED_USING_NAMESPACE
TEST_CASE("brightness_bitshifter8") {
SUBCASE("random test to check that the product is the same") {
int count = 0;
for (int i = 0; i < 10000; ++i) {
uint8_t brightness_src = 0b10000000 >> rand() % 6;
uint8_t brightness_dst = rand() % 256;
uint16_t product = uint16_t(brightness_src) * brightness_dst;
uint8_t shifts = brightness_bitshifter8(&brightness_src, &brightness_dst, 7);
uint16_t new_product = uint16_t(brightness_src) * brightness_dst;
CHECK_EQ(product, new_product);
if (shifts) {
count++;
}
}
CHECK_GT(count, 0);
}
SUBCASE("fixed test data mimicing actual use") {
const uint8_t test_data[][2][2] = {
// brightness_bitshifter8 is always called with brightness_src = 0b00010000
{ // test case
// src dst
{0b00010000, 0b00000000}, // input
{0b00010000, 0b00000000}, // output
},
{
{0b00010000, 0b00000001},
{0b00000001, 0b00010000},
},
{
{0b00010000, 0b00000100},
{0b00000001, 0b01000000},
},
{
{0b00010000, 0b00010000},
{0b00000010, 0b10000000},
},
{
{0b00010000, 0b00001010},
{0b00000001, 0b10100000},
},
{
{0b00010000, 0b00101010},
{0b00000100, 0b10101000},
},
{
{0b00010000, 0b11101010},
{0b00010000, 0b11101010},
},
};
for (const auto& data : test_data) {
uint8_t brightness_src = data[0][0];
uint8_t brightness_dst = data[0][1];
uint8_t shifts = brightness_bitshifter8(&brightness_src, &brightness_dst, 4);
INFO("input brightness_src: ", data[0][0], " ; input brightness_dst: ", data[0][1]);
INFO("output brightness_src: ", brightness_src, " ; output brightness_dst: ", brightness_dst);
INFO("shifts : ", shifts);
CHECK_EQ(brightness_src, data[1][0]);
CHECK_EQ(brightness_dst, data[1][1]);
}
}
}
TEST_CASE("brightness_bitshifter16") {
SUBCASE("simple with steps=2") {
uint8_t brightness_src = 0x1 << 1;
uint16_t brightness_dst = 0x1 << 2;
uint8_t max_shifts = 8;
uint8_t shifts = brightness_bitshifter16(&brightness_src, &brightness_dst, max_shifts, 2);
CHECK_EQ(shifts, 1);
CHECK_EQ(brightness_src, 1);
CHECK_EQ(brightness_dst, 0x1 << 4);
}
SUBCASE("simple with steps=1") {
uint8_t brightness_src = 0x1 << 1;
uint16_t brightness_dst = 0x1 << 1;
uint8_t max_shifts = 8;
uint8_t shifts = brightness_bitshifter16(&brightness_src, &brightness_dst, max_shifts, 1);
CHECK_EQ(shifts, 1);
CHECK_EQ(brightness_src, 1);
CHECK_EQ(brightness_dst, 0x1 << 2);
}
SUBCASE("random test to check that the product is the same") {
int count = 0;
for (int i = 0; i < 10000; ++i) {
uint8_t brightness_src = 0b10000000 >> (rand() % 8);
uint16_t brightness_dst = rand() % uint32_t(65536);
uint32_t product = uint32_t(brightness_src >> 8) * brightness_dst;
uint8_t max_shifts = 8;
uint8_t steps = 2;
uint8_t shifts = brightness_bitshifter16(&brightness_src, &brightness_dst, max_shifts, steps);
uint32_t new_product = uint32_t(brightness_src >> 8) * brightness_dst;
CHECK_EQ(product, new_product);
if (shifts) {
count++;
}
}
CHECK_GT(count, 0);
}
SUBCASE("fixed test data mimicing actual use") {
const uint16_t test_data[][2][2] = {
// brightness_bitshifter16 is always called with brightness_src between 0b00000001 - 0b00010000
{ // test case
// src dst
{0b00000001, 0b0000000000000000}, // input
{0b00000001, 0b0000000000000000}, // output
},
{
{0b00000001, 0b0000000000000001},
{0b00000001, 0b0000000000000001},
},
{
{0b00000001, 0b0000000000000010},
{0b00000001, 0b0000000000000010},
},
{
{0b00000010, 0b0000000000000001},
{0b00000001, 0b0000000000000100},
},
{
{0b00001010, 0b0000000000001010},
{0b00000101, 0b0000000000101000},
},
{
{0b00010000, 0b0000111000100100},
{0b00000100, 0b1110001001000000},
},
{
{0b00010000, 0b0011100010010010},
{0b00001000, 0b1110001001001000},
},
{
{0b00010000, 0b0110001001001110},
{0b00010000, 0b0110001001001110},
},
{
{0b00010000, 0b1110001001001110},
{0b00010000, 0b1110001001001110},
},
};
for (const auto& data : test_data) {
uint8_t brightness_src = static_cast<uint8_t>(data[0][0]);
uint16_t brightness_dst = data[0][1];
uint8_t shifts = brightness_bitshifter16(&brightness_src, &brightness_dst, 4, 2);
INFO("input brightness_src: ", data[0][0], " ; input brightness_dst: ", data[0][1]);
INFO("output brightness_src: ", brightness_src, " ; output brightness_dst: ", brightness_dst);
INFO("shifts (by 2 bits): ", shifts);
CHECK_EQ(brightness_src, data[1][0]);
CHECK_EQ(brightness_dst, data[1][1]);
}
}
}