Cleanup: Store instances id attribute with other attributes
[blender.git] / source / blender / compositor / tests / COM_BufferRange_test.cc
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * Copyright 2021, Blender Foundation.
17  */
18
19 #include "testing/testing.h"
20
21 #include "COM_BufferRange.h"
22
23 namespace blender::compositor::tests {
24
25 TEST(BufferRange, Constructor)
26 {
27   const int size = 5;
28   BufferRange<float> range(nullptr, 1, size, 4);
29   EXPECT_EQ(range.size(), size);
30 }
31
32 static void fill_buffer_with_indexes(float *buf, int buf_len)
33 {
34   for (int i = 0; i < buf_len; i++) {
35     buf[i] = i;
36   }
37 }
38
39 TEST(BufferRange, Subscript)
40 {
41   const int start = 2;
42   const int size = 4;
43   const int num_channels = 3;
44   const int buf_len = (start + size) * num_channels;
45   float buf[buf_len];
46
47   BufferRange<float> range(buf, start, size, num_channels);
48
49   fill_buffer_with_indexes(buf, buf_len);
50   int buf_index = start * num_channels;
51   for (int i = 0; i < size; i++) {
52     const float *elem = range[i];
53     for (int ch = 0; ch < num_channels; ch++) {
54       EXPECT_NEAR(elem[ch], buf_index, FLT_EPSILON);
55       buf_index++;
56     }
57   }
58   EXPECT_EQ(buf_index, buf_len);
59 }
60
61 TEST(BufferRange, SingleElemBufferIteration)
62 {
63   const int start = 1;
64   const int size = 3;
65   const int num_channels = 4;
66   float buf[num_channels];
67   const int stride = 0;
68   BufferRange<float> range(buf, start, size, stride);
69
70   int elems_count = 0;
71   for (float *elem : range) {
72     EXPECT_EQ(elem, buf);
73     elems_count++;
74   }
75   EXPECT_EQ(elems_count, 1);
76 }
77
78 TEST(BufferRange, FullBufferIteration)
79 {
80   const int start = 2;
81   const int size = 5;
82   const int num_channels = 4;
83   const int buf_len = (start + size) * num_channels;
84   float buf[buf_len];
85   BufferRange<float> range(buf, start, size, num_channels);
86
87   fill_buffer_with_indexes(buf, buf_len);
88   int buf_index = start * num_channels;
89   for (float *elem : range) {
90     for (int ch = 0; ch < num_channels; ch++) {
91       EXPECT_NEAR(elem[ch], buf_index, FLT_EPSILON);
92       buf_index++;
93     }
94   }
95   EXPECT_EQ(buf_index, buf_len);
96 }
97
98 }  // namespace blender::compositor::tests