summaryrefslogtreecommitdiffstats
path: root/vespalib
diff options
context:
space:
mode:
Diffstat (limited to 'vespalib')
-rw-r--r--vespalib/src/tests/btree/CMakeLists.txt1
-rw-r--r--vespalib/src/tests/btree/btreeaggregation_test.cpp378
-rw-r--r--vespalib/src/tests/fileheader/CMakeLists.txt1
-rw-r--r--vespalib/src/tests/fileheader/fileheader_test.cpp320
-rw-r--r--vespalib/src/tests/floatingpointtype/CMakeLists.txt1
-rw-r--r--vespalib/src/tests/floatingpointtype/floatingpointtypetest.cpp50
-rw-r--r--vespalib/src/tests/growablebytebuffer/CMakeLists.txt1
-rw-r--r--vespalib/src/tests/growablebytebuffer/growablebytebuffer_test.cpp24
-rw-r--r--vespalib/src/tests/json/CMakeLists.txt1
-rw-r--r--vespalib/src/tests/json/json.cpp179
-rw-r--r--vespalib/src/tests/objects/identifiable/CMakeLists.txt1
-rw-r--r--vespalib/src/tests/objects/identifiable/identifiable_test.cpp153
-rw-r--r--vespalib/src/tests/optimized/CMakeLists.txt1
-rw-r--r--vespalib/src/tests/optimized/optimized_test.cpp84
-rw-r--r--vespalib/src/tests/printable/CMakeLists.txt1
-rw-r--r--vespalib/src/tests/printable/printabletest.cpp77
-rw-r--r--vespalib/src/tests/programoptions/CMakeLists.txt1
-rw-r--r--vespalib/src/tests/programoptions/programoptions_test.cpp223
-rw-r--r--vespalib/src/tests/sharedptr/CMakeLists.txt1
-rw-r--r--vespalib/src/tests/sharedptr/ptrholder.cpp29
-rw-r--r--vespalib/src/tests/stllike/CMakeLists.txt1
-rw-r--r--vespalib/src/tests/stllike/asciistream_test.cpp442
-rw-r--r--vespalib/src/tests/xmlserializable/CMakeLists.txt1
-rw-r--r--vespalib/src/tests/xmlserializable/xmlserializabletest.cpp47
24 files changed, 839 insertions, 1179 deletions
diff --git a/vespalib/src/tests/btree/CMakeLists.txt b/vespalib/src/tests/btree/CMakeLists.txt
index bf4edc9e5e9..3b6f012a888 100644
--- a/vespalib/src/tests/btree/CMakeLists.txt
+++ b/vespalib/src/tests/btree/CMakeLists.txt
@@ -20,6 +20,7 @@ vespa_add_executable(vespalib_btreeaggregation_test_app TEST
btreeaggregation_test.cpp
DEPENDS
vespalib
+ GTest::gtest
)
vespa_add_test(NAME vespalib_btreeaggregation_test_app COMMAND vespalib_btreeaggregation_test_app COST 30)
vespa_add_executable(vespalib_iteratespeed_app
diff --git a/vespalib/src/tests/btree/btreeaggregation_test.cpp b/vespalib/src/tests/btree/btreeaggregation_test.cpp
index b33242b918e..34c1ca76772 100644
--- a/vespalib/src/tests/btree/btreeaggregation_test.cpp
+++ b/vespalib/src/tests/btree/btreeaggregation_test.cpp
@@ -16,8 +16,8 @@
#include <vespa/vespalib/btree/btreeaggregator.hpp>
#include <vespa/vespalib/datastore/buffer_type.hpp>
#include <vespa/vespalib/datastore/compaction_strategy.h>
+#include <vespa/vespalib/gtest/gtest.h>
#include <vespa/vespalib/test/btree/btree_printer.h>
-#include <vespa/vespalib/testkit/testapp.h>
#include <vespa/vespalib/util/rand48.h>
#include <iostream>
@@ -216,115 +216,95 @@ cleanup(GenerationHandler & g,
cleanup(g, m);
}
-class Test : public vespalib::TestApp {
-private:
+class BTreeAggregationTest : public ::testing::Test {
+protected:
+ BTreeAggregationTest();
+ ~BTreeAggregationTest() override;
template <typename Tree>
bool
assertTree(const std::string & exp, const Tree &t);
template <typename Tree>
bool
- assertAggregated(const MockTree &m, const Tree &t);
+ assertAggregated(const MockTree &m, const Tree &t, const vespalib::string& label);
template <typename TreeStore>
bool
- assertAggregated(const MockTree &m, const TreeStore &s, EntryRef ref);
+ assertAggregated(const MockTree &m, const TreeStore &s, EntryRef ref, const vespalib::string& label);
void
buildSubTree(const std::vector<LeafPair> &sub,
size_t numEntries);
-
- void requireThatNodeInsertWorks();
- void keys_are_aggregated_correctly_on_node_insertions();
- void requireThatNodeSplitInsertWorks();
- void keys_are_aggregated_correctly_when_node_split_on_insert();
- void requireThatTreeInsertWorks();
- void requireThatNodeStealWorks();
- void requireThatNodeRemoveWorks();
- void keys_are_aggregated_correctly_on_node_removal();
- void requireThatWeCanInsertAndRemoveFromTree();
- void requireThatSortedTreeInsertWorks();
- void requireThatCornerCaseTreeFindWorks();
- void requireThatBasicTreeIteratorWorks();
- void requireThatTreeIteratorAssignWorks();
- void requireThatUpdateOfKeyWorks();
- void requireThatUpdateOfDataWorks();
- void requireThatFrozenViewProvidesAggregatedValues();
-
- void
- requireThatSmallNodesWorks();
-public:
- int Main() override;
};
+BTreeAggregationTest::BTreeAggregationTest() = default;
+BTreeAggregationTest::~BTreeAggregationTest() = default;
template<typename Tree>
bool
-Test::assertTree(const std::string &exp, const Tree &t)
+BTreeAggregationTest::assertTree(const std::string &exp, const Tree &t)
{
std::stringstream ss;
test::BTreePrinter<std::stringstream, typename Tree::NodeAllocatorType> printer(ss, t.getAllocator());
printer.print(t.getRoot());
- if (!EXPECT_EQUAL(exp, ss.str())) return false;
- return true;
+ bool failed = false;
+ EXPECT_EQ(exp, ss.str()) << (failed = true, "");
+ return !failed;
}
template <typename Tree>
bool
-Test::assertAggregated(const MockTree &m, const Tree &t)
+BTreeAggregationTest::assertAggregated(const MockTree &m, const Tree &t, const vespalib::string& label)
{
+ SCOPED_TRACE(label);
const MinMaxAggregated &ta(t.getAggregated());
+ bool failed = false;
if (t.getRoot().valid()) {
- return
- EXPECT_FALSE(m._rtree.empty()) &&
- EXPECT_EQUAL(m._rtree.rbegin()->first,
- ta.getMax()) &&
- EXPECT_EQUAL(m._rtree.begin()->first,
- ta.getMin());
+ EXPECT_FALSE(m._rtree.empty()) << (failed = true, "");
+ if (failed) {
+ return false;
+ }
+ EXPECT_EQ(m._rtree.rbegin()->first, ta.getMax()) << (failed = true, "");
+ EXPECT_EQ(m._rtree.begin()->first, ta.getMin()) << (failed = true, "");
} else {
- return EXPECT_TRUE(m._rtree.empty()) &&
- EXPECT_EQUAL(std::numeric_limits<int32_t>::min(),
- ta.getMax()) &&
- EXPECT_EQUAL(std::numeric_limits<int32_t>::max(),
- ta.getMin());
+ EXPECT_TRUE(m._rtree.empty()) << (failed = true, "");
+ EXPECT_EQ(std::numeric_limits<int32_t>::min(), ta.getMax()) << (failed = true, "");
+ EXPECT_EQ(std::numeric_limits<int32_t>::max(), ta.getMin()) << (failed = true, "");
}
+ return !failed;
}
template <typename TreeStore>
bool
-Test::assertAggregated(const MockTree &m, const TreeStore &s, EntryRef ref)
+BTreeAggregationTest::assertAggregated(const MockTree &m, const TreeStore &s, EntryRef ref, const vespalib::string& label)
{
+ SCOPED_TRACE(label);
typename TreeStore::Iterator i(s.begin(ref));
MinMaxAggregated sa(s.getAggregated(ref));
const MinMaxAggregated &ia(i.getAggregated());
+ bool failed = false;
if (ref.valid()) {
- return
- EXPECT_FALSE(m._rtree.empty()) &&
- EXPECT_EQUAL(m._rtree.rbegin()->first,
- ia.getMax()) &&
- EXPECT_EQUAL(m._rtree.begin()->first,
- ia.getMin()) &&
- EXPECT_EQUAL(m._rtree.rbegin()->first,
- sa.getMax()) &&
- EXPECT_EQUAL(m._rtree.begin()->first,
- sa.getMin());
+ EXPECT_FALSE(m._rtree.empty()) << (failed = true, "");
+ if (failed) {
+ return false;
+ }
+ EXPECT_EQ(m._rtree.rbegin()->first, ia.getMax()) << (failed = true, "");
+ EXPECT_EQ(m._rtree.begin()->first, ia.getMin()) << (failed = true, "");
+ EXPECT_EQ(m._rtree.rbegin()->first, sa.getMax()) << (failed = true, "");
+ EXPECT_EQ(m._rtree.begin()->first, sa.getMin()) << (failed = true, "");
} else {
- return EXPECT_TRUE(m._rtree.empty()) &&
- EXPECT_EQUAL(std::numeric_limits<int32_t>::min(),
- ia.getMax()) &&
- EXPECT_EQUAL(std::numeric_limits<int32_t>::max(),
- ia.getMin()) &&
- EXPECT_EQUAL(std::numeric_limits<int32_t>::min(),
- sa.getMax()) &&
- EXPECT_EQUAL(std::numeric_limits<int32_t>::max(),
- sa.getMin());
+ EXPECT_TRUE(m._rtree.empty()) << (failed = true, "");
+ EXPECT_EQ(std::numeric_limits<int32_t>::min(), ia.getMax()) << (failed = true, "");
+ EXPECT_EQ(std::numeric_limits<int32_t>::max(), ia.getMin()) << (failed = true, "");
+ EXPECT_EQ(std::numeric_limits<int32_t>::min(), sa.getMax()) << (failed =true, "");
+ EXPECT_EQ(std::numeric_limits<int32_t>::max(), sa.getMin()) << (failed =true, "");
}
+ return !failed;
}
-void
-Test::requireThatNodeInsertWorks()
+TEST_F(BTreeAggregationTest, require_that_node_insert_works)
{
MyTree t;
t.insert(20, 102);
@@ -336,7 +316,8 @@ Test::requireThatNodeInsertWorks()
EXPECT_TRUE(assertTree("{{10:101,20:102,30:103,40:104[min=101,max=104]}}", t));
}
-void Test::keys_are_aggregated_correctly_on_node_insertions() {
+TEST_F(BTreeAggregationTest, keys_are_aggregated_correctly_on_node_insertions)
+{
MyKeyAggrTree t;
t.insert(20, 102);
EXPECT_TRUE(assertTree("{{20:102[min=20,max=20]}}", t));
@@ -367,8 +348,7 @@ populateLeafNode(Tree &t)
populateTree(t, 4, 2);
}
-void
-Test::requireThatNodeSplitInsertWorks()
+TEST_F(BTreeAggregationTest, require_that_node_split_insert_works)
{
{ // new entry in current node
MyTree t;
@@ -396,7 +376,8 @@ Test::requireThatNodeSplitInsertWorks()
}
}
-void Test::keys_are_aggregated_correctly_when_node_split_on_insert() {
+TEST_F(BTreeAggregationTest, keys_are_aggregated_correctly_when_node_split_on_insert)
+{
{ // new entry in current node
MyKeyAggrTree t;
populateLeafNode(t);
@@ -423,8 +404,7 @@ void Test::keys_are_aggregated_correctly_when_node_split_on_insert() {
}
}
-void
-Test::requireThatTreeInsertWorks()
+TEST_F(BTreeAggregationTest, require_that_tree_insert_works)
{
{ // multi level node split
MyTree t;
@@ -523,8 +503,7 @@ struct BTreeStealTraits
}
-void
-Test::requireThatNodeStealWorks()
+TEST_F(BTreeAggregationTest, require_that_node_steal_works)
{
typedef BTree<MyKey, int32_t,
btree::MinMaxAggregated,
@@ -602,8 +581,7 @@ Test::requireThatNodeStealWorks()
}
}
-void
-Test::requireThatNodeRemoveWorks()
+TEST_F(BTreeAggregationTest, require_that_node_remove_works)
{
MyTree t;
populateLeafNode(t);
@@ -615,7 +593,8 @@ Test::requireThatNodeRemoveWorks()
EXPECT_TRUE(assertTree("{{5:105[min=105,max=105]}}", t));
}
-void Test::keys_are_aggregated_correctly_on_node_removal() {
+TEST_F(BTreeAggregationTest, keys_are_aggregated_correctly_on_node_removal)
+{
MyKeyAggrTree t;
populateLeafNode(t);
t.remove(3);
@@ -640,7 +619,7 @@ generateData(std::vector<LeafPair> & data, size_t numEntries)
}
void
-Test::buildSubTree(const std::vector<LeafPair> &sub,
+BTreeAggregationTest::buildSubTree(const std::vector<LeafPair> &sub,
size_t numEntries)
{
GenerationHandler g;
@@ -660,31 +639,31 @@ Test::buildSubTree(const std::vector<LeafPair> &sub,
assert(numEntries == tree.size());
assert(tree.isValid());
- TEST_DO(EXPECT_TRUE(assertAggregated(mock, tree)));
- EXPECT_EQUAL(numEntries, tree.size());
+ EXPECT_TRUE(assertAggregated(mock, tree, "build_sub_tree"));
+ EXPECT_EQ(numEntries, tree.size());
EXPECT_TRUE(tree.isValid());
MyTree::Iterator itr = tree.begin();
MyTree::Iterator ritr = itr;
if (numEntries > 0) {
EXPECT_TRUE(ritr.valid());
- EXPECT_EQUAL(0u, ritr.position());
+ EXPECT_EQ(0u, ritr.position());
--ritr;
EXPECT_TRUE(!ritr.valid());
- EXPECT_EQUAL(numEntries, ritr.position());
+ EXPECT_EQ(numEntries, ritr.position());
--ritr;
EXPECT_TRUE(ritr.valid());
- EXPECT_EQUAL(numEntries - 1, ritr.position());
+ EXPECT_EQ(numEntries - 1, ritr.position());
} else {
EXPECT_TRUE(!ritr.valid());
- EXPECT_EQUAL(0u, ritr.position());
+ EXPECT_EQ(0u, ritr.position());
--ritr;
EXPECT_TRUE(!ritr.valid());
- EXPECT_EQUAL(0u, ritr.position());
+ EXPECT_EQ(0u, ritr.position());
}
for (size_t i = 0; i < numEntries; ++i) {
EXPECT_TRUE(itr.valid());
- EXPECT_EQUAL(sorted[i].first, itr.getKey());
- EXPECT_EQUAL(sorted[i].second, itr.getData());
+ EXPECT_EQ(sorted[i].first, itr.getKey());
+ EXPECT_EQ(sorted[i].second, itr.getData());
++itr;
}
EXPECT_TRUE(!itr.valid());
@@ -693,22 +672,21 @@ Test::buildSubTree(const std::vector<LeafPair> &sub,
--ritr;
for (size_t i = 0; i < numEntries; ++i) {
EXPECT_TRUE(ritr.valid());
- EXPECT_EQUAL(sorted[numEntries - 1 - i].first, ritr.getKey());
- EXPECT_EQUAL(sorted[numEntries - 1 - i].second, ritr.getData());
+ EXPECT_EQ(sorted[numEntries - 1 - i].first, ritr.getKey());
+ EXPECT_EQ(sorted[numEntries - 1 - i].second, ritr.getData());
--ritr;
}
EXPECT_TRUE(!ritr.valid());
}
-void
-Test::requireThatWeCanInsertAndRemoveFromTree()
+TEST_F(BTreeAggregationTest, require_that_we_can_insert_and_remove_from_tree)
{
GenerationHandler g;
MyTree tree;
MockTree mock;
std::vector<LeafPair> exp;
std::vector<LeafPair> sorted;
- TEST_DO(EXPECT_TRUE(assertAggregated(mock, tree)));
+ EXPECT_TRUE(assertAggregated(mock, tree, "insert_and_remove_1"));
size_t numEntries = 1000;
generateData(exp, numEntries);
sorted = exp;
@@ -722,15 +700,15 @@ Test::requireThatWeCanInsertAndRemoveFromTree()
EXPECT_TRUE(tree.insert(num, val));
EXPECT_TRUE(!tree.insert(num, val));
mock.insert(num, val);
- TEST_DO(EXPECT_TRUE(assertAggregated(mock, tree)));
+ EXPECT_TRUE(assertAggregated(mock, tree, "insert_and_remove_2"));
for (size_t j = 0; j <= i; ++j) {
//LOG(info, "find[%zu](%d)", j, exp[j].first._val);
MyTree::Iterator itr = tree.find(exp[j].first);
EXPECT_TRUE(itr.valid());
- EXPECT_EQUAL(exp[j].first, itr.getKey());
- EXPECT_EQUAL(exp[j].second, itr.getData());
+ EXPECT_EQ(exp[j].first, itr.getKey());
+ EXPECT_EQ(exp[j].second, itr.getData());
}
- EXPECT_EQUAL(i + 1u, tree.size());
+ EXPECT_EQ(i + 1u, tree.size());
EXPECT_TRUE(tree.isValid());
buildSubTree(exp, i + 1);
}
@@ -745,36 +723,36 @@ Test::requireThatWeCanInsertAndRemoveFromTree()
++itre;
if (numEntries > 0) {
EXPECT_TRUE(ritr.valid());
- EXPECT_EQUAL(0u, ritr.position());
+ EXPECT_EQ(0u, ritr.position());
--ritr;
EXPECT_TRUE(!ritr.valid());
- EXPECT_EQUAL(numEntries, ritr.position());
+ EXPECT_EQ(numEntries, ritr.position());
--ritr;
EXPECT_TRUE(ritr.valid());
- EXPECT_EQUAL(numEntries - 1, ritr.position());
+ EXPECT_EQ(numEntries - 1, ritr.position());
} else {
EXPECT_TRUE(!ritr.valid());
- EXPECT_EQUAL(0u, ritr.position());
+ EXPECT_EQ(0u, ritr.position());
--ritr;
EXPECT_TRUE(!ritr.valid());
- EXPECT_EQUAL(0u, ritr.position());
+ EXPECT_EQ(0u, ritr.position());
}
MyTree::Iterator pitr = itr;
for (size_t i = 0; i < numEntries; ++i) {
ssize_t si = i;
ssize_t sileft = numEntries - i;
EXPECT_TRUE(itr.valid());
- EXPECT_EQUAL(i, itr.position());
- EXPECT_EQUAL(sileft, itre - itr);
- EXPECT_EQUAL(-sileft, itr - itre);
- EXPECT_EQUAL(sileft, itre2 - itr);
- EXPECT_EQUAL(-sileft, itr - itre2);
- EXPECT_EQUAL(si, itr - tree.begin());
- EXPECT_EQUAL(-si, tree.begin() - itr);
- EXPECT_EQUAL(i != 0, itr - pitr);
- EXPECT_EQUAL(-(i != 0), pitr - itr);
- EXPECT_EQUAL(sorted[i].first, itr.getKey());
- EXPECT_EQUAL(sorted[i].second, itr.getData());
+ EXPECT_EQ(i, itr.position());
+ EXPECT_EQ(sileft, itre - itr);
+ EXPECT_EQ(-sileft, itr - itre);
+ EXPECT_EQ(sileft, itre2 - itr);
+ EXPECT_EQ(-sileft, itr - itre2);
+ EXPECT_EQ(si, itr - tree.begin());
+ EXPECT_EQ(-si, tree.begin() - itr);
+ EXPECT_EQ(i != 0, itr - pitr);
+ EXPECT_EQ(-(i != 0), pitr - itr);
+ EXPECT_EQ(sorted[i].first, itr.getKey());
+ EXPECT_EQ(sorted[i].second, itr.getData());
pitr = itr;
++itr;
ritr = itr;
@@ -783,12 +761,12 @@ Test::requireThatWeCanInsertAndRemoveFromTree()
EXPECT_TRUE(ritr == pitr);
}
EXPECT_TRUE(!itr.valid());
- EXPECT_EQUAL(numEntries, itr.position());
+ EXPECT_EQ(numEntries, itr.position());
ssize_t sNumEntries = numEntries;
- EXPECT_EQUAL(sNumEntries, itr - tree.begin());
- EXPECT_EQUAL(-sNumEntries, tree.begin() - itr);
- EXPECT_EQUAL(1, itr - pitr);
- EXPECT_EQUAL(-1, pitr - itr);
+ EXPECT_EQ(sNumEntries, itr - tree.begin());
+ EXPECT_EQ(-sNumEntries, tree.begin() - itr);
+ EXPECT_EQ(1, itr - pitr);
+ EXPECT_EQ(-1, pitr - itr);
}
// compact full tree by calling incremental compaction methods in a loop
{
@@ -818,52 +796,50 @@ Test::requireThatWeCanInsertAndRemoveFromTree()
EXPECT_TRUE(!tree.remove(num));
EXPECT_TRUE(tree.isValid());
mock.erase(num);
- TEST_DO(EXPECT_TRUE(assertAggregated(mock, tree)));
+ EXPECT_TRUE(assertAggregated(mock, tree, "insert_and_remove3"));
for (size_t j = i + 1; j < numEntries; ++j) {
MyTree::Iterator itr = tree.find(exp[j].first);
EXPECT_TRUE(itr.valid());
- EXPECT_EQUAL(exp[j].first, itr.getKey());
- EXPECT_EQUAL(exp[j].second, itr.getData());
+ EXPECT_EQ(exp[j].first, itr.getKey());
+ EXPECT_EQ(exp[j].second, itr.getData());
}
- EXPECT_EQUAL(numEntries - 1 - i, tree.size());
+ EXPECT_EQ(numEntries - 1 - i, tree.size());
}
}
-void
-Test::requireThatSortedTreeInsertWorks()
+TEST_F(BTreeAggregationTest, require_that_sorted_tree_insert_works)
{
{
MyTree tree;
MockTree mock;
- TEST_DO(EXPECT_TRUE(assertAggregated(mock, tree)));
+ EXPECT_TRUE(assertAggregated(mock, tree, "sorted_tree_insert1"));
for (int i = 0; i < 1000; ++i) {
EXPECT_TRUE(tree.insert(i, toVal(i)));
mock.insert(i, toVal(i));
MyTree::Iterator itr = tree.find(i);
EXPECT_TRUE(itr.valid());
- EXPECT_EQUAL(toVal(i), itr.getData());
+ EXPECT_EQ(toVal(i), itr.getData());
EXPECT_TRUE(tree.isValid());
- TEST_DO(EXPECT_TRUE(assertAggregated(mock, tree)));
+ EXPECT_TRUE(assertAggregated(mock, tree, "sorted_tree_insert2"));
}
}
{
MyTree tree;
MockTree mock;
- TEST_DO(EXPECT_TRUE(assertAggregated(mock, tree)));
+ EXPECT_TRUE(assertAggregated(mock, tree, "sorted_tree_insert3"));
for (int i = 1000; i > 0; --i) {
EXPECT_TRUE(tree.insert(i, toVal(i)));
mock.insert(i, toVal(i));
MyTree::Iterator itr = tree.find(i);
EXPECT_TRUE(itr.valid());
- EXPECT_EQUAL(toVal(i), itr.getData());
+ EXPECT_EQ(toVal(i), itr.getData());
EXPECT_TRUE(tree.isValid());
- TEST_DO(EXPECT_TRUE(assertAggregated(mock, tree)));
+ EXPECT_TRUE(assertAggregated(mock, tree, "sorted_tree_insert4"));
}
}
}
-void
-Test::requireThatCornerCaseTreeFindWorks()
+TEST_F(BTreeAggregationTest, require_that_corner_case_tree_find_works)
{
GenerationHandler g;
MyTree tree;
@@ -874,8 +850,7 @@ Test::requireThatCornerCaseTreeFindWorks()
EXPECT_TRUE(!tree.find(1000).valid()); // higher than highest
}
-void
-Test::requireThatBasicTreeIteratorWorks()
+TEST_F(BTreeAggregationTest, require_that_basic_tree_iterator_works)
{
GenerationHandler g;
MyTree tree;
@@ -890,27 +865,24 @@ Test::requireThatBasicTreeIteratorWorks()
size_t ei = 0;
MyTree::Iterator itr = tree.begin();
MyTree::Iterator ritr;
- EXPECT_EQUAL(1000u, itr.size());
+ EXPECT_EQ(1000u, itr.size());
for (; itr.valid(); ++itr) {
//LOG(info, "itr(%d, %s)", itr.getKey(), itr.getData().c_str());
- EXPECT_EQUAL(UNWRAP(exp[ei].first), UNWRAP(itr.getKey()));
- EXPECT_EQUAL(exp[ei].second, itr.getData());
+ EXPECT_EQ(UNWRAP(exp[ei].first), UNWRAP(itr.getKey()));
+ EXPECT_EQ(exp[ei].second, itr.getData());
ei++;
ritr = itr;
}
- EXPECT_EQUAL(numEntries, ei);
+ EXPECT_EQ(numEntries, ei);
for (; ritr.valid(); --ritr) {
--ei;
//LOG(info, "itr(%d, %s)", itr.getKey(), itr.getData().c_str());
- EXPECT_EQUAL(UNWRAP(exp[ei].first), UNWRAP(ritr.getKey()));
- EXPECT_EQUAL(exp[ei].second, ritr.getData());
+ EXPECT_EQ(UNWRAP(exp[ei].first), UNWRAP(ritr.getKey()));
+ EXPECT_EQ(exp[ei].second, ritr.getData());
}
}
-
-
-void
-Test::requireThatTreeIteratorAssignWorks()
+TEST_F(BTreeAggregationTest, require_that_tree_iterator_assign_works)
{
GenerationHandler g;
MyTree tree;
@@ -923,9 +895,9 @@ Test::requireThatTreeIteratorAssignWorks()
EXPECT_TRUE(itr == itr2);
int expNum = i;
for (; itr2.valid(); ++itr2) {
- EXPECT_EQUAL(expNum++, UNWRAP(itr2.getKey()));
+ EXPECT_EQ(expNum++, UNWRAP(itr2.getKey()));
}
- EXPECT_EQUAL(1000, expNum);
+ EXPECT_EQ(1000, expNum);
}
}
@@ -940,8 +912,7 @@ struct UpdKeyComp {
}
};
-void
-Test::requireThatUpdateOfKeyWorks()
+TEST_F(BTreeAggregationTest, require_that_update_of_key_works)
{
using UpdKeyTree = BTree<int, BTreeNoLeafData, btree::NoAggregated, UpdKeyComp &>;
using UpdKeyTreeIterator = UpdKeyTree::Iterator;
@@ -951,7 +922,7 @@ Test::requireThatUpdateOfKeyWorks()
for (int i = 0; i < 1000; i+=2) {
EXPECT_TRUE(t.insert(i, BTreeNoLeafData(), cmp1));
}
- EXPECT_EQUAL(0u, cmp1._numErrors);
+ EXPECT_EQ(0u, cmp1._numErrors);
for (int i = 0; i < 1000; i+=2) {
UpdKeyTreeIterator itr = t.find(i, cmp1);
itr.writeKey(i + 1);
@@ -961,23 +932,22 @@ Test::requireThatUpdateOfKeyWorks()
UpdKeyTreeIterator itr = t.find(i, cmp2);
EXPECT_TRUE(itr.valid());
}
- EXPECT_EQUAL(0u, cmp2._numErrors);
+ EXPECT_EQ(0u, cmp2._numErrors);
}
-void
-Test::requireThatUpdateOfDataWorks()
+TEST_F(BTreeAggregationTest, require_that_update_of_data_works)
{
GenerationHandler g;
MyTree t;
MockTree mock;
MyAggrCalc ac;
MyTree::NodeAllocatorType &manager = t.getAllocator();
- TEST_DO(EXPECT_TRUE(assertAggregated(mock, t)));
+ EXPECT_TRUE(assertAggregated(mock, t, "update_data1"));
for (int i = 0; i < 1000; i+=2) {
EXPECT_TRUE(t.insert(i, toVal(i)));
mock.insert(i, toVal(i));
- TEST_DO(EXPECT_TRUE(assertAggregated(mock, t)));
+ EXPECT_TRUE(assertAggregated(mock, t, "udate_data2"));
}
freezeTree(g, manager);
for (int i = 0; i < 1000; i+=2) {
@@ -985,31 +955,31 @@ Test::requireThatUpdateOfDataWorks()
MyTree::Iterator itr2 = itr;
t.thaw(itr);
itr.updateData(toHighVal(i), ac);
- EXPECT_EQUAL(toHighVal(i), itr.getData());
- EXPECT_EQUAL(toVal(i), itr2.getData());
+ EXPECT_EQ(toHighVal(i), itr.getData());
+ EXPECT_EQ(toVal(i), itr2.getData());
mock.erase(i);
mock.insert(i, toHighVal(i));
- TEST_DO(EXPECT_TRUE(assertAggregated(mock, t)));
+ EXPECT_TRUE(assertAggregated(mock, t, "update_data3"));
freezeTree(g, manager);
itr = t.find(i);
itr2 = itr;
t.thaw(itr);
itr.updateData(toLowVal(i), ac);
- EXPECT_EQUAL(toLowVal(i), itr.getData());
- EXPECT_EQUAL(toHighVal(i), itr2.getData());
+ EXPECT_EQ(toLowVal(i), itr.getData());
+ EXPECT_EQ(toHighVal(i), itr2.getData());
mock.erase(i);
mock.insert(i, toLowVal(i));
- TEST_DO(EXPECT_TRUE(assertAggregated(mock, t)));
+ EXPECT_TRUE(assertAggregated(mock, t, "update_data4"));
freezeTree(g, manager);
itr = t.find(i);
itr2 = itr;
t.thaw(itr);
itr.updateData(toVal(i), ac);
- EXPECT_EQUAL(toVal(i), itr.getData());
- EXPECT_EQUAL(toLowVal(i), itr2.getData());
+ EXPECT_EQ(toVal(i), itr.getData());
+ EXPECT_EQ(toLowVal(i), itr2.getData());
mock.erase(i);
mock.insert(i, toVal(i));
- TEST_DO(EXPECT_TRUE(assertAggregated(mock, t)));
+ EXPECT_TRUE(assertAggregated(mock, t, "update_data5"));
freezeTree(g, manager);
}
}
@@ -1030,68 +1000,67 @@ remove(MyTreeStore& s, EntryRef& root, MyTreeStore::KeyType removal)
}
-void
-Test::requireThatSmallNodesWorks()
+TEST_F(BTreeAggregationTest, require_that_small_nodes_works)
{
GenerationHandler g;
MyTreeStore s;
MockTree mock;
EntryRef root;
- EXPECT_EQUAL(0u, s.size(root));
+ EXPECT_EQ(0u, s.size(root));
EXPECT_TRUE(s.isSmallArray(root));
- TEST_DO(EXPECT_TRUE(assertAggregated(mock, s, root)));
+ EXPECT_TRUE(assertAggregated(mock, s, root, "small1"));
insert(s, root, {40, toVal(40)});
mock.insert(40, toVal(40));
- EXPECT_EQUAL(1u, s.size(root));
+ EXPECT_EQ(1u, s.size(root));
EXPECT_TRUE(s.isSmallArray(root));
- TEST_DO(EXPECT_TRUE(assertAggregated(mock, s, root)));
+ EXPECT_TRUE(assertAggregated(mock, s, root, "small2"));
insert(s, root, {20, toVal(20)});
mock.insert(20, toVal(20));
- EXPECT_EQUAL(2u, s.size(root));
+ EXPECT_EQ(2u, s.size(root));
EXPECT_TRUE(s.isSmallArray(root));
- TEST_DO(EXPECT_TRUE(assertAggregated(mock, s, root)));
+ EXPECT_TRUE(assertAggregated(mock, s, root, "small3"));
insert(s, root, {60, toVal(60)});
mock.insert(60, toVal(60));
- EXPECT_EQUAL(3u, s.size(root));
+ EXPECT_EQ(3u, s.size(root));
EXPECT_TRUE(s.isSmallArray(root));
- TEST_DO(EXPECT_TRUE(assertAggregated(mock, s, root)));
+ EXPECT_TRUE(assertAggregated(mock, s, root, "small4"));
insert(s, root, {50, toVal(50)});
mock.insert(50, toVal(50));
- EXPECT_EQUAL(4u, s.size(root));
+ EXPECT_EQ(4u, s.size(root));
EXPECT_TRUE(s.isSmallArray(root));
- TEST_DO(EXPECT_TRUE(assertAggregated(mock, s, root)));
+ EXPECT_TRUE(assertAggregated(mock, s, root, "small5"));
for (uint32_t i = 0; i < 100; ++i) {
insert(s, root, {int(1000 + i), 42});
mock.insert(1000 + i, 42);
- EXPECT_EQUAL(5u + i, s.size(root));
- EXPECT_EQUAL(5u + i <= MyTreeStore::clusterLimit, s.isSmallArray(root));
- TEST_DO(EXPECT_TRUE(assertAggregated(mock, s, root)));
+ EXPECT_EQ(5u + i, s.size(root));
+ EXPECT_EQ(5u + i <= MyTreeStore::clusterLimit, s.isSmallArray(root));
+ EXPECT_TRUE(assertAggregated(mock, s, root, "small6"));
}
remove(s, root, 40);
mock.erase(40);
- EXPECT_EQUAL(103u, s.size(root));
+ EXPECT_EQ(103u, s.size(root));
EXPECT_TRUE(!s.isSmallArray(root));
- TEST_DO(EXPECT_TRUE(assertAggregated(mock, s, root)));
+ EXPECT_TRUE(assertAggregated(mock, s, root, "small7"));
remove(s, root, 20);
mock.erase(20);
- EXPECT_EQUAL(102u, s.size(root));
+ EXPECT_EQ(102u, s.size(root));
EXPECT_TRUE(!s.isSmallArray(root));
- TEST_DO(EXPECT_TRUE(assertAggregated(mock, s, root)));
+ EXPECT_TRUE(assertAggregated(mock, s, root, "small8"));
remove(s, root, 50);
mock.erase(50);
- EXPECT_EQUAL(101u, s.size(root));
+ EXPECT_EQ(101u, s.size(root));
EXPECT_TRUE(!s.isSmallArray(root));
- TEST_DO(EXPECT_TRUE(assertAggregated(mock, s, root)));
+ EXPECT_TRUE(assertAggregated(mock, s, root, "small9"));
for (uint32_t i = 0; i < 100; ++i) {
remove(s, root, 1000 + i);
mock.erase(1000 + i);
- EXPECT_EQUAL(100 - i, s.size(root));
- EXPECT_EQUAL(100 - i <= MyTreeStore::clusterLimit, s.isSmallArray(root));
- TEST_DO(EXPECT_TRUE(assertAggregated(mock, s, root)));
+ EXPECT_EQ(100 - i, s.size(root));
+ EXPECT_EQ(100 - i <= MyTreeStore::clusterLimit, s.isSmallArray(root));
+ EXPECT_TRUE(assertAggregated(mock, s, root, "small10"));
}
- EXPECT_EQUAL(1u, s.size(root));
+ EXPECT_EQ(1u, s.size(root));
EXPECT_TRUE(s.isSmallArray(root));
s.clear(root);
@@ -1102,8 +1071,7 @@ Test::requireThatSmallNodesWorks()
s.reclaim_memory(g.get_oldest_used_generation());
}
-void
-Test::requireThatFrozenViewProvidesAggregatedValues()
+TEST_F(BTreeAggregationTest, require_that_frozen_view_provides_aggregated_values)
{
MyTree t;
t.insert(20, 102);
@@ -1114,39 +1082,13 @@ Test::requireThatFrozenViewProvidesAggregatedValues()
t.getAllocator().freeze();
auto new_view = t.getFrozenView();
auto new_aggregated = new_view.getAggregated();
- EXPECT_EQUAL(new_aggregated.getMin(), 101);
- EXPECT_EQUAL(new_aggregated.getMax(), 104);
+ EXPECT_EQ(new_aggregated.getMin(), 101);
+ EXPECT_EQ(new_aggregated.getMax(), 104);
auto old_aggregated = old_view.getAggregated();
- EXPECT_EQUAL(old_aggregated.getMin(), std::numeric_limits<int32_t>::max());
- EXPECT_EQUAL(old_aggregated.getMax(), std::numeric_limits<int32_t>::min());
-}
-
-int
-Test::Main()
-{
- TEST_INIT("btreeaggregation_test");
-
- requireThatNodeInsertWorks();
- keys_are_aggregated_correctly_on_node_insertions();
- requireThatNodeSplitInsertWorks();
- keys_are_aggregated_correctly_when_node_split_on_insert();
- requireThatTreeInsertWorks();
- requireThatNodeStealWorks();
- requireThatNodeRemoveWorks();
- keys_are_aggregated_correctly_on_node_removal();
- requireThatWeCanInsertAndRemoveFromTree();
- requireThatSortedTreeInsertWorks();
- requireThatCornerCaseTreeFindWorks();
- requireThatBasicTreeIteratorWorks();
- requireThatTreeIteratorAssignWorks();
- requireThatUpdateOfKeyWorks();
- requireThatUpdateOfDataWorks();
- TEST_DO(requireThatSmallNodesWorks());
- TEST_DO(requireThatFrozenViewProvidesAggregatedValues());
-
- TEST_DONE();
+ EXPECT_EQ(old_aggregated.getMin(), std::numeric_limits<int32_t>::max());
+ EXPECT_EQ(old_aggregated.getMax(), std::numeric_limits<int32_t>::min());
}
}
-TEST_APPHOOK(vespalib::btree::Test);
+GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/vespalib/src/tests/fileheader/CMakeLists.txt b/vespalib/src/tests/fileheader/CMakeLists.txt
index 1b3f527ebd7..be8e91ef414 100644
--- a/vespalib/src/tests/fileheader/CMakeLists.txt
+++ b/vespalib/src/tests/fileheader/CMakeLists.txt
@@ -4,5 +4,6 @@ vespa_add_executable(vespalib_fileheader_test_app TEST
fileheader_test.cpp
DEPENDS
vespalib
+ GTest::gtest
)
vespa_add_test(NAME vespalib_fileheader_test_app COMMAND vespalib_fileheader_test_app)
diff --git a/vespalib/src/tests/fileheader/fileheader_test.cpp b/vespalib/src/tests/fileheader/fileheader_test.cpp
index 0dfa28cb24c..db2c7f7c65d 100644
--- a/vespalib/src/tests/fileheader/fileheader_test.cpp
+++ b/vespalib/src/tests/fileheader/fileheader_test.cpp
@@ -1,8 +1,9 @@
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <vespa/vespalib/testkit/testapp.h>
#include <vespa/vespalib/data/fileheader.h>
#include <vespa/vespalib/data/databuffer.h>
+#include <vespa/vespalib/gtest/gtest.h>
+#include <vespa/vespalib/testkit/test_path.h>
#include <vespa/fastos/file.h>
#include <filesystem>
@@ -14,63 +15,20 @@ vespalib::string fileheader_tmp("fileheader.tmp");
}
-class Test : public vespalib::TestApp {
-private:
- void testTag();
- void testTagErrors();
- void testTagIteration();
- void testGenericHeader();
- void testBufferReader();
- void testBufferWriter();
- void testBufferAccess();
- void testFileReader();
- void testFileWriter();
- void testFileHeader();
- void testFileAlign();
- void testFileSize();
- void testReadErrors();
+class FileHeaderTest : public ::testing::Test {
+protected:
+ FileHeaderTest();
+ ~FileHeaderTest() override;
bool testReadError(DataBuffer &buf, const std::string &expected);
- void testWriteErrors();
- void testRewriteErrors();
- void testLayout();
-
void testReadSize(bool mapped);
void testReadSizeErrors(bool mapped);
bool testReadSizeError(DataBuffer &buf, const std::string &expected, bool mapped);
-
-public:
- int Main() override {
- TEST_INIT("fileheader_test");
-
- testTag(); TEST_FLUSH();
- testTagErrors(); TEST_FLUSH();
- testTagIteration(); TEST_FLUSH();
- testGenericHeader(); TEST_FLUSH();
- testBufferReader(); TEST_FLUSH();
- testBufferWriter(); TEST_FLUSH();
- testBufferAccess(); TEST_FLUSH();
- testFileReader(); TEST_FLUSH();
- testFileWriter(); TEST_FLUSH();
- testFileHeader(); TEST_FLUSH();
- testFileAlign(); TEST_FLUSH();
- testFileSize(); TEST_FLUSH();
- testReadErrors(); TEST_FLUSH();
- testWriteErrors(); TEST_FLUSH();
- testRewriteErrors(); TEST_FLUSH();
- testLayout(); TEST_FLUSH();
- testReadSize(false); TEST_FLUSH();
- testReadSizeErrors(false); TEST_FLUSH();
- testReadSize(true); TEST_FLUSH();
- testReadSizeErrors(true); TEST_FLUSH();
-
- TEST_DONE();
- }
};
-TEST_APPHOOK(Test);
+FileHeaderTest::FileHeaderTest() = default;
+FileHeaderTest::~FileHeaderTest() = default;
-void
-Test::testTag()
+TEST_F(FileHeaderTest, test_tag)
{
{
std::vector<GenericHeader::Tag> tags;
@@ -81,18 +39,18 @@ Test::testTag()
{
GenericHeader::Tag tag = *it;
for (uint32_t i = 0; i < 2; ++i) {
- EXPECT_EQUAL(GenericHeader::Tag::TYPE_FLOAT, tag.getType());
- EXPECT_EQUAL("foo", tag.getName());
+ EXPECT_EQ(GenericHeader::Tag::TYPE_FLOAT, tag.getType());
+ EXPECT_EQ("foo", tag.getName());
EXPECT_TRUE(tag.asString().empty());
- EXPECT_APPROX(6.9, tag.asFloat(), 1E-6);
- EXPECT_EQUAL(0, tag.asInteger());
+ EXPECT_NEAR(6.9, tag.asFloat(), 1E-6);
+ EXPECT_EQ(0, tag.asInteger());
uint32_t len = tag.getSize();
DataBuffer buf(len);
- EXPECT_EQUAL(len, tag.write(buf));
+ EXPECT_EQ(len, tag.write(buf));
GenericHeader::Tag tmp;
- EXPECT_EQUAL(len, tmp.read(buf));
+ EXPECT_EQ(len, tmp.read(buf));
tag = tmp;
}
}
@@ -111,18 +69,18 @@ Test::testTag()
{
GenericHeader::Tag tag = *it;
for (uint32_t i = 0; i < 2; ++i) {
- EXPECT_EQUAL(GenericHeader::Tag::TYPE_INTEGER, tag.getType());
- EXPECT_EQUAL("foo", tag.getName());
+ EXPECT_EQ(GenericHeader::Tag::TYPE_INTEGER, tag.getType());
+ EXPECT_EQ("foo", tag.getName());
EXPECT_TRUE(tag.asString().empty());
- EXPECT_EQUAL(0.0, tag.asFloat());
- EXPECT_EQUAL(69l, tag.asInteger());
+ EXPECT_EQ(0.0, tag.asFloat());
+ EXPECT_EQ(69l, tag.asInteger());
uint32_t len = tag.getSize();
DataBuffer buf(len);
- EXPECT_EQUAL(len, tag.write(buf));
+ EXPECT_EQ(len, tag.write(buf));
GenericHeader::Tag tmp;
- EXPECT_EQUAL(len, tmp.read(buf));
+ EXPECT_EQ(len, tmp.read(buf));
tag = tmp;
}
}
@@ -130,35 +88,34 @@ Test::testTag()
{
GenericHeader::Tag tag("foo", "bar");
for (uint32_t i = 0; i < 2; ++i) {
- EXPECT_EQUAL(GenericHeader::Tag::TYPE_STRING, tag.getType());
- EXPECT_EQUAL("foo", tag.getName());
- EXPECT_EQUAL("bar", tag.asString());
- EXPECT_EQUAL(0.0, tag.asFloat());
- EXPECT_EQUAL(0, tag.asInteger());
+ EXPECT_EQ(GenericHeader::Tag::TYPE_STRING, tag.getType());
+ EXPECT_EQ("foo", tag.getName());
+ EXPECT_EQ("bar", tag.asString());
+ EXPECT_EQ(0.0, tag.asFloat());
+ EXPECT_EQ(0, tag.asInteger());
uint32_t len = tag.getSize();
DataBuffer buf(len);
- EXPECT_EQUAL(len, tag.write(buf));
+ EXPECT_EQ(len, tag.write(buf));
GenericHeader::Tag tmp;
- EXPECT_EQUAL(len, tmp.read(buf));
+ EXPECT_EQ(len, tmp.read(buf));
tag = tmp;
}
}
{
GenericHeader::Tag trueTag("foo", true);
GenericHeader::Tag falseTag("foo", false);
- EXPECT_EQUAL(GenericHeader::Tag::TYPE_INTEGER, trueTag.getType());
- EXPECT_EQUAL(GenericHeader::Tag::TYPE_INTEGER, falseTag.getType());
- EXPECT_EQUAL(1, trueTag.asInteger());
- EXPECT_EQUAL(0, falseTag.asInteger());
+ EXPECT_EQ(GenericHeader::Tag::TYPE_INTEGER, trueTag.getType());
+ EXPECT_EQ(GenericHeader::Tag::TYPE_INTEGER, falseTag.getType());
+ EXPECT_EQ(1, trueTag.asInteger());
+ EXPECT_EQ(0, falseTag.asInteger());
EXPECT_TRUE(trueTag.asBool());
EXPECT_FALSE(falseTag.asBool());
}
}
-void
-Test::testTagErrors()
+TEST_F(FileHeaderTest, test_tag_errors)
{
DataBuffer buf(1024);
buf.writeBytes("foo", 3);
@@ -170,33 +127,31 @@ Test::testTagErrors()
tag.read(buf);
EXPECT_TRUE(false);
} catch (IllegalHeaderException &e) {
- EXPECT_EQUAL("Can not deserialize empty tag.", e.getMessage());
+ EXPECT_EQ("Can not deserialize empty tag.", e.getMessage());
}
- EXPECT_EQUAL("bar", tag.getName());
- EXPECT_EQUAL(GenericHeader::Tag::TYPE_FLOAT, tag.getType());
- EXPECT_EQUAL(6.9, tag.asFloat());
+ EXPECT_EQ("bar", tag.getName());
+ EXPECT_EQ(GenericHeader::Tag::TYPE_FLOAT, tag.getType());
+ EXPECT_EQ(6.9, tag.asFloat());
}
-void
-Test::testTagIteration()
+TEST_F(FileHeaderTest, test_tag_iteration)
{
GenericHeader header;
header.putTag(GenericHeader::Tag("foo", 6.9));
header.putTag(GenericHeader::Tag("bar", 6699));
header.putTag(GenericHeader::Tag("baz", "666999"));
- EXPECT_EQUAL(3u, header.getNumTags());
- EXPECT_EQUAL("bar", header.getTag(0).getName());
- EXPECT_EQUAL("baz", header.getTag(1).getName());
- EXPECT_EQUAL("foo", header.getTag(2).getName());
+ EXPECT_EQ(3u, header.getNumTags());
+ EXPECT_EQ("bar", header.getTag(0).getName());
+ EXPECT_EQ("baz", header.getTag(1).getName());
+ EXPECT_EQ("foo", header.getTag(2).getName());
}
-void
-Test::testGenericHeader()
+TEST_F(FileHeaderTest, test_generic_header)
{
GenericHeader header;
EXPECT_TRUE(header.isEmpty());
- EXPECT_EQUAL(0u, header.getNumTags());
+ EXPECT_EQ(0u, header.getNumTags());
EXPECT_TRUE(!header.hasTag("foo"));
EXPECT_TRUE(header.getTag("foo").isEmpty());
EXPECT_TRUE(!header.hasTag("bar"));
@@ -206,9 +161,9 @@ Test::testGenericHeader()
header.putTag(GenericHeader::Tag("foo", 6.9));
EXPECT_TRUE(!header.isEmpty());
- EXPECT_EQUAL(1u, header.getNumTags());
+ EXPECT_EQ(1u, header.getNumTags());
EXPECT_TRUE(header.hasTag("foo"));
- EXPECT_EQUAL(6.9, header.getTag("foo").asFloat());
+ EXPECT_EQ(6.9, header.getTag("foo").asFloat());
EXPECT_TRUE(!header.hasTag("bar"));
EXPECT_TRUE(header.getTag("bar").isEmpty());
EXPECT_TRUE(!header.hasTag("baz"));
@@ -216,29 +171,29 @@ Test::testGenericHeader()
header.putTag(GenericHeader::Tag("bar", 6699));
EXPECT_TRUE(!header.isEmpty());
- EXPECT_EQUAL(2u, header.getNumTags());
+ EXPECT_EQ(2u, header.getNumTags());
EXPECT_TRUE(header.hasTag("foo"));
- EXPECT_EQUAL(6.9, header.getTag("foo").asFloat());
+ EXPECT_EQ(6.9, header.getTag("foo").asFloat());
EXPECT_TRUE(header.hasTag("bar"));
- EXPECT_EQUAL(6699, header.getTag("bar").asInteger());
+ EXPECT_EQ(6699, header.getTag("bar").asInteger());
EXPECT_TRUE(!header.hasTag("baz"));
EXPECT_TRUE(header.getTag("baz").isEmpty());
header.putTag(GenericHeader::Tag("baz", "666999"));
EXPECT_TRUE(header.hasTag("foo"));
- EXPECT_EQUAL(6.9, header.getTag("foo").asFloat());
+ EXPECT_EQ(6.9, header.getTag("foo").asFloat());
EXPECT_TRUE(header.hasTag("bar"));
- EXPECT_EQUAL(6699, header.getTag("bar").asInteger());
+ EXPECT_EQ(6699, header.getTag("bar").asInteger());
EXPECT_TRUE(header.hasTag("baz"));
- EXPECT_EQUAL("666999", header.getTag("baz").asString());
+ EXPECT_EQ("666999", header.getTag("baz").asString());
header.removeTag("bar");
EXPECT_TRUE(header.hasTag("foo"));
- EXPECT_EQUAL(6.9, header.getTag("foo").asFloat());
+ EXPECT_EQ(6.9, header.getTag("foo").asFloat());
EXPECT_TRUE(!header.hasTag("bar"));
EXPECT_TRUE(header.getTag("bar").isEmpty());
EXPECT_TRUE(header.hasTag("baz"));
- EXPECT_EQUAL("666999", header.getTag("baz").asString());
+ EXPECT_EQ("666999", header.getTag("baz").asString());
header.removeTag("foo");
EXPECT_TRUE(!header.hasTag("foo"));
@@ -246,7 +201,7 @@ Test::testGenericHeader()
EXPECT_TRUE(!header.hasTag("bar"));
EXPECT_TRUE(header.getTag("bar").isEmpty());
EXPECT_TRUE(header.hasTag("baz"));
- EXPECT_EQUAL("666999", header.getTag("baz").asString());
+ EXPECT_EQ("666999", header.getTag("baz").asString());
header.removeTag("baz");
EXPECT_TRUE(!header.hasTag("foo"));
@@ -257,8 +212,7 @@ Test::testGenericHeader()
EXPECT_TRUE(header.getTag("baz").isEmpty());
}
-void
-Test::testBufferReader()
+TEST_F(FileHeaderTest, test_buffer_reader)
{
DataBuffer src(256);
for (uint32_t i = 0; i < 256; ++i) {
@@ -272,15 +226,14 @@ Test::testBufferReader()
while (sum < 256) {
uint32_t len = (uint32_t)reader.getData(dst, 7);
for (uint32_t i = 0; i < len; ++i) {
- EXPECT_EQUAL(sum + i, (uint8_t)dst[i]);
+ EXPECT_EQ(sum + i, (uint8_t)dst[i]);
}
sum += len;
}
- EXPECT_EQUAL(256u, sum);
+ EXPECT_EQ(256u, sum);
}
-void
-Test::testBufferWriter()
+TEST_F(FileHeaderTest, test_buffer_writer)
{
DataBuffer dst(256);
GenericHeader::BufferWriter writer(dst);
@@ -292,20 +245,19 @@ Test::testBufferWriter()
src[i] = (uint8_t)(sum + i);
}
uint32_t len = std::min(7u, 256 - sum);
- EXPECT_EQUAL(len, (uint32_t)writer.putData(src, len));
+ EXPECT_EQ(len, (uint32_t)writer.putData(src, len));
sum += len;
}
- EXPECT_EQUAL(256u, sum);
+ EXPECT_EQ(256u, sum);
// flip dst
for (uint32_t i = 0; i < 256; ++i) {
uint8_t b = dst.readInt8();
- EXPECT_EQUAL(i, (uint32_t)b);
+ EXPECT_EQ(i, (uint32_t)b);
}
}
-void
-Test::testBufferAccess()
+TEST_F(FileHeaderTest, test_buffer_access)
{
DataBuffer buf;
uint32_t len;
@@ -321,26 +273,25 @@ Test::testBufferAccess()
len = header.getSize();
buf.ensureFree(len);
GenericHeader::BufferWriter writer(buf);
- EXPECT_EQUAL(len, header.write(writer));
+ EXPECT_EQ(len, header.write(writer));
}
{
GenericHeader header;
GenericHeader::BufferReader reader(buf);
- EXPECT_EQUAL(len, header.read(reader));
+ EXPECT_EQ(len, header.read(reader));
EXPECT_TRUE(header.hasTag("foo"));
- EXPECT_EQUAL(6.9, header.getTag("foo").asFloat());
+ EXPECT_EQ(6.9, header.getTag("foo").asFloat());
EXPECT_TRUE(header.hasTag("bar"));
- EXPECT_EQUAL(6699, header.getTag("bar").asInteger());
+ EXPECT_EQ(6699, header.getTag("bar").asInteger());
EXPECT_TRUE(header.hasTag("baz"));
- EXPECT_EQUAL("666999", header.getTag("baz").asString());
+ EXPECT_EQ("666999", header.getTag("baz").asString());
EXPECT_TRUE(header.hasTag("big"));
- EXPECT_EQUAL(0x1234567890abcdefLL, header.getTag("big").asInteger());
+ EXPECT_EQ(0x1234567890abcdefLL, header.getTag("big").asInteger());
}
}
-void
-Test::testFileReader()
+TEST_F(FileHeaderTest, test_file_reader)
{
{
FastOS_File file;
@@ -350,7 +301,7 @@ Test::testFileReader()
for (uint32_t i = 0; i < 256; ++i) {
buf[i] = (uint8_t)i;
}
- EXPECT_EQUAL(256, file.Write2(buf, 256));
+ EXPECT_EQ(256, file.Write2(buf, 256));
}
{
FastOS_File file;
@@ -362,19 +313,18 @@ Test::testFileReader()
while(sum < 256) {
uint32_t len = (uint32_t)reader.getData(buf, 7);
for (uint32_t i = 0; i < len; ++i) {
- EXPECT_EQUAL(sum + i, (uint8_t)buf[i]);
+ EXPECT_EQ(sum + i, (uint8_t)buf[i]);
}
sum += len;
}
- EXPECT_EQUAL(256u, sum);
+ EXPECT_EQ(256u, sum);
ASSERT_TRUE(file.Close());
std::filesystem::remove(std::filesystem::path(fileheader_tmp));
}
}
-void
-Test::testFileWriter()
+TEST_F(FileHeaderTest, test_file_writer)
{
{
FastOS_File file;
@@ -388,19 +338,19 @@ Test::testFileWriter()
src[i] = (uint8_t)(sum + i);
}
uint32_t len = std::min(7u, 256 - sum);
- EXPECT_EQUAL(len, (uint32_t)writer.putData(src, len));
+ EXPECT_EQ(len, (uint32_t)writer.putData(src, len));
sum += len;
}
- EXPECT_EQUAL(256u, sum);
+ EXPECT_EQ(256u, sum);
}
{
FastOS_File file;
ASSERT_TRUE(file.OpenReadOnly(fileheader_tmp.c_str()));
uint8_t buf[256];
- EXPECT_EQUAL(256, file.Read(buf, 256));
+ EXPECT_EQ(256, file.Read(buf, 256));
for (uint32_t i = 0; i < 256; ++i) {
- EXPECT_EQUAL(i, (uint32_t)buf[i]);
+ EXPECT_EQ(i, (uint32_t)buf[i]);
}
ASSERT_TRUE(file.Close());
@@ -408,8 +358,7 @@ Test::testFileWriter()
}
}
-void
-Test::testFileHeader()
+TEST_F(FileHeaderTest, test_file_header)
{
uint32_t len = 0;
{
@@ -421,60 +370,58 @@ Test::testFileHeader()
FastOS_File file;
ASSERT_TRUE(file.OpenWriteOnlyTruncate(fileheader_tmp.c_str()));
len = header.writeFile(file);
- EXPECT_EQUAL(len, header.getSize());
+ EXPECT_EQ(len, header.getSize());
}
{
FastOS_File file;
ASSERT_TRUE(file.OpenReadWrite(fileheader_tmp.c_str()));
FileHeader header;
- EXPECT_EQUAL(len, header.readFile(file));
- EXPECT_EQUAL(len, header.getSize());
+ EXPECT_EQ(len, header.readFile(file));
+ EXPECT_EQ(len, header.getSize());
EXPECT_TRUE(header.hasTag("foo"));
- EXPECT_EQUAL(6.9, header.getTag("foo").asFloat());
+ EXPECT_EQ(6.9, header.getTag("foo").asFloat());
EXPECT_TRUE(header.hasTag("bar"));
- EXPECT_EQUAL(6699, header.getTag("bar").asInteger());
+ EXPECT_EQ(6699, header.getTag("bar").asInteger());
EXPECT_TRUE(header.hasTag("baz"));
- EXPECT_EQUAL("666999", header.getTag("baz").asString());
+ EXPECT_EQ("666999", header.getTag("baz").asString());
header.putTag(FileHeader::Tag("foo", 9.6));
header.putTag(FileHeader::Tag("bar", 9966));
header.putTag(FileHeader::Tag("baz", "999666"));
- EXPECT_EQUAL(len, header.getSize());
- EXPECT_EQUAL(len, header.rewriteFile(file));
+ EXPECT_EQ(len, header.getSize());
+ EXPECT_EQ(len, header.rewriteFile(file));
}
{
FileHeader header;
FastOS_File file;
ASSERT_TRUE(file.OpenReadOnly(fileheader_tmp.c_str()));
- EXPECT_EQUAL(len, header.readFile(file));
- EXPECT_EQUAL(len, header.getSize());
+ EXPECT_EQ(len, header.readFile(file));
+ EXPECT_EQ(len, header.getSize());
ASSERT_TRUE(file.Close());
std::filesystem::remove(std::filesystem::path(fileheader_tmp));
EXPECT_TRUE(header.hasTag("foo"));
- EXPECT_EQUAL(9.6, header.getTag("foo").asFloat());
+ EXPECT_EQ(9.6, header.getTag("foo").asFloat());
EXPECT_TRUE(header.hasTag("bar"));
- EXPECT_EQUAL(9966, header.getTag("bar").asInteger());
+ EXPECT_EQ(9966, header.getTag("bar").asInteger());
EXPECT_TRUE(header.hasTag("baz"));
- EXPECT_EQUAL("999666", header.getTag("baz").asString());
+ EXPECT_EQ("999666", header.getTag("baz").asString());
}
}
-void
-Test::testFileAlign()
+TEST_F(FileHeaderTest, test_file_align)
{
for (uint32_t alignTo = 1; alignTo < 16; ++alignTo) {
FileHeader header(alignTo);
header.putTag(FileHeader::Tag("foo", "bar"));
- EXPECT_EQUAL(0u, header.getSize() % alignTo);
+ EXPECT_EQ(0u, header.getSize() % alignTo);
}
}
-void
-Test::testFileSize()
+TEST_F(FileHeaderTest, test_file_size)
{
for (uint32_t minSize = 0; minSize < 512; ++minSize) {
FileHeader header(1u, minSize);
@@ -483,8 +430,7 @@ Test::testFileSize()
}
}
-void
-Test::testReadErrors()
+TEST_F(FileHeaderTest, test_read_errors)
{
{
DataBuffer buf;
@@ -524,7 +470,7 @@ Test::testReadErrors()
}
bool
-Test::testReadError(DataBuffer &buf, const std::string &expected)
+FileHeaderTest::testReadError(DataBuffer &buf, const std::string &expected)
{
GenericHeader header;
header.putTag(GenericHeader::Tag("foo", "bar"));
@@ -534,21 +480,22 @@ Test::testReadError(DataBuffer &buf, const std::string &expected)
EXPECT_TRUE(false);
return false;
} catch (IllegalHeaderException &e) {
- if (!EXPECT_EQUAL(expected, e.getMessage())) {
+ bool failed = false;
+ EXPECT_EQ(expected, e.getMessage()) << (failed = true, "");
+ if (failed) {
return false;
}
}
- if (!EXPECT_EQUAL(1u, header.getNumTags())) {
+ bool failed = false;
+ EXPECT_EQ(1u, header.getNumTags()) << (failed = true, "");
+ if (failed) {
return false;
}
- if (!EXPECT_EQUAL("bar", header.getTag("foo").asString())) {
- return false;
- }
- return true;
+ EXPECT_EQ("bar", header.getTag("foo").asString()) << (failed = true, "");
+ return !failed;
}
-void
-Test::testWriteErrors()
+TEST_F(FileHeaderTest, test_write_errors)
{
GenericHeader header;
header.putTag(GenericHeader::Tag("foo", 69));
@@ -562,15 +509,14 @@ Test::testWriteErrors()
header.write(writer);
EXPECT_TRUE(false);
} catch (IllegalHeaderException &e) {
- EXPECT_EQUAL("Failed to write header.", e.getMessage());
+ EXPECT_EQ("Failed to write header.", e.getMessage());
}
EXPECT_TRUE(header.hasTag("foo"));
- EXPECT_EQUAL(69, header.getTag("foo").asInteger());
+ EXPECT_EQ(69, header.getTag("foo").asInteger());
}
-void
-Test::testRewriteErrors()
+TEST_F(FileHeaderTest, test_rewrite_errors)
{
FileHeader header;
header.putTag(FileHeader::Tag("foo", "bar"));
@@ -579,7 +525,7 @@ Test::testRewriteErrors()
{
FastOS_File file;
ASSERT_TRUE(file.OpenWriteOnlyTruncate(fileheader_tmp.c_str()));
- EXPECT_EQUAL(len, header.writeFile(file));
+ EXPECT_EQ(len, header.writeFile(file));
}
{
FastOS_File file;
@@ -590,13 +536,12 @@ Test::testRewriteErrors()
header.rewriteFile(file);
EXPECT_TRUE(false);
} catch (IllegalHeaderException &e) {
- EXPECT_EQUAL("Failed to rewrite resized header.", e.getMessage());
+ EXPECT_EQ("Failed to rewrite resized header.", e.getMessage());
}
}
}
-void
-Test::testLayout()
+TEST_F(FileHeaderTest, test_layout)
{
FileHeader header;
{
@@ -604,20 +549,20 @@ Test::testLayout()
const std::string fileName = TEST_PATH("fileheader.dat");
ASSERT_TRUE(file.OpenReadOnly(fileName.c_str()));
uint32_t len = header.readFile(file);
- EXPECT_EQUAL(len, header.getSize());
+ EXPECT_EQ(len, header.getSize());
}
EXPECT_TRUE(header.hasTag("foo"));
- EXPECT_EQUAL(6.9, header.getTag("foo").asFloat());
+ EXPECT_EQ(6.9, header.getTag("foo").asFloat());
EXPECT_TRUE(header.hasTag("bar"));
- EXPECT_EQUAL(6699, header.getTag("bar").asInteger());
+ EXPECT_EQ(6699, header.getTag("bar").asInteger());
EXPECT_TRUE(header.hasTag("baz"));
- EXPECT_EQUAL("666999", header.getTag("baz").asString());
+ EXPECT_EQ("666999", header.getTag("baz").asString());
}
void
-Test::testReadSize(bool mapped)
+FileHeaderTest::testReadSize(bool mapped)
{
DataBuffer buf;
buf.writeInt32(GenericHeader::MAGIC);
@@ -632,12 +577,21 @@ Test::testReadSize(bool mapped)
GenericHeader::BufferReader reader(buf);
headerLen = FileHeader::readSize(reader);
}
- EXPECT_EQUAL(21u, headerLen);
+ EXPECT_EQ(21u, headerLen);
+}
+
+TEST_F(FileHeaderTest, test_read_size_unmapped)
+{
+ testReadSize(false);
}
+TEST_F(FileHeaderTest, test_read_size_mapped)
+{
+ testReadSize(true);
+}
void
-Test::testReadSizeErrors(bool mapped)
+FileHeaderTest::testReadSizeErrors(bool mapped)
{
{
DataBuffer buf;
@@ -674,9 +628,18 @@ Test::testReadSizeErrors(bool mapped)
}
}
+TEST_F(FileHeaderTest, test_read_size_errors_unmapped)
+{
+ testReadSizeErrors(false);
+}
+
+TEST_F(FileHeaderTest, test_read_size_errors_mapped)
+{
+ testReadSizeErrors(true);
+}
bool
-Test::testReadSizeError(DataBuffer &buf, const std::string &expected,
+FileHeaderTest::testReadSizeError(DataBuffer &buf, const std::string &expected,
bool mapped)
{
uint32_t headerLen = 0u;
@@ -691,11 +654,14 @@ Test::testReadSizeError(DataBuffer &buf, const std::string &expected,
EXPECT_TRUE(false);
return false;
} catch (IllegalHeaderException &e) {
- if (!EXPECT_EQUAL(expected, e.getMessage())) {
+ bool failed = false;
+ EXPECT_EQ(expected, e.getMessage()) << (failed = true, "");
+ if (failed) {
return false;
}
}
- EXPECT_EQUAL(headerLen, 0u);
+ EXPECT_EQ(headerLen, 0u);
return true;
}
+GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/vespalib/src/tests/floatingpointtype/CMakeLists.txt b/vespalib/src/tests/floatingpointtype/CMakeLists.txt
index ed003fe7b83..9bcd2236eea 100644
--- a/vespalib/src/tests/floatingpointtype/CMakeLists.txt
+++ b/vespalib/src/tests/floatingpointtype/CMakeLists.txt
@@ -4,5 +4,6 @@ vespa_add_executable(vespalib_floatingpointtype_test_app TEST
floatingpointtypetest.cpp
DEPENDS
vespalib
+ GTest::gtest
)
vespa_add_test(NAME vespalib_floatingpointtype_test_app COMMAND vespalib_floatingpointtype_test_app)
diff --git a/vespalib/src/tests/floatingpointtype/floatingpointtypetest.cpp b/vespalib/src/tests/floatingpointtype/floatingpointtypetest.cpp
index 8e09d297a84..4b9718f1199 100644
--- a/vespalib/src/tests/floatingpointtype/floatingpointtypetest.cpp
+++ b/vespalib/src/tests/floatingpointtype/floatingpointtypetest.cpp
@@ -1,17 +1,9 @@
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <vespa/vespalib/testkit/testapp.h>
+#include <vespa/vespalib/gtest/gtest.h>
#include <vespa/vespalib/objects/floatingpointtype.h>
-class Test : public vespalib::TestApp
-{
-public:
- void testFloatingPoint();
- int Main() override;
-};
-
-void
-Test::testFloatingPoint()
+TEST(FloatingPointTypeTest, test_floating_point)
{
vespalib::Double d1(1.0);
vespalib::Double d2(1.000000000000001);
@@ -20,11 +12,11 @@ Test::testFloatingPoint()
EXPECT_TRUE(d1.getValue() != d2.getValue());
- EXPECT_EQUAL(d1, d2);
- EXPECT_EQUAL(d2, d1);
+ EXPECT_EQ(d1, d2);
+ EXPECT_EQ(d2, d1);
- EXPECT_NOT_EQUAL(d1, d3);
- EXPECT_NOT_EQUAL(d1, d4);
+ EXPECT_NE(d1, d3);
+ EXPECT_NE(d1, d4);
EXPECT_TRUE(d1 - d2 == 0);
EXPECT_TRUE(d2 - d1 == 0);
@@ -40,34 +32,26 @@ Test::testFloatingPoint()
EXPECT_TRUE(!(d1 < 1));
EXPECT_TRUE(!(d1 > 1));
- EXPECT_EQUAL(d2 * 4, d4);
+ EXPECT_EQ(d2 * 4, d4);
- EXPECT_EQUAL(++d4, 5.0);
- EXPECT_EQUAL(d4++, 5.0);
- EXPECT_EQUAL(d4, 6.0);
+ EXPECT_EQ(++d4, 5.0);
+ EXPECT_EQ(d4++, 5.0);
+ EXPECT_EQ(d4, 6.0);
d4 /= 3;
- EXPECT_EQUAL(d4, 2.00000000001);
+ EXPECT_EQ(d4, 2.00000000001);
d4 *= 2;
- EXPECT_EQUAL(d4, 4.000000000001);
+ EXPECT_EQ(d4, 4.000000000001);
- EXPECT_EQUAL(--d4, 3.0);
- EXPECT_EQUAL(d4--, 3.0);
- EXPECT_EQUAL(d4, 2.0);
+ EXPECT_EQ(--d4, 3.0);
+ EXPECT_EQ(d4--, 3.0);
+ EXPECT_EQ(d4, 2.0);
d4 /= 0.50000000001;
- EXPECT_EQUAL(d4, 4.0);
+ EXPECT_EQ(d4, 4.0);
EXPECT_TRUE(!(d3 + 1 > 0));
EXPECT_TRUE(!(d3 + 1 < 0));
}
-int
-Test::Main()
-{
- TEST_INIT("floatingpointtype_test");
- testFloatingPoint();
- TEST_DONE();
-}
-
-TEST_APPHOOK(Test)
+GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/vespalib/src/tests/growablebytebuffer/CMakeLists.txt b/vespalib/src/tests/growablebytebuffer/CMakeLists.txt
index be3ba82594d..0448eedd488 100644
--- a/vespalib/src/tests/growablebytebuffer/CMakeLists.txt
+++ b/vespalib/src/tests/growablebytebuffer/CMakeLists.txt
@@ -4,5 +4,6 @@ vespa_add_executable(vespalib_growablebytebuffer_test_app TEST
growablebytebuffer_test.cpp
DEPENDS
vespalib
+ GTest::gtest
)
vespa_add_test(NAME vespalib_growablebytebuffer_test_app COMMAND vespalib_growablebytebuffer_test_app)
diff --git a/vespalib/src/tests/growablebytebuffer/growablebytebuffer_test.cpp b/vespalib/src/tests/growablebytebuffer/growablebytebuffer_test.cpp
index a94a150c4e1..00cc77d19cb 100644
--- a/vespalib/src/tests/growablebytebuffer/growablebytebuffer_test.cpp
+++ b/vespalib/src/tests/growablebytebuffer/growablebytebuffer_test.cpp
@@ -1,19 +1,11 @@
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <vespa/vespalib/testkit/testapp.h>
+#include <vespa/vespalib/gtest/gtest.h>
#include <vespa/vespalib/util/growablebytebuffer.h>
using namespace vespalib;
-class Test : public TestApp
-{
-public:
- void testGrowing();
- int Main() override;
-};
-
-void
-Test::testGrowing()
+TEST(GrowableByteBufferTest, test_growing)
{
GrowableByteBuffer buf(10);
@@ -23,15 +15,7 @@ Test::testGrowing()
buf.putDouble(1234);
buf.putString("hei der");
- EXPECT_EQUAL(35u, buf.position());
-}
-
-int
-Test::Main()
-{
- TEST_INIT("guard_test");
- testGrowing();
- TEST_DONE();
+ EXPECT_EQ(35u, buf.position());
}
-TEST_APPHOOK(Test)
+GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/vespalib/src/tests/json/CMakeLists.txt b/vespalib/src/tests/json/CMakeLists.txt
index 720f8e3a040..89471e18d74 100644
--- a/vespalib/src/tests/json/CMakeLists.txt
+++ b/vespalib/src/tests/json/CMakeLists.txt
@@ -4,5 +4,6 @@ vespa_add_executable(vespalib_json_test_app TEST
json.cpp
DEPENDS
vespalib
+ GTest::gtest
)
vespa_add_test(NAME vespalib_json_test_app COMMAND vespalib_json_test_app boost)
diff --git a/vespalib/src/tests/json/json.cpp b/vespalib/src/tests/json/json.cpp
index 2638c6638c3..024d9045cc1 100644
--- a/vespalib/src/tests/json/json.cpp
+++ b/vespalib/src/tests/json/json.cpp
@@ -1,124 +1,108 @@
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <vespa/vespalib/testkit/testapp.h>
+#include <vespa/vespalib/gtest/gtest.h>
#include <vespa/vespalib/util/jsonstream.h>
#include <vespa/vespalib/util/jsonexception.h>
#include <vespa/vespalib/stllike/asciistream.h>
using namespace vespalib;
-class JSONTest : public vespalib::TestApp
-{
-private:
- void testJSONWriterValues();
- void testJSONWriterObject();
- void testJSONWriterArray();
- void testJSONWriterComplex();
- void testJsonStream();
- void testJsonStreamErrors();
- void testJsonStreamStateReporting();
-
-public:
- int Main() override;
-};
-void
-JSONTest::testJSONWriterValues()
+TEST(JSONTest, test_json_writer_values)
{
JSONStringer js;
{ // bool
js.appendBool(true);
- EXPECT_EQUAL(js.toString(), "true");
+ EXPECT_EQ(js.toString(), "true");
js.clear().appendBool(false);
- EXPECT_EQUAL(js.toString(), "false");
+ EXPECT_EQ(js.toString(), "false");
}
{ // double
js.clear().appendDouble(1234.5678);
- EXPECT_EQUAL(js.toString(), "1234.5678");
+ EXPECT_EQ(js.toString(), "1234.5678");
js.clear().appendDouble(-1234.5678);
- EXPECT_EQUAL(js.toString(), "-1234.5678");
+ EXPECT_EQ(js.toString(), "-1234.5678");
js.clear().appendDouble(0.0);
- EXPECT_EQUAL(js.toString(), "0.0");
+ EXPECT_EQ(js.toString(), "0.0");
js.clear().appendDouble(0.00000000012345678912356789123456789);
- EXPECT_EQUAL(js.toString(), "1.234567891235679e-10");
+ EXPECT_EQ(js.toString(), "1.234567891235679e-10");
js.clear().appendDouble(std::numeric_limits<double>::max());
- EXPECT_EQUAL(js.toString(), "1.797693134862316e+308");
+ EXPECT_EQ(js.toString(), "1.797693134862316e+308");
js.clear().appendDouble(std::numeric_limits<double>::min());
- EXPECT_EQUAL(js.toString(), "2.225073858507201e-308");
+ EXPECT_EQ(js.toString(), "2.225073858507201e-308");
js.clear().appendDouble(1.0 * (uint64_t(1) << 53));
- EXPECT_EQUAL(js.toString(), "9007199254740992.0");
+ EXPECT_EQ(js.toString(), "9007199254740992.0");
js.clear().appendDouble(1000);
- EXPECT_EQUAL(js.toString(), "1000.0");
+ EXPECT_EQ(js.toString(), "1000.0");
}
{ // float
js.clear().appendFloat(1234.5678f);
- EXPECT_EQUAL(js.toString(), "1234.5677");
+ EXPECT_EQ(js.toString(), "1234.5677");
js.clear().appendFloat(-1234.5678f);
- EXPECT_EQUAL(js.toString(), "-1234.5677");
+ EXPECT_EQ(js.toString(), "-1234.5677");
js.clear().appendFloat(0.0f);
- EXPECT_EQUAL(js.toString(), "0.0");
+ EXPECT_EQ(js.toString(), "0.0");
js.clear().appendFloat(0.00000000012345678912356789123456789f);
- EXPECT_EQUAL(js.toString(), "1.2345679e-10");
+ EXPECT_EQ(js.toString(), "1.2345679e-10");
js.clear().appendFloat(std::numeric_limits<float>::max());
- EXPECT_EQUAL(js.toString(), "3.4028235e+38");
+ EXPECT_EQ(js.toString(), "3.4028235e+38");
js.clear().appendFloat(std::numeric_limits<float>::min());
- EXPECT_EQUAL(js.toString(), "1.1754944e-38");
+ EXPECT_EQ(js.toString(), "1.1754944e-38");
js.clear().appendFloat(1.0 * (uint64_t(1) << 24));
- EXPECT_EQUAL(js.toString(), "16777216.0");
+ EXPECT_EQ(js.toString(), "16777216.0");
js.clear().appendFloat(1000);
- EXPECT_EQUAL(js.toString(), "1000.0");
+ EXPECT_EQ(js.toString(), "1000.0");
}
{ // long
js.clear().appendInt64(4294967296ll);
- EXPECT_EQUAL(js.toString(), "4294967296");
+ EXPECT_EQ(js.toString(), "4294967296");
js.clear().appendInt64(-4294967296ll);
- EXPECT_EQUAL(js.toString(), "-4294967296");
+ EXPECT_EQ(js.toString(), "-4294967296");
}
{ // string
js.clear().appendString("string");
- EXPECT_EQUAL(js.toString(), "\"string\"");
+ EXPECT_EQ(js.toString(), "\"string\"");
}
{ // NULL
js.clear().appendNull();
- EXPECT_EQUAL(js.toString(), "null");
+ EXPECT_EQ(js.toString(), "null");
}
{ // quote
js.clear().appendString("x\"y");
- EXPECT_EQUAL(js.toString(), "\"x\\\"y\"");
+ EXPECT_EQ(js.toString(), "\"x\\\"y\"");
js.clear().appendString("x\\y");
- EXPECT_EQUAL(js.toString(), "\"x\\\\y\"");
+ EXPECT_EQ(js.toString(), "\"x\\\\y\"");
js.clear().appendString("x/y");
- EXPECT_EQUAL(js.toString(), "\"x/y\"");
+ EXPECT_EQ(js.toString(), "\"x/y\"");
js.clear().appendString("x\by");
- EXPECT_EQUAL(js.toString(), "\"x\\by\"");
+ EXPECT_EQ(js.toString(), "\"x\\by\"");
js.clear().appendString("x\fy");
- EXPECT_EQUAL(js.toString(), "\"x\\fy\"");
+ EXPECT_EQ(js.toString(), "\"x\\fy\"");
js.clear().appendString("x\ny");
- EXPECT_EQUAL(js.toString(), "\"x\\ny\"");
+ EXPECT_EQ(js.toString(), "\"x\\ny\"");
js.clear().appendString("x\ry");
- EXPECT_EQUAL(js.toString(), "\"x\\ry\"");
+ EXPECT_EQ(js.toString(), "\"x\\ry\"");
js.clear().appendString("x\ty");
- EXPECT_EQUAL(js.toString(), "\"x\\ty\"");
+ EXPECT_EQ(js.toString(), "\"x\\ty\"");
}
}
-void
-JSONTest::testJSONWriterObject()
+TEST(JSONTest, test_json_writer_object)
{
JSONStringer js;
{ // single pair
js.beginObject().appendKey("k1").appendInt64(1l).endObject();
- EXPECT_EQUAL(js.toString(), "{\"k1\":1}");
+ EXPECT_EQ(js.toString(), "{\"k1\":1}");
}
{ // multiple pairs
js.clear().beginObject().appendKey("k1").appendInt64(1l).appendKey("k2").appendInt64(2l).endObject();
- EXPECT_EQUAL(js.toString(), "{\"k1\":1,\"k2\":2}");
+ EXPECT_EQ(js.toString(), "{\"k1\":1,\"k2\":2}");
}
{ // object in object
js.clear().beginObject().appendKey("k1").beginObject().appendKey("k1.1").appendInt64(11l).endObject().endObject();
- EXPECT_EQUAL(js.toString(), "{\"k1\":{\"k1.1\":11}}");
+ EXPECT_EQ(js.toString(), "{\"k1\":{\"k1.1\":11}}");
}
{ // object in object (multiple pairs)
js.clear().beginObject().
@@ -133,65 +117,61 @@ JSONTest::testJSONWriterObject()
appendKey("k2.2").appendInt64(22l).
endObject().
endObject();
- EXPECT_EQUAL(js.toString(), "{\"k1\":{\"k1.1\":11,\"k1.2\":12},\"k2\":{\"k2.1\":21,\"k2.2\":22}}");
+ EXPECT_EQ(js.toString(), "{\"k1\":{\"k1.1\":11,\"k1.2\":12},\"k2\":{\"k2.1\":21,\"k2.2\":22}}");
}
{ // array in object
js.clear().beginObject().appendKey("k1").
beginArray().appendInt64(1l).appendInt64(2l).endArray().endObject();
- EXPECT_EQUAL(js.toString(), "{\"k1\":[1,2]}");
+ EXPECT_EQ(js.toString(), "{\"k1\":[1,2]}");
}
{ // array in object (multiple pairs)
js.clear().beginObject().
appendKey("k1").beginArray().appendInt64(1l).appendInt64(2l).endArray().
appendKey("k2").beginArray().appendInt64(3l).appendInt64(4l).endArray().
endObject();
- EXPECT_EQUAL(js.toString(), "{\"k1\":[1,2],\"k2\":[3,4]}");
+ EXPECT_EQ(js.toString(), "{\"k1\":[1,2],\"k2\":[3,4]}");
}
}
-
-void
-JSONTest::testJSONWriterArray()
+TEST(JSONTest, test_json_writer_array)
{
JSONStringer js;
{ // single element
js.beginArray().appendInt64(1l).endArray();
- EXPECT_EQUAL(js.toString(), "[1]");
+ EXPECT_EQ(js.toString(), "[1]");
}
{ // multiple elements
js.clear().beginArray().appendInt64(1l).appendInt64(2l).endArray();
- EXPECT_EQUAL(js.toString(), "[1,2]");
+ EXPECT_EQ(js.toString(), "[1,2]");
}
{ // array in array
js.clear().beginArray().beginArray().appendInt64(1l).endArray().endArray();
- EXPECT_EQUAL(js.toString(), "[[1]]");
+ EXPECT_EQ(js.toString(), "[[1]]");
}
{ // array in array (multiple elements)
js.clear().beginArray().
beginArray().appendInt64(1l).appendInt64(2l).endArray().
beginArray().appendInt64(3l).appendInt64(4l).endArray().
endArray();
- EXPECT_EQUAL(js.toString(), "[[1,2],[3,4]]");
+ EXPECT_EQ(js.toString(), "[[1,2],[3,4]]");
}
{ // object in array
js.clear().beginArray().
beginObject().appendKey("k1").appendInt64(1l).endObject().
endArray();
- EXPECT_EQUAL(js.toString(), "[{\"k1\":1}]");
+ EXPECT_EQ(js.toString(), "[{\"k1\":1}]");
}
{ // object in array (multiple elements)
js.clear().beginArray().
beginObject().appendKey("k1").appendInt64(1l).appendKey("k2").appendInt64(2l).endObject().
beginObject().appendKey("k3").appendInt64(3l).appendKey("k4").appendInt64(4l).endObject().
endArray();
- EXPECT_EQUAL(js.toString(), "[{\"k1\":1,\"k2\":2},{\"k3\":3,\"k4\":4}]");
+ EXPECT_EQ(js.toString(), "[{\"k1\":1,\"k2\":2},{\"k3\":3,\"k4\":4}]");
}
}
-
-void
-JSONTest::testJSONWriterComplex()
+TEST(JSONTest, test_json_writer_complex)
{
JSONStringer js;
@@ -269,7 +249,7 @@ JSONTest::testJSONWriterComplex()
js.endArray();
}
js.endObject();
- EXPECT_EQUAL(js.toString(), "{\"k1\":{\"k1.1\":1,\"k1.2\":[2,3]},\"k2\":{\"k2.1\":{\"k2.1.1\":4,\"k2.1.2\":[5,6]}},\"k3\":[{\"k3.1\":7,\"k3.2\":[8,9]},{\"k3.1\":10,\"k3.2\":[11,12]}]}");
+ EXPECT_EQ(js.toString(), "{\"k1\":{\"k1.1\":1,\"k1.2\":[2,3]},\"k2\":{\"k2.1\":{\"k2.1.1\":4,\"k2.1.2\":[5,6]}},\"k3\":[{\"k3.1\":7,\"k3.2\":[8,9]},{\"k3.1\":10,\"k3.2\":[11,12]}]}");
}
namespace {
@@ -304,19 +284,17 @@ namespace {
};
}
-void
-JSONTest::testJsonStream()
+TEST(JSONTest, test_json_stream)
{
vespalib::asciistream as;
vespalib::JsonStream stream(as);
Builder b;
b.build(stream);
stream.finalize();
- EXPECT_EQUAL(as.str(), "{\"k1\":{\"k1.1\":1,\"k1.2\":[2,3]},\"k2\":{\"k2.1\":{\"k2.1.1\":4,\"k2.1.2\":[5,6]}},\"k3\":[{\"k3.1\":-7,\"k3.2\":[-8,-9]},{\"k3.1\":10,\"k3.2\":[11,12]}]}");
+ EXPECT_EQ(as.str(), "{\"k1\":{\"k1.1\":1,\"k1.2\":[2,3]},\"k2\":{\"k2.1\":{\"k2.1.1\":4,\"k2.1.2\":[5,6]}},\"k3\":[{\"k3.1\":-7,\"k3.2\":[-8,-9]},{\"k3.1\":10,\"k3.2\":[11,12]}]}");
}
-void
-JSONTest::testJsonStreamErrors()
+TEST(JSONTest, test_json_stream_errors)
{
using namespace vespalib::jsonstream;
// Unsupported object keys
@@ -325,42 +303,42 @@ JSONTest::testJsonStreamErrors()
vespalib::JsonStream stream(as);
stream << Object() << Object();
} catch (vespalib::JsonStreamException& e) {
- EXPECT_EQUAL("Invalid state on call: An object value cannot be an object key ({}(ObjectExpectingKey))", e.getReason());
+ EXPECT_EQ("Invalid state on call: An object value cannot be an object key ({}(ObjectExpectingKey))", e.getReason());
}
try{
vespalib::asciistream as;
vespalib::JsonStream stream(as);
stream << Object() << true;
} catch (vespalib::JsonStreamException& e) {
- EXPECT_EQUAL("Invalid state on call: A bool value cannot be an object key ({}(ObjectExpectingKey))", e.getReason());
+ EXPECT_EQ("Invalid state on call: A bool value cannot be an object key ({}(ObjectExpectingKey))", e.getReason());
}
try{
vespalib::asciistream as;
vespalib::JsonStream stream(as);
stream << Object() << 13;
} catch (vespalib::JsonStreamException& e) {
- EXPECT_EQUAL("Invalid state on call: An int64_t value cannot be an object key ({}(ObjectExpectingKey))", e.getReason());
+ EXPECT_EQ("Invalid state on call: An int64_t value cannot be an object key ({}(ObjectExpectingKey))", e.getReason());
}
try{
vespalib::asciistream as;
vespalib::JsonStream stream(as);
stream << Object() << uint64_t(13);
} catch (vespalib::JsonStreamException& e) {
- EXPECT_EQUAL("Invalid state on call: A uint64_t value cannot be an object key ({}(ObjectExpectingKey))", e.getReason());
+ EXPECT_EQ("Invalid state on call: A uint64_t value cannot be an object key ({}(ObjectExpectingKey))", e.getReason());
}
try{
vespalib::asciistream as;
vespalib::JsonStream stream(as);
stream << Object() << 0.5;
} catch (vespalib::JsonStreamException& e) {
- EXPECT_EQUAL("Invalid state on call: A double value cannot be an object key ({}(ObjectExpectingKey))", e.getReason());
+ EXPECT_EQ("Invalid state on call: A double value cannot be an object key ({}(ObjectExpectingKey))", e.getReason());
}
try{
vespalib::asciistream as;
vespalib::JsonStream stream(as);
stream << Object() << jsonstream::Array();
} catch (vespalib::JsonStreamException& e) {
- EXPECT_EQUAL("Invalid state on call: An array value cannot be an object key ({}(ObjectExpectingKey))", e.getReason());
+ EXPECT_EQ("Invalid state on call: An array value cannot be an object key ({}(ObjectExpectingKey))", e.getReason());
}
// Invalid points to add End()
try{
@@ -368,14 +346,14 @@ JSONTest::testJsonStreamErrors()
vespalib::JsonStream stream(as);
stream << Object() << "foo" << End();
} catch (vespalib::JsonStreamException& e) {
- EXPECT_EQUAL("Invalid state on call: Object got key but not value. Cannot end it now ({foo}(ObjectExpectingValue))", e.getReason());
+ EXPECT_EQ("Invalid state on call: Object got key but not value. Cannot end it now ({foo}(ObjectExpectingValue))", e.getReason());
}
try{
vespalib::asciistream as;
vespalib::JsonStream stream(as);
stream << End();
} catch (vespalib::JsonStreamException& e) {
- EXPECT_EQUAL("Invalid state on call: No tag to end. At root ((RootExpectingArrayOrObjectStart))", e.getReason());
+ EXPECT_EQ("Invalid state on call: No tag to end. At root ((RootExpectingArrayOrObjectStart))", e.getReason());
}
// Adding to finalized stream
try{
@@ -383,61 +361,60 @@ JSONTest::testJsonStreamErrors()
vespalib::JsonStream stream(as);
stream << Object() << End() << "foo";
} catch (vespalib::JsonStreamException& e) {
- EXPECT_EQUAL("Invalid state on call: Stream already finalized. Can't add a string value. (Finalized)", e.getReason());
+ EXPECT_EQ("Invalid state on call: Stream already finalized. Can't add a string value. (Finalized)", e.getReason());
}
try{
vespalib::asciistream as;
vespalib::JsonStream stream(as);
stream << Object() << End() << false;
} catch (vespalib::JsonStreamException& e) {
- EXPECT_EQUAL("Invalid state on call: Stream already finalized. Can't add a bool value. (Finalized)", e.getReason());
+ EXPECT_EQ("Invalid state on call: Stream already finalized. Can't add a bool value. (Finalized)", e.getReason());
}
try{
vespalib::asciistream as;
vespalib::JsonStream stream(as);
stream << Object() << End() << 13;
} catch (vespalib::JsonStreamException& e) {
- EXPECT_EQUAL("Invalid state on call: Stream already finalized. Can't add a long long value. (Finalized)", e.getReason());
+ EXPECT_EQ("Invalid state on call: Stream already finalized. Can't add a long long value. (Finalized)", e.getReason());
}
try{
vespalib::asciistream as;
vespalib::JsonStream stream(as);
stream << Object() << End() << 13u;
} catch (vespalib::JsonStreamException& e) {
- EXPECT_EQUAL("Invalid state on call: Stream already finalized. Can't add an unsigned long long value. (Finalized)", e.getReason());
+ EXPECT_EQ("Invalid state on call: Stream already finalized. Can't add an unsigned long long value. (Finalized)", e.getReason());
}
try{
vespalib::asciistream as;
vespalib::JsonStream stream(as);
stream << Object() << End() << 0.2;
} catch (vespalib::JsonStreamException& e) {
- EXPECT_EQUAL("Invalid state on call: Stream already finalized. Can't add a double value. (Finalized)", e.getReason());
+ EXPECT_EQ("Invalid state on call: Stream already finalized. Can't add a double value. (Finalized)", e.getReason());
}
try{
vespalib::asciistream as;
vespalib::JsonStream stream(as);
stream << Object() << End() << Object();
} catch (vespalib::JsonStreamException& e) {
- EXPECT_EQUAL("Invalid state on call: Stream already finalized. Can't start a new object. (Finalized)", e.getReason());
+ EXPECT_EQ("Invalid state on call: Stream already finalized. Can't start a new object. (Finalized)", e.getReason());
}
try{
vespalib::asciistream as;
vespalib::JsonStream stream(as);
stream << Object() << End() << jsonstream::Array();
} catch (vespalib::JsonStreamException& e) {
- EXPECT_EQUAL("Invalid state on call: Stream already finalized. Can't start a new array. (Finalized)", e.getReason());
+ EXPECT_EQ("Invalid state on call: Stream already finalized. Can't start a new array. (Finalized)", e.getReason());
}
try{
vespalib::asciistream as;
vespalib::JsonStream stream(as);
stream << Object() << End() << End();
} catch (vespalib::JsonStreamException& e) {
- EXPECT_EQUAL("Invalid state on call: Stream already finalized. Can't end it. (Finalized)", e.getReason());
+ EXPECT_EQ("Invalid state on call: Stream already finalized. Can't end it. (Finalized)", e.getReason());
}
}
-void
-JSONTest::testJsonStreamStateReporting()
+TEST(JSONTest, test_json_stream_state_reporting)
{
using namespace vespalib::jsonstream;
vespalib::asciistream as;
@@ -447,24 +424,8 @@ JSONTest::testJsonStreamStateReporting()
<< Object() << "key" << "value" << End()
<< false
<< End();
- EXPECT_EQUAL("Current: Finalized", stream.getJsonStreamState());
-}
-
-int
-JSONTest::Main()
-{
- TEST_INIT("json_test");
-
- testJSONWriterValues();
- testJSONWriterObject();
- testJSONWriterArray();
- testJSONWriterComplex();
- testJsonStream();
- testJsonStreamErrors();
- testJsonStreamStateReporting();
-
- TEST_DONE();
+ EXPECT_EQ("Current: Finalized", stream.getJsonStreamState());
}
-TEST_APPHOOK(JSONTest);
+GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/vespalib/src/tests/objects/identifiable/CMakeLists.txt b/vespalib/src/tests/objects/identifiable/CMakeLists.txt
index e8227a8fa14..c3e8a932e20 100644
--- a/vespalib/src/tests/objects/identifiable/CMakeLists.txt
+++ b/vespalib/src/tests/objects/identifiable/CMakeLists.txt
@@ -5,5 +5,6 @@ vespa_add_executable(vespalib_identifiable_test_app TEST
namedobject.cpp
DEPENDS
vespalib
+ GTest::gtest
)
vespa_add_test(NAME vespalib_identifiable_test_app COMMAND vespalib_identifiable_test_app)
diff --git a/vespalib/src/tests/objects/identifiable/identifiable_test.cpp b/vespalib/src/tests/objects/identifiable/identifiable_test.cpp
index 4b31ba6e870..6296c7c5922 100644
--- a/vespalib/src/tests/objects/identifiable/identifiable_test.cpp
+++ b/vespalib/src/tests/objects/identifiable/identifiable_test.cpp
@@ -1,27 +1,26 @@
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include "namedobject.h"
+#include <vespa/vespalib/gtest/gtest.h>
#include <vespa/vespalib/objects/identifiable.hpp>
#include <vespa/vespalib/objects/nbostream.h>
#include <vespa/vespalib/util/exceptions.h>
-#include <vespa/vespalib/testkit/testapp.h>
using namespace vespalib;
-class IdentifiableTest : public TestApp {
- void requireThatIdentifiableCastCanCastPointers();
- void requireThatIdentifiableCastCanCastReferences();
- void testNamedObject();
- void testNboStream();
+class IdentifiableTest : public ::testing::Test {
+protected:
+ IdentifiableTest();
+ ~IdentifiableTest() override;
template <typename T>
void testStream(const T & a);
- void testNboSerializer();
template <typename T>
void testSerializer(const T & a);
-public:
- int Main() override;
};
+IdentifiableTest::IdentifiableTest() = default;
+IdentifiableTest::~IdentifiableTest() = default;
+
#define CID_Abstract 0x700000
#define CID_A 0x700001
#define CID_B 0x700002
@@ -74,22 +73,21 @@ IMPLEMENT_IDENTIFIABLE(A, Abstract);
IMPLEMENT_IDENTIFIABLE(B, A);
IMPLEMENT_IDENTIFIABLE(C, Identifiable);
-void
-IdentifiableTest::testNamedObject()
+TEST_F(IdentifiableTest, test_named_object)
{
NamedObject a("first"), b("second");;
nbostream os;
NBOSerializer nos(os);
nos << a << b;
- EXPECT_EQUAL(27u,os.size());
+ EXPECT_EQ(27u,os.size());
Identifiable::UP o1;
o1 = Identifiable::create(nos);
- EXPECT_EQUAL(14u, os.size());
+ EXPECT_EQ(14u, os.size());
ASSERT_TRUE(o1->inherits(NamedObject::classId));
ASSERT_TRUE(o1->getClass().id() == NamedObject::classId);
EXPECT_TRUE(static_cast<const NamedObject &>(*o1).getName() == "first");
o1 = Identifiable::create(nos);
- EXPECT_EQUAL(0u, os.size());
+ EXPECT_EQ(0u, os.size());
ASSERT_TRUE(o1->inherits(NamedObject::classId));
ASSERT_TRUE(o1->getClass().id() == NamedObject::classId);
EXPECT_TRUE(static_cast<const NamedObject &>(*o1).getName() == "second");
@@ -103,8 +101,8 @@ void IdentifiableTest::testStream(const T & a)
T b;
s >> b;
EXPECT_TRUE(s.empty());
- EXPECT_EQUAL(a, b);
- EXPECT_EQUAL(nbostream::ok, s.state());
+ EXPECT_EQ(a, b);
+ EXPECT_EQ(nbostream::ok, s.state());
EXPECT_TRUE(s.good());
}
@@ -117,11 +115,11 @@ void IdentifiableTest::testSerializer(const T & a)
T b;
s >> b;
EXPECT_TRUE(s.getStream().empty());
- EXPECT_EQUAL(a, b);
- EXPECT_EQUAL(nbostream::ok, s.getStream().state());
+ EXPECT_EQ(a, b);
+ EXPECT_EQ(nbostream::ok, s.getStream().state());
}
-void IdentifiableTest::testNboSerializer()
+TEST_F(IdentifiableTest, test_nbo_serializer)
{
testSerializer(true);
testSerializer(false);
@@ -138,7 +136,7 @@ void IdentifiableTest::testNboSerializer()
testSerializer(vespalib::string("abcdefgh"));
}
-void IdentifiableTest::testNboStream()
+TEST_F(IdentifiableTest, test_nbo_stream)
{
testStream(true);
testStream(false);
@@ -156,94 +154,85 @@ void IdentifiableTest::testNboStream()
testStream(vespalib::string("abcdefgh"));
{
nbostream s(4);
- EXPECT_EQUAL(4u, s.capacity());
+ EXPECT_EQ(4u, s.capacity());
s << "abcdef";
- EXPECT_EQUAL(nbostream::ok, s.state());
- EXPECT_EQUAL(10u, s.size());
- EXPECT_EQUAL(16u, s.capacity());
- EXPECT_EQUAL(0, strncmp(s.data() + 4, "abcdef", 6));
+ EXPECT_EQ(nbostream::ok, s.state());
+ EXPECT_EQ(10u, s.size());
+ EXPECT_EQ(16u, s.capacity());
+ EXPECT_EQ(0, strncmp(s.data() + 4, "abcdef", 6));
}
{
nbostream s(8);
- EXPECT_EQUAL(0u, s.size());
- EXPECT_EQUAL(8u, s.capacity());
+ EXPECT_EQ(0u, s.size());
+ EXPECT_EQ(8u, s.capacity());
const char * prev = s.data();
s << "ABCD";
- EXPECT_EQUAL(8u, s.size());
- EXPECT_EQUAL(8u, s.capacity());
- EXPECT_EQUAL(prev, s.data());
+ EXPECT_EQ(8u, s.size());
+ EXPECT_EQ(8u, s.capacity());
+ EXPECT_EQ(prev, s.data());
s << "A long string that will cause resizing";
- EXPECT_EQUAL(50u, s.size());
- EXPECT_EQUAL(64u, s.capacity());
- EXPECT_NOT_EQUAL(prev, s.data());
+ EXPECT_EQ(50u, s.size());
+ EXPECT_EQ(64u, s.capacity());
+ EXPECT_NE(prev, s.data());
}
{
nbostream s(8);
- EXPECT_EQUAL(0u, s.size());
- EXPECT_EQUAL(8u, s.capacity());
+ EXPECT_EQ(0u, s.size());
+ EXPECT_EQ(8u, s.capacity());
const char * prev = s.data();
s << "ABCD";
- EXPECT_EQUAL(8u, s.size());
- EXPECT_EQUAL(8u, s.capacity());
- EXPECT_EQUAL(prev, s.data());
+ EXPECT_EQ(8u, s.size());
+ EXPECT_EQ(8u, s.capacity());
+ EXPECT_EQ(prev, s.data());
s.reserve(50);
- EXPECT_NOT_EQUAL(prev, s.data());
- EXPECT_EQUAL(8u, s.size());
- EXPECT_EQUAL(64u, s.capacity());
+ EXPECT_NE(prev, s.data());
+ EXPECT_EQ(8u, s.size());
+ EXPECT_EQ(64u, s.capacity());
prev = s.data();
s << "A long string that will cause resizing";
- EXPECT_EQUAL(50u, s.size());
- EXPECT_EQUAL(64u, s.capacity());
- EXPECT_EQUAL(prev, s.data());
+ EXPECT_EQ(50u, s.size());
+ EXPECT_EQ(64u, s.capacity());
+ EXPECT_EQ(prev, s.data());
}
{
nbostream s;
s << int64_t(9);
- EXPECT_EQUAL(8u, s.size());
- EXPECT_EQUAL(0u, s.rp());
+ EXPECT_EQ(8u, s.size());
+ EXPECT_EQ(0u, s.rp());
int64_t a(7), b(1);
s >> a;
- EXPECT_EQUAL(0u, s.size());
- EXPECT_EQUAL(8u, s.rp());
+ EXPECT_EQ(0u, s.size());
+ EXPECT_EQ(8u, s.rp());
EXPECT_TRUE(s.empty());
EXPECT_TRUE(s.good());
- EXPECT_EQUAL(9, a);
+ EXPECT_EQ(9, a);
try {
s >> b;
EXPECT_TRUE(false);
} catch (const IllegalStateException & e) {
- EXPECT_EQUAL("Stream failed bufsize(1024), readp(8), writep(8)", e.getMessage());
+ EXPECT_EQ("Stream failed bufsize(1024), readp(8), writep(8)", e.getMessage());
}
- EXPECT_EQUAL(0u, s.size());
- EXPECT_EQUAL(8u, s.rp());
+ EXPECT_EQ(0u, s.size());
+ EXPECT_EQ(8u, s.rp());
EXPECT_TRUE(s.empty());
EXPECT_FALSE(s.good());
- EXPECT_EQUAL(1, b);
- EXPECT_EQUAL(nbostream::eof, s.state());
+ EXPECT_EQ(1, b);
+ EXPECT_EQ(nbostream::eof, s.state());
}
}
-int
-IdentifiableTest::Main()
+TEST_F(IdentifiableTest, test_identifiable)
{
- TEST_INIT("identifiable_test");
-
- TEST_DO(requireThatIdentifiableCastCanCastPointers());
- TEST_DO(requireThatIdentifiableCastCanCastReferences());
- testNamedObject();
- testNboStream();
- testNboSerializer();
-
A a;
B b;
const Identifiable::RuntimeClass & rtcA = a.getClass();
- EXPECT_EQUAL(rtcA.id(), static_cast<unsigned int>(A::classId));
- EXPECT_EQUAL(strcmp(rtcA.name(), "A"), 0);
+ EXPECT_EQ(rtcA.id(), static_cast<unsigned int>(A::classId));
+ EXPECT_EQ(strcmp(rtcA.name(), "A"), 0);
const Identifiable::RuntimeClass & rtcB = b.getClass();
- EXPECT_EQUAL(rtcB.id(), static_cast<unsigned int>(B::classId));
- EXPECT_EQUAL(strcmp(rtcB.name(), "B"), 0);
+ EXPECT_EQ(rtcB.id(), static_cast<unsigned int>(B::classId));
+ EXPECT_EQ(strcmp(rtcB.name(), "B"), 0);
const Identifiable::RuntimeClass * rt(Identifiable::classFromId(0x1ab76245));
ASSERT_TRUE(rt == NULL);
@@ -270,7 +259,7 @@ IdentifiableTest::Main()
nbostream os;
NBOSerializer nos(os);
nos << *o;
- EXPECT_EQUAL(os.size(), 4u);
+ EXPECT_EQ(os.size(), 4u);
Identifiable::UP o2 = Identifiable::create(nos);
EXPECT_TRUE(os.empty());
ASSERT_TRUE(o->inherits(B::classId));
@@ -297,18 +286,17 @@ IdentifiableTest::Main()
IdentifiablePtr<C> c1(new C(10));
IdentifiablePtr<C> c2(new C(20));
- EXPECT_LESS(c0.cmp(c1), 0);
- EXPECT_EQUAL(c0.cmp(c0), 0);
- EXPECT_GREATER(c1.cmp(c0), 0);
+ EXPECT_LT(c0.cmp(c1), 0);
+ EXPECT_EQ(c0.cmp(c0), 0);
+ EXPECT_GT(c1.cmp(c0), 0);
- EXPECT_LESS(c1.cmp(c2), 0);
- EXPECT_EQUAL(c1.cmp(c1), 0);
- EXPECT_GREATER(c2.cmp(c1), 0);
-
- TEST_DONE();
+ EXPECT_LT(c1.cmp(c2), 0);
+ EXPECT_EQ(c1.cmp(c1), 0);
+ EXPECT_GT(c2.cmp(c1), 0);
}
-void IdentifiableTest::requireThatIdentifiableCastCanCastPointers() {
+TEST_F(IdentifiableTest, require_that_identifiable_cast_can_cast_pointers)
+{
A a;
B b;
EXPECT_TRUE(Identifiable::cast<A *>(&a));
@@ -319,7 +307,8 @@ void IdentifiableTest::requireThatIdentifiableCastCanCastPointers() {
EXPECT_TRUE(Identifiable::cast<Abstract *>(&b));
}
-void IdentifiableTest::requireThatIdentifiableCastCanCastReferences() {
+TEST_F(IdentifiableTest, require_that_identifiable_cast_can_cast_references)
+{
A a;
B b;
try {
@@ -330,9 +319,9 @@ void IdentifiableTest::requireThatIdentifiableCastCanCastReferences() {
Identifiable::cast<Abstract &>(a);
Identifiable::cast<Abstract &>(b);
} catch (std::bad_cast &e) {
- TEST_FATAL(e.what());
+ FAIL() << e.what();
}
- EXPECT_EXCEPTION(Identifiable::cast<B &>(a), std::bad_cast, "bad_cast");
+ EXPECT_THROW(Identifiable::cast<B &>(a), std::bad_cast);
}
-TEST_APPHOOK(IdentifiableTest)
+GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/vespalib/src/tests/optimized/CMakeLists.txt b/vespalib/src/tests/optimized/CMakeLists.txt
index 0e7e85b6678..ce1c3a7cf67 100644
--- a/vespalib/src/tests/optimized/CMakeLists.txt
+++ b/vespalib/src/tests/optimized/CMakeLists.txt
@@ -4,5 +4,6 @@ vespa_add_executable(vespalib_optimized_test_app TEST
optimized_test.cpp
DEPENDS
vespalib
+ GTest::gtest
)
vespa_add_test(NAME vespalib_optimized_test_app COMMAND vespalib_optimized_test_app)
diff --git a/vespalib/src/tests/optimized/optimized_test.cpp b/vespalib/src/tests/optimized/optimized_test.cpp
index 9dffefeb012..ec14750f919 100644
--- a/vespalib/src/tests/optimized/optimized_test.cpp
+++ b/vespalib/src/tests/optimized/optimized_test.cpp
@@ -1,82 +1,64 @@
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <vespa/vespalib/testkit/testapp.h>
+#include <vespa/vespalib/gtest/gtest.h>
#include <vespa/vespalib/util/optimized.h>
using namespace vespalib;
-class Test : public vespalib::TestApp
+template <typename TestType>
+class OptimizedTest : public ::testing::Test
{
-private:
- template<typename T>
- void testMsbIdx();
- template<typename T>
- void testLsbIdx();
- template<typename T>
- void testPopCount();
-public:
- int Main() override;
+protected:
+ OptimizedTest();
+ ~OptimizedTest() override;
};
-template<typename T>
-void Test::testMsbIdx()
+template <typename TestType>
+OptimizedTest<TestType>::OptimizedTest() = default;
+template <typename TestType>
+OptimizedTest<TestType>::~OptimizedTest() = default;
+
+using OptimizedTestTypes = ::testing::Types<unsigned int, unsigned long, unsigned long long>;
+TYPED_TEST_SUITE(OptimizedTest, OptimizedTestTypes);
+
+TYPED_TEST(OptimizedTest, test_msb_idx)
{
- EXPECT_EQUAL(Optimized::msbIdx(T(0)), 0);
- EXPECT_EQUAL(Optimized::msbIdx(T(1)), 0);
- EXPECT_EQUAL(Optimized::msbIdx(T(-1)), int(sizeof(T)*8 - 1));
+ using T = TypeParam;
+ EXPECT_EQ(Optimized::msbIdx(T(0)), 0);
+ EXPECT_EQ(Optimized::msbIdx(T(1)), 0);
+ EXPECT_EQ(Optimized::msbIdx(T(-1)), int(sizeof(T)*8 - 1));
T v(static_cast<T>(-1));
for (size_t i(0); i < sizeof(T); i++) {
for (size_t j(0); j < 8; j++) {
- EXPECT_EQUAL(Optimized::msbIdx(v), int(sizeof(T)*8 - (i*8+j) - 1));
+ EXPECT_EQ(Optimized::msbIdx(v), int(sizeof(T)*8 - (i*8+j) - 1));
v = v >> 1;
}
}
}
-template<typename T>
-void Test::testLsbIdx()
+TYPED_TEST(OptimizedTest, test_lsb_idx)
{
- EXPECT_EQUAL(Optimized::lsbIdx(T(0)), 0);
- EXPECT_EQUAL(Optimized::lsbIdx(T(1)), 0);
- EXPECT_EQUAL(Optimized::lsbIdx(T(T(1)<<(sizeof(T)*8 - 1))), int(sizeof(T)*8 - 1));
- EXPECT_EQUAL(Optimized::lsbIdx(T(-1)), 0);
+ using T = TypeParam;
+ EXPECT_EQ(Optimized::lsbIdx(T(0)), 0);
+ EXPECT_EQ(Optimized::lsbIdx(T(1)), 0);
+ EXPECT_EQ(Optimized::lsbIdx(T(T(1)<<(sizeof(T)*8 - 1))), int(sizeof(T)*8 - 1));
+ EXPECT_EQ(Optimized::lsbIdx(T(-1)), 0);
T v(static_cast<T>(-1));
for (size_t i(0); i < sizeof(T); i++) {
for (size_t j(0); j < 8; j++) {
- EXPECT_EQUAL(Optimized::lsbIdx(v), int(i*8+j));
+ EXPECT_EQ(Optimized::lsbIdx(v), int(i*8+j));
v = v << 1;
}
}
}
-template<typename T>
-void Test::testPopCount()
+TYPED_TEST(OptimizedTest, test_pop_count)
{
- EXPECT_EQUAL(0, Optimized::popCount(T(0)));
- EXPECT_EQUAL(1, Optimized::popCount(T(1)));
- EXPECT_EQUAL(int(8 * sizeof(T)), Optimized::popCount(T(-1)));
+ using T = TypeParam;
+ EXPECT_EQ(0, Optimized::popCount(T(0)));
+ EXPECT_EQ(1, Optimized::popCount(T(1)));
+ EXPECT_EQ(int(8 * sizeof(T)), Optimized::popCount(T(-1)));
}
-int Test::Main()
-{
- TEST_INIT("optimized_test");
-
- testMsbIdx<unsigned int>();
- testMsbIdx<unsigned long>();
- testMsbIdx<unsigned long long>();
-
- TEST_FLUSH();
- testLsbIdx<unsigned int>();
- testLsbIdx<unsigned long>();
- testLsbIdx<unsigned long long>();
-
- TEST_FLUSH();
- testPopCount<unsigned int>();
- testPopCount<unsigned long>();
- testPopCount<unsigned long long>();
-
- TEST_FLUSH();
- TEST_DONE();
-}
+GTEST_MAIN_RUN_ALL_TESTS()
-TEST_APPHOOK(Test)
diff --git a/vespalib/src/tests/printable/CMakeLists.txt b/vespalib/src/tests/printable/CMakeLists.txt
index e9332bba309..4781e9b8f54 100644
--- a/vespalib/src/tests/printable/CMakeLists.txt
+++ b/vespalib/src/tests/printable/CMakeLists.txt
@@ -4,5 +4,6 @@ vespa_add_executable(vespalib_printabletest_app TEST
printabletest.cpp
DEPENDS
vespalib
+ GTest::gtest
)
vespa_add_test(NAME vespalib_printabletest_app COMMAND vespalib_printabletest_app)
diff --git a/vespalib/src/tests/printable/printabletest.cpp b/vespalib/src/tests/printable/printabletest.cpp
index 03e3c777a25..5b6c0058bf0 100644
--- a/vespalib/src/tests/printable/printabletest.cpp
+++ b/vespalib/src/tests/printable/printabletest.cpp
@@ -1,8 +1,8 @@
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#include <vespa/vespalib/gtest/gtest.h>
#include <vespa/vespalib/util/printable.h>
#include <vespa/vespalib/stllike/asciistream.h>
-#include <vespa/vespalib/testkit/testapp.h>
struct Foo : public vespalib::Printable {
int val;
@@ -74,80 +74,61 @@ struct AsciiBar : public vespalib::AsciiPrintable {
}
};
-class Test : public vespalib::TestApp
-{
-public:
- void testSimple();
- void testAsciiVariant();
- int Main() override;
-};
-
-void
-Test::testSimple()
+TEST(PrintableTest, test_simple)
{
Foo foo(3, "myval");
Bar bar(7, 3, "otherval");
- EXPECT_EQUAL("Foo(val = 3, other size 5)", foo.toString());
- EXPECT_EQUAL("Foo(val = 3, other size 5)", foo.toString(false, " "));
- EXPECT_EQUAL("Foo(val = 3, other:\n"
- " myval)", foo.toString(true));
- EXPECT_EQUAL("Foo(val = 3, other:\n"
- " myval)", foo.toString(true, " "));
+ EXPECT_EQ("Foo(val = 3, other size 5)", foo.toString());
+ EXPECT_EQ("Foo(val = 3, other size 5)", foo.toString(false, " "));
+ EXPECT_EQ("Foo(val = 3, other:\n"
+ " myval)", foo.toString(true));
+ EXPECT_EQ("Foo(val = 3, other:\n"
+ " myval)", foo.toString(true, " "));
std::ostringstream ost;
ost << foo;
- EXPECT_EQUAL("Foo(val = 3, other size 5)", ost.str());
-
- EXPECT_EQUAL("Bar(7)", bar.toString());
- EXPECT_EQUAL("Bar(7)", bar.toString(false, " "));
- EXPECT_EQUAL("Bar(7) : Foo(val = 3, other:\n"
- " otherval)", bar.toString(true));
- EXPECT_EQUAL("Bar(7) : Foo(val = 3, other:\n"
- " otherval)", bar.toString(true, " "));
+ EXPECT_EQ("Foo(val = 3, other size 5)", ost.str());
+
+ EXPECT_EQ("Bar(7)", bar.toString());
+ EXPECT_EQ("Bar(7)", bar.toString(false, " "));
+ EXPECT_EQ("Bar(7) : Foo(val = 3, other:\n"
+ " otherval)", bar.toString(true));
+ EXPECT_EQ("Bar(7) : Foo(val = 3, other:\n"
+ " otherval)", bar.toString(true, " "));
}
-void
-Test::testAsciiVariant()
+TEST(PrintableTest, test_ascii_variant)
{
AsciiFoo foo(19);
- EXPECT_EQUAL("19", foo.toString());
- EXPECT_EQUAL("AsciiFoo(19)",
- foo.toString(vespalib::AsciiPrintable::VERBOSE));
+ EXPECT_EQ("19", foo.toString());
+ EXPECT_EQ("AsciiFoo(19)",
+ foo.toString(vespalib::AsciiPrintable::VERBOSE));
{
vespalib::asciistream as;
as << foo;
- EXPECT_EQUAL("19", as.str());
+ EXPECT_EQ("19", as.str());
std::ostringstream ost;
ost << foo;
- EXPECT_EQUAL("19", ost.str());
+ EXPECT_EQ("19", ost.str());
}
AsciiBar bar(3);
- EXPECT_EQUAL("3", bar.toString());
- EXPECT_EQUAL("AsciiBar() {\n"
- " AsciiFoo(3)\n"
- "}", bar.toString(vespalib::AsciiPrintable::VERBOSE));
+ EXPECT_EQ("3", bar.toString());
+ EXPECT_EQ("AsciiBar() {\n"
+ " AsciiFoo(3)\n"
+ "}", bar.toString(vespalib::AsciiPrintable::VERBOSE));
{
vespalib::asciistream as;
as << bar;
- EXPECT_EQUAL("3", as.str());
+ EXPECT_EQ("3", as.str());
std::ostringstream ost;
ost << bar;
- EXPECT_EQUAL("3", ost.str());
+ EXPECT_EQ("3", ost.str());
}
}
-int
-Test::Main()
-{
- TEST_INIT("printabletest");
- testSimple();
- testAsciiVariant();
- TEST_DONE();
-}
-
-TEST_APPHOOK(Test)
+GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/vespalib/src/tests/programoptions/CMakeLists.txt b/vespalib/src/tests/programoptions/CMakeLists.txt
index 81066b19104..524ea8dc416 100644
--- a/vespalib/src/tests/programoptions/CMakeLists.txt
+++ b/vespalib/src/tests/programoptions/CMakeLists.txt
@@ -5,5 +5,6 @@ vespa_add_executable(vespalib_programoptions_test_app TEST
programoptions_testutils.cpp
DEPENDS
vespalib
+ GTest::gtest
)
vespa_add_test(NAME vespalib_programoptions_test_app COMMAND vespalib_programoptions_test_app)
diff --git a/vespalib/src/tests/programoptions/programoptions_test.cpp b/vespalib/src/tests/programoptions/programoptions_test.cpp
index bbb5e2ffc20..4f5ff2fc4d1 100644
--- a/vespalib/src/tests/programoptions/programoptions_test.cpp
+++ b/vespalib/src/tests/programoptions/programoptions_test.cpp
@@ -2,38 +2,11 @@
#include "programoptions_testutils.h"
#include <vespa/vespalib/util/programoptions.h>
-#include <vespa/vespalib/testkit/testapp.h>
+#include <vespa/vespalib/gtest/gtest.h>
#include <iostream>
namespace vespalib {
-class Test : public vespalib::TestApp
-{
-public:
- void testSyntaxPage();
- void testNormalUsage();
- void testFailures();
- void testVectorArgument();
- void testAllHiddenOption();
- void testOptionsAfterArguments();
- int Main() override;
-};
-
-int
-Test::Main()
-{
- TEST_INIT("programoptions_test");
- srandom(1);
- testSyntaxPage();
- testNormalUsage();
- testFailures();
- testVectorArgument();
- testAllHiddenOption();
- // Currently not supported
- // testOptionsAfterArguments();
- TEST_DONE();
-}
-
struct MyOptions : public ProgramOptions {
bool boolOpt;
bool boolWithDefOpt;
@@ -86,7 +59,8 @@ MyOptions::MyOptions(int argc, const char* const* argv)
MyOptions::~MyOptions() { }
-void Test::testSyntaxPage() {
+TEST(ProgramOptionsTest, test_syntax_page)
+{
AppOptions opts("myapp");
MyOptions options(opts.getArgCount(), opts.getArguments());
std::ostringstream actual;
@@ -116,41 +90,42 @@ void Test::testSyntaxPage() {
"Advanced options:\n"
" -p --properties <key> <value> : Property map (default empty)\n"
);
- EXPECT_EQUAL(expected, actual.str());
+ EXPECT_EQ(expected, actual.str());
}
-void Test::testNormalUsage() {
+TEST(ProgramOptionsTest, test_normal_usage)
+{
{
AppOptions opts("myapp -b --uintopt 4 -s foo tit 1 tei 6");
MyOptions options(opts.getArgCount(), opts.getArguments());
options.parse();
- EXPECT_EQUAL(true, options.boolOpt);
- EXPECT_EQUAL(true, options.boolWithDefOpt);
- EXPECT_EQUAL(5, options.intOpt);
- EXPECT_EQUAL(4u, options.uintOpt);
- EXPECT_APPROX(4, options.floatOpt, 0.00001);
- EXPECT_EQUAL("foo", options.stringOpt);
- EXPECT_EQUAL("tit", options.argString);
- EXPECT_EQUAL(1, options.argInt);
- EXPECT_EQUAL("tei", options.argOptionalString);
- EXPECT_EQUAL(0u, options.properties.size());
- EXPECT_EQUAL(6, options.anotherOptionalArg);
+ EXPECT_EQ(true, options.boolOpt);
+ EXPECT_EQ(true, options.boolWithDefOpt);
+ EXPECT_EQ(5, options.intOpt);
+ EXPECT_EQ(4u, options.uintOpt);
+ EXPECT_NEAR(4, options.floatOpt, 0.00001);
+ EXPECT_EQ("foo", options.stringOpt);
+ EXPECT_EQ("tit", options.argString);
+ EXPECT_EQ(1, options.argInt);
+ EXPECT_EQ("tei", options.argOptionalString);
+ EXPECT_EQ(0u, options.properties.size());
+ EXPECT_EQ(6, options.anotherOptionalArg);
}
{
AppOptions opts("myapp --uintopt 6 tit 1");
MyOptions options(opts.getArgCount(), opts.getArguments());
options.parse();
- EXPECT_EQUAL(false, options.boolOpt);
- EXPECT_EQUAL(true, options.boolWithDefOpt);
- EXPECT_EQUAL(5, options.intOpt);
- EXPECT_EQUAL(6u, options.uintOpt);
- EXPECT_APPROX(4, options.floatOpt, 0.00001);
- EXPECT_EQUAL("ballalaika", options.stringOpt);
- EXPECT_EQUAL("tit", options.argString);
- EXPECT_EQUAL(1, options.argInt);
- EXPECT_EQUAL("foo", options.argOptionalString);
- EXPECT_EQUAL(0u, options.properties.size());
- EXPECT_EQUAL(3, options.anotherOptionalArg);
+ EXPECT_EQ(false, options.boolOpt);
+ EXPECT_EQ(true, options.boolWithDefOpt);
+ EXPECT_EQ(5, options.intOpt);
+ EXPECT_EQ(6u, options.uintOpt);
+ EXPECT_NEAR(4, options.floatOpt, 0.00001);
+ EXPECT_EQ("ballalaika", options.stringOpt);
+ EXPECT_EQ("tit", options.argString);
+ EXPECT_EQ(1, options.argInt);
+ EXPECT_EQ("foo", options.argOptionalString);
+ EXPECT_EQ(0u, options.properties.size());
+ EXPECT_EQ(3, options.anotherOptionalArg);
}
// Arguments coming after options.
// (Required for nesting of short options)
@@ -158,62 +133,63 @@ void Test::testNormalUsage() {
AppOptions opts("myapp --uintopt --intopt 6 -8 tit 1 tei");
MyOptions options(opts.getArgCount(), opts.getArguments());
options.parse();
- EXPECT_EQUAL(false, options.boolOpt);
- EXPECT_EQUAL(true, options.boolWithDefOpt);
- EXPECT_EQUAL(-8, options.intOpt);
- EXPECT_EQUAL(6u, options.uintOpt);
- EXPECT_APPROX(4, options.floatOpt, 0.00001);
- EXPECT_EQUAL("ballalaika", options.stringOpt);
- EXPECT_EQUAL("tit", options.argString);
- EXPECT_EQUAL(1, options.argInt);
- EXPECT_EQUAL("tei", options.argOptionalString);
- EXPECT_EQUAL(0u, options.properties.size());
+ EXPECT_EQ(false, options.boolOpt);
+ EXPECT_EQ(true, options.boolWithDefOpt);
+ EXPECT_EQ(-8, options.intOpt);
+ EXPECT_EQ(6u, options.uintOpt);
+ EXPECT_NEAR(4, options.floatOpt, 0.00001);
+ EXPECT_EQ("ballalaika", options.stringOpt);
+ EXPECT_EQ("tit", options.argString);
+ EXPECT_EQ(1, options.argInt);
+ EXPECT_EQ("tei", options.argOptionalString);
+ EXPECT_EQ(0u, options.properties.size());
}
{
AppOptions opts( "myapp -uib 6 -8 --boolwithdef tit 1 tei");
MyOptions options(opts.getArgCount(), opts.getArguments());
options.parse();
- EXPECT_EQUAL(true, options.boolOpt);
- EXPECT_EQUAL(false, options.boolWithDefOpt);
- EXPECT_EQUAL(-8, options.intOpt);
- EXPECT_EQUAL(6u, options.uintOpt);
- EXPECT_APPROX(4, options.floatOpt, 0.00001);
- EXPECT_EQUAL("ballalaika", options.stringOpt);
- EXPECT_EQUAL("tit", options.argString);
- EXPECT_EQUAL(1, options.argInt);
- EXPECT_EQUAL("tei", options.argOptionalString);
- EXPECT_EQUAL(0u, options.properties.size());
+ EXPECT_EQ(true, options.boolOpt);
+ EXPECT_EQ(false, options.boolWithDefOpt);
+ EXPECT_EQ(-8, options.intOpt);
+ EXPECT_EQ(6u, options.uintOpt);
+ EXPECT_NEAR(4, options.floatOpt, 0.00001);
+ EXPECT_EQ("ballalaika", options.stringOpt);
+ EXPECT_EQ("tit", options.argString);
+ EXPECT_EQ(1, options.argInt);
+ EXPECT_EQ("tei", options.argOptionalString);
+ EXPECT_EQ(0u, options.properties.size());
}
// Properties
{
AppOptions opts("myapp -u 6 -p foo bar --prop hmm brr tit 1 tei");
MyOptions options(opts.getArgCount(), opts.getArguments());
options.parse();
- EXPECT_EQUAL(false, options.boolOpt);
- EXPECT_EQUAL(true, options.boolWithDefOpt);
- EXPECT_EQUAL(5, options.intOpt);
- EXPECT_EQUAL(6u, options.uintOpt);
- EXPECT_APPROX(4, options.floatOpt, 0.00001);
- EXPECT_EQUAL("ballalaika", options.stringOpt);
- EXPECT_EQUAL("tit", options.argString);
- EXPECT_EQUAL(1, options.argInt);
- EXPECT_EQUAL("tei", options.argOptionalString);
- EXPECT_EQUAL(2u, options.properties.size());
- EXPECT_EQUAL("bar", options.properties["foo"]);
- EXPECT_EQUAL("brr", options.properties["hmm"]);
+ EXPECT_EQ(false, options.boolOpt);
+ EXPECT_EQ(true, options.boolWithDefOpt);
+ EXPECT_EQ(5, options.intOpt);
+ EXPECT_EQ(6u, options.uintOpt);
+ EXPECT_NEAR(4, options.floatOpt, 0.00001);
+ EXPECT_EQ("ballalaika", options.stringOpt);
+ EXPECT_EQ("tit", options.argString);
+ EXPECT_EQ(1, options.argInt);
+ EXPECT_EQ("tei", options.argOptionalString);
+ EXPECT_EQ(2u, options.properties.size());
+ EXPECT_EQ("bar", options.properties["foo"]);
+ EXPECT_EQ("brr", options.properties["hmm"]);
}
}
-void Test::testFailures() {
+TEST(ProgramOptionsTest, test_failures)
+{
// Non-existing long option
{
AppOptions opts("myapp -b --uintopt 4 -s foo --none");
MyOptions options(opts.getArgCount(), opts.getArguments());
try{
options.parse();
- TEST_FATAL("Expected exception");
+ FAIL() << "Expected exception";
} catch (InvalidCommandLineArgumentsException& e) {
- EXPECT_EQUAL("Invalid option 'none'.", e.getMessage());
+ EXPECT_EQ("Invalid option 'none'.", e.getMessage());
}
}
// Non-existing short option
@@ -222,9 +198,9 @@ void Test::testFailures() {
MyOptions options(opts.getArgCount(), opts.getArguments());
try{
options.parse();
- TEST_FATAL("Expected exception");
+ FAIL() << "Expected exception";
} catch (InvalidCommandLineArgumentsException& e) {
- EXPECT_EQUAL("Invalid option 'q'.", e.getMessage());
+ EXPECT_EQ("Invalid option 'q'.", e.getMessage());
}
}
// Lacking option argument
@@ -233,9 +209,9 @@ void Test::testFailures() {
MyOptions options(opts.getArgCount(), opts.getArguments());
try{
options.parse();
- TEST_FATAL("Expected exception");
+ FAIL() << "Expected exception";
} catch (InvalidCommandLineArgumentsException& e) {
- EXPECT_EQUAL("Option 's' needs 1 arguments. Only 0 available.",
+ EXPECT_EQ("Option 's' needs 1 arguments. Only 0 available.",
e.getMessage());
}
}
@@ -245,35 +221,21 @@ void Test::testFailures() {
MyOptions options(opts.getArgCount(), opts.getArguments());
try{
options.parse();
- TEST_FATAL("Expected exception");
+ FAIL() << "Expected exception";
} catch (InvalidCommandLineArgumentsException& e) {
- EXPECT_EQUAL("The argument '3000000000' can not be interpreted as a "
+ EXPECT_EQ("The argument '3000000000' can not be interpreted as a "
"number of type int.", e.getMessage());
}
}
- // Negative value to unsigned var (Currently doesnt fail)
-/*
- {
- AppOptions opts("myapp -b --uintopt -1 foo 0");
- MyOptions options(opts.getArgCount(), opts.getArguments());
- try{
- options.parse();
- TEST_FATAL("Expected exception");
- } catch (InvalidCommandLineArgumentsException& e) {
- EXPECT_EQUAL("The argument '-1' can not be interpreted as a "
- "number of type uint.", e.getMessage());
- }
- }
- */
// Lacking required option
{
AppOptions opts("myapp -b");
MyOptions options(opts.getArgCount(), opts.getArguments());
try{
options.parse();
- TEST_FATAL("Expected exception");
+ FAIL() << "Expected exception";
} catch (InvalidCommandLineArgumentsException& e) {
- EXPECT_EQUAL("Option 'uintopt' has no default and must be set.",
+ EXPECT_EQ("Option 'uintopt' has no default and must be set.",
e.getMessage());
}
}
@@ -283,9 +245,9 @@ void Test::testFailures() {
MyOptions options(opts.getArgCount(), opts.getArguments());
try{
options.parse();
- TEST_FATAL("Expected exception");
+ FAIL() << "Expected exception";
} catch (InvalidCommandLineArgumentsException& e) {
- EXPECT_EQUAL("Insufficient data is given to set required argument "
+ EXPECT_EQ("Insufficient data is given to set required argument "
"'argInt'.",
e.getMessage());
}
@@ -296,16 +258,16 @@ void Test::testFailures() {
MyOptions options(opts.getArgCount(), opts.getArguments());
try{
options.parse();
- TEST_FATAL("Expected exception");
+ FAIL() << "Expected exception";
} catch (InvalidCommandLineArgumentsException& e) {
- EXPECT_EQUAL("The argument 'en' can not be interpreted as a number "
+ EXPECT_EQ("The argument 'en' can not be interpreted as a number "
"of type int.",
e.getMessage());
}
}
}
-void Test::testVectorArgument()
+TEST(ProgramOptionsTest, test_vector_argument)
{
AppOptions opts("myapp foo bar baz");
std::vector<std::string> args;
@@ -318,16 +280,16 @@ void Test::testVectorArgument()
"Arguments:\n"
" ids (string[]) : Vector element\n"
);
- EXPECT_EQUAL(expected, actual.str());
+ EXPECT_EQ(expected, actual.str());
options.parse();
- EXPECT_EQUAL(3u, args.size());
- EXPECT_EQUAL("foo", args[0]);
- EXPECT_EQUAL("bar", args[1]);
- EXPECT_EQUAL("baz", args[2]);
+ EXPECT_EQ(3u, args.size());
+ EXPECT_EQ("foo", args[0]);
+ EXPECT_EQ("bar", args[1]);
+ EXPECT_EQ("baz", args[2]);
}
-void Test::testAllHiddenOption()
+TEST(ProgramOptionsTest, test_all_hidden_options)
{
AppOptions opts("myapp --foo bar");
std::string option;
@@ -337,25 +299,12 @@ void Test::testAllHiddenOption()
std::ostringstream actual;
options.writeSyntaxPage(actual);
std::string expected("\nUsage: myapp\n");
- EXPECT_EQUAL(expected, actual.str());
+ EXPECT_EQ(expected, actual.str());
options.parse();
- EXPECT_EQUAL("bar", option);
-}
-
-void Test::testOptionsAfterArguments()
-{
- AppOptions opts("myapp bar --foo baz");
- std::string option;
- std::string argument;
- ProgramOptions options(opts.getArgCount(), opts.getArguments());
- options.addOption("foo", option, "Description");
- options.addArgument("arg", argument, "Description");
- options.parse();
- EXPECT_EQUAL("baz", option);
- EXPECT_EQUAL("bar", argument);
+ EXPECT_EQ("bar", option);
}
} // vespalib
-TEST_APPHOOK(vespalib::Test)
+GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/vespalib/src/tests/sharedptr/CMakeLists.txt b/vespalib/src/tests/sharedptr/CMakeLists.txt
index 052efb19447..6e038ed31c5 100644
--- a/vespalib/src/tests/sharedptr/CMakeLists.txt
+++ b/vespalib/src/tests/sharedptr/CMakeLists.txt
@@ -4,5 +4,6 @@ vespa_add_executable(vespalib_ptrholder_test_app TEST
ptrholder.cpp
DEPENDS
vespalib
+ GTest::gtest
)
vespa_add_test(NAME vespalib_ptrholder_test_app COMMAND vespalib_ptrholder_test_app)
diff --git a/vespalib/src/tests/sharedptr/ptrholder.cpp b/vespalib/src/tests/sharedptr/ptrholder.cpp
index 8dc3bba2722..e6d1710247b 100644
--- a/vespalib/src/tests/sharedptr/ptrholder.cpp
+++ b/vespalib/src/tests/sharedptr/ptrholder.cpp
@@ -1,20 +1,11 @@
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include <vespa/vespalib/util/ptrholder.h>
-#include <vespa/vespalib/testkit/testapp.h>
+#include <vespa/vespalib/gtest/gtest.h>
using vespalib::PtrHolder;
-class Test : public vespalib::TestApp
-{
-public:
- void testEmpty();
- void testSimple();
- int Main() override;
-};
-
-
struct Data
{
int ctorCnt;
@@ -39,8 +30,7 @@ using PT = std::shared_ptr<DataRef>;
using HOLD = PtrHolder<DataRef>;
-void
-Test::testEmpty()
+TEST(PtrHolderTest, test_empty)
{
HOLD hold;
EXPECT_TRUE(hold.get().get() == NULL);
@@ -56,8 +46,7 @@ Test::testEmpty()
}
-void
-Test::testSimple()
+TEST(PtrHolderTest, test_simple)
{
Data data;
HOLD hold;
@@ -86,14 +75,4 @@ Test::testSimple()
EXPECT_TRUE(data.dtorCnt == 2);
}
-
-int
-Test::Main()
-{
- TEST_INIT("ptrholder_test");
- testEmpty();
- testSimple();
- TEST_DONE();
-}
-
-TEST_APPHOOK(Test)
+GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/vespalib/src/tests/stllike/CMakeLists.txt b/vespalib/src/tests/stllike/CMakeLists.txt
index 7fa8e0cbd1f..644bd4f66d2 100644
--- a/vespalib/src/tests/stllike/CMakeLists.txt
+++ b/vespalib/src/tests/stllike/CMakeLists.txt
@@ -25,6 +25,7 @@ vespa_add_executable(vespalib_asciistream_test_app TEST
asciistream_test.cpp
DEPENDS
vespalib
+ GTest::gtest
)
vespa_add_test(NAME vespalib_asciistream_test_app COMMAND vespalib_asciistream_test_app)
vespa_add_executable(vespalib_hashtable_test_app TEST
diff --git a/vespalib/src/tests/stllike/asciistream_test.cpp b/vespalib/src/tests/stllike/asciistream_test.cpp
index 05068fb102c..cd710c0adb4 100644
--- a/vespalib/src/tests/stllike/asciistream_test.cpp
+++ b/vespalib/src/tests/stllike/asciistream_test.cpp
@@ -1,49 +1,31 @@
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <vespa/vespalib/testkit/test_kit.h>
-#include <vespa/vespalib/testkit/testapp.h>
+#include <vespa/vespalib/gtest/gtest.h>
#include <vespa/vespalib/stllike/asciistream.h>
+#include <vespa/vespalib/testkit/test_path.h>
#include <vespa/vespalib/util/exceptions.h>
#include <vespa/vespalib/locale/c.h>
+#include <cmath>
#include <iomanip>
#include <float.h>
using namespace vespalib;
-class AsciistreamTest : public TestApp
-{
-public:
- int Main() override;
- template <typename T>
- void verify(T first, T second, const char * firstResult, const char * secondResult, char delim);
- template <typename T>
- void verifyBothWays(T value, const char * firstResult);
- void testIntegerManip();
- void testFill();
- void testString();
- void testCreateFromFile();
- void testWriteThenRead();
- void testGetLine();
- void testCopyConstruct();
- void testMoveIsWellDefined();
- void testIllegalNumbers();
- void testDouble();
- void testFloat();
- void testStateSaver();
-};
+namespace {
template <typename T>
void
-AsciistreamTest::verifyBothWays(T value, const char * expected)
+verifyBothWays(T value, const char * expected, const vespalib::string& label)
{
+ SCOPED_TRACE(label);
asciistream os;
os << value;
- EXPECT_EQUAL(os.str(), string(expected));
- EXPECT_EQUAL(os.size(), strlen(expected));
+ EXPECT_EQ(os.str(), string(expected));
+ EXPECT_EQ(os.size(), strlen(expected));
{
T v;
os >> v;
- EXPECT_EQUAL(value, v);
+ EXPECT_EQ(value, v);
EXPECT_TRUE(os.empty());
}
@@ -51,255 +33,253 @@ AsciistreamTest::verifyBothWays(T value, const char * expected)
os << " " << expected;
T v;
os >> v;
- EXPECT_EQUAL(value, v);
+ EXPECT_EQ(value, v);
EXPECT_TRUE(os.empty());
- EXPECT_EQUAL(0u, os.size());
+ EXPECT_EQ(0u, os.size());
}
}
template <typename T>
void
-AsciistreamTest::verify(T first, T second, const char * firstResult, const char * secondResult, char delim)
+verify(T first, T second, const char * firstResult, const char * secondResult, char delim, const vespalib::string& label)
{
+ SCOPED_TRACE(label);
asciistream os;
std::ostringstream ss;
os << first;
ss << first;
- EXPECT_EQUAL(os.str(), string(firstResult));
- EXPECT_EQUAL(os.size(), strlen(firstResult));
- EXPECT_EQUAL(ss.str().size(), strlen(firstResult));
- EXPECT_EQUAL(strcmp(ss.str().c_str(), firstResult), 0);
+ EXPECT_EQ(os.str(), string(firstResult));
+ EXPECT_EQ(os.size(), strlen(firstResult));
+ EXPECT_EQ(ss.str().size(), strlen(firstResult));
+ EXPECT_EQ(strcmp(ss.str().c_str(), firstResult), 0);
os << delim << second;
ss << delim << second;
- EXPECT_EQUAL(os.size(), strlen(secondResult));
- EXPECT_EQUAL(ss.str().size(), strlen(secondResult));
- EXPECT_EQUAL(strcmp(os.c_str(), secondResult), 0);
- EXPECT_EQUAL(strcmp(ss.str().c_str(), secondResult), 0);
+ EXPECT_EQ(os.size(), strlen(secondResult));
+ EXPECT_EQ(ss.str().size(), strlen(secondResult));
+ EXPECT_EQ(strcmp(os.c_str(), secondResult), 0);
+ EXPECT_EQ(strcmp(ss.str().c_str(), secondResult), 0);
}
-void
-AsciistreamTest::testIllegalNumbers()
+}
+
+TEST(AsciistreamTest, test_illegal_numbers)
{
{
asciistream is("777777777777");
uint16_t s(0);
- EXPECT_EXCEPTION(is >> s, IllegalArgumentException, "strToInt value '777777777777' is outside of range");
- EXPECT_EQUAL(12u, is.size());
+ EXPECT_THROW(is >> s, IllegalArgumentException);
+ EXPECT_EQ(12u, is.size());
uint32_t i(0);
- EXPECT_EXCEPTION(is >> i, IllegalArgumentException, "strToInt value '777777777777' is outside of range");
- EXPECT_EQUAL(12u, is.size());
+ EXPECT_THROW(is >> i, IllegalArgumentException);
+ EXPECT_EQ(12u, is.size());
int16_t si(0);
- EXPECT_EXCEPTION(is >> si, IllegalArgumentException, "strToInt value '777777777777' is outside of range");
- EXPECT_EQUAL(12u, is.size());
+ EXPECT_THROW(is >> si, IllegalArgumentException);
+ EXPECT_EQ(12u, is.size());
int32_t ii(0);
- EXPECT_EXCEPTION(is >> ii, IllegalArgumentException, "strToInt value '777777777777' is outside of range");
- EXPECT_EQUAL(12u, is.size());
+ EXPECT_THROW(is >> ii, IllegalArgumentException);
+ EXPECT_EQ(12u, is.size());
is << "777777777777";
- EXPECT_EQUAL(24u, is.size());
+ EXPECT_EQ(24u, is.size());
uint64_t l(0);
- EXPECT_EXCEPTION(is >> l, IllegalArgumentException, "value '777777777777777777777777' is outside of range");
- EXPECT_EQUAL(24u, is.size());
+ EXPECT_THROW(is >> l, IllegalArgumentException);
+ EXPECT_EQ(24u, is.size());
int64_t li(0);
- EXPECT_EXCEPTION(is >> li, IllegalArgumentException, "value '777777777777777777777777' is outside of range");
- EXPECT_EQUAL(24u, is.size());
+ EXPECT_THROW(is >> li, IllegalArgumentException);
+ EXPECT_EQ(24u, is.size());
}
{
asciistream is("-77");
uint16_t s(0);
- EXPECT_EXCEPTION(is >> s, IllegalArgumentException, "Illegal strToInt value '-77'");
- EXPECT_EQUAL(3u, is.size());
+ EXPECT_THROW(is >> s, IllegalArgumentException);
+ EXPECT_EQ(3u, is.size());
uint32_t i(0);
- EXPECT_EXCEPTION(is >> i, IllegalArgumentException, "Illegal strToInt value '-77'");
- EXPECT_EQUAL(3u, is.size());
+ EXPECT_THROW(is >> i, IllegalArgumentException);
+ EXPECT_EQ(3u, is.size());
}
{
asciistream is("7777777777777777777777777777777777777777");
- EXPECT_EQUAL(40u, is.size());
+ EXPECT_EQ(40u, is.size());
float f(0);
- EXPECT_EXCEPTION(is >> f, IllegalArgumentException, "float value '7777777777777777777777777777777777777777' is outside of range");
- EXPECT_EQUAL(40u, is.size());
+ EXPECT_THROW(is >> f, IllegalArgumentException);
+ EXPECT_EQ(40u, is.size());
vespalib::string tmp = is.str();
is << "e" << tmp;
- EXPECT_EQUAL(81u, is.size());
+ EXPECT_EQ(81u, is.size());
double d(0);
- EXPECT_EXCEPTION(is >> d, IllegalArgumentException, "double value '7777777777777777777777777777777777777777e7777777777777777777777777777777777777777' is outside of range");
- EXPECT_EQUAL(81u, is.size());
+ EXPECT_THROW(is >> d, IllegalArgumentException);
+ EXPECT_EQ(81u, is.size());
}
{
asciistream is("a");
char c(' ');
- EXPECT_EQUAL(1u, is.size());
+ EXPECT_EQ(1u, is.size());
is >> c;
- EXPECT_EQUAL('a', c);
+ EXPECT_EQ('a', c);
EXPECT_TRUE(is.empty());
- EXPECT_EXCEPTION(is >> c, IllegalArgumentException, "buffer underflow at pos 1.");
+ EXPECT_THROW(is >> c, IllegalArgumentException);
EXPECT_TRUE(is.empty());
unsigned char u(' ');
- EXPECT_EXCEPTION(is >> u, IllegalArgumentException, "buffer underflow at pos 1.");
+ EXPECT_THROW(is >> u, IllegalArgumentException);
EXPECT_TRUE(is.empty());
bool b(false);
- EXPECT_EXCEPTION(is >> b, IllegalArgumentException, "buffer underflow at pos 1.");
+ EXPECT_THROW(is >> b, IllegalArgumentException);
EXPECT_TRUE(is.empty());
{
uint32_t l(0);
- EXPECT_EXCEPTION(is >> l, IllegalArgumentException, "buffer underflow at pos 0.");
+ EXPECT_THROW(is >> l, IllegalArgumentException);
EXPECT_TRUE(is.empty());
}
{
int32_t l(0);
- EXPECT_EXCEPTION(is >> l, IllegalArgumentException, "buffer underflow at pos 0");
+ EXPECT_THROW(is >> l, IllegalArgumentException);
EXPECT_TRUE(is.empty());
}
{
float l(0);
- EXPECT_EXCEPTION(is >> l, IllegalArgumentException, "Failed decoding a float from ''.");
+ EXPECT_THROW(is >> l, IllegalArgumentException);
EXPECT_TRUE(is.empty());
}
{
double l(0);
- EXPECT_EXCEPTION(is >> l, IllegalArgumentException, "Failed decoding a double from ''.");
+ EXPECT_THROW(is >> l, IllegalArgumentException);
EXPECT_TRUE(is.empty());
}
}
}
-void
-AsciistreamTest::testCopyConstruct()
+TEST(AsciistreamTest, test_copy_construct)
{
asciistream os;
os << "test1";
asciistream os2(os);
- EXPECT_EQUAL(os.str(), os2.str());
+ EXPECT_EQ(os.str(), os2.str());
os2 << " test2";
EXPECT_FALSE(os.str() == os2.str());
asciistream os3(os);
os3 = os2;
- EXPECT_EQUAL(os2.str(), os3.str());
+ EXPECT_EQ(os2.str(), os3.str());
os.swap(os2);
- EXPECT_EQUAL(os.str(), os3.str());
+ EXPECT_EQ(os.str(), os3.str());
EXPECT_FALSE(os3.str() == os2.str());
os.swap(os2);
EXPECT_TRUE(os3.str() == os2.str());
}
-void
-AsciistreamTest::testMoveIsWellDefined()
+TEST(AsciistreamTest, test_move_is_well_defined)
{
asciistream read_only("hello world");
asciistream dest(std::move(read_only));
- EXPECT_EQUAL("hello world", dest.str());
+ EXPECT_EQ("hello world", dest.str());
read_only = asciistream("a string long enough to not be short string optimized");
dest = std::move(read_only);
- EXPECT_EQUAL("a string long enough to not be short string optimized", dest.str());
+ EXPECT_EQ("a string long enough to not be short string optimized", dest.str());
asciistream written_src;
written_src << "a foo walks into a bar";
dest = std::move(written_src);
- EXPECT_EQUAL("a foo walks into a bar", dest.str());
+ EXPECT_EQ("a foo walks into a bar", dest.str());
}
-void
-AsciistreamTest::testIntegerManip()
+TEST(AsciistreamTest, test_integer_manip)
{
asciistream os;
std::ostringstream ss;
os << 10;
ss << 10;
- EXPECT_EQUAL(os.size(), 2u);
- EXPECT_EQUAL(ss.str().size(), 2u);
- EXPECT_EQUAL(strcmp(os.c_str(), "10"), 0);
- EXPECT_EQUAL(strcmp(ss.str().c_str(), "10"), 0);
+ EXPECT_EQ(os.size(), 2u);
+ EXPECT_EQ(ss.str().size(), 2u);
+ EXPECT_EQ(strcmp(os.c_str(), "10"), 0);
+ EXPECT_EQ(strcmp(ss.str().c_str(), "10"), 0);
os << ' ' << dec << 10;
ss << ' ' << std::dec << 10;
- EXPECT_EQUAL(os.size(), 5u);
- EXPECT_EQUAL(ss.str().size(), 5u);
- EXPECT_EQUAL(strcmp(os.c_str(), "10 10"), 0);
- EXPECT_EQUAL(strcmp(ss.str().c_str(), "10 10"), 0);
+ EXPECT_EQ(os.size(), 5u);
+ EXPECT_EQ(ss.str().size(), 5u);
+ EXPECT_EQ(strcmp(os.c_str(), "10 10"), 0);
+ EXPECT_EQ(strcmp(ss.str().c_str(), "10 10"), 0);
os << ' ' << hex << 10 << ' ' << 11;
ss << ' ' << std::hex << 10 << ' ' << 11;
- EXPECT_EQUAL(os.size(), 9u);
- EXPECT_EQUAL(ss.str().size(), 9u);
- EXPECT_EQUAL(strcmp(os.c_str(), "10 10 a b"), 0);
- EXPECT_EQUAL(strcmp(ss.str().c_str(), "10 10 a b"), 0);
+ EXPECT_EQ(os.size(), 9u);
+ EXPECT_EQ(ss.str().size(), 9u);
+ EXPECT_EQ(strcmp(os.c_str(), "10 10 a b"), 0);
+ EXPECT_EQ(strcmp(ss.str().c_str(), "10 10 a b"), 0);
os << ' ' << oct << 10;
ss << ' ' << std::oct << 10;
- EXPECT_EQUAL(os.size(), 12u);
- EXPECT_EQUAL(ss.str().size(), 12u);
- EXPECT_EQUAL(strcmp(os.c_str(), "10 10 a b 12"), 0);
- EXPECT_EQUAL(strcmp(ss.str().c_str(), "10 10 a b 12"), 0);
+ EXPECT_EQ(os.size(), 12u);
+ EXPECT_EQ(ss.str().size(), 12u);
+ EXPECT_EQ(strcmp(os.c_str(), "10 10 a b 12"), 0);
+ EXPECT_EQ(strcmp(ss.str().c_str(), "10 10 a b 12"), 0);
// std::bin not supported by std::streams.
os << ' ' << bin << 10;
- EXPECT_EQUAL(os.size(), 19u);
- EXPECT_EQUAL(strcmp(os.c_str(), "10 10 a b 12 0b1010"), 0);
+ EXPECT_EQ(os.size(), 19u);
+ EXPECT_EQ(strcmp(os.c_str(), "10 10 a b 12 0b1010"), 0);
void *fooptr = reinterpret_cast<void*>(0x1badbadc0ffeeull);
// Also test that number base is restored OK after ptr print
os << dec << ' ' << fooptr << ' ' << 1234;
ss << std::dec << ' ' << fooptr << ' ' << 1234;
- EXPECT_EQUAL(std::string("10 10 a b 12 0b1010 0x1badbadc0ffee 1234"), os.str());
- EXPECT_EQUAL(std::string("10 10 a b 12 0x1badbadc0ffee 1234"), ss.str());
+ EXPECT_EQ(std::string("10 10 a b 12 0b1010 0x1badbadc0ffee 1234"), os.str());
+ EXPECT_EQ(std::string("10 10 a b 12 0x1badbadc0ffee 1234"), ss.str());
int i = 0;
const char *digits = "12345";
std::string ffs(digits, 4);
std::istringstream std_istr(ffs);
std_istr >> i;
- EXPECT_EQUAL(1234, i);
+ EXPECT_EQ(1234, i);
stringref firstfour(digits, 4);
asciistream istr(firstfour);
istr >> i;
- EXPECT_EQUAL(1234, i);
+ EXPECT_EQ(1234, i);
}
-void
-AsciistreamTest::testFill()
+TEST(AsciistreamTest, test_fill)
{
{
asciistream os;
std::ostringstream ss;
os << 10 << ' ' << setfill('h') << 11;
ss << 10 << ' ' << std::setfill('h') << 11;
- EXPECT_EQUAL(os.size(), 5u);
- EXPECT_EQUAL(ss.str().size(), 5u);
- EXPECT_EQUAL(strcmp(os.c_str(), "10 11"), 0);
- EXPECT_EQUAL(strcmp(ss.str().c_str(), "10 11"), 0);
+ EXPECT_EQ(os.size(), 5u);
+ EXPECT_EQ(ss.str().size(), 5u);
+ EXPECT_EQ(strcmp(os.c_str(), "10 11"), 0);
+ EXPECT_EQ(strcmp(ss.str().c_str(), "10 11"), 0);
os << setw(4) << 10 << ' ' << 11;
ss << std::setw(4) << 10 << ' ' << 11;
- EXPECT_EQUAL(os.size(), 12u);
- EXPECT_EQUAL(ss.str().size(), 12u);
- EXPECT_EQUAL(strcmp(os.c_str(), "10 11hh10 11"), 0);
- EXPECT_EQUAL(strcmp(ss.str().c_str(), "10 11hh10 11"), 0);
+ EXPECT_EQ(os.size(), 12u);
+ EXPECT_EQ(ss.str().size(), 12u);
+ EXPECT_EQ(strcmp(os.c_str(), "10 11hh10 11"), 0);
+ EXPECT_EQ(strcmp(ss.str().c_str(), "10 11hh10 11"), 0);
os << setw(4) << 10 << ' ' << 11;
ss << std::setw(4) << 10 << ' ' << 11;
- EXPECT_EQUAL(os.size(), 19u);
- EXPECT_EQUAL(ss.str().size(), 19u);
- EXPECT_EQUAL(strcmp(os.c_str(), "10 11hh10 11hh10 11"), 0);
- EXPECT_EQUAL(strcmp(ss.str().c_str(), "10 11hh10 11hh10 11"), 0);
+ EXPECT_EQ(os.size(), 19u);
+ EXPECT_EQ(ss.str().size(), 19u);
+ EXPECT_EQ(strcmp(os.c_str(), "10 11hh10 11hh10 11"), 0);
+ EXPECT_EQ(strcmp(ss.str().c_str(), "10 11hh10 11hh10 11"), 0);
}
{
asciistream os;
std::ostringstream ss;
os << setfill('X') << setw(19) << 'a';
ss << std::setfill('X') << std::setw(19) << 'a';
- EXPECT_EQUAL(os.size(), 19u);
- EXPECT_EQUAL(ss.str().size(), 19u);
- EXPECT_EQUAL(strcmp(os.c_str(), "XXXXXXXXXXXXXXXXXXa"), 0);
- EXPECT_EQUAL(strcmp(ss.str().c_str(), "XXXXXXXXXXXXXXXXXXa"), 0);
+ EXPECT_EQ(os.size(), 19u);
+ EXPECT_EQ(ss.str().size(), 19u);
+ EXPECT_EQ(strcmp(os.c_str(), "XXXXXXXXXXXXXXXXXXa"), 0);
+ EXPECT_EQ(strcmp(ss.str().c_str(), "XXXXXXXXXXXXXXXXXXa"), 0);
}
{
asciistream os;
std::ostringstream ss;
os << setfill('X') << setw(19) << "a";
ss << std::setfill('X') << std::setw(19) << "a";
- EXPECT_EQUAL(os.size(), 19u);
- EXPECT_EQUAL(ss.str().size(), 19u);
- EXPECT_EQUAL(strcmp(os.c_str(), "XXXXXXXXXXXXXXXXXXa"), 0);
- EXPECT_EQUAL(strcmp(ss.str().c_str(), "XXXXXXXXXXXXXXXXXXa"), 0);
+ EXPECT_EQ(os.size(), 19u);
+ EXPECT_EQ(ss.str().size(), 19u);
+ EXPECT_EQ(strcmp(os.c_str(), "XXXXXXXXXXXXXXXXXXa"), 0);
+ EXPECT_EQ(strcmp(ss.str().c_str(), "XXXXXXXXXXXXXXXXXXa"), 0);
}
{
float f(8.9);
@@ -307,10 +287,10 @@ AsciistreamTest::testFill()
std::ostringstream ss;
os << setfill('X') << setw(19) << f;
ss << std::setfill('X') << std::setw(19) << f;
- EXPECT_EQUAL(os.size(), 19u);
- EXPECT_EQUAL(ss.str().size(), 19u);
- EXPECT_EQUAL(strcmp(os.c_str(), "XXXXXXXXXXXXXXXX8.9"), 0);
- EXPECT_EQUAL(strcmp(ss.str().c_str(), "XXXXXXXXXXXXXXXX8.9"), 0);
+ EXPECT_EQ(os.size(), 19u);
+ EXPECT_EQ(ss.str().size(), 19u);
+ EXPECT_EQ(strcmp(os.c_str(), "XXXXXXXXXXXXXXXX8.9"), 0);
+ EXPECT_EQ(strcmp(ss.str().c_str(), "XXXXXXXXXXXXXXXX8.9"), 0);
}
{
double f(8.9);
@@ -318,16 +298,15 @@ AsciistreamTest::testFill()
std::ostringstream ss;
os << setfill('X') << setw(19) << f;
ss << std::setfill('X') << std::setw(19) << f;
- EXPECT_EQUAL(os.size(), 19u);
- EXPECT_EQUAL(ss.str().size(), 19u);
- EXPECT_EQUAL(strcmp(os.c_str(), "XXXXXXXXXXXXXXXX8.9"), 0);
- EXPECT_EQUAL(strcmp(ss.str().c_str(), "XXXXXXXXXXXXXXXX8.9"), 0);
+ EXPECT_EQ(os.size(), 19u);
+ EXPECT_EQ(ss.str().size(), 19u);
+ EXPECT_EQ(strcmp(os.c_str(), "XXXXXXXXXXXXXXXX8.9"), 0);
+ EXPECT_EQ(strcmp(ss.str().c_str(), "XXXXXXXXXXXXXXXX8.9"), 0);
}
}
-void
-AsciistreamTest::testString()
+TEST(AsciistreamTest, test_string)
{
std::string ss("a");
@@ -335,56 +314,55 @@ AsciistreamTest::testString()
{
std::ostringstream oss;
oss << ss << vs;
- EXPECT_EQUAL("aa", oss.str());
+ EXPECT_EQ("aa", oss.str());
}
{
asciistream oss;
oss << ss << vs;
- EXPECT_EQUAL("aa", oss.str());
+ EXPECT_EQ("aa", oss.str());
}
{
std::istringstream iss("b c");
iss >> ss >> vs;
- EXPECT_EQUAL("b", ss);
- EXPECT_EQUAL("c", vs);
+ EXPECT_EQ("b", ss);
+ EXPECT_EQ("c", vs);
}
{
std::istringstream iss("b c");
iss >> vs >> ss;
- EXPECT_EQUAL("b", vs);
- EXPECT_EQUAL("c", ss);
+ EXPECT_EQ("b", vs);
+ EXPECT_EQ("c", ss);
}
{
asciistream iss("b c");
iss >> ss >> vs;
- EXPECT_EQUAL("b", ss);
- EXPECT_EQUAL("c", vs);
+ EXPECT_EQ("b", ss);
+ EXPECT_EQ("c", vs);
}
{
asciistream iss("b c");
iss >> vs >> ss;
- EXPECT_EQUAL("b", vs);
- EXPECT_EQUAL("c", ss);
+ EXPECT_EQ("b", vs);
+ EXPECT_EQ("c", ss);
}
}
-void
-AsciistreamTest::testCreateFromFile()
+TEST(AsciistreamTest, test_create_from_file)
{
asciistream is(asciistream::createFromFile("non-existing.txt"));
EXPECT_TRUE(is.eof());
is = asciistream::createFromFile(TEST_PATH("test.txt"));
EXPECT_FALSE(is.eof());
- EXPECT_EQUAL(12u, is.size());
+ EXPECT_EQ(12u, is.size());
string s;
is >> s;
- EXPECT_EQUAL("line1", s);
+ EXPECT_EQ("line1", s);
is >> s;
- EXPECT_EQUAL("line2", s);
+ EXPECT_EQ("line2", s);
EXPECT_FALSE(is.eof());
is >> s;
- EXPECT_EQUAL("", s);
+ EXPECT_EQ("", s);
EXPECT_TRUE(is.eof());
#ifdef __linux__
@@ -393,30 +371,28 @@ AsciistreamTest::testCreateFromFile()
#endif
}
-void
-AsciistreamTest::testWriteThenRead()
+TEST(AsciistreamTest, test_write_then_read)
{
asciistream ios;
ios << "3 words";
int n(0);
string v;
ios >> n >> v;
- EXPECT_EQUAL(3, n);
- EXPECT_EQUAL("words", v);
+ EXPECT_EQ(3, n);
+ EXPECT_EQ("words", v);
EXPECT_TRUE(ios.eof());
}
-void
-AsciistreamTest::testGetLine()
+TEST(AsciistreamTest, test_get_line)
{
asciistream is = asciistream("line 1\nline 2\nline 3");
string s;
getline(is, s);
- EXPECT_EQUAL("line 1", s);
+ EXPECT_EQ("line 1", s);
getline(is, s);
- EXPECT_EQUAL("line 2", s);
+ EXPECT_EQ("line 2", s);
getline(is, s);
- EXPECT_EQUAL("line 3", s);
+ EXPECT_EQ("line 3", s);
}
#define VERIFY_DOUBLE_SERIALIZATION(value, expected, format, precision) { \
@@ -424,11 +400,11 @@ AsciistreamTest::testGetLine()
mystream << format; \
if (precision > 0) mystream << asciistream::Precision(precision); \
mystream << value; \
- EXPECT_EQUAL(expected, mystream.str()); \
+ EXPECT_EQ(expected, mystream.str()); \
}
-void
-AsciistreamTest::testDouble() {
+TEST(AsciistreamTest, test_double)
+{
VERIFY_DOUBLE_SERIALIZATION(0.0, "0.000000", fixed, -1);
VERIFY_DOUBLE_SERIALIZATION(0.0, "0.000000e+00", scientific, -1);
VERIFY_DOUBLE_SERIALIZATION(0.0, "0", automatic, -1);
@@ -502,119 +478,101 @@ AsciistreamTest::testDouble() {
as << "1.0e-325";
dv = 42.0;
as >> dv;
- EXPECT_EQUAL(dv, 0.0);
+ EXPECT_EQ(dv, 0.0);
as.clear();
as << "1.0e666";
dv = 42.0;
- EXPECT_EXCEPTION(as >> dv, IllegalArgumentException, "double value '1.0e666' is outside of range.");
- EXPECT_EQUAL(dv, 42.0);
+ EXPECT_THROW(as >> dv, IllegalArgumentException);
+ EXPECT_EQ(dv, 42.0);
}
-void
-AsciistreamTest::testFloat() {
+TEST(AsciistreamTest, test_float)
+{
float f = 0;
asciistream as("-5.490412E-39");
as >> f;
- EXPECT_EQUAL(f, -5.490412E-39f);
+ EXPECT_EQ(f, -5.490412E-39f);
as.clear();
as << "0.0001E-50";
f = 42.0;
as >> f;
- EXPECT_EQUAL(f, 0.0);
+ EXPECT_EQ(f, 0.0);
as.clear();
as << "123.4E50";
f = 42.0;
- EXPECT_EXCEPTION(as >> f, IllegalArgumentException, "float value '123.4E50' is outside of range.");
- EXPECT_EQUAL(f, 42.0);
+ EXPECT_THROW(as >> f, IllegalArgumentException);
+ EXPECT_EQ(f, 42.0);
errno = 0;
char *ep;
f = locale::c::strtof_au("-5.490412E-39", &ep);
- EXPECT_EQUAL(f, -5.490412E-39f);
- EXPECT_EQUAL(errno, 0);
- EXPECT_EQUAL(*ep, 0);
+ EXPECT_EQ(f, -5.490412E-39f);
+ EXPECT_EQ(errno, 0);
+ EXPECT_EQ(*ep, 0);
f = locale::c::strtof_au("0.0001E-50", &ep);
- EXPECT_EQUAL(f, 0.0);
- EXPECT_EQUAL(errno, 0);
- EXPECT_EQUAL(*ep, 0);
+ EXPECT_EQ(f, 0.0);
+ EXPECT_EQ(errno, 0);
+ EXPECT_EQ(*ep, 0);
f = locale::c::strtof_au("123.4E50", &ep);
- EXPECT_EQUAL(f, HUGE_VALF);
- EXPECT_EQUAL(errno, ERANGE);
- EXPECT_EQUAL(*ep, 0);
+ EXPECT_EQ(f, HUGE_VALF);
+ EXPECT_EQ(errno, ERANGE);
+ EXPECT_EQ(*ep, 0);
}
-void
-AsciistreamTest::testStateSaver()
+TEST(AsciistreamTest, test_state_saver)
{
asciistream as;
as << vespalib::hex << vespalib::setfill('0');
{
asciistream::StateSaver stateSaver(as);
as << vespalib::dec << vespalib::setfill('1');
- EXPECT_EQUAL(vespalib::dec, as.getBase());
- EXPECT_EQUAL('1', as.getFill());
+ EXPECT_EQ(vespalib::dec, as.getBase());
+ EXPECT_EQ('1', as.getFill());
}
- ASSERT_EQUAL(vespalib::hex, as.getBase());
- ASSERT_EQUAL('0', as.getFill());
+ ASSERT_EQ(vespalib::hex, as.getBase());
+ ASSERT_EQ('0', as.getFill());
}
-int
-AsciistreamTest::Main()
+TEST(AsciistreamTest, test_ascii_stream)
{
- TEST_INIT("asciistream_test");
-
- TEST_DO(verify("per", "paal", "per", "per paal", ' '));
- TEST_DO(verify<float>(7.89, -1.3, "7.89", "7.89 -1.3", ' '));
- TEST_DO(verify<double>(7.89, -1.3, "7.89", "7.89 -1.3", ' '));
- TEST_DO(verify<bool>(true, false, "1", "1 0", ' '));
- TEST_DO(verify<char>(65, 66, "A", "A B", ' '));
- TEST_DO(verify<unsigned char>(65, 66, "A", "A B", ' '));
- TEST_DO(verify<signed char>(65, 66, "A", "A B", ' '));
-// TEST_DO(verify<int8_t>(65, -1, "65", "65 -1", ' '));
- TEST_DO(verify<int16_t>(0, -1, "0", "0 -1", ' '));
- TEST_DO(verify<int16_t>(789, -1, "789", "789 -1", ' '));
- TEST_DO(verify<int32_t>(789, -1, "789", "789 -1", ' '));
- TEST_DO(verify<int64_t>(789789789789789l, -1, "789789789789789", "789789789789789 -1", ' '));
-// TEST_DO(verify<uint8_t>(65, -1, "65", "65 255", ' '));
- TEST_DO(verify<uint16_t>(789, -1, "789", "789 65535", ' '));
- TEST_DO(verify<uint32_t>(789, -1, "789", "789 4294967295", ' '));
- TEST_DO(verify<uint64_t>(789789789789789l, -1, "789789789789789", "789789789789789 18446744073709551615", ' '));
-
- TEST_DO(verifyBothWays<vespalib::string>("7.89", "7.89"));
- TEST_DO(verifyBothWays<std::string>("7.89", "7.89"));
- TEST_DO(verifyBothWays<float>(7.89, "7.89"));
- TEST_DO(verifyBothWays<double>(7.89, "7.89"));
- TEST_DO(verifyBothWays<bool>(true, "1"));
- TEST_DO(verifyBothWays<bool>(false, "0"));
- TEST_DO(verifyBothWays<char>(65, "A"));
- TEST_DO(verifyBothWays<unsigned char>(65, "A"));
- //TEST_DO(verifyBothWays<int8_t>(7, "7"));
- //TEST_DO(verifyBothWays<uint8_t>(7, "7"));
- TEST_DO(verifyBothWays<int16_t>(7, "7"));
- TEST_DO(verifyBothWays<uint16_t>(7, "7"));
- TEST_DO(verifyBothWays<int32_t>(7, "7"));
- TEST_DO(verifyBothWays<uint32_t>(7, "7"));
- TEST_DO(verifyBothWays<int64_t>(7, "7"));
- TEST_DO(verifyBothWays<uint64_t>(7, "7"));
-
- testCopyConstruct();
- testMoveIsWellDefined();
- testIntegerManip();
- testFill();
- testString();
- testCreateFromFile();
- testWriteThenRead();
- testGetLine();
- testIllegalNumbers();
- testDouble();
- testFloat();
- testStateSaver();
- TEST_DONE();
+ verify("per", "paal", "per", "per paal", ' ', "string");
+ verify<float>(7.89, -1.3, "7.89", "7.89 -1.3", ' ', "float");
+ verify<double>(7.89, -1.3, "7.89", "7.89 -1.3", ' ', "double");
+ verify<bool>(true, false, "1", "1 0", ' ', "bool");
+ verify<char>(65, 66, "A", "A B", ' ', "char");
+ verify<unsigned char>(65, 66, "A", "A B", ' ', "unsigned char");
+ verify<signed char>(65, 66, "A", "A B", ' ', "signed char");
+// verify<int8_t>(65, -1, "65", "65 -1", ' ', "int8_t");
+ verify<int16_t>(0, -1, "0", "0 -1", ' ', "int16_t");
+ verify<int16_t>(789, -1, "789", "789 -1", ' ', "int16_t again");
+ verify<int32_t>(789, -1, "789", "789 -1", ' ', "int32_t");
+ verify<int64_t>(789789789789789l, -1, "789789789789789", "789789789789789 -1", ' ', "int64_t");
+// verify<uint8_t>(65, -1, "65", "65 255", ' ', "uint8_t");
+ verify<uint16_t>(789, -1, "789", "789 65535", ' ', "uint16_t");
+ verify<uint32_t>(789, -1, "789", "789 4294967295", ' ', "uint32_t");
+ verify<uint64_t>(789789789789789l, -1, "789789789789789", "789789789789789 18446744073709551615", ' ', "uint64_t");
+
+ verifyBothWays<vespalib::string>("7.89", "7.89", "vespalib::string");
+ verifyBothWays<std::string>("7.89", "7.89", "stsd::string");
+ verifyBothWays<float>(7.89, "7.89", "float");
+ verifyBothWays<double>(7.89, "7.89", "double");
+ verifyBothWays<bool>(true, "1", "bool");
+ verifyBothWays<bool>(false, "0", "bool again");
+ verifyBothWays<char>(65, "A", "char");
+ verifyBothWays<unsigned char>(65, "A", "unsigned char");
+ // verifyBothWays<int8_t>(7, "7", "int8_t");
+ // verifyBothWays<uint8_t>(7, "7", "uint8_t");
+ verifyBothWays<int16_t>(7, "7", "int16_t");
+ verifyBothWays<uint16_t>(7, "7", "uint16_t");
+ verifyBothWays<int32_t>(7, "7", "int32_t");
+ verifyBothWays<uint32_t>(7, "7", "uint32_t");
+ verifyBothWays<int64_t>(7, "7", "int64_t");
+ verifyBothWays<uint64_t>(7, "7", "uint64_t");
}
-TEST_APPHOOK(AsciistreamTest)
+GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/vespalib/src/tests/xmlserializable/CMakeLists.txt b/vespalib/src/tests/xmlserializable/CMakeLists.txt
index 740f1f49bfb..4bd28a668a0 100644
--- a/vespalib/src/tests/xmlserializable/CMakeLists.txt
+++ b/vespalib/src/tests/xmlserializable/CMakeLists.txt
@@ -4,5 +4,6 @@ vespa_add_executable(vespalib_xmlserializable_test_app TEST
xmlserializabletest.cpp
DEPENDS
vespalib
+ GTest::gtest
)
vespa_add_test(NAME vespalib_xmlserializable_test_app COMMAND vespalib_xmlserializable_test_app)
diff --git a/vespalib/src/tests/xmlserializable/xmlserializabletest.cpp b/vespalib/src/tests/xmlserializable/xmlserializabletest.cpp
index c4d3fb9f1b9..3a6b933491a 100644
--- a/vespalib/src/tests/xmlserializable/xmlserializabletest.cpp
+++ b/vespalib/src/tests/xmlserializable/xmlserializabletest.cpp
@@ -1,35 +1,11 @@
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <vespa/vespalib/testkit/testapp.h>
+#include <vespa/vespalib/gtest/gtest.h>
#include <vespa/vespalib/util/xmlstream.h>
namespace vespalib {
-class Test : public vespalib::TestApp
-{
-public:
- void testNormalUsage();
- void testEscaping();
- void testNesting();
- void testIndent();
-
- int Main() override;
-};
-
-int
-Test::Main()
-{
- TEST_INIT("xmlserializables_test");
- srandom(1);
- testNormalUsage();
- testEscaping();
- testNesting();
- testIndent();
- TEST_DONE();
-}
-
-void
-Test::testNormalUsage()
+TEST(XmlSerializableTest, test_normal_usage)
{
std::ostringstream ost;
XmlOutputStream xos(ost);
@@ -47,11 +23,10 @@ Test::testNormalUsage()
"<door windowstate=\"up\"/>\n"
"<description>This is a car description used to test</description>\n"
"</car>";
- EXPECT_EQUAL(expected, ost.str());
+ EXPECT_EQ(expected, ost.str());
}
-void
-Test::testEscaping()
+TEST(XmlSerializableTest, test_escaping)
{
std::ostringstream ost;
XmlOutputStream xos(ost);
@@ -83,7 +58,7 @@ Test::testEscaping()
"<auto1>&lt;&gt;&amp;&#9;&#12;&#13;\nfoo</auto1>\n"
"<auto2 binaryencoding=\"base64\">PD4mCQANCmZvbw==</auto2>\n"
"</__trash_->";
- EXPECT_EQUAL(expected, ost.str());
+ EXPECT_EQ(expected, ost.str());
}
namespace {
@@ -103,8 +78,7 @@ namespace {
};
}
-void
-Test::testNesting()
+TEST(XmlSerializableTest, test_nesting)
{
std::ostringstream ost;
XmlOutputStream xos(ost);
@@ -127,11 +101,10 @@ Test::testNesting()
"</door>\n"
"<description>This is a car description used to test</description>\n"
"</car>";
- EXPECT_EQUAL(expected, ost.str());
+ EXPECT_EQ(expected, ost.str());
}
-void
-Test::testIndent()
+TEST(XmlSerializableTest, test_indent)
{
std::ostringstream ost;
XmlOutputStream xos(ost, " ");
@@ -155,9 +128,9 @@ Test::testIndent()
" <base binaryencoding=\"base64\">Zm9vYmFy</base>\n"
" </nytag>\n"
"</foo>";
- EXPECT_EQUAL(expected, ost.str());
+ EXPECT_EQ(expected, ost.str());
}
} // vespalib
-TEST_APPHOOK(vespalib::Test)
+GTEST_MAIN_RUN_ALL_TESTS()