Blender V5.0
BLI_array_state_test.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2024 Blender Authors
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#include "testing/testing.h"
6
7#include "BLI_array_state.hh"
8
9namespace blender::tests {
10
11TEST(array_state, Empty)
12{
14 EXPECT_TRUE(state.is_empty());
15 EXPECT_TRUE(state.same_as({}, nullptr));
16 EXPECT_FALSE(state.same_as(VArray<int>::from_span({3, 4}), nullptr));
17}
18
19TEST(array_state, NoSharing)
20{
21 ArrayState<int> state{VArray<int>::from_span({1, 2, 3}), nullptr};
22 EXPECT_FALSE(state.is_empty());
23 EXPECT_TRUE(state.same_as(VArray<int>::from_span({1, 2, 3}), nullptr));
24 EXPECT_FALSE(state.same_as(VArray<int>::from_span({1, 2, 4}), nullptr));
25 EXPECT_FALSE(state.same_as(VArray<int>::from_span({1, 2, 3, 4}), nullptr));
26}
27
28TEST(array_state, WithSharing)
29{
30 int *data = MEM_calloc_arrayN<int>(3, __func__);
31 data[0] = 0;
32 data[1] = 10;
33 data[2] = 20;
35
37 EXPECT_FALSE(state.is_empty());
38 EXPECT_TRUE(state.same_as(VArray<int>::from_span({data, 3}), sharing_info.get()));
39 EXPECT_TRUE(state.same_as(VArray<int>::from_span({0, 10, 20}), nullptr));
40 EXPECT_FALSE(state.same_as(VArray<int>::from_span({0, 1, 2}), nullptr));
41}
42
43TEST(array_state, DifferentSharingInfoButSameData)
44{
45 int *data1 = MEM_calloc_arrayN<int>(3, __func__);
46 data1[0] = 0;
47 data1[1] = 10;
48 data1[2] = 20;
50
51 int *data2 = MEM_calloc_arrayN<int>(3, __func__);
52 data2[0] = 0;
53 data2[1] = 10;
54 data2[2] = 20;
56
57 ArrayState<int> state{VArray<int>::from_span({data1, 3}), sharing_info1.get()};
58 EXPECT_TRUE(state.same_as(VArray<int>::from_span({data2, 3}), sharing_info2.get()));
59}
60
61} // namespace blender::tests
BMesh const char void * data
static VArray from_span(Span< T > values)
void * MEM_calloc_arrayN(size_t len, size_t size, const char *str)
Definition mallocn.cc:123
static ulong state[N]
const ImplicitSharingInfo * info_for_mem_free(void *data)
TEST(blf_load, load)
Definition BLF_tests.cc:34