Blender V5.0
BLI_compression_test.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2025 Blender Authors
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#include "testing/testing.h"
6
7#include "BLI_array.hh"
8#include "BLI_compression.hh"
9
10namespace blender {
11
13{
14 constexpr int num = 5;
15 constexpr int size = 3;
16 uint8_t input[num * size] = {0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 5, 4, 3};
17 uint8_t filtered_exp[num * size] = {0, 2, 6, 26, 227, 1, 2, 10, 42, 205, 1, 4, 16, 68, 170};
18 uint8_t filtered[num * size] = {};
19 uint8_t unfiltered[num * size] = {};
21 EXPECT_EQ_ARRAY(filtered_exp, filtered, num * size);
22 unfilter_transpose_delta(filtered, unfiltered, num, size);
23 EXPECT_EQ_ARRAY(input, unfiltered, num * size);
24}
25
26static uint32_t pcg_rand(uint32_t &rng_state)
27{
28 uint32_t state = rng_state;
29 rng_state = rng_state * 747796405u + 2891336453u;
30 uint32_t word = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u;
31 return (word >> 22u) ^ word;
32}
33
34TEST(compression, filter_transpose_delta_stress)
35{
36 uint32_t rng = 1;
37
38 constexpr int size = 64 * 1024;
40 Array<uint8_t> filtered(size);
41 Array<uint8_t> unfiltered(size);
42 for (uint8_t &val : input) {
43 val = pcg_rand(rng);
44 }
45
46 const int strides[] = {1, 2, 3, 4, 5, 8, 13, 16, 25, 48, 64, 65, 101, 300, 512, 513, size};
47 for (int stride : strides) {
48 const int num = size / stride;
49 filter_transpose_delta(input.data(), filtered.data(), num, stride);
50 unfilter_transpose_delta(filtered.data(), unfiltered.data(), num, stride);
51 EXPECT_EQ_ARRAY(input.data(), unfiltered.data(), num * stride);
52 }
53}
54
55} // namespace blender
ATTR_WARN_UNUSED_RESULT const size_t num
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition btDbvt.cpp:52
const T * data() const
Definition BLI_array.hh:312
#define input
static ulong state[N]
void filter_transpose_delta(const uint8_t *src, uint8_t *dst, size_t items_num, size_t item_size)
static uint32_t pcg_rand(uint32_t &rng_state)
TEST(compression, filter_transpose_delta)
void unfilter_transpose_delta(const uint8_t *src, uint8_t *dst, size_t items_num, size_t item_size)