SVN / public / code / vorlesung-08 / SetTest.cpp

Revision 11340
Date
Committeral38
Download
// 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'));
}