summaryrefslogtreecommitdiff
path: root/cryptominisat5/cryptominisat-5.6.3/tests/basic_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cryptominisat5/cryptominisat-5.6.3/tests/basic_test.cpp')
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/tests/basic_test.cpp1109
1 files changed, 0 insertions, 1109 deletions
diff --git a/cryptominisat5/cryptominisat-5.6.3/tests/basic_test.cpp b/cryptominisat5/cryptominisat-5.6.3/tests/basic_test.cpp
deleted file mode 100644
index 4a52a2a2a..000000000
--- a/cryptominisat5/cryptominisat-5.6.3/tests/basic_test.cpp
+++ /dev/null
@@ -1,1109 +0,0 @@
-/******************************************
-Copyright (c) 2016, Mate Soos
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-***********************************************/
-
-#include "gtest/gtest.h"
-
-#include <fstream>
-
-#include "cryptominisat5/cryptominisat.h"
-#include "src/solverconf.h"
-#include "test_helper.h"
-using namespace CMSat;
-#include <vector>
-using std::vector;
-
-
-TEST(normal_interface, start)
-{
- SATSolver s;
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_True);
- EXPECT_EQ( s.okay(), true);
-}
-
-TEST(normal_interface, onelit)
-{
- SATSolver s;
- s.new_var();
- s.add_clause(str_to_cl("1"));
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_True);
- EXPECT_EQ( s.okay(), true);
-}
-
-TEST(normal_interface, twolit)
-{
- SATSolver s;
- s.new_var();
- s.add_clause(str_to_cl("1"));
- s.add_clause(str_to_cl("-1"));
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_False);
- EXPECT_EQ( s.okay(), false);
-}
-
-TEST(normal_interface, multi_solve_unsat)
-{
- SATSolver s;
- s.new_var();
- s.add_clause(str_to_cl("1"));
- s.add_clause(str_to_cl("-1"));
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_False);
- EXPECT_EQ( s.okay(), false);
- for(size_t i = 0;i < 10; i++) {
- ret = s.solve();
- EXPECT_EQ( ret, l_False);
- EXPECT_EQ( s.okay(), false);
- }
-}
-
-TEST(normal_interface, multi_solve_unsat_multi_thread)
-{
- SATSolver s;
- s.set_num_threads(2);
- s.new_var();
- s.add_clause(str_to_cl("1"));
- s.add_clause(str_to_cl("-1"));
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_False);
- EXPECT_EQ( s.okay(), false);
- for(size_t i = 0;i < 10; i++) {
- ret = s.solve();
- EXPECT_EQ( ret, l_False);
- EXPECT_EQ( s.okay(), false);
- }
-}
-
-TEST(normal_interface, solve_multi_thread)
-{
- SATSolver s;
- s.set_num_threads(2);
- s.new_vars(2);
- s.add_clause(str_to_cl("1, 2"));
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_True);
-
- s.add_clause(str_to_cl("-1"));
- ret = s.solve();
- EXPECT_EQ( ret, l_True);
- EXPECT_EQ(s.get_model()[0], l_False);
- EXPECT_EQ(s.get_model()[1], l_True);
-}
-
-TEST(normal_interface, logfile)
-{
- SATSolver* s = new SATSolver();
- s->log_to_file("testfile");
- s->new_vars(2);
- s->add_clause(str_to_cl("1, 2"));
- lbool ret = s->solve();
- EXPECT_EQ( ret, l_True);
- delete s;
-
- std::ifstream infile("testfile");
- std::string line;
- std::getline(infile, line);
- EXPECT_EQ(line, "c Solver::new_vars( 2 )");
- std::getline(infile, line);
- EXPECT_EQ(line, "1 2 0");
- std::getline(infile, line);
- EXPECT_EQ(line, "c Solver::solve( )");
-}
-
-TEST(normal_interface, logfile2)
-{
- SATSolver* s = new SATSolver();
- s->log_to_file("testfile");
- s->new_vars(2);
- s->add_clause(str_to_cl("1"));
- s->add_clause(str_to_cl("1, 2"));
- lbool ret = s->solve();
- s->add_clause(vector<Lit>{Lit(1, false)});
- ret = s->solve();
- delete s;
-
- std::ifstream infile("testfile");
- std::string line;
- std::getline(infile, line);
- EXPECT_EQ(line, "c Solver::new_vars( 2 )");
- std::getline(infile, line);
- EXPECT_EQ(line, "1 0");
- std::getline(infile, line);
- EXPECT_EQ(line, "1 2 0");
- std::getline(infile, line);
- EXPECT_EQ(line, "c Solver::solve( )");
- std::getline(infile, line);
- EXPECT_EQ(line, "2 0");
- std::getline(infile, line);
- EXPECT_EQ(line, "c Solver::solve( )");
-}
-
-TEST(normal_interface, logfile2_assumps)
-{
- SATSolver* s = new SATSolver();
- s->log_to_file("testfile");
- s->new_vars(2);
- s->add_clause(str_to_cl("1"));
- s->add_clause(str_to_cl("1, 2"));
- std::vector<Lit> assumps {Lit(0, false), Lit(1, true)};
- lbool ret = s->solve(&assumps);
- s->add_clause(vector<Lit>{Lit(1, false)});
- assumps.clear();
- assumps.push_back(Lit(1, true));
- ret = s->solve(&assumps);
- delete s;
-
- std::ifstream infile("testfile");
- std::string line;
- std::getline(infile, line);
- EXPECT_EQ(line, "c Solver::new_vars( 2 )");
- std::getline(infile, line);
- EXPECT_EQ(line, "1 0");
- std::getline(infile, line);
- EXPECT_EQ(line, "1 2 0");
- std::getline(infile, line);
- EXPECT_EQ(line, "c Solver::solve( 1 -2 )");
- std::getline(infile, line);
- EXPECT_EQ(line, "2 0");
- std::getline(infile, line);
- EXPECT_EQ(line, "c Solver::solve( -2 )");
-}
-
-TEST(normal_interface, max_time)
-{
- SATSolver* s = new SATSolver();
- s->new_vars(200);
- s->add_clause(str_to_cl("1"));
- s->add_clause(str_to_cl("1, 2"));
- s->set_max_time(3);
- lbool ret = s->solve();
- s->add_clause(vector<Lit>{Lit(1, false)});
- ret = s->solve();
- delete s;
- EXPECT_EQ(ret, l_True);
-}
-
-bool is_critical(const std::range_error&) { return true; }
-
-TEST(xor_interface, xor_check_sat_solution)
-{
- SATSolver s;
- s.new_var();
- s.add_xor_clause(vector<unsigned>{0U}, false);
- s.add_xor_clause(vector<unsigned>{0U}, true);
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_False);
- for(size_t i = 0;i < 10; i++) {
- ret = s.solve();
- EXPECT_EQ( ret, l_False);
- }
- EXPECT_EQ( s.nVars(), 1u);
-}
-
-TEST(xor_interface, xor_check_unsat_solution)
-{
- SATSolver s;
- s.new_var();
- s.add_xor_clause(vector<uint32_t>{0U}, true);
- s.add_xor_clause(vector<uint32_t>{0U}, true);
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_True);
- for(size_t i = 0;i < 10; i++) {
- ret = s.solve();
- EXPECT_EQ( ret, l_True);
- EXPECT_EQ( s.okay(), true);
- }
- EXPECT_EQ( s.nVars(), 1u);
-}
-
-TEST(xor_interface, xor_check_solution_values)
-{
- SATSolver s;
- s.new_var();
- s.add_xor_clause(vector<uint32_t>{0U}, true);
- s.add_xor_clause(vector<uint32_t>{0U}, true);
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_True);
- for(size_t i = 0;i < 10; i++) {
- ret = s.solve();
- EXPECT_EQ( ret, l_True);
- EXPECT_EQ( s.okay(), true);
- }
- EXPECT_EQ( s.nVars(), 1u);
-}
-
-TEST(xor_interface, xor_check_solution_values2)
-{
- SATSolver s;
- s.new_var();
- s.new_var();
- s.add_xor_clause(vector<uint32_t>{0U}, true);
- s.add_xor_clause(vector<uint32_t>{1U}, true);
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_True);
- for(size_t i = 0;i < 10; i++) {
- ret = s.solve();
- EXPECT_EQ( ret, l_True);
- EXPECT_EQ(s.get_model()[0], l_True);
- EXPECT_EQ(s.get_model()[1], l_True);
- }
- EXPECT_EQ( s.nVars(), 2u);
-}
-
-TEST(xor_interface, xor_check_solution_values3)
-{
- SATSolver s;
- s.new_var();
- s.new_var();
- s.add_xor_clause(vector<uint32_t>{0U, 0U}, true);
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_False);
-}
-
-TEST(xor_interface, xor_check_solution_values4)
-{
- SATSolver s;
- s.new_var();
- s.new_var();
- s.add_xor_clause(vector<uint32_t>{0U, 0U}, false);
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_True);
- EXPECT_EQ( s.nVars(), 2u);
-}
-
-
-TEST(xor_interface, xor_check_solution_values5)
-{
- SATSolver s;
- s.new_var();
- s.new_var();
- s.add_xor_clause(vector<uint32_t>{0U, 1U}, true);
- vector<Lit> assump = {Lit(0, false)};
- lbool ret = s.solve(&assump);
- EXPECT_EQ( ret, l_True);
- EXPECT_EQ( s.okay(), true);
- EXPECT_EQ(s.get_model()[0], l_True);
- EXPECT_EQ(s.get_model()[1], l_False);
- EXPECT_EQ( s.nVars(), 2u);
-}
-
-TEST(xor_interface, xor_check_solution_values6)
-{
- SATSolver s;
- s.new_var();
- s.new_var();
- s.add_xor_clause(vector<uint32_t>{0U, 1U}, false);
- vector<Lit> assump = {Lit(0, true)};
- lbool ret = s.solve(&assump);
- EXPECT_EQ( ret, l_True);
- EXPECT_EQ(s.get_model()[0], l_False);
- EXPECT_EQ(s.get_model()[1], l_False);
- EXPECT_EQ( s.nVars(), 2u);
-}
-
-TEST(xor_interface, xor_check_solution_values7)
-{
- SATSolver s;
- s.new_var();
- s.new_var();
- s.new_var();
- s.add_xor_clause(vector<uint32_t>{0U, 1U, 2U}, false);
- vector<Lit> assump = {Lit(0, false), Lit(1, false)};
- lbool ret = s.solve(&assump);
- EXPECT_EQ( ret, l_True);
- EXPECT_EQ(s.get_model()[0], l_True);
- EXPECT_EQ(s.get_model()[1], l_True);
- EXPECT_EQ(s.get_model()[2], l_False);
- EXPECT_EQ( s.nVars(), 3u);
-}
-
-TEST(xor_interface, xor_3_long)
-{
- SATSolver s;
- s.new_var();
- s.new_var();
- s.new_var();
- s.add_xor_clause(vector<uint32_t>{0U, 1U, 2U}, true);
- s.add_xor_clause(vector<uint32_t>{0}, true);
- s.add_xor_clause(vector<uint32_t>{1}, true);
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_True);
- EXPECT_EQ(s.get_model()[0], l_True);
- EXPECT_EQ(s.get_model()[1], l_True);
- EXPECT_EQ(s.get_model()[2], l_True);
- EXPECT_EQ( s.nVars(), 3u);
-}
-
-TEST(xor_interface, xor_3_long2)
-{
- SATSolver s;
- s.new_var();
- s.new_var();
- s.new_var();
- s.add_xor_clause(vector<uint32_t>{0U, 1U, 2U}, false);
- s.add_xor_clause(vector<uint32_t>{0U}, true);
- s.add_xor_clause(vector<uint32_t>{1U}, true);
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_True);
- EXPECT_EQ(s.get_model()[0], l_True);
- EXPECT_EQ(s.get_model()[1], l_True);
- EXPECT_EQ(s.get_model()[2], l_False);
- EXPECT_EQ( s.nVars(), 3u);
-}
-
-TEST(xor_interface, xor_4_long)
-{
- SATSolver s;
- s.new_var();
- s.new_var();
- s.new_var();
- s.new_var();
- s.add_xor_clause(vector<uint32_t>{0U, 1U, 2U, 3U}, false);
- s.add_xor_clause(vector<uint32_t>{0U}, false);
- s.add_xor_clause(vector<uint32_t>{1U}, false);
- s.add_xor_clause(vector<uint32_t>{2U}, false);
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_True);
- EXPECT_EQ(s.get_model()[0], l_False);
- EXPECT_EQ(s.get_model()[1], l_False);
- EXPECT_EQ(s.get_model()[2], l_False);
- EXPECT_EQ(s.get_model()[3], l_False);
- EXPECT_EQ( s.nVars(), 4u);
-}
-
-TEST(xor_interface, xor_4_long2)
-{
- SATSolver s;
- s.new_var();
- s.new_var();
- s.new_var();
- s.new_var();
- s.add_xor_clause(vector<uint32_t>{0U, 1U, 2U, 3U}, true);
- s.add_xor_clause(vector<uint32_t>{0U}, false);
- s.add_xor_clause(vector<uint32_t>{1U}, false);
- s.add_xor_clause(vector<uint32_t>{2U}, true);
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_True);
- EXPECT_EQ(s.get_model()[0], l_False);
- EXPECT_EQ(s.get_model()[1], l_False);
- EXPECT_EQ(s.get_model()[2], l_True);
- EXPECT_EQ(s.get_model()[3], l_False);
- EXPECT_EQ( s.nVars(), 4u);
-}
-
-TEST(xor_interface, xor_very_long)
-{
- SATSolver s;
- vector<uint32_t> vars;
- for(unsigned i = 0; i < 30; i++) {
- s.new_var();
- vars.push_back(i);
- }
- s.add_xor_clause(vars, false);
- for(unsigned i = 0; i < 29; i++) {
- s.add_xor_clause(vector<uint32_t>{i}, false);
- }
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_True);
- for(unsigned i = 0; i < 30; i++) {
- EXPECT_EQ(s.get_model()[i], l_False);
- }
- EXPECT_EQ( s.nVars(), 30u);
-}
-
-TEST(xor_interface, xor_very_long2)
-{
- for(size_t num = 3; num < 30; num++) {
- SATSolver s;
- vector<uint32_t> vars;
- for(unsigned i = 0; i < num; i++) {
- s.new_var();
- vars.push_back(i);
- }
- s.add_xor_clause(vars, true);
- for(unsigned i = 0; i < num-1; i++) {
- s.add_xor_clause(vector<uint32_t>{i}, false);
- }
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_True);
- for(unsigned i = 0; i < num-1; i++) {
- EXPECT_EQ(s.get_model()[i], l_False);
- }
- EXPECT_EQ(s.get_model()[num-1], l_True);
- EXPECT_EQ( s.nVars(), num);
- }
-}
-
-TEST(xor_interface, xor_check_unsat)
-{
- SATSolver s;
- s.new_vars(3);
- s.add_xor_clause(vector<uint32_t>{0U, 1U, 2U}, false);
- s.add_xor_clause(vector<uint32_t>{0U, 1U, 2U}, true);
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_False);
- EXPECT_EQ( s.nVars(), 3u);
-}
-
-TEST(xor_interface, xor_check_unsat_multi_thread)
-{
- SATSolver s;
- s.set_num_threads(3);
- s.new_vars(3);
- s.add_xor_clause(vector<uint32_t>{0U, 1U, 2U}, false);
- s.add_xor_clause(vector<uint32_t>{0U, 1U, 2U}, true);
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_False);
- EXPECT_EQ( s.okay(), false);
- EXPECT_EQ( s.nVars(), 3u);
-}
-
-TEST(xor_interface, xor_check_unsat_multi_solve_multi_thread)
-{
- SATSolver s;
- s.set_num_threads(3);
- s.new_vars(3);
- s.add_xor_clause(vector<uint32_t>{0U, 1U}, false);
- s.add_xor_clause(vector<uint32_t>{0U, 1U, 2U}, true);
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_True);
- EXPECT_EQ( s.nVars(), 3u);
-
- s.add_xor_clause(vector<uint32_t>{0U}, false);
- ret = s.solve();
- EXPECT_EQ( ret, l_True);
- EXPECT_EQ( s.get_model()[0], l_False);
- EXPECT_EQ( s.get_model()[1], l_False);
- EXPECT_EQ( s.get_model()[2], l_True);
- EXPECT_EQ( s.nVars(), 3u);
-
- s.add_xor_clause(vector<uint32_t>{1U}, true);
- ret = s.solve();
- EXPECT_EQ( ret, l_False);
- EXPECT_EQ( s.nVars(), 3u);
-}
-
-TEST(xor_interface, xor_norm_mix_unsat_multi_thread)
-{
- SATSolver s;
- //s.set_num_threads(3);
- s.new_vars(3);
- s.add_clause(str_to_cl("1"));
- s.add_xor_clause(vector<uint32_t>{0U, 1U, 2U}, false);
- s.add_clause(vector<Lit>{Lit(1, false)});
- s.add_clause(vector<Lit>{Lit(2, false)});
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_False);
- EXPECT_EQ( s.nVars(), 3u);
-}
-
-TEST(xor_interface, unit)
-{
- SATSolver s;
- s.new_vars(3);
- s.add_clause(str_to_cl("1"));
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_True);
-
- vector<Lit> units = s.get_zero_assigned_lits();
- EXPECT_EQ( units.size(), 1u);
- EXPECT_EQ( units[0], Lit(0, false));
-}
-
-TEST(xor_interface, unit2)
-{
- SATSolver s;
- s.new_vars(3);
- s.add_clause(str_to_cl("1"));
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_True);
-
- vector<Lit> units = s.get_zero_assigned_lits();
- EXPECT_EQ( units.size(), 1u);
- EXPECT_EQ( units[0], Lit(0, false));
-
- s.add_clause(vector<Lit>{Lit(1, true)});
- ret = s.solve();
- EXPECT_EQ( ret, l_True);
-
- units = s.get_zero_assigned_lits();
- EXPECT_EQ( units.size(), 2u);
- EXPECT_EQ( units[0], Lit(0, false));
- EXPECT_EQ( units[1], Lit(1, true));
-}
-
-TEST(xor_interface, unit3)
-{
- SATSolver s;
- s.new_vars(3);
- s.add_clause(str_to_cl("1"));
- s.add_clause(str_to_cl("-1, -2"));
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_True);
-
- vector<Lit> units = s.get_zero_assigned_lits();
- EXPECT_EQ( units.size(), 2u);
- EXPECT_EQ( units[0], Lit(0, false));
- EXPECT_EQ( units[1], Lit(1, true));
-}
-
-TEST(xor_interface, xor1)
-{
- SolverConf conf;
- conf.simplify_at_startup = true;
- conf.full_simplify_at_startup = true;
- SATSolver s(&conf);
-
- s.new_vars(3);
- s.add_xor_clause(vector<uint32_t>{0, 1}, false);
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_True);
-
- vector<std::pair<Lit, Lit> > pairs = s.get_all_binary_xors();
- EXPECT_EQ( pairs.size(), 1u);
-}
-
-TEST(xor_interface, xor2)
-{
- SolverConf conf;
- conf.simplify_at_startup = true;
- conf.full_simplify_at_startup = true;
- SATSolver s(&conf);
-
- s.new_vars(3);
- s.add_xor_clause(vector<uint32_t>{0, 1}, false);
- s.add_xor_clause(vector<uint32_t>{1, 2}, false);
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_True);
-
- vector<std::pair<Lit, Lit> > pairs = s.get_all_binary_xors();
- EXPECT_EQ( pairs.size(), 2u);
-}
-
-TEST(xor_interface, abort_early)
-{
- SATSolver s;
- s.set_no_simplify();
- s.set_no_equivalent_lit_replacement();
-
- s.set_num_threads(2);
- s.set_max_confl(0);
- s.new_vars(2);
-
- s.add_clause(str_to_cl("1, 2"));
- s.add_clause(str_to_cl("1, -2"));
- s.add_clause(str_to_cl("-1, 2"));
- s.add_clause(str_to_cl("-1, -2"));
-
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_Undef);
-}
-
-TEST(xor_interface, abort_once_continue_next)
-{
- SATSolver s;
- s.set_no_simplify();
- s.set_no_equivalent_lit_replacement();
-
- s.set_num_threads(2);
- s.set_max_confl(0);
- s.new_vars(2);
-
- s.add_clause(str_to_cl("1, 2"));
- s.add_clause(str_to_cl("1, -2"));
- s.add_clause(str_to_cl("-1, 2"));
- s.add_clause(str_to_cl("-1, -2"));
-
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_Undef);
- lbool ret2 = s.solve();
- EXPECT_EQ( ret2, l_False);
-}
-
-TEST(xor_interface, xor3)
-{
- SolverConf conf;
- conf.simplify_at_startup = true;
- conf.simplify_at_every_startup = true;
- conf.full_simplify_at_startup = true;
- SATSolver s(&conf);
-
- s.new_vars(3);
- s.add_xor_clause(vector<uint32_t>{0, 1}, false);
- lbool ret = s.solve();
- EXPECT_EQ( ret, l_True);
-
- vector<std::pair<Lit, Lit> > pairs = s.get_all_binary_xors();
- EXPECT_EQ( pairs.size(), 1u);
-
- s.add_xor_clause(vector<uint32_t>{1, 2}, false);
- ret = s.solve();
- EXPECT_EQ( ret, l_True);
- pairs = s.get_all_binary_xors();
- EXPECT_EQ( pairs.size(), 2u);
-}
-
-TEST(error_throw, multithread_newvar)
-{
- SATSolver s;
-
- s.new_vars(3);
- EXPECT_THROW({
- s.set_num_threads(3);}
- , std::runtime_error);
-}
-
-TEST(error_throw, multithread_0)
-{
- SATSolver s;
-
- EXPECT_THROW({
- s.set_num_threads(0);}
- , std::runtime_error);
-}
-
-TEST(error_throw, multithread_drat)
-{
- SATSolver s;
- std::ostream* os = NULL;
- s.set_drat(os, false);
-
- EXPECT_THROW({
- s.set_num_threads(3);}
- , std::runtime_error);
-}
-
-TEST(error_throw, toomany_vars)
-{
- SATSolver s;
-
- EXPECT_THROW({
- s.new_vars(1ULL << 28);}
- , CMSat::TooManyVarsError);
-}
-
-TEST(error_throw, toomany_vars2)
-{
- SATSolver s;
- s.new_vars(1ULL << 27);
-
- EXPECT_THROW({
- s.new_vars(1ULL << 27);}
- , CMSat::TooManyVarsError);
-}
-
-TEST(error_throw, toomany_vars_single)
-{
- SATSolver s;
- s.new_vars((1ULL << 28) -1);
-
- EXPECT_THROW({
- s.new_var();}
- , CMSat::TooManyVarsError);
-}
-
-TEST(no_error_throw, long_clause)
-{
- SATSolver s;
- s.new_vars(1ULL << 20);
-
- vector<Lit> cl;
- for(size_t i = 0; i < 1ULL << 20; i++) {
- cl.push_back(Lit(i, false));
- }
- s.add_clause(cl);
- lbool ret = s.solve();
- EXPECT_EQ(ret, l_True);
-}
-
-TEST(statistics, zero)
-{
- SATSolver s;
- s.set_no_simplify();
- s.new_vars(10);
-
- lbool ret = s.solve();
- EXPECT_EQ(ret, l_True);;
- EXPECT_EQ(s.get_sum_conflicts(), 0);
- EXPECT_EQ(s.get_sum_propagations(), 10);
- EXPECT_EQ(s.get_sum_decisions(), 10);
-}
-
-TEST(statistics, one_confl)
-{
- SATSolver s;
- s.set_no_simplify();
- s.new_vars(10);
- s.add_clause(str_to_cl("1, 2"));
- s.add_clause(str_to_cl("1, -2"));
- s.add_clause(str_to_cl("-1, 2"));
-
- lbool ret = s.solve();
- EXPECT_EQ(ret, l_True);
- EXPECT_EQ(s.get_sum_conflicts(), 1);
- EXPECT_EQ(s.get_sum_propagations(), 11);
-}
-
-TEST(statistics, unsat)
-{
- SATSolver s;
- s.set_no_simplify();
- s.new_vars(10);
- s.add_clause(str_to_cl("1, 2"));
- s.add_clause(str_to_cl("1, -2"));
- s.add_clause(str_to_cl("-1, 2"));
- s.add_clause(str_to_cl("-1, -2"));
-
- lbool ret = s.solve();
- EXPECT_EQ(ret, l_False);
- EXPECT_EQ(s.get_sum_conflicts(), 2);
- EXPECT_EQ(s.get_sum_propagations(), 2);
-}
-
-TEST(statistics, last_vs_sum_conflicts)
-{
- SATSolver s;
- s.set_no_simplify();
- s.new_vars(10);
- s.add_clause(str_to_cl("1, 2"));
- s.add_clause(str_to_cl("1, -2"));
- s.add_clause(str_to_cl("-1, 2"));
- s.add_clause(str_to_cl("-1, -2"));
-
- s.set_max_confl(0);
- lbool ret = s.solve();
- EXPECT_EQ(ret, l_Undef);
- EXPECT_EQ(s.get_sum_conflicts(), 0);
- EXPECT_EQ(s.get_last_conflicts(), 0);
-
- s.set_max_confl(2);
- ret = s.solve();
- EXPECT_EQ(ret, l_False);
- EXPECT_EQ(s.get_sum_conflicts(), 2);
- EXPECT_EQ(s.get_last_conflicts(), 2);
-}
-
-TEST(propagate, trivial_1)
-{
- SATSolver s;
- s.new_vars(10);
- s.add_clause(str_to_cl("-1"));
-
- vector<Lit> lits = s.get_zero_assigned_lits();
- vector<Lit>::iterator it;
- it = std::find(lits.begin(), lits.end(), Lit(0, true));
- EXPECT_NE(it, lits.end());
- EXPECT_EQ(lits.size(), 1);
-}
-
-TEST(propagate, trivial_2)
-{
- SATSolver s;
- s.new_vars(10);
- s.add_clause(str_to_cl("-1"));
- s.add_clause(str_to_cl("-2"));
-
- vector<Lit> lits = s.get_zero_assigned_lits();
- vector<Lit>::iterator it;
- it = std::find(lits.begin(), lits.end(), Lit(0, true));
- EXPECT_NE(it, lits.end());
- it = std::find(lits.begin(), lits.end(), Lit(1, true));
- EXPECT_NE(it, lits.end());
-
- EXPECT_EQ(lits.size(), 2);
-}
-
-TEST(propagate, prop_1)
-{
- SATSolver s;
- s.new_vars(10);
- s.add_clause(str_to_cl("1, 2"));
- s.add_clause(str_to_cl("-1"));
-
- vector<Lit> lits = s.get_zero_assigned_lits();
- vector<Lit>::iterator it;
- it = std::find(lits.begin(), lits.end(), Lit(0, true));
- EXPECT_NE(it, lits.end());
- it = std::find(lits.begin(), lits.end(), Lit(1, false));
- EXPECT_NE(it, lits.end());
-
- EXPECT_EQ(lits.size(), 2);
-}
-
-TEST(propagate, prop_1_alter)
-{
- SATSolver s;
- s.new_vars(10);
- s.add_clause(str_to_cl("-1"));
- s.add_clause(str_to_cl("1, 2"));
-
- vector<Lit> lits = s.get_zero_assigned_lits();
- vector<Lit>::iterator it;
- it = std::find(lits.begin(), lits.end(), Lit(0, true));
- EXPECT_NE(it, lits.end());
- it = std::find(lits.begin(), lits.end(), Lit(1, false));
- EXPECT_NE(it, lits.end());
- EXPECT_EQ(lits.size(), 2);
-}
-
-TEST(propagate, prop_many)
-{
- SATSolver s;
- s.new_vars(30);
- for(unsigned i = 0; i < 10; i++) {
- s.add_clause(vector<Lit>{Lit(i*2, true), Lit(i*2+1, true)});
- s.add_clause(vector<Lit>{Lit(i*2, false)});
- }
-
- vector<Lit> lits = s.get_zero_assigned_lits();
- for(unsigned i = 0; i < 10; i++) {
- vector<Lit>::iterator it;
- it = std::find(lits.begin(), lits.end(), Lit(i*2, false));
- EXPECT_NE(it, lits.end());
- it = std::find(lits.begin(), lits.end(), Lit(i*2+1, true));
- EXPECT_NE(it, lits.end());
- }
-
- EXPECT_EQ(lits.size(), 10*2);
-}
-
-TEST(propagate, prop_complex)
-{
- SATSolver s;
- s.new_vars(30);
-
- s.add_clause(str_to_cl("-1"));
- s.add_clause(str_to_cl("1, 2"));
-
- s.add_clause(str_to_cl("-5, 6"));
- s.add_clause(str_to_cl("5"));
-
- s.add_clause(str_to_cl("1, -2, -5, -6, 7"));
-
- vector<Lit> lits = s.get_zero_assigned_lits();
- vector<Lit>::iterator it;
- it = std::find(lits.begin(), lits.end(), Lit(6, true));
- EXPECT_EQ(lits.size(), 5);
-}
-
-TEST(independent, indep1)
-{
- SolverConf conf;
- conf.simplify_at_startup = true;
- SATSolver s(&conf);
-
- s.new_vars(30);
- s.add_clause(str_to_cl("1, 2, 3, 4"));
- s.add_clause(str_to_cl("-5, 6"));
-
- vector<uint32_t> x{4U};
- s.set_independent_vars(&x);
-
- lbool ret = s.solve(NULL, true);
- EXPECT_EQ(ret, l_True);
- EXPECT_EQ(s.get_model()[0], l_Undef);
- EXPECT_EQ(s.get_model()[1], l_Undef);
- EXPECT_NE(s.get_model()[4], l_Undef);
-
- ret = s.solve();
- EXPECT_EQ(ret, l_True);
- EXPECT_NE(s.get_model()[0], l_Undef);
- EXPECT_NE(s.get_model()[1], l_Undef);
- EXPECT_NE(s.get_model()[4], l_Undef);
-}
-
-TEST(independent, indep2)
-{
- SolverConf conf;
- conf.simplify_at_startup = true;
- SATSolver s(&conf);
-
- s.new_vars(30);
- s.add_clause(str_to_cl("1, 2, 3, 4"));
- s.add_clause(str_to_cl("-5, 6"));
-
- vector<uint32_t> x{0U,1U,2U,3U,4U,5U};
- s.set_independent_vars(&x);
-
- lbool ret = s.solve(NULL, true);
- EXPECT_EQ(ret, l_True);
- for(uint32_t i = 0; i < 6; i++) {
- EXPECT_NE(s.get_model()[i], l_Undef);
- }
- EXPECT_EQ(s.get_model()[6], l_Undef);
-}
-
-
-
-TEST(xor_recovery, find_1_3_xor)
-{
- SATSolver s;
- s.new_vars(30);
- s.set_no_bve();
-
- s.add_xor_clause(vector<unsigned>{0U, 1U, 2U}, false);
- s.simplify();
-
- vector<std::pair<vector<uint32_t>, bool> > xors = s.get_recovered_xors(false);
- EXPECT_EQ(xors.size(), 1);
-}
-
-TEST(xor_recovery, find_1_3_xor2)
-{
- SATSolver s;
- s.new_vars(30);
- s.set_no_bve();
-
- s.add_xor_clause(vector<unsigned>{0U, 1U, 2U}, true);
- s.simplify();
-
- vector<std::pair<vector<uint32_t>, bool> > xors = s.get_recovered_xors(false);
- EXPECT_EQ(xors.size(), 1);
-}
-
-TEST(xor_recovery, find_2_3_xor)
-{
- SATSolver s;
- s.new_vars(30);
- s.set_no_bve();
-
- s.add_clause(str_to_cl("1,2,3,4,5"));
- s.add_xor_clause(vector<unsigned>{0U, 1U, 2U}, false);
- s.add_xor_clause(vector<unsigned>{0U, 2U, 3U}, false);
- s.simplify();
-
- vector<std::pair<vector<uint32_t>, bool> > xors = s.get_recovered_xors(false);
- EXPECT_EQ(xors.size(), 2);
-}
-
-TEST(xor_recovery, find_2_3_xor_elongate)
-{
- SATSolver s;
- s.new_vars(30);
- s.set_no_bve();
-
- s.add_clause(str_to_cl("1,2,3,4,5"));
- s.add_xor_clause(vector<unsigned>{0U, 1U, 2U}, false);
- s.add_xor_clause(vector<unsigned>{0U, 3U, 4U}, false);
- s.simplify();
-
- vector<std::pair<vector<uint32_t>, bool> > xors = s.get_recovered_xors(true);
- EXPECT_EQ(xors.size(), 1);
- EXPECT_EQ(xors[0].first, (vector<uint32_t>{1U, 2U, 3U, 4U}));
- EXPECT_EQ(xors[0].second, false);
-}
-
-TEST(xor_recovery, find_1_3_xor_exact)
-{
- SATSolver s;
- s.new_vars(30);
- s.set_no_bve();
-
- s.add_xor_clause(vector<unsigned>{0U, 1U, 2U}, false);
- s.simplify();
-
- vector<std::pair<vector<uint32_t>, bool> > xors = s.get_recovered_xors(false);
- EXPECT_EQ(xors.size(), 1);
- EXPECT_EQ(xors[0].first, (vector<uint32_t>{0U, 1U, 2U}));
- EXPECT_EQ(xors[0].second, false);
-}
-
-TEST(xor_recovery, find_1_3_xor_exact2)
-{
- SATSolver s;
- s.new_vars(30);
- s.set_no_bve();
-
- s.add_xor_clause(vector<unsigned>{0U, 1U, 2U}, true);
- s.simplify();
-
- vector<std::pair<vector<uint32_t>, bool> > xors = s.get_recovered_xors(false);
- EXPECT_EQ(xors.size(), 1);
- EXPECT_EQ(xors[0].first, (vector<uint32_t>{0U, 1U, 2U}));
- EXPECT_EQ(xors[0].second, true);
-}
-
-TEST(xor_recovery, find_1_4_xor_exact)
-{
- SATSolver s;
- s.new_vars(30);
- s.set_no_bve();
-
- s.add_xor_clause(vector<unsigned>{0U, 1U, 2U, 3U}, false);
- s.simplify();
-
- vector<std::pair<vector<uint32_t>, bool> > xors = s.get_recovered_xors(false);
- EXPECT_EQ(xors.size(), 1);
- EXPECT_EQ(xors[0].first, (vector<uint32_t>{0U, 1U, 2U, 3U}));
-}
-
-TEST(xor_recovery, find_xor_one_only)
-{
- SATSolver s;
- s.new_vars(30);
- s.set_no_bve();
-
- s.add_xor_clause(vector<unsigned>{0U, 1U, 2U, 3U, 4U, 5U}, false);
- s.simplify();
-
- vector<std::pair<vector<uint32_t>, bool> > xors = s.get_recovered_xors(true);
- EXPECT_EQ(xors.size(), 1);
- EXPECT_EQ(xors[0].first, (vector<uint32_t>{0U, 1U, 2U, 3U, 4U, 5U}));
-}
-
-TEST(xor_recovery, find_xor_none_because_internal_var)
-{
- SATSolver s;
- s.new_vars(30);
- s.set_no_bve();
-
- s.add_xor_clause(vector<unsigned>{0U, 1U, 2U, 3U, 4U, 5U}, true);
- s.simplify();
-
- vector<std::pair<vector<uint32_t>, bool> > xors = s.get_recovered_xors(false);
- EXPECT_EQ(xors.size(), 0);
-}
-
-//TODO the renubmering make 31 out of 3 and then it's not "outside" anymore...
-TEST(xor_recovery, DISABLED_find_xor_renumber)
-{
- SATSolver s;
- s.new_vars(30);
- s.set_no_bve();
- s.set_verbosity(5);
-
- s.add_xor_clause(vector<unsigned>{0U, 1U}, false);
- s.add_xor_clause(vector<unsigned>{0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U}, true);
- s.simplify();
- s.simplify();
-
- vector<std::pair<vector<uint32_t>, bool> > xors = s.get_recovered_xors(true);
- EXPECT_EQ(xors.size(), 1);
- EXPECT_EQ(xors[0].first, (vector<uint32_t>{1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U}));
-}
-
-
-int main(int argc, char **argv) {
- ::testing::InitGoogleTest(&argc, argv);
- return RUN_ALL_TESTS();
-}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback