LCOV - code coverage report
Current view: top level - buildbot/coverage/build/test/unit/api/c - capi_uncovered_black.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 321 321 100.0 %
Date: 2024-11-29 12:38:33 Functions: 34 35 97.1 %
Branches: 39 78 50.0 %

           Branch data     Line data    Source code
       1                 :            : /******************************************************************************
       2                 :            :  * Top contributors (to current version):
       3                 :            :  *   Aina Niemetz
       4                 :            :  *
       5                 :            :  * This file is part of the cvc5 project.
       6                 :            :  *
       7                 :            :  * Copyright (c) 2009-2024 by the authors listed in the file AUTHORS
       8                 :            :  * in the top-level source directory and their institutional affiliations.
       9                 :            :  * All rights reserved.  See the file COPYING in the top-level source
      10                 :            :  * directory for licensing information.
      11                 :            :  * ****************************************************************************
      12                 :            :  *
      13                 :            :  * Testing functions that are not exposed by the C API for code coverage.
      14                 :            :  */
      15                 :            : 
      16                 :            : #include <cvc5/cvc5.h>
      17                 :            : #include <cvc5/cvc5_parser.h>
      18                 :            : 
      19                 :            : #include "gtest/gtest.h"
      20                 :            : 
      21                 :            : namespace cvc5::internal::test {
      22                 :            : 
      23                 :            : class TestCApiBlackUncovered : public ::testing::Test
      24                 :            : {
      25                 :            :  protected:
      26                 :         13 :   void SetUp() override
      27                 :            :   {
      28                 :         13 :     d_solver.reset(new cvc5::Solver(d_tm));
      29                 :         13 :     d_bool = d_tm.getBooleanSort();
      30                 :         13 :     d_int = d_tm.getIntegerSort();
      31                 :         13 :   }
      32                 :            :   cvc5::TermManager d_tm;
      33                 :            :   std::unique_ptr<cvc5::Solver> d_solver;
      34                 :            :   cvc5::Sort d_bool;
      35                 :            :   cvc5::Sort d_int;
      36                 :            : };
      37                 :            : 
      38                 :          2 : TEST_F(TestCApiBlackUncovered, deprecated)
      39                 :            : {
      40                 :          1 :   std::stringstream ss;
      41                 :          1 :   ss << cvc5::Kind::EQUAL << cvc5::kindToString(cvc5::Kind::EQUAL);
      42                 :          1 :   ss << cvc5::SortKind::ARRAY_SORT
      43                 :          1 :      << cvc5::sortKindToString(cvc5::SortKind::ARRAY_SORT);
      44                 :            : 
      45                 :          1 :   Solver slv;
      46                 :          1 :   (void)slv.getBooleanSort();
      47                 :          1 :   (void)slv.getIntegerSort();
      48                 :          1 :   (void)slv.getRealSort();
      49                 :          1 :   (void)slv.getRegExpSort();
      50                 :          1 :   (void)slv.getRoundingModeSort();
      51                 :          1 :   (void)slv.getStringSort();
      52                 :          1 :   (void)slv.mkArraySort(slv.getBooleanSort(), slv.getIntegerSort());
      53                 :          1 :   (void)slv.mkBitVectorSort(32);
      54                 :          1 :   (void)slv.mkFloatingPointSort(5, 11);
      55                 :          1 :   (void)slv.mkFiniteFieldSort("37");
      56                 :            : 
      57                 :            :   {
      58                 :          3 :     DatatypeDecl decl = slv.mkDatatypeDecl("list");
      59                 :          2 :     DatatypeConstructorDecl cons = slv.mkDatatypeConstructorDecl("cons");
      60                 :          1 :     cons.addSelector("head", slv.getIntegerSort());
      61                 :          1 :     decl.addConstructor(cons);
      62                 :          1 :     decl.addConstructor(slv.mkDatatypeConstructorDecl("nil"));
      63                 :          1 :     (void)slv.mkDatatypeSort(decl);
      64                 :            :   }
      65                 :            :   {
      66                 :          2 :     DatatypeDecl decl1 = slv.mkDatatypeDecl("list1");
      67                 :          2 :     DatatypeConstructorDecl cons1 = slv.mkDatatypeConstructorDecl("cons1");
      68                 :          1 :     cons1.addSelector("head1", slv.getIntegerSort());
      69                 :          1 :     decl1.addConstructor(cons1);
      70                 :          2 :     DatatypeConstructorDecl nil1 = slv.mkDatatypeConstructorDecl("nil1");
      71                 :          1 :     decl1.addConstructor(nil1);
      72                 :          2 :     DatatypeDecl decl2 = slv.mkDatatypeDecl("list2");
      73                 :          2 :     DatatypeConstructorDecl cons2 = slv.mkDatatypeConstructorDecl("cons2");
      74                 :          1 :     cons2.addSelector("head2", slv.getIntegerSort());
      75                 :          1 :     decl2.addConstructor(cons2);
      76                 :          2 :     DatatypeConstructorDecl nil2 = slv.mkDatatypeConstructorDecl("nil2");
      77                 :          1 :     decl2.addConstructor(nil2);
      78                 :          4 :     std::vector<DatatypeDecl> decls = {decl1, decl2};
      79 [ +  - ][ +  - ]:          1 :     ASSERT_NO_THROW(slv.mkDatatypeSorts(decls));
      80                 :            :   }
      81                 :            : 
      82                 :          2 :   (void)slv.mkFunctionSort({slv.mkUninterpretedSort("u")},
      83                 :          3 :                            slv.getIntegerSort());
      84                 :          1 :   (void)slv.mkParamSort("T");
      85                 :          2 :   (void)slv.mkPredicateSort({slv.getIntegerSort()});
      86                 :            : 
      87 [ +  + ][ -  - ]:          7 :   (void)slv.mkRecordSort({std::make_pair("b", slv.getBooleanSort()),
      88                 :          2 :                           std::make_pair("bv", slv.mkBitVectorSort(8)),
      89                 :          5 :                           std::make_pair("i", slv.getIntegerSort())});
      90                 :          1 :   (void)slv.mkSetSort(slv.getBooleanSort());
      91                 :          1 :   (void)slv.mkBagSort(slv.getBooleanSort());
      92                 :          1 :   (void)slv.mkSequenceSort(slv.getBooleanSort());
      93                 :          1 :   (void)slv.mkAbstractSort(SortKind::ARRAY_SORT);
      94                 :          1 :   (void)slv.mkUninterpretedSort("u");
      95                 :          1 :   (void)slv.mkUnresolvedDatatypeSort("u");
      96                 :          1 :   (void)slv.mkUninterpretedSortConstructorSort(2, "s");
      97                 :          2 :   (void)slv.mkTupleSort({slv.getIntegerSort()});
      98                 :          1 :   (void)slv.mkNullableSort({slv.getIntegerSort()});
      99 [ +  + ][ -  - ]:          4 :   (void)slv.mkTerm(Kind::STRING_IN_REGEXP,
     100                 :          4 :                    {slv.mkConst(slv.getStringSort(), "s"), slv.mkRegexpAll()});
     101                 :          1 :   (void)slv.mkTerm(slv.mkOp(Kind::REGEXP_ALLCHAR));
     102                 :          2 :   (void)slv.mkTuple({slv.mkBitVector(3, "101", 2)});
     103                 :          1 :   (void)slv.mkNullableSome(slv.mkBitVector(3, "101", 2));
     104                 :          1 :   (void)slv.mkNullableVal(slv.mkNullableSome(slv.mkInteger(5)));
     105                 :          1 :   (void)slv.mkNullableNull(slv.mkNullableSort(slv.getBooleanSort()));
     106                 :          1 :   (void)slv.mkNullableIsNull(slv.mkNullableSome(slv.mkInteger(5)));
     107                 :          1 :   (void)slv.mkNullableIsSome(slv.mkNullableSome(slv.mkInteger(5)));
     108                 :          1 :   (void)slv.mkNullableSort(slv.getBooleanSort());
     109 [ +  + ][ -  - ]:          4 :   (void)slv.mkNullableLift(Kind::ADD,
     110                 :          1 :                            {slv.mkNullableSome(slv.mkInteger(1)),
     111                 :          4 :                             slv.mkNullableSome(slv.mkInteger(2))});
     112                 :          1 :   (void)slv.mkOp(Kind::DIVISIBLE, "2147483648");
     113                 :          1 :   (void)slv.mkOp(Kind::TUPLE_PROJECT, {1, 2, 2});
     114                 :            : 
     115                 :          1 :   (void)slv.mkTrue();
     116                 :          1 :   (void)slv.mkFalse();
     117                 :          1 :   (void)slv.mkBoolean(true);
     118                 :          1 :   (void)slv.mkPi();
     119                 :          1 :   (void)slv.mkInteger("2");
     120                 :          1 :   (void)slv.mkInteger(2);
     121                 :          1 :   (void)slv.mkReal("2.1");
     122                 :          1 :   (void)slv.mkReal(2);
     123                 :          1 :   (void)slv.mkReal(2, 3);
     124                 :          1 :   (void)slv.mkRegexpAll();
     125                 :          1 :   (void)slv.mkRegexpAllchar();
     126                 :          1 :   (void)slv.mkRegexpNone();
     127                 :          1 :   (void)slv.mkEmptySet(slv.mkSetSort(slv.getIntegerSort()));
     128                 :          1 :   (void)slv.mkEmptyBag(slv.mkBagSort(slv.getIntegerSort()));
     129                 :          1 :   (void)slv.mkSepEmp();
     130                 :          1 :   (void)slv.mkSepNil(slv.getIntegerSort());
     131                 :          1 :   (void)slv.mkString("asdfasdf");
     132                 :          1 :   std::wstring s;
     133                 :          1 :   (void)slv.mkString(s);
     134                 :          1 :   (void)slv.mkEmptySequence(slv.getIntegerSort());
     135                 :          1 :   (void)slv.mkUniverseSet(slv.getIntegerSort());
     136                 :          1 :   (void)slv.mkBitVector(32, 2);
     137                 :          1 :   (void)slv.mkBitVector(32, "2", 10);
     138                 :          1 :   (void)slv.mkFiniteFieldElem("0", slv.mkFiniteFieldSort("7"));
     139                 :          1 :   (void)slv.mkConstArray(
     140                 :          2 :       slv.mkArraySort(slv.getIntegerSort(), slv.getIntegerSort()),
     141                 :          2 :       slv.mkInteger(2));
     142                 :          1 :   (void)slv.mkFloatingPointPosInf(5, 11);
     143                 :          1 :   (void)slv.mkFloatingPointNegInf(5, 11);
     144                 :          1 :   (void)slv.mkFloatingPointNaN(5, 11);
     145                 :          1 :   (void)slv.mkFloatingPointPosZero(5, 11);
     146                 :          1 :   (void)slv.mkFloatingPointNegZero(5, 11);
     147                 :          1 :   (void)slv.mkRoundingMode(RoundingMode::ROUND_NEAREST_TIES_TO_EVEN);
     148                 :          1 :   (void)slv.mkFloatingPoint(5, 11, slv.mkBitVector(16));
     149                 :          1 :   (void)slv.mkFloatingPoint(
     150                 :          2 :       slv.mkBitVector(1), slv.mkBitVector(5), slv.mkBitVector(10));
     151                 :          1 :   (void)slv.mkCardinalityConstraint(slv.mkUninterpretedSort("u"), 3);
     152                 :            : 
     153                 :          1 :   (void)slv.mkVar(slv.getIntegerSort());
     154                 :          2 :   (void)slv.mkDatatypeDecl("paramlist", {slv.mkParamSort("T")});
     155                 :          1 :   (void)cvc5::parser::SymbolManager(&slv);
     156                 :            : }
     157                 :            : 
     158                 :          2 : TEST_F(TestCApiBlackUncovered, stream_operators)
     159                 :            : {
     160                 :          2 :   std::stringstream ss;
     161                 :          1 :   ss << cvc5::Kind::EQUAL << std::to_string(cvc5::Kind::EQUAL);
     162                 :          1 :   ss << cvc5::SortKind::ARRAY_SORT
     163                 :          1 :      << std::to_string(cvc5::SortKind::ARRAY_SORT);
     164                 :          1 :   ss << cvc5::RoundingMode::ROUND_TOWARD_NEGATIVE
     165                 :          1 :      << std::to_string(cvc5::RoundingMode::ROUND_TOWARD_NEGATIVE);
     166                 :          1 :   ss << cvc5::UnknownExplanation::UNKNOWN_REASON
     167                 :          1 :      << std::to_string(cvc5::UnknownExplanation::UNKNOWN_REASON);
     168                 :          1 :   ss << cvc5::modes::BlockModelsMode::LITERALS
     169                 :          1 :      << std::to_string(cvc5::modes::BlockModelsMode::LITERALS);
     170                 :          1 :   ss << cvc5::modes::LearnedLitType::PREPROCESS
     171                 :          1 :      << std::to_string(cvc5::modes::LearnedLitType::PREPROCESS);
     172                 :          1 :   ss << cvc5::modes::ProofComponent::FULL
     173                 :          1 :      << std::to_string(cvc5::modes::ProofComponent::FULL);
     174                 :          1 :   ss << cvc5::modes::FindSynthTarget::ENUM
     175                 :          1 :      << std::to_string(cvc5::modes::FindSynthTarget::ENUM);
     176                 :          1 :   ss << cvc5::modes::InputLanguage::SMT_LIB_2_6
     177                 :          1 :      << std::to_string(cvc5::modes::InputLanguage::SMT_LIB_2_6);
     178                 :          1 :   ss << cvc5::modes::ProofFormat::LFSC
     179                 :          1 :      << std::to_string(cvc5::modes::ProofFormat::LFSC);
     180                 :          1 :   ss << cvc5::ProofRule::ASSUME << std::to_string(cvc5::ProofRule::ASSUME);
     181                 :          1 :   ss << cvc5::ProofRewriteRule::NONE
     182                 :          1 :      << std::to_string(cvc5::ProofRewriteRule::NONE);
     183                 :          1 :   ss << cvc5::SkolemId::PURIFY << std::to_string(cvc5::SkolemId::PURIFY);
     184                 :          1 :   ss << d_tm.mkOp(Kind::BITVECTOR_EXTRACT, {4, 0});
     185                 :          1 :   ss << d_tm.mkDatatypeConstructorDecl("cons");
     186                 :            : 
     187                 :          2 :   Sort intsort = d_tm.getIntegerSort();
     188                 :          2 :   Term x = d_tm.mkConst(intsort, "x");
     189                 :            : 
     190 [ +  + ][ -  - ]:          3 :   ss << std::vector<Term>{x, x};
     191 [ +  + ][ -  - ]:          3 :   ss << std::set<Term>{x, x};
     192 [ +  + ][ -  - ]:          3 :   ss << std::unordered_set<Term>{x, x};
     193                 :            : 
     194                 :          1 :   d_solver->setOption("sygus", "true");
     195                 :          1 :   (void)d_solver->synthFun("f", {}, d_bool);
     196                 :          1 :   ss << d_solver->checkSynth();
     197                 :          2 :   ss << d_solver->mkGrammar({}, {d_tm.mkVar(d_bool)});
     198                 :          1 :   ss << d_solver->checkSat();
     199                 :            : 
     200                 :          3 :   DatatypeDecl decl = d_tm.mkDatatypeDecl("list");
     201                 :          3 :   DatatypeConstructorDecl cons = d_tm.mkDatatypeConstructorDecl("cons");
     202                 :          1 :   cons.addSelector("head", d_int);
     203                 :          1 :   decl.addConstructor(cons);
     204                 :          2 :   Datatype dt = d_tm.mkDatatypeSort(decl).getDatatype();
     205                 :          1 :   ss << dt;
     206                 :          2 :   DatatypeConstructor ctor = dt[0];
     207                 :          1 :   ss << ctor;
     208                 :          3 :   DatatypeSelector head = ctor.getSelector("head");
     209                 :          1 :   ss << head;
     210                 :            : 
     211                 :          3 :   OptionInfo info = d_solver->getOptionInfo("verbose");
     212                 :          1 :   ss << info;
     213                 :          1 : }
     214                 :            : 
     215                 :          2 : TEST_F(TestCApiBlackUncovered, default_constructors)
     216                 :            : {
     217                 :          1 :   (void)cvc5::Op();
     218                 :          1 :   (void)cvc5::Datatype();
     219                 :          1 :   (void)cvc5::DatatypeDecl();
     220                 :          1 :   (void)cvc5::DatatypeConstructorDecl();
     221                 :          1 :   (void)cvc5::DatatypeConstructor();
     222                 :          1 :   (void)cvc5::DatatypeSelector();
     223                 :          1 :   (void)cvc5::SynthResult();
     224                 :          1 :   (void)cvc5::Grammar();
     225                 :          1 :   (void)cvc5::Result();
     226                 :          1 :   (void)cvc5::Proof();
     227                 :          1 :   (void)cvc5::parser::Command();
     228                 :          1 : }
     229                 :            : 
     230                 :          2 : TEST_F(TestCApiBlackUncovered, comparison_operators)
     231                 :            : {
     232                 :          1 :   cvc5::Sort sort;
     233         [ -  + ]:          1 :   ASSERT_TRUE(sort <= sort);
     234         [ -  + ]:          1 :   ASSERT_TRUE(sort >= sort);
     235                 :          1 :   cvc5::Term term;
     236         [ -  + ]:          1 :   ASSERT_TRUE(term <= term);
     237         [ -  + ]:          1 :   ASSERT_TRUE(term >= term);
     238                 :            : }
     239                 :            : 
     240                 :          2 : TEST_F(TestCApiBlackUncovered, term_creation)
     241                 :            : {
     242                 :          1 :   d_tm.mkTrue().notTerm();
     243                 :          1 :   d_tm.mkTrue().andTerm(d_tm.mkTrue());
     244                 :          1 :   d_tm.mkTrue().orTerm(d_tm.mkTrue());
     245                 :          1 :   d_tm.mkTrue().xorTerm(d_tm.mkTrue());
     246                 :          1 :   d_tm.mkTrue().eqTerm(d_tm.mkTrue());
     247                 :          1 :   d_tm.mkTrue().impTerm(d_tm.mkTrue());
     248                 :          1 :   d_tm.mkTrue().iteTerm(d_tm.mkTrue(), d_tm.mkFalse());
     249                 :          1 : }
     250                 :            : 
     251                 :          2 : TEST_F(TestCApiBlackUncovered, term_iterators)
     252                 :            : {
     253                 :          1 :   Term t = d_tm.mkInteger(0);
     254 [ +  + ][ -  - ]:          3 :   t = d_tm.mkTerm(Kind::GT, {t, t});
     255                 :          1 :   Term::const_iterator it;
     256                 :          1 :   it = t.begin();
     257                 :          1 :   auto it2(it);
     258         [ -  + ]:          1 :   ASSERT_FALSE(it == t.end());
     259         [ -  + ]:          1 :   ASSERT_FALSE(it != it2);
     260                 :          1 :   *it2;
     261                 :          1 :   ++it;
     262                 :          1 :   it++;
     263                 :            : }
     264                 :            : 
     265                 :          2 : TEST_F(TestCApiBlackUncovered, dt_iterators)
     266                 :            : {
     267                 :            :   // default constructors
     268                 :            : 
     269                 :          2 :   DatatypeDecl decl = d_tm.mkDatatypeDecl("list");
     270                 :          2 :   DatatypeConstructorDecl cons = d_tm.mkDatatypeConstructorDecl("cons");
     271                 :          1 :   cons.addSelector("head", d_int);
     272                 :          1 :   decl.addConstructor(cons);
     273                 :          1 :   Sort list = d_tm.mkDatatypeSort(decl);
     274                 :          1 :   Datatype dt = list.getDatatype();
     275                 :          2 :   DatatypeConstructor dt_cons = dt["cons"];
     276                 :          2 :   DatatypeSelector dt_sel = dt_cons["head"];
     277                 :            : 
     278                 :            :   {
     279                 :          1 :     Datatype::const_iterator it;
     280                 :          1 :     it = dt.begin();
     281         [ -  + ]:          1 :     ASSERT_TRUE(it != dt.end());
     282                 :          1 :     *it;
     283                 :          1 :     it->getName();
     284                 :          1 :     ++it;
     285         [ -  + ]:          1 :     ASSERT_TRUE(it == dt.end());
     286                 :          1 :     it++;
     287                 :            :   }
     288                 :            :   {
     289                 :          1 :     DatatypeConstructor::const_iterator it;
     290                 :          1 :     it = dt_cons.begin();
     291         [ -  + ]:          1 :     ASSERT_TRUE(it != dt_cons.end());
     292                 :          1 :     *it;
     293                 :          1 :     it->getName();
     294                 :          1 :     ++it;
     295                 :          1 :     it = dt_cons.begin();
     296                 :          1 :     it++;
     297         [ -  + ]:          1 :     ASSERT_TRUE(it == dt_cons.end());
     298                 :            :   }
     299                 :            : }
     300                 :            : 
     301                 :          2 : TEST_F(TestCApiBlackUncovered, stats_iterators)
     302                 :            : {
     303                 :          1 :   Stat stat;
     304                 :          1 :   stat = Stat();
     305                 :          1 :   Statistics stats = d_solver->getStatistics();
     306                 :          1 :   auto it = stats.begin();
     307                 :          1 :   it++;
     308                 :          1 :   it--;
     309                 :          1 :   ++it;
     310                 :          1 :   --it;
     311         [ -  + ]:          1 :   ASSERT_EQ(it, stats.begin());
     312         [ -  + ]:          1 :   ASSERT_FALSE(stats.begin() == stats.end());
     313         [ -  + ]:          1 :   ASSERT_TRUE(stats.begin() != stats.end());
     314                 :          2 :   std::stringstream ss;
     315                 :          1 :   ss << stats;
     316                 :          1 :   ss << it->first;
     317                 :            : }
     318                 :            : 
     319                 :          2 : TEST_F(TestCApiBlackUncovered, check_sat_assuming)
     320                 :            : {
     321                 :          1 :   d_solver->checkSatAssuming(d_tm.mkTrue());
     322                 :          1 : }
     323                 :            : 
     324                 :          2 : TEST_F(TestCApiBlackUncovered, option_info)
     325                 :            : {
     326                 :          2 :   cvc5::OptionInfo info = d_solver->getOptionInfo("print-success");
     327                 :          1 :   (void)info.boolValue();
     328                 :          1 :   info = d_solver->getOptionInfo("verbosity");
     329                 :          1 :   (void)info.intValue();
     330                 :          1 :   info = d_solver->getOptionInfo("rlimit");
     331                 :          1 :   (void)info.uintValue();
     332                 :          1 :   info = d_solver->getOptionInfo("random-freq");
     333                 :          1 :   (void)info.doubleValue();
     334                 :          1 :   info = d_solver->getOptionInfo("force-logic");
     335                 :          1 :   (void)info.stringValue();
     336                 :          1 : }
     337                 :            : 
     338                 :            : class PluginListen : public Plugin
     339                 :            : {
     340                 :            :  public:
     341                 :          1 :   PluginListen(TermManager& tm)
     342                 :          1 :       : Plugin(tm), d_hasSeenTheoryLemma(false), d_hasSeenSatClause(false)
     343                 :            :   {
     344                 :          1 :   }
     345                 :          1 :   virtual ~PluginListen() {}
     346                 :          3 :   void notifySatClause(const Term& cl) override
     347                 :            :   {
     348                 :          3 :     Plugin::notifySatClause(cl);  // Cover default implementation
     349                 :          3 :     d_hasSeenSatClause = true;
     350                 :          3 :   }
     351                 :          1 :   bool hasSeenSatClause() const { return d_hasSeenSatClause; }
     352                 :          4 :   void notifyTheoryLemma(const Term& lem) override
     353                 :            :   {
     354                 :          4 :     Plugin::notifyTheoryLemma(lem);  // Cover default implementation
     355                 :          4 :     d_hasSeenTheoryLemma = true;
     356                 :          4 :   }
     357                 :          1 :   bool hasSeenTheoryLemma() const { return d_hasSeenTheoryLemma; }
     358                 :          1 :   std::string getName() override { return "PluginListen"; }
     359                 :            : 
     360                 :            :  private:
     361                 :            :   /** have we seen a theory lemma? */
     362                 :            :   bool d_hasSeenTheoryLemma;
     363                 :            :   /** have we seen a SAT clause? */
     364                 :            :   bool d_hasSeenSatClause;
     365                 :            : };
     366                 :            : 
     367                 :          2 : TEST_F(TestCApiBlackUncovered, plugin_uncovered_default)
     368                 :            : {
     369                 :            :   // NOTE: this shouldn't be necessary but ensures notifySatClause is called
     370                 :            :   // here.
     371                 :          1 :   d_solver->setOption("plugin-notify-sat-clause-in-solve", "false");
     372                 :          1 :   PluginListen pl(d_tm);
     373                 :          1 :   d_solver->addPlugin(pl);
     374                 :          1 :   Sort stringSort = d_tm.getStringSort();
     375                 :          1 :   Term x = d_tm.mkConst(stringSort, "x");
     376                 :          1 :   Term y = d_tm.mkConst(stringSort, "y");
     377                 :          4 :   Term ctn1 = d_tm.mkTerm(Kind::STRING_CONTAINS, {x, y});
     378                 :          4 :   Term ctn2 = d_tm.mkTerm(Kind::STRING_CONTAINS, {y, x});
     379 [ +  + ][ -  - ]:          3 :   d_solver->assertFormula(d_tm.mkTerm(Kind::OR, {ctn1, ctn2}));
     380                 :          3 :   Term lx = d_tm.mkTerm(Kind::STRING_LENGTH, {x});
     381                 :          3 :   Term ly = d_tm.mkTerm(Kind::STRING_LENGTH, {y});
     382                 :          4 :   Term lc = d_tm.mkTerm(Kind::GT, {lx, ly});
     383                 :          1 :   d_solver->assertFormula(lc);
     384         [ -  + ]:          1 :   ASSERT_TRUE(d_solver->checkSat().isSat());
     385                 :            :   // above input formulas should induce a theory lemma and SAT clause learning
     386         [ -  + ]:          1 :   ASSERT_TRUE(pl.hasSeenTheoryLemma());
     387         [ -  + ]:          1 :   ASSERT_TRUE(pl.hasSeenSatClause());
     388                 :            : }
     389                 :            : 
     390                 :          2 : TEST_F(TestCApiBlackUncovered, parser)
     391                 :            : {
     392                 :          1 :   parser::Command command;
     393                 :          1 :   Solver solver(d_tm);
     394                 :          1 :   parser::InputParser parser(&solver);
     395                 :          1 :   (void)parser.getSolver();
     396                 :          1 :   std::stringstream ss;
     397                 :          1 :   ss << command << std::endl;
     398                 :          1 :   parser.setStreamInput(modes::InputLanguage::SMT_LIB_2_6, ss, "Parser");
     399                 :          1 :   parser::ParserException defaultConstructor;
     400                 :          1 :   std::string message = "error";
     401                 :          1 :   const char* cMessage = "error";
     402                 :          1 :   std::string filename = "file.smt2";
     403                 :          1 :   parser::ParserException stringConstructor(message);
     404                 :          1 :   parser::ParserException cStringConstructor(cMessage);
     405                 :          1 :   parser::ParserException exception(message, filename, 10, 11);
     406                 :          1 :   exception.toStream(ss);
     407         [ -  + ]:          1 :   ASSERT_EQ(message, exception.getMessage());
     408         [ -  + ]:          1 :   ASSERT_EQ(message, exception.getMessage());
     409         [ -  + ]:          2 :   ASSERT_EQ(filename, exception.getFilename());
     410         [ -  + ]:          1 :   ASSERT_EQ(10, exception.getLine());
     411         [ -  + ]:          1 :   ASSERT_EQ(11, exception.getColumn());
     412                 :            : 
     413                 :          2 :   parser::ParserEndOfFileException eofDefault;
     414                 :          2 :   parser::ParserEndOfFileException eofString(message);
     415                 :          2 :   parser::ParserEndOfFileException eofCMessage(cMessage);
     416                 :          1 :   parser::ParserEndOfFileException eof(message, filename, 10, 11);
     417                 :            : }
     418                 :            : 
     419                 :          2 : TEST_F(TestCApiBlackUncovered, driver_options)
     420                 :            : {
     421                 :          1 :   auto dopts = d_solver->getDriverOptions();
     422                 :          1 :   dopts.err();
     423                 :          1 :   dopts.in();
     424                 :          1 :   dopts.out();
     425                 :          1 : }
     426                 :            : 
     427                 :            : }  // namespace cvc5::internal::test

Generated by: LCOV version 1.14