6#include <gtest/gtest.h>
15#define BARYCENTIC_DATA_TESTS_TYPE_ALIASES using FF = TypeParam;
25 const size_t domain_size(2);
26 const size_t num_evals(10);
34 const size_t domain_size(2);
35 const size_t num_evals(10);
37 auto expected_result =
Univariate<FF, num_evals>({ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
38 auto result = f.template extend_to<num_evals>();
45 static constexpr size_t initial_size(2);
46 static constexpr size_t domain_size(10);
47 auto f =
Univariate<FF, domain_size>({ 1, 2, 0, 0, 0, 0, 0, 0, 0, 0 });
48 auto expected_result =
Univariate<FF, domain_size>({ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
49 f.template self_extend_from<initial_size>();
56 const size_t domain_size(2);
60 auto result = f.evaluate(u);
68 const size_t domain_size = 2;
69 const size_t num_evals = 3;
71 std::array<FF, 3> expected_big_domain{ { 0, 1, 2 } };
73 std::array<FF, 3> expected_full_numerator_values{ { 0, 0, 2 } };
74 EXPECT_EQ(barycentric.big_domain, expected_big_domain);
75 EXPECT_EQ(barycentric.lagrange_denominators, expected_denominators);
76 EXPECT_EQ(barycentric.full_numerator_values, expected_full_numerator_values);
81 FF calculated_val_at_u = e1.evaluate(u);
82 EXPECT_EQ(u + 1, calculated_val_at_u);
86 EXPECT_EQ(ext1, expected);
93 const size_t domain_size = 5;
94 const size_t num_evals = 6;
101 EXPECT_EQ(ext1, expected);
112TEST(BarycentricDataRunTimeTests, DataArraysMatchCompileTime2to3)
114 constexpr size_t domain_size = 2;
115 constexpr size_t num_evals = 3;
119 for (
size_t i = 0; i < RuntimeData::big_domain_size; ++i) {
120 EXPECT_EQ(RuntimeData::big_domain[i].get_value(), NativeData::big_domain[i]);
122 for (
size_t i = 0; i < domain_size; ++i) {
123 EXPECT_EQ(RuntimeData::lagrange_denominators[i].get_value(), NativeData::lagrange_denominators[i]);
125 for (
size_t i = 0; i < domain_size * num_evals; ++i) {
126 EXPECT_EQ(RuntimeData::precomputed_denominator_inverses[i].get_value(),
127 NativeData::precomputed_denominator_inverses[i]);
129 for (
size_t i = 0; i < num_evals; ++i) {
130 EXPECT_EQ(RuntimeData::full_numerator_values[i].get_value(), NativeData::full_numerator_values[i]);
134TEST(BarycentricDataRunTimeTests, DataArraysMatchCompileTime5to6)
136 constexpr size_t domain_size = 5;
137 constexpr size_t num_evals = 6;
141 for (
size_t i = 0; i < RuntimeData::big_domain_size; ++i) {
142 EXPECT_EQ(RuntimeData::big_domain[i].get_value(), NativeData::big_domain[i]);
144 for (
size_t i = 0; i < domain_size; ++i) {
145 EXPECT_EQ(RuntimeData::lagrange_denominators[i].get_value(), NativeData::lagrange_denominators[i]);
147 for (
size_t i = 0; i < domain_size * num_evals; ++i) {
148 EXPECT_EQ(RuntimeData::precomputed_denominator_inverses[i].get_value(),
149 NativeData::precomputed_denominator_inverses[i]);
151 for (
size_t i = 0; i < num_evals; ++i) {
152 EXPECT_EQ(RuntimeData::full_numerator_values[i].get_value(), NativeData::full_numerator_values[i]);
157TEST(BarycentricDataRunTimeTests, Evaluate)
160 constexpr size_t domain_size = 2;
168 auto result = f.evaluate(u);
169 EXPECT_EQ(result.get_value(),
bb::fr(6));
175TEST(BarycentricDataRunTimeTests, Extend)
178 constexpr size_t domain_size = 2;
179 constexpr size_t num_evals = 10;
184 auto ext1 = e1.template extend_to<num_evals>();
186 std::array<bb::fr, num_evals> expected = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
187 for (
size_t i = 0; i < num_evals; ++i) {
188 EXPECT_EQ(ext1.
value_at(i).get_value(), expected[i]);
195TEST(BarycentricDataRunTimeTests, Extend5to6)
198 constexpr size_t domain_size = 5;
199 constexpr size_t num_evals = 6;
207 auto ext1 = e1.template extend_to<num_evals>();
210 for (
size_t i = 0; i < num_evals; ++i) {
211 EXPECT_EQ(ext1.
value_at(i).get_value(), expected[i]);
#define BARYCENTIC_DATA_TESTS_TYPE_ALIASES
bb::stdlib::witness_t< Builder > witness_ct
Compile-time variant: precomputed arrays are static constexpr.
Run-time variant: precomputed arrays are inline static const.
static bool check(const Builder &circuit)
Check the witness satisifies the circuit.
A univariate polynomial represented by its values on {0, 1,..., domain_end - 1}.
testing::Types< bb::fr > FieldTypes
Entry point for Barretenberg command-line interface.
TYPED_TEST_SUITE(CommitmentKeyTest, Curves)
TYPED_TEST(CommitmentKeyTest, CommitToZeroPoly)
UltraCircuitBuilder_< UltraExecutionTraceBlocks > UltraCircuitBuilder
TEST(BoomerangMegaCircuitBuilder, BasicCircuit)
std::conditional_t< is_field_type_v< Fr >, BarycentricDataCompileTime< Fr, domain_end, num_evals >, BarycentricDataRunTime< Fr, domain_end, num_evals > > BarycentricData
Exposes BarycentricData with compile time arrays if the type is bberg::field and runtime arrays other...
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
static field random_element(numeric::RNG *engine=nullptr) noexcept