Blender V4.3
COM_NodeOperation_test.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2021 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#include "testing/testing.h"
6
8
10
12 public:
14 {
15 set_id(id);
17 set_canvas({0, 2, 0, 3});
18 }
19};
20
22 float constant_;
23
24 public:
26 {
27 set_id(id);
29 set_canvas({0, 2, 0, 3});
30 constant_ = 1.0f;
31 }
32
33 const float *get_constant_elem() override
34 {
35 return &constant_;
36 }
37
38 void set_constant(float value)
39 {
40 constant_ = value;
41 }
42};
43
45 private:
46 int param1;
47 float param2;
48
49 public:
50 HashedOperation(NodeOperation &input, int width, int height)
51 {
54 set_canvas({0, width, 0, height});
55 param1 = 2;
56 param2 = 7.0f;
57
58 get_input_socket(0)->set_link(input.get_output_socket());
59 }
60
61 void set_param1(int value)
62 {
63 param1 = value;
64 }
65
66 void hash_output_params() override
67 {
68 hash_params(param1, param2);
69 }
70};
71
75{
76 if (h1 < h2) {
77 if (h3 < h1) {
78 EXPECT_TRUE(h3 < h2);
79 }
80 else if (h3 < h2) {
81 EXPECT_TRUE(h1 < h3);
82 }
83 else {
84 EXPECT_TRUE(h1 < h3);
85 EXPECT_TRUE(h2 < h3);
86 }
87 }
88 else {
89 EXPECT_TRUE(h2 < h1);
90 }
91}
92
93TEST(NodeOperation, generate_hash)
94{
95 /* Constant input. */
96 {
97 NonHashedConstantOperation input_op1(1);
98 input_op1.set_constant(1.0f);
99 EXPECT_EQ(input_op1.generate_hash(), std::nullopt);
100
101 HashedOperation op1(input_op1, 6, 4);
102 std::optional<NodeOperationHash> hash1_opt = op1.generate_hash();
103 EXPECT_NE(hash1_opt, std::nullopt);
104 NodeOperationHash hash1 = *hash1_opt;
105
106 NonHashedConstantOperation input_op2(1);
107 input_op2.set_constant(1.0f);
108 HashedOperation op2(input_op2, 6, 4);
109 NodeOperationHash hash2 = *op2.generate_hash();
110 EXPECT_EQ(hash1, hash2);
111
112 input_op2.set_constant(3.0f);
113 hash2 = *op2.generate_hash();
114 EXPECT_NE(hash1, hash2);
115 }
116
117 /* Non constant input. */
118 {
119 NonHashedOperation input_op(1);
120 EXPECT_EQ(input_op.generate_hash(), std::nullopt);
121
122 HashedOperation op1(input_op, 6, 4);
123 HashedOperation op2(input_op, 6, 4);
124 NodeOperationHash hash1 = *op1.generate_hash();
125 NodeOperationHash hash2 = *op2.generate_hash();
126 EXPECT_EQ(hash1, hash2);
127 op1.set_param1(-1);
128 hash1 = *op1.generate_hash();
129 EXPECT_NE(hash1, hash2);
130
131 HashedOperation op3(input_op, 11, 14);
132 NodeOperationHash hash3 = *op3.generate_hash();
133 EXPECT_NE(hash2, hash3);
134 EXPECT_NE(hash1, hash3);
135
136 test_non_equal_hashes_compare(hash1, hash2, hash3);
137 test_non_equal_hashes_compare(hash3, hash2, hash1);
138 test_non_equal_hashes_compare(hash2, hash3, hash1);
139 test_non_equal_hashes_compare(hash3, hash1, hash2);
140
141 NonHashedOperation input_op2(2);
142 HashedOperation op4(input_op2, 11, 14);
143 NodeOperationHash hash4 = *op4.generate_hash();
144 EXPECT_NE(hash3, hash4);
145
146 input_op2.set_id(1);
147 hash4 = *op4.generate_hash();
148 EXPECT_EQ(hash3, hash4);
149 }
150}
151
152} // namespace blender::compositor::tests
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
void set_link(NodeOperationOutput *link)
NodeOperation contains calculation logic.
void set_canvas(const rcti &canvas_area)
void add_output_socket(DataType datatype)
std::optional< NodeOperationHash > generate_hash()
NodeOperationInput * get_input_socket(unsigned int index)
void add_input_socket(DataType datatype, ResizeMode resize_mode=ResizeMode::Center)
void hash_params(T1 param1, T2 param2)
HashedOperation(NodeOperation &input, int width, int height)
TEST(BufferArea, BufferConstructor)
static void test_non_equal_hashes_compare(NodeOperationHash &h1, NodeOperationHash &h2, NodeOperationHash &h3)