// Copyright 2016, University of Freiburg,
// Chair of Algorithms and Data Structures.
// Author: Hannah Bast <bast@cs.uni-freiburg.de>,
// Axel Lehmann <lehmanna@cs.uni-freiburg.de>.
#include <gtest/gtest.h>
#include "./Set.h"
// _____________________________________________________________________________
TEST(SetTest, constructorT) {
Set<int> set;
ASSERT_EQ(0, set._size);
}
// _____________________________________________________________________________
TEST(SetTest, insertT) {
Set<int> set;
ASSERT_EQ(0, set._size);
set.insert(0);
ASSERT_EQ(1, set._size);
ASSERT_EQ(0, set._elements[0]);
set.insert(0);
ASSERT_EQ(1, set._size);
ASSERT_EQ(0, set._elements[0]);
set.insert(2);
ASSERT_EQ(2, set._size);
ASSERT_EQ(0, set._elements[0]);
ASSERT_EQ(2, set._elements[1]);
set.insert(1);
ASSERT_EQ(3, set._size);
ASSERT_EQ(0, set._elements[0]);
ASSERT_EQ(2, set._elements[1]);
ASSERT_EQ(1, set._elements[2]);
}
// _____________________________________________________________________________
TEST(SetTest, eraseT) {
Set<int> set;
set.insert(0);
set.insert(0);
set.insert(2);
set.insert(1);
ASSERT_EQ(3, set._size);
ASSERT_EQ(0, set._elements[0]);
ASSERT_EQ(2, set._elements[1]);
ASSERT_EQ(1, set._elements[2]);
set.erase(0);
ASSERT_EQ(2, set._size);
ASSERT_EQ(2, set._elements[0]);
ASSERT_EQ(1, set._elements[1]);
set.erase(0);
ASSERT_EQ(2, set._size);
ASSERT_EQ(2, set._elements[0]);
ASSERT_EQ(1, set._elements[1]);
set.erase(1);
ASSERT_EQ(1, set._size);
ASSERT_EQ(2, set._elements[0]);
set.erase(2);
ASSERT_EQ(0, set._size);
}
// _____________________________________________________________________________
TEST(SetTest, findT) {
Set<int> set;
ASSERT_FALSE(set.find(0));
ASSERT_FALSE(set.find(1));
set.insert(0);
ASSERT_TRUE(set.find(0));
ASSERT_FALSE(set.find(1));
set.insert(1);
ASSERT_TRUE(set.find(0));
ASSERT_TRUE(set.find(1));
set.erase(0);
ASSERT_FALSE(set.find(0));
ASSERT_TRUE(set.find(1));
}
// The 'ASSERT_FALE(xxx) << "..." << x;' notion is not relevant for the
// understanding of the tests as it uses the stl which will be explained in
// lecture 9. Here it just prints the index which did not have the expected
// value.
// _____________________________________________________________________________
TEST(SetTest, constructorChar) {
Set<char> set;
for (size_t i = 0; i < 256; i++) {
ASSERT_FALSE(set._elements[i]) << "Error at i=" << i;
}
}
// _____________________________________________________________________________
TEST(SetTest, insertChar) {
Set<char> set;
for (size_t i = 0; i < 256; i++) {
ASSERT_FALSE(set._elements[i]) << "Error at i=" << i;
}
set.insert('a');
for (size_t i = 0; i < 256; i++) {
if (i != 'a') {
ASSERT_FALSE(set._elements[i]) << "Error at i=" << i;
}
}
ASSERT_TRUE(set._elements['a']);
set.insert('a');
for (size_t i = 0; i < 256; i++) {
if (i != 'a') {
ASSERT_FALSE(set._elements[i]) << "Error at i=" << i;
}
}
ASSERT_TRUE(set._elements['a']);
set.insert('b');
for (size_t i = 0; i < 256; i++) {
if (i != 'a' && i != 'b') {
ASSERT_FALSE(set._elements[i]) << "Error at i=" << i;
}
}
ASSERT_TRUE(set._elements['a']);
ASSERT_TRUE(set._elements['b']);
// test ue Okt 201, Dec 129, Hex 81
set.insert('\x81');
for (size_t i = 0; i < 256; i++) {
if (i != 'a' && i != 'b' && i != 129) {
ASSERT_FALSE(set._elements[i]) << "Error at i=" << i;
}
}
ASSERT_TRUE(set._elements['a']);
ASSERT_TRUE(set._elements['b']);
ASSERT_TRUE(set._elements[static_cast<unsigned char>('\x81')]);
}
// _____________________________________________________________________________
TEST(SetTest, eraseChar) {
Set<char> set;
set.insert('a');
set.insert('b');
set.insert('\x81');
for (size_t i = 0; i < 256; i++) {
if (i != 'a' && i != 'b' && i != 129) {
ASSERT_FALSE(set._elements[i]) << "Error at i=" << i;
}
}
ASSERT_TRUE(set._elements['a']);
ASSERT_TRUE(set._elements['b']);
ASSERT_TRUE(set._elements[static_cast<unsigned char>('\x81')]);
set.erase('a');
for (size_t i = 0; i < 256; i++) {
if (i != 'b' && i != 129) {
ASSERT_FALSE(set._elements[i]) << "Error at i=" << i;
}
}
ASSERT_TRUE(set._elements['b']);
ASSERT_TRUE(set._elements[static_cast<unsigned char>('\x81')]);
set.erase('b');
for (size_t i = 0; i < 256; i++) {
if (i != 129) {
ASSERT_FALSE(set._elements[i]) << "Error at i=" << i;
}
}
ASSERT_TRUE(set._elements[static_cast<unsigned char>('\x81')]);
set.erase('\x81');
for (size_t i = 0; i < 256; i++) {
ASSERT_FALSE(set._elements[i]) << "Error at i=" << i;
}
}
// _____________________________________________________________________________
TEST(SetTest, findChar) {
Set<char> set;
ASSERT_FALSE(set.find('a'));
ASSERT_FALSE(set.find('b'));
ASSERT_FALSE(set.find('\x81'));
set.insert('a');
ASSERT_TRUE(set.find('a'));
ASSERT_FALSE(set.find('b'));
ASSERT_FALSE(set.find('\x81'));
set.insert('b');
ASSERT_TRUE(set.find('a'));
ASSERT_TRUE(set.find('b'));
ASSERT_FALSE(set.find('\x81'));
set.insert('\x81');
ASSERT_TRUE(set.find('a'));
ASSERT_TRUE(set.find('b'));
ASSERT_TRUE(set.find('\x81'));
set.erase('a');
ASSERT_FALSE(set.find('a'));
ASSERT_TRUE(set.find('b'));
ASSERT_TRUE(set.find('\x81'));
}