GCC Code Coverage Report
Directory: . Exec Total Coverage
File: test/unit/theory/theory_strings_word_white.cpp Lines: 73 73 100.0 %
Date: 2021-05-22 Branches: 351 1142 30.7 %

Line Exec Source
1
/******************************************************************************
2
 * Top contributors (to current version):
3
 *   Aina Niemetz, Andrew Reynolds
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
 * Unit tests for the strings word utilities
14
 */
15
16
#include <iostream>
17
#include <memory>
18
#include <vector>
19
20
#include "expr/node.h"
21
#include "test_node.h"
22
#include "theory/strings/word.h"
23
24
namespace cvc5 {
25
26
using namespace theory;
27
using namespace theory::strings;
28
29
namespace test {
30
31
4
class TestTheoryWhiteStringsWord : public TestNode
32
{
33
};
34
35
10
TEST_F(TestTheoryWhiteStringsWord, strings)
36
{
37
4
  Node empty = d_nodeManager->mkConst(String(""));
38
4
  Node a = d_nodeManager->mkConst(String("a"));
39
4
  Node b = d_nodeManager->mkConst(String("b"));
40
4
  Node aa = d_nodeManager->mkConst(String("aa"));
41
4
  Node aaaaa = d_nodeManager->mkConst(String("aaaaa"));
42
4
  Node abc = d_nodeManager->mkConst(String("abc"));
43
4
  Node bbc = d_nodeManager->mkConst(String("bbc"));
44
4
  Node cac = d_nodeManager->mkConst(String("cac"));
45
4
  Node abca = d_nodeManager->mkConst(String("abca"));
46
47
4
  TypeNode stringType = d_nodeManager->stringType();
48
2
  ASSERT_TRUE(Word::mkEmptyWord(stringType) == empty);
49
50
4
  std::vector<Node> vec;
51
2
  vec.push_back(abc);
52
4
  Node abcMk = Word::mkWordFlatten(vec);
53
2
  ASSERT_EQ(abc, abcMk);
54
2
  vec.push_back(a);
55
4
  Node abcaMk = Word::mkWordFlatten(vec);
56
2
  ASSERT_EQ(abca, abcaMk);
57
58
2
  ASSERT_TRUE(Word::getLength(empty) == 0);
59
2
  ASSERT_TRUE(Word::getLength(aaaaa) == 5);
60
61
2
  ASSERT_TRUE(Word::isEmpty(empty));
62
2
  ASSERT_FALSE(Word::isEmpty(a));
63
64
2
  ASSERT_TRUE(Word::find(empty, empty) == 0);
65
2
  ASSERT_TRUE(Word::find(a, empty) == 0);
66
2
  ASSERT_TRUE(Word::find(empty, empty, 1) == std::string::npos);
67
2
  ASSERT_TRUE(Word::find(cac, a, 0) == 1);
68
2
  ASSERT_TRUE(Word::find(cac, abc) == std::string::npos);
69
70
2
  ASSERT_TRUE(Word::rfind(aaaaa, empty) == 0);
71
2
  ASSERT_TRUE(Word::rfind(aaaaa, a) == 0);
72
2
  ASSERT_TRUE(Word::rfind(abca, abc, 1) == 1);
73
74
2
  ASSERT_TRUE(Word::hasPrefix(empty, empty));
75
2
  ASSERT_TRUE(Word::hasPrefix(a, empty));
76
2
  ASSERT_TRUE(Word::hasPrefix(aaaaa, a));
77
2
  ASSERT_FALSE(Word::hasPrefix(abca, b));
78
2
  ASSERT_FALSE(Word::hasPrefix(empty, a));
79
80
2
  ASSERT_TRUE(Word::hasSuffix(empty, empty));
81
2
  ASSERT_TRUE(Word::hasSuffix(a, empty));
82
2
  ASSERT_TRUE(Word::hasSuffix(a, a));
83
2
  ASSERT_FALSE(Word::hasSuffix(abca, b));
84
2
  ASSERT_FALSE(Word::hasSuffix(empty, abc));
85
86
2
  ASSERT_EQ(bbc, Word::replace(abc, a, b));
87
2
  ASSERT_EQ(aaaaa, Word::replace(aaaaa, b, a));
88
2
  ASSERT_EQ(aa, Word::replace(a, empty, a));
89
90
2
  ASSERT_EQ(empty, Word::substr(a, 1));
91
2
  ASSERT_EQ(empty, Word::substr(empty, 0));
92
2
  ASSERT_EQ(a, Word::substr(abca, 3));
93
94
2
  ASSERT_EQ(a, Word::substr(abc, 0, 1));
95
2
  ASSERT_EQ(aa, Word::substr(aaaaa, 3, 2));
96
97
2
  ASSERT_EQ(a, Word::prefix(a, 1));
98
2
  ASSERT_EQ(empty, Word::prefix(empty, 0));
99
2
  ASSERT_EQ(a, Word::prefix(aaaaa, 1));
100
101
2
  ASSERT_EQ(a, Word::suffix(a, 1));
102
2
  ASSERT_EQ(empty, Word::suffix(empty, 0));
103
2
  ASSERT_EQ(aa, Word::suffix(aaaaa, 2));
104
105
2
  ASSERT_FALSE(Word::noOverlapWith(abc, empty));
106
2
  ASSERT_TRUE(Word::noOverlapWith(cac, aa));
107
2
  ASSERT_FALSE(Word::noOverlapWith(cac, abc));
108
2
  ASSERT_TRUE(Word::noOverlapWith(cac, b));
109
2
  ASSERT_FALSE(Word::noOverlapWith(cac, a));
110
2
  ASSERT_FALSE(Word::noOverlapWith(abca, a));
111
112
2
  ASSERT_TRUE(Word::overlap(abc, empty) == 0);
113
2
  ASSERT_TRUE(Word::overlap(aaaaa, abc) == 1);
114
2
  ASSERT_TRUE(Word::overlap(cac, abc) == 0);
115
2
  ASSERT_TRUE(Word::overlap(empty, abc) == 0);
116
2
  ASSERT_TRUE(Word::overlap(aaaaa, aa) == 2);
117
118
2
  ASSERT_TRUE(Word::roverlap(abc, empty) == 0);
119
2
  ASSERT_TRUE(Word::roverlap(aaaaa, abc) == 0);
120
2
  ASSERT_TRUE(Word::roverlap(cac, abc) == 1);
121
2
  ASSERT_TRUE(Word::roverlap(empty, abc) == 0);
122
2
  ASSERT_TRUE(Word::roverlap(aaaaa, aa) == 2);
123
}
124
}  // namespace test
125
8896
}  // namespace cvc5