Skip to content

Commit e8662d0

Browse files
committed
added tests for constants and unnormalized indexes
1 parent d6ac2dd commit e8662d0

File tree

1 file changed

+57
-1
lines changed

1 file changed

+57
-1
lines changed

barretenberg/cpp/src/barretenberg/stdlib/primitives/databus/databus.test.cpp

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,62 @@ TEST(Databus, CallDataAndReturnData)
7878
EXPECT_TRUE(CircuitChecker::check(builder));
7979
}
8080

81+
TEST(Databus, ConstantEntryAccess)
82+
{
83+
84+
Builder builder;
85+
databus_ct databus;
86+
fr value_0 = 13;
87+
fr value_1 = 12;
88+
auto constant_0 = witness_ct::create_constant_witness(&builder, value_0);
89+
auto constant_1 = witness_ct::create_constant_witness(&builder, value_1);
90+
databus.return_data.set_values({ constant_0, constant_1 });
91+
field_ct idx_0(witness_ct(&builder, 0));
92+
field_ct idx_1(witness_ct(&builder, 1));
93+
94+
field_ct read_result_0 = databus.return_data[idx_0];
95+
field_ct read_result_1 = databus.return_data[idx_1];
96+
97+
EXPECT_EQ(value_0, read_result_0.get_value());
98+
EXPECT_EQ(value_1, read_result_1.get_value());
99+
EXPECT_TRUE(CircuitChecker::check(builder));
100+
}
101+
102+
TEST(Databus, ConstantAndUnnormalizedIndex)
103+
{
104+
Builder builder;
105+
databus_ct databus;
106+
std::array<fr, 3> raw_calldata_values = { 54, 32, 30 };
107+
std::array<fr, 3> raw_returndata_values = { 54, 32, 116 };
108+
// make the two first elements constants and the second two elements non-normalized
109+
// Populate the calldata in the databus
110+
std::vector<field_ct> calldata_values;
111+
for (auto& value : raw_calldata_values) {
112+
calldata_values.emplace_back(witness_ct(&builder, value));
113+
}
114+
databus.calldata.set_values(calldata_values);
115+
116+
// Populate the return data in the databus std::vector<field_ct> return_data_values;
117+
std::vector<field_ct> returndata_values;
118+
for (auto& value : raw_returndata_values) {
119+
returndata_values.emplace_back(witness_ct(&builder, value));
120+
}
121+
databus.return_data.set_values(returndata_values);
122+
123+
// constant first index
124+
field_ct idx_0(witness_ct::create_constant_witness(&builder, 0));
125+
field_ct idx_1(witness_ct(&builder, 1));
126+
// un-normalized index (with multiplicative constant 2)
127+
field_ct idx_2 = idx_1 + idx_1;
128+
field_ct sum = databus.calldata[idx_0] + databus.calldata[idx_1] + databus.calldata[idx_2];
129+
130+
databus.return_data[0].assert_equal(databus.calldata[0]);
131+
databus.return_data[1].assert_equal(databus.calldata[1]);
132+
databus.return_data[2].assert_equal(sum);
133+
134+
EXPECT_TRUE(CircuitChecker::check(builder));
135+
}
136+
81137
/**
82138
* @brief A failure test demonstrating that trying to prove (via a databus read) that an erroneous value is present in
83139
* the databus will result in an invalid witness.
@@ -179,4 +235,4 @@ TEST(Databus, DuplicateRead)
179235
databus.return_data[idx_1];
180236

181237
EXPECT_TRUE(CircuitChecker::check(builder));
182-
}
238+
}

0 commit comments

Comments
 (0)