39 using cycle_scalar =
typename TestFixture::cycle_scalar;
40 using ScalarField =
typename TestFixture::ScalarField;
43 auto scalar_val = ScalarField::random_element(&
engine);
44 auto scalar = cycle_scalar::from_witness(&
builder, scalar_val);
46 EXPECT_EQ(scalar.get_value(), scalar_val);
47 EXPECT_FALSE(scalar.is_constant());
52 uint256_t reconstructed = lo_val + (hi_val << cycle_scalar::LO_BITS);
54 EXPECT_EQ(ScalarField(reconstructed), scalar_val);
56 check_circuit_and_gate_count(
builder, 2761);
64 using cycle_scalar =
typename TestFixture::cycle_scalar;
65 using ScalarField =
typename TestFixture::ScalarField;
66 using BigScalarField =
typename cycle_scalar::BigScalarField;
73 auto big_scalar = BigScalarField::from_witness(&
builder,
value);
74 cycle_scalar scalar(big_scalar);
76 EXPECT_EQ(scalar.get_value(),
value);
77 EXPECT_FALSE(scalar.is_constant());
82 uint256_t reconstructed = lo_val + (hi_val << cycle_scalar::LO_BITS);
83 EXPECT_EQ(ScalarField(reconstructed),
value);
85 check_circuit_and_gate_count(
builder, 3523);
94 cycle_scalar scalar(big_scalar);
96 EXPECT_EQ(scalar.get_value(), ScalarField(
value));
97 EXPECT_TRUE(scalar.is_constant());
102 uint256_t reconstructed = lo_val + (hi_val << cycle_scalar::LO_BITS);
103 EXPECT_EQ(ScalarField(reconstructed),
value);
105 check_circuit_and_gate_count(
builder, 0);
119 using cycle_scalar =
typename TestFixture::cycle_scalar;
120 using field_t =
typename TestFixture::field_t;
121 using NativeField =
typename TestFixture::NativeField;
128 uint256_t moduli_diff = bn254_fq_modulus - bn254_fr_modulus;
129 uint256_t value_between_moduli = bn254_fr_modulus + moduli_diff / 2;
132 uint256_t lo_val = value_between_moduli.
slice(0, cycle_scalar::LO_BITS);
133 uint256_t hi_val = value_between_moduli.
slice(cycle_scalar::LO_BITS, 256);
145 auto scalar = cycle_scalar(lo, hi);
148 EXPECT_FALSE(
builder.failed());
149 check_circuit_and_gate_count(
builder, 2761);
162 auto scalar = cycle_scalar(lo, hi);
166 uint256_t(scalar.lo().get_value()) + (
uint256_t(scalar.hi().get_value()) << cycle_scalar::LO_BITS);
167 EXPECT_EQ(reconstructed, value_between_moduli);
184 using cycle_scalar =
typename TestFixture::cycle_scalar;
185 using ScalarField =
typename TestFixture::ScalarField;
186 using BigScalarField =
typename cycle_scalar::BigScalarField;
191 BigScalarField zero_scalar = BigScalarField::from_witness(&
builder,
typename BigScalarField::native(0));
192 cycle_scalar scalar(zero_scalar);
194 EXPECT_EQ(scalar.get_value(), ScalarField(0));
195 EXPECT_EQ(scalar.lo().get_value(), 0);
196 EXPECT_EQ(scalar.hi().get_value(), 0);
198 check_circuit_and_gate_count(
builder, 3523);
205 BigScalarField small_scalar =
206 BigScalarField::from_witness(&
builder,
typename BigScalarField::native(small_value));
207 cycle_scalar scalar(small_scalar);
209 EXPECT_EQ(scalar.get_value(), ScalarField(small_value));
210 EXPECT_EQ(scalar.lo().get_value(), small_value);
211 EXPECT_EQ(scalar.hi().get_value(), 0);
213 check_circuit_and_gate_count(
builder, 3523);
220 BigScalarField boundary_scalar =
221 BigScalarField::from_witness(&
builder,
typename BigScalarField::native(limb_boundary));
222 cycle_scalar scalar(boundary_scalar);
224 EXPECT_EQ(scalar.get_value(), ScalarField(limb_boundary));
226 check_circuit_and_gate_count(
builder, 3523);
234 BigScalarField limb0_full_scalar =
235 BigScalarField::from_witness(&
builder,
typename BigScalarField::native(limb0_full));
236 cycle_scalar scalar(limb0_full_scalar);
238 EXPECT_EQ(scalar.get_value(), ScalarField(limb0_full));
240 check_circuit_and_gate_count(
builder, 3523);
247 BigScalarField val_136_scalar =
248 BigScalarField::from_witness(&
builder,
typename BigScalarField::native(val_136));
249 cycle_scalar scalar(val_136_scalar);
251 EXPECT_EQ(scalar.get_value(), ScalarField(val_136));
253 check_circuit_and_gate_count(
builder, 3523);
261 BigScalarField special_scalar =
262 BigScalarField::from_witness(&
builder,
typename BigScalarField::native(special_value));
263 cycle_scalar scalar(special_scalar);
265 EXPECT_EQ(scalar.get_value(), ScalarField(special_value));
267 check_circuit_and_gate_count(
builder, 3523);
278 BigScalarField scalar1 = BigScalarField::from_witness(&
builder,
typename BigScalarField::native(val1));
279 BigScalarField scalar2 = BigScalarField::from_witness(&
builder,
typename BigScalarField::native(val2));
282 BigScalarField
sum = scalar1 + scalar2;
285 EXPECT_GT(
sum.binary_basis_limbs[0].maximum_value, BigScalarField::DEFAULT_MAXIMUM_LIMB);
288 cycle_scalar scalar(
sum);
292 EXPECT_EQ(scalar.get_value(), ScalarField(expected));
295 check_circuit_and_gate_count(
builder, 3575);