GCC Code Coverage Report
Directory: . Exec Total Coverage
File: test/unit/api/grammar_black.cpp Lines: 62 62 100.0 %
Date: 2021-08-01 Branches: 250 700 35.7 %

Line Exec Source
1
/******************************************************************************
2
 * Top contributors (to current version):
3
 *   Aina Niemetz, Abdalrhman Mohamed
4
 *
5
 * This file is part of the cvc5 project.
6
 *
7
 * Copyright (c) 2009-2021 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
 * Black box testing of the guards of the C++ API functions.
14
 */
15
16
#include "test_api.h"
17
18
namespace cvc5 {
19
20
using namespace api;
21
22
namespace test {
23
24
16
class TestApiBlackGrammar : public TestApi
25
{
26
};
27
28
13
TEST_F(TestApiBlackGrammar, addRule)
29
{
30
4
  Sort boolean = d_solver.getBooleanSort();
31
4
  Sort integer = d_solver.getIntegerSort();
32
33
4
  Term nullTerm;
34
4
  Term start = d_solver.mkVar(boolean);
35
4
  Term nts = d_solver.mkVar(boolean);
36
37
4
  Grammar g = d_solver.mkSygusGrammar({}, {start});
38
39
2
  ASSERT_NO_THROW(g.addRule(start, d_solver.mkBoolean(false)));
40
41
4
  ASSERT_THROW(g.addRule(nullTerm, d_solver.mkBoolean(false)),
42
2
               CVC5ApiException);
43
4
  ASSERT_THROW(g.addRule(start, nullTerm), CVC5ApiException);
44
4
  ASSERT_THROW(g.addRule(nts, d_solver.mkBoolean(false)), CVC5ApiException);
45
4
  ASSERT_THROW(g.addRule(start, d_solver.mkInteger(0)), CVC5ApiException);
46
4
  ASSERT_THROW(g.addRule(start, nts), CVC5ApiException);
47
48
2
  d_solver.synthFun("f", {}, boolean, g);
49
50
4
  ASSERT_THROW(g.addRule(start, d_solver.mkBoolean(false)), CVC5ApiException);
51
}
52
53
13
TEST_F(TestApiBlackGrammar, addRules)
54
{
55
4
  Sort boolean = d_solver.getBooleanSort();
56
4
  Sort integer = d_solver.getIntegerSort();
57
58
4
  Term nullTerm;
59
4
  Term start = d_solver.mkVar(boolean);
60
4
  Term nts = d_solver.mkVar(boolean);
61
62
4
  Grammar g = d_solver.mkSygusGrammar({}, {start});
63
64
2
  ASSERT_NO_THROW(g.addRules(start, {d_solver.mkBoolean(false)}));
65
66
4
  ASSERT_THROW(g.addRules(nullTerm, {d_solver.mkBoolean(false)}),
67
2
               CVC5ApiException);
68
4
  ASSERT_THROW(g.addRules(start, {nullTerm}), CVC5ApiException);
69
4
  ASSERT_THROW(g.addRules(nts, {d_solver.mkBoolean(false)}), CVC5ApiException);
70
4
  ASSERT_THROW(g.addRules(start, {d_solver.mkInteger(0)}), CVC5ApiException);
71
4
  ASSERT_THROW(g.addRules(start, {nts}), CVC5ApiException);
72
73
2
  d_solver.synthFun("f", {}, boolean, g);
74
75
4
  ASSERT_THROW(g.addRules(start, {d_solver.mkBoolean(false)}),
76
2
               CVC5ApiException);
77
}
78
79
13
TEST_F(TestApiBlackGrammar, addAnyConstant)
80
{
81
4
  Sort boolean = d_solver.getBooleanSort();
82
83
4
  Term nullTerm;
84
4
  Term start = d_solver.mkVar(boolean);
85
4
  Term nts = d_solver.mkVar(boolean);
86
87
4
  Grammar g = d_solver.mkSygusGrammar({}, {start});
88
89
2
  ASSERT_NO_THROW(g.addAnyConstant(start));
90
2
  ASSERT_NO_THROW(g.addAnyConstant(start));
91
92
4
  ASSERT_THROW(g.addAnyConstant(nullTerm), CVC5ApiException);
93
4
  ASSERT_THROW(g.addAnyConstant(nts), CVC5ApiException);
94
95
2
  d_solver.synthFun("f", {}, boolean, g);
96
97
4
  ASSERT_THROW(g.addAnyConstant(start), CVC5ApiException);
98
}
99
100
13
TEST_F(TestApiBlackGrammar, addAnyVariable)
101
{
102
4
  Sort boolean = d_solver.getBooleanSort();
103
104
4
  Term nullTerm;
105
4
  Term x = d_solver.mkVar(boolean);
106
4
  Term start = d_solver.mkVar(boolean);
107
4
  Term nts = d_solver.mkVar(boolean);
108
109
4
  Grammar g1 = d_solver.mkSygusGrammar({x}, {start});
110
4
  Grammar g2 = d_solver.mkSygusGrammar({}, {start});
111
112
2
  ASSERT_NO_THROW(g1.addAnyVariable(start));
113
2
  ASSERT_NO_THROW(g1.addAnyVariable(start));
114
2
  ASSERT_NO_THROW(g2.addAnyVariable(start));
115
116
4
  ASSERT_THROW(g1.addAnyVariable(nullTerm), CVC5ApiException);
117
4
  ASSERT_THROW(g1.addAnyVariable(nts), CVC5ApiException);
118
119
2
  d_solver.synthFun("f", {}, boolean, g1);
120
121
4
  ASSERT_THROW(g1.addAnyVariable(start), CVC5ApiException);
122
}
123
}  // namespace test
124
15
}  // namespace cvc5