GCC Code Coverage Report
Directory: . Exec Total Coverage
File: test/unit/theory/theory_strings_word_white.cpp Lines: 73 73 100.0 %
Date: 2021-08-16 Branches: 350 1140 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
#include "util/string.h"
24
25
namespace cvc5 {
26
27
using namespace theory;
28
using namespace theory::strings;
29
30
namespace test {
31
32
4
class TestTheoryWhiteStringsWord : public TestNode
33
{
34
};
35
36
10
TEST_F(TestTheoryWhiteStringsWord, strings)
37
{
38
4
  Node empty = d_nodeManager->mkConst(String(""));
39
4
  Node a = d_nodeManager->mkConst(String("a"));
40
4
  Node b = d_nodeManager->mkConst(String("b"));
41
4
  Node aa = d_nodeManager->mkConst(String("aa"));
42
4
  Node aaaaa = d_nodeManager->mkConst(String("aaaaa"));
43
4
  Node abc = d_nodeManager->mkConst(String("abc"));
44
4
  Node bbc = d_nodeManager->mkConst(String("bbc"));
45
4
  Node cac = d_nodeManager->mkConst(String("cac"));
46
4
  Node abca = d_nodeManager->mkConst(String("abca"));
47
48
4
  TypeNode stringType = d_nodeManager->stringType();
49
2
  ASSERT_TRUE(Word::mkEmptyWord(stringType) == empty);
50
51
4
  std::vector<Node> vec;
52
2
  vec.push_back(abc);
53
4
  Node abcMk = Word::mkWordFlatten(vec);
54
2
  ASSERT_EQ(abc, abcMk);
55
2
  vec.push_back(a);
56
4
  Node abcaMk = Word::mkWordFlatten(vec);
57
2
  ASSERT_EQ(abca, abcaMk);
58
59
2
  ASSERT_TRUE(Word::getLength(empty) == 0);
60
2
  ASSERT_TRUE(Word::getLength(aaaaa) == 5);
61
62
2
  ASSERT_TRUE(Word::isEmpty(empty));
63
2
  ASSERT_FALSE(Word::isEmpty(a));
64
65
2
  ASSERT_TRUE(Word::find(empty, empty) == 0);
66
2
  ASSERT_TRUE(Word::find(a, empty) == 0);
67
2
  ASSERT_TRUE(Word::find(empty, empty, 1) == std::string::npos);
68
2
  ASSERT_TRUE(Word::find(cac, a, 0) == 1);
69
2
  ASSERT_TRUE(Word::find(cac, abc) == std::string::npos);
70
71
2
  ASSERT_TRUE(Word::rfind(aaaaa, empty) == 0);
72
2
  ASSERT_TRUE(Word::rfind(aaaaa, a) == 0);
73
2
  ASSERT_TRUE(Word::rfind(abca, abc, 1) == 1);
74
75
2
  ASSERT_TRUE(Word::hasPrefix(empty, empty));
76
2
  ASSERT_TRUE(Word::hasPrefix(a, empty));
77
2
  ASSERT_TRUE(Word::hasPrefix(aaaaa, a));
78
2
  ASSERT_FALSE(Word::hasPrefix(abca, b));
79
2
  ASSERT_FALSE(Word::hasPrefix(empty, a));
80
81
2
  ASSERT_TRUE(Word::hasSuffix(empty, empty));
82
2
  ASSERT_TRUE(Word::hasSuffix(a, empty));
83
2
  ASSERT_TRUE(Word::hasSuffix(a, a));
84
2
  ASSERT_FALSE(Word::hasSuffix(abca, b));
85
2
  ASSERT_FALSE(Word::hasSuffix(empty, abc));
86
87
2
  ASSERT_EQ(bbc, Word::replace(abc, a, b));
88
2
  ASSERT_EQ(aaaaa, Word::replace(aaaaa, b, a));
89
2
  ASSERT_EQ(aa, Word::replace(a, empty, a));
90
91
2
  ASSERT_EQ(empty, Word::substr(a, 1));
92
2
  ASSERT_EQ(empty, Word::substr(empty, 0));
93
2
  ASSERT_EQ(a, Word::substr(abca, 3));
94
95
2
  ASSERT_EQ(a, Word::substr(abc, 0, 1));
96
2
  ASSERT_EQ(aa, Word::substr(aaaaa, 3, 2));
97
98
2
  ASSERT_EQ(a, Word::prefix(a, 1));
99
2
  ASSERT_EQ(empty, Word::prefix(empty, 0));
100
2
  ASSERT_EQ(a, Word::prefix(aaaaa, 1));
101
102
2
  ASSERT_EQ(a, Word::suffix(a, 1));
103
2
  ASSERT_EQ(empty, Word::suffix(empty, 0));
104
2
  ASSERT_EQ(aa, Word::suffix(aaaaa, 2));
105
106
2
  ASSERT_FALSE(Word::noOverlapWith(abc, empty));
107
2
  ASSERT_TRUE(Word::noOverlapWith(cac, aa));
108
2
  ASSERT_FALSE(Word::noOverlapWith(cac, abc));
109
2
  ASSERT_TRUE(Word::noOverlapWith(cac, b));
110
2
  ASSERT_FALSE(Word::noOverlapWith(cac, a));
111
2
  ASSERT_FALSE(Word::noOverlapWith(abca, a));
112
113
2
  ASSERT_TRUE(Word::overlap(abc, empty) == 0);
114
2
  ASSERT_TRUE(Word::overlap(aaaaa, abc) == 1);
115
2
  ASSERT_TRUE(Word::overlap(cac, abc) == 0);
116
2
  ASSERT_TRUE(Word::overlap(empty, abc) == 0);
117
2
  ASSERT_TRUE(Word::overlap(aaaaa, aa) == 2);
118
119
2
  ASSERT_TRUE(Word::roverlap(abc, empty) == 0);
120
2
  ASSERT_TRUE(Word::roverlap(aaaaa, abc) == 0);
121
2
  ASSERT_TRUE(Word::roverlap(cac, abc) == 1);
122
2
  ASSERT_TRUE(Word::roverlap(empty, abc) == 0);
123
2
  ASSERT_TRUE(Word::roverlap(aaaaa, aa) == 2);
124
}
125
}  // namespace test
126
8956
}  // namespace cvc5