#include "bbdd.hpp"
#include "bbdd_node.hpp"

int main() {
  Unique_table table;
  table.init_table(100, "full_adder");
  std::vector<uint64_t> inputs = {2, 3, 4}; // A, B, Cin
  table.init_cvo(inputs, cvo_none);
  table.init_signal_map({"A", "B", "C"});
  bbdd_node_t *sum, *cout;
  sum = merge_bbdds(&table, base_case_two_inputs(&table, 2, 3, bbdd_xor), 4,
                    bbdd_xor);
  cout = merge_bbdds(&table, base_case_two_inputs(&table, 2, 3, bbdd_and),
                     merge_bbdds(&table,
                                 base_case_two_inputs(&table, 2, 3, bbdd_xor),
                                 4, bbdd_and),
                     bbdd_or);
  table.add_output("sum", sum);
  table.add_output("cout", cout);
  table.dump_tt("sum");
  table.dump_tt("cout");
  table.dump_table();
  table.dump_dot("sum.dot", "sum");
  table.write_blif("full_adder.blif");
  return 0;
}
