Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
bool.test.cpp
Go to the documentation of this file.
2#include "term.hpp"
3
4#include <gtest/gtest.h>
5
6namespace {
8}
9
10using namespace bb;
11using namespace smt_terms;
12
13TEST(SymbolicBool, and)
14{
15 Solver slv("30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001");
16 bool a = static_cast<bool>(engine.get_random_uint8() & 1);
17 bool b = static_cast<bool>(engine.get_random_uint8() & 1);
18 bool c = a && b;
19
20 Bool x = Bool(std::string("x"), &slv);
21 Bool y = Bool(std::string("y"), &slv);
22 Bool z = x & y;
23
24 (x == Bool(a, &slv)).assert_term();
25 (y == Bool(b, &slv)).assert_term();
26 ASSERT_TRUE(slv.check());
27
28 bb::fr zvals = string_to_fr(slv[z], /*base=*/10);
29 ASSERT_EQ(bb::fr(c), zvals);
30}
31
32TEST(SymbolicBool, or)
33{
34 Solver slv("30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001");
35 bool a = static_cast<bool>(engine.get_random_uint8() & 1);
36 bool b = static_cast<bool>(engine.get_random_uint8() & 1);
37 bool c = a || b;
38
39 Bool x = Bool(std::string("x"), &slv);
40 Bool y = Bool(std::string("y"), &slv);
41 Bool z = x | y;
42
43 (x == Bool(a, &slv)).assert_term();
44 (y == Bool(b, &slv)).assert_term();
45 ASSERT_TRUE(slv.check());
46
47 bb::fr zvals = string_to_fr(slv[z], /*base=*/10);
48 ASSERT_EQ(bb::fr(c), zvals);
49}
50
51TEST(SymbolicBool, not)
52{
53 Solver slv("30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001");
54 bool a = static_cast<bool>(engine.get_random_uint8() & 1);
55 bool b = !a;
56
57 Bool x = Bool(std::string("x"), &slv);
58 Bool y = !x;
59
60 (y == Bool(b, &slv)).assert_term();
61 ASSERT_TRUE(slv.check());
62
63 bb::fr xvals = string_to_fr(slv[x], /*base=*/10);
64 ASSERT_EQ(bb::fr(a), xvals);
65}
66
67TEST(SymbolicBool, IfElse)
68{
69 Solver slv("30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001");
70
71 STerm x = FFVar("x", &slv);
72 STerm y = FFVar("y", &slv);
73
74 Bool if_ = Bool(x) == Bool(FFConst(1, &slv));
75 if_ &= Bool(y) == Bool(FFConst(7, &slv));
76
77 Bool else_ = Bool(x) != Bool(FFConst(1, &slv));
78 else_ &= Bool(y) == Bool(FFConst(8, &slv));
79
80 (if_ | else_).assert_term();
81
82 ASSERT_TRUE(slv.check());
83
84 bb::fr xval = string_to_fr(slv[x], /*base=*/10);
85 bb::fr yval = string_to_fr(slv[y], /*base=*/10);
86
87 ASSERT_TRUE((xval == 1 && yval == 7) || (xval != 1 && yval == 8));
88}
virtual uint8_t get_random_uint8()=0
Class for the solver.
Definition solver.hpp:80
Bool element class.
Definition bool.hpp:14
Symbolic term element class.
Definition term.hpp:114
FF a
FF b
numeric::RNG & engine
RNG & get_randomness()
Definition engine.cpp:203
Entry point for Barretenberg command-line interface.
TEST(MegaCircuitBuilder, CopyConstructor)
STerm FFVar(const std::string &name, Solver *slv)
Definition term.cpp:570
STerm FFConst(const std::string &val, Solver *slv, uint32_t base)
Definition term.cpp:575
bb::fr string_to_fr(const std::string &number, int base, bool is_signed, size_t step)
Converts a string of an arbitrary base to fr. Note: there should be no prefix.
Definition smt_util.cpp:13