LCOV - code coverage report
Current view: top level - buildbot/coverage/build/test/unit/api/cpp - api_term_white.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 46 46 100.0 %
Date: 2026-08-17 10:31:59 Functions: 4 4 100.0 %
Branches: 24 48 50.0 %

           Branch data     Line data    Source code
       1                 :            : /******************************************************************************
       2                 :            :  * This file is part of the cvc5 project.
       3                 :            :  *
       4                 :            :  * Copyright (c) 2009-2026 by the authors listed in the file AUTHORS
       5                 :            :  * in the top-level source directory and their institutional affiliations.
       6                 :            :  * All rights reserved.  See the file COPYING in the top-level source
       7                 :            :  * directory for licensing information.
       8                 :            :  * ****************************************************************************
       9                 :            :  *
      10                 :            :  * White box testing of the Term class.
      11                 :            :  */
      12                 :            : 
      13                 :            : #include "test_api.h"
      14                 :            : 
      15                 :            : namespace cvc5::internal {
      16                 :            : 
      17                 :            : namespace test {
      18                 :            : 
      19                 :            : class TestApiWhiteTerm : public TestApi
      20                 :            : {
      21                 :            : };
      22                 :            : 
      23                 :          4 : TEST_F(TestApiWhiteTerm, getOp)
      24                 :            : {
      25                 :          1 :   Sort intsort = d_tm.getIntegerSort();
      26                 :          1 :   Sort bvsort = d_tm.mkBitVectorSort(8);
      27                 :          1 :   Sort arrsort = d_tm.mkArraySort(bvsort, intsort);
      28                 :          3 :   Sort funsort = d_tm.mkFunctionSort({intsort}, bvsort);
      29                 :            : 
      30                 :          1 :   Term x = d_tm.mkConst(intsort, "x");
      31                 :          1 :   Term a = d_tm.mkConst(arrsort, "a");
      32                 :          1 :   Term b = d_tm.mkConst(bvsort, "b");
      33                 :            : 
      34                 :          4 :   Term ab = d_tm.mkTerm(Kind::SELECT, {a, b});
      35                 :          1 :   Op ext = d_tm.mkOp(Kind::BITVECTOR_EXTRACT, {4, 0});
      36                 :          3 :   Term extb = d_tm.mkTerm(ext, {b});
      37                 :            : 
      38 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(ab.getOp(), Op(d_solver->getTermManager().d_nm, Kind::SELECT));
      39                 :            :   // can compare directly to a Kind (will invoke Op constructor)
      40 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(ab.getOp(), Op(d_solver->getTermManager().d_nm, Kind::SELECT));
      41                 :            : 
      42                 :          1 :   Term f = d_tm.mkConst(funsort, "f");
      43                 :          4 :   Term fx = d_tm.mkTerm(Kind::APPLY_UF, {f, x});
      44                 :            : 
      45 [ -  + ][ +  - ]:          2 :   ASSERT_EQ(fx.getOp(), Op(d_solver->getTermManager().d_nm, Kind::APPLY_UF));
      46                 :            :   // testing rebuild from op and children
      47                 :            : 
      48                 :            :   // Test Datatypes Ops
      49                 :          1 :   Sort sort = d_tm.mkParamSort("T");
      50                 :          3 :   DatatypeDecl listDecl = d_tm.mkDatatypeDecl("paramlist", {sort});
      51                 :          2 :   DatatypeConstructorDecl cons = d_tm.mkDatatypeConstructorDecl("cons");
      52                 :          2 :   DatatypeConstructorDecl nil = d_tm.mkDatatypeConstructorDecl("nil");
      53                 :          1 :   cons.addSelector("head", sort);
      54                 :          1 :   cons.addSelectorSelf("tail");
      55                 :          1 :   listDecl.addConstructor(cons);
      56                 :          1 :   listDecl.addConstructor(nil);
      57                 :          1 :   Sort listSort = d_tm.mkDatatypeSort(listDecl);
      58                 :            :   Sort intListSort =
      59                 :          3 :       listSort.instantiate(std::vector<Sort>{d_tm.getIntegerSort()});
      60                 :          1 :   Term c = d_tm.mkConst(intListSort, "c");
      61                 :          1 :   Datatype list = listSort.getDatatype();
      62                 :            :   // list datatype constructor and selector operator terms
      63                 :          2 :   Term consOpTerm = list.getConstructor("cons").getTerm();
      64                 :          2 :   Term nilOpTerm = list.getConstructor("nil").getTerm();
      65                 :          2 :   Term headOpTerm = list["cons"].getSelector("head").getTerm();
      66                 :          2 :   Term tailOpTerm = list["cons"].getSelector("tail").getTerm();
      67                 :            : 
      68                 :          3 :   Term nilTerm = d_tm.mkTerm(Kind::APPLY_CONSTRUCTOR, {nilOpTerm});
      69                 :          3 :   Term consTerm = d_tm.mkTerm(Kind::APPLY_CONSTRUCTOR,
      70                 :          2 :                               {consOpTerm, d_tm.mkInteger(0), nilTerm});
      71                 :          4 :   Term headTerm = d_tm.mkTerm(Kind::APPLY_SELECTOR, {headOpTerm, consTerm});
      72                 :          4 :   Term tailTerm = d_tm.mkTerm(Kind::APPLY_SELECTOR, {tailOpTerm, consTerm});
      73                 :            : 
      74         [ -  + ]:          2 :   ASSERT_EQ(nilTerm.getOp(),
      75         [ +  - ]:          1 :             Op(d_solver->getTermManager().d_nm, Kind::APPLY_CONSTRUCTOR));
      76         [ -  + ]:          2 :   ASSERT_EQ(consTerm.getOp(),
      77         [ +  - ]:          1 :             Op(d_solver->getTermManager().d_nm, Kind::APPLY_CONSTRUCTOR));
      78         [ -  + ]:          2 :   ASSERT_EQ(headTerm.getOp(),
      79         [ +  - ]:          1 :             Op(d_solver->getTermManager().d_nm, Kind::APPLY_SELECTOR));
      80         [ -  + ]:          2 :   ASSERT_EQ(tailTerm.getOp(),
      81         [ +  - ]:          1 :             Op(d_solver->getTermManager().d_nm, Kind::APPLY_SELECTOR));
      82 [ +  - ][ +  - ]:          1 : }
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
      83                 :            : }  // namespace test
      84                 :            : }  // namespace cvc5::internal

Generated by: LCOV version 1.14