123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393 |
- #include <iostream>
- #include "data/UnsortedArrayList.h"
- #include "data/HashMap.h"
- using namespace std;
- // -----------------------------------------------------------------------------
- // test feedback
- // -----------------------------------------------------------------------------
- const char* RED = "\033[0;31m";
- const char* GREEN = "\033[0;32m";
- int tests = 0;
- int successTests = 0;
- void notifySuccess(string text)
- {
- tests++;
- successTests++;
- cout << GREEN << tests << ". " << text << endl;
- }
- void notifyFail(string text)
- {
- tests++;
- cout << RED << tests << ". " << text << endl;
- }
- void finalizeTest()
- {
- cout << successTests << " / " << tests << " succeeded" << endl;
- tests = 0;
- successTests = 0;
- }
- // -----------------------------------------------------------------------------
- // checks
- // -----------------------------------------------------------------------------
- void checkEqual(int a, int b, string text)
- {
- if(a == b)
- {
- notifySuccess(text);
- }
- else
- {
- notifyFail(text + " - expected " + std::to_string(a) + " got " + std::to_string(b));
- }
- }
- void checkBool(bool a, bool b, string text)
- {
- if(a == b)
- {
- notifySuccess(text);
- }
- else
- {
- notifyFail(text + " - expected " + std::to_string(a) + " got " + std::to_string(b));
- }
- }
- void checkGreaterOrEqual(int a, int b, string text)
- {
- if(a >= b)
- {
- notifySuccess(text);
- }
- else
- {
- notifyFail(text + " - expected " + std::to_string(a) + " >= " + std::to_string(b));
- }
- }
- // -----------------------------------------------------------------------------
- // tests of UnsortedArrayList
- // -----------------------------------------------------------------------------
- void testUnsortedArrayList1(string text)
- {
- UnsortedArrayList<int> list;
-
- list.add(1);
- list.add(5);
- list.add(10);
-
- checkEqual(3, list.getSize(), text);
- checkEqual(1, list.get(0, -1), text);
- checkEqual(5, list.get(1, -1), text);
- checkEqual(10, list.get(2, -1), text);
- }
- void testUnsortedArrayList2(string text)
- {
- UnsortedArrayList<int> list;
-
- list.add(1);
- list.add(5);
- list.add(10);
- list.removeIndex(1);
-
- checkEqual(2, list.getSize(), text);
- checkEqual(1, list.get(0, -1), text);
- checkEqual(10, list.get(1, -1), text);
- }
- void testUnsortedArrayList3(string text)
- {
- UnsortedArrayList<int> list;
-
- list.add(1);
- list.add(5);
- list.add(10);
- list.removeIndex(0);
- list.add(20);
-
- checkEqual(3, list.getSize(), text);
- checkEqual(10, list.get(0, -1), text);
- checkEqual(5, list.get(1, -1), text);
- checkEqual(20, list.get(2, -1), text);
- }
- void testUnsortedArrayList4(string text)
- {
- UnsortedArrayList<int> list;
-
- list.add(1);
- list.add(5);
- list.add(10);
- list.removeIndex(-5);
- list.removeIndex(5);
-
- checkEqual(3, list.getSize(), text);
- checkEqual(1, list.get(0, -1), text);
- checkEqual(5, list.get(1, -1), text);
- checkEqual(10, list.get(2, -1), text);
- }
- void testUnsortedArrayList5(string text)
- {
- UnsortedArrayList<int> list;
-
- list.add(1);
- list.add(5);
- list.add(1);
- list.add(20);
- list.remove(2);
-
- checkEqual(4, list.getSize(), text);
- checkEqual(1, list.get(0, -1), text);
- checkEqual(5, list.get(1, -1), text);
- checkEqual(1, list.get(2, -1), text);
- checkEqual(20, list.get(3, -1), text);
- }
- void testUnsortedArrayList6(string text)
- {
- UnsortedArrayList<int> list;
-
- int r = rand();
- checkEqual(r, list.get(-100, r), text);
- r = rand();
- checkEqual(r, list.get(100, r), text);
- }
- void testUnsortedArrayList7(string text)
- {
- UnsortedArrayList<int> list;
-
- list.add(1);
- list.add(1);
- list.add(5);
- list.add(1);
- list.add(20);
- list.remove(1);
-
- checkEqual(2, list.getSize(), text);
- checkEqual(20, list.get(0, -1), text);
- checkEqual(5, list.get(1, -1), text);
- }
- void testUnsortedArrayList()
- {
- testUnsortedArrayList1("add, size and get");
- testUnsortedArrayList2("remove index");
- testUnsortedArrayList3("add after remove index, move last to first");
- testUnsortedArrayList4("remove of non existent element");
- testUnsortedArrayList5("remove index of non existent index");
- testUnsortedArrayList6("get returns error value");
- testUnsortedArrayList7("remove deletes all occurencies");
- finalizeTest();
- }
- // -----------------------------------------------------------------------------
- // tests of HashMap
- // -----------------------------------------------------------------------------
- unsigned int hashInt(int i)
- {
- return i;
- }
- void testHashMap1(string text)
- {
- HashMap<int, int> map(16, hashInt);
- int cap = map.getCapacity();
- checkGreaterOrEqual(cap, 16, text);
- HashMap<int, int> map2(cap, hashInt);
- HashMap<int, int> map3(cap + 1, hashInt);
- checkEqual(cap, map2.getCapacity(), text);
- checkGreaterOrEqual(map3.getCapacity(), cap + 1, text);
- }
- void testHashMap2(string text)
- {
- HashMap<int, int> map(16, hashInt);
-
- for(int i = 0; i < 5; i++)
- {
- map.put(i, i);
- }
-
- checkEqual(5, map.getSize(), text);
- }
- void testHashMap3(string text)
- {
- HashMap<int, int> map(16, hashInt);
- int cap = map.getCapacity();
- if(cap < 0)
- {
- cap = 0;
- }
- cap += 3;
-
- for(int i = 0; i < cap; i++)
- {
- map.put(i, i);
- }
-
- checkEqual(cap, map.getSize(), text);
- }
- void testHashMap4(string text)
- {
- HashMap<int, int> map(16, hashInt);
- for(int i = 0; i < 3; i++)
- {
- map.put(i, i + 20);
- }
- for(int i = 0; i < 3; i++)
- {
- checkEqual(i + 20, map.get(i, -1), text);
- }
- }
- void testHashMap5(string text)
- {
- HashMap<int, int> map(16, hashInt);
- int cap = map.getCapacity();
- if(cap < 0)
- {
- cap = 0;
- }
- cap += 3;
- for(int i = 0; i < cap; i++)
- {
- map.put(i, i + 20);
- }
-
- checkBool(true, map.remove(cap / 2), text);
- checkEqual(-1, map.get(cap / 2, -1), text);
- checkEqual(cap - 1, map.getSize(), text);
- }
- void testHashMap6(string text)
- {
- HashMap<int, int> map(16, hashInt);
- int cap = map.getCapacity();
- if(cap < 0)
- {
- cap = 0;
- }
- cap += 3;
- for(int i = 0; i < cap; i++)
- {
- map.put(i, i + 20);
- }
- checkBool(false, map.remove(cap + 5), text);
- checkBool(false, map.remove(cap + 20), text);
- checkBool(false, map.remove(cap + 25), text);
- checkEqual(cap, map.getSize(), text);
- }
- void testHashMap7(string text)
- {
- HashMap<int, int> map(16, hashInt);
- for(int i = 0; i < 3; i++)
- {
- map.put(i, i + 20);
- }
- checkEqual(3, map.getSize(), text);
- map.clear();
- checkEqual(0, map.getSize(), text);
- checkEqual(-1, map.get(0, -1), text);
- checkEqual(-1, map.get(1, -1), text);
- checkEqual(-1, map.get(2, -1), text);
- }
- void testHashMap8(string text)
- {
- HashMap<int, int> map(16, hashInt);
- for(int i = 0; i < 3; i++)
- {
- map.put(i, i + 20);
- }
- for(int i = 0; i < 3; i++)
- {
- map.put(i, i + 25);
- }
- for(int i = 0; i < 3; i++)
- {
- checkEqual(i + 25, map.get(i, -1), text);
- }
- }
- void testHashMap9(string text)
- {
- HashMap<int, int> map(16, hashInt);
- int cap = map.getCapacity();
- if(cap < 0)
- {
- cap = 0;
- }
- cap += 3;
- for(int i = 0; i < cap; i++)
- {
- map.put(i, i + 20);
- }
-
- checkEqual(cap / 2 + 20, map.remove(cap / 2, -1), text);
- checkEqual(cap - 1, map.getSize(), text);
- }
- void testHashMap10(string text)
- {
- HashMap<int, int> map(16, hashInt);
- int cap = map.getCapacity();
- if(cap < 0)
- {
- cap = 0;
- }
- cap += 3;
- for(int i = 0; i < cap; i++)
- {
- map.put(i, i + 20);
- }
- checkEqual(-1, map.remove(cap + 5, -1), text);
- checkEqual(-1, map.remove(cap + 20, -1), text);
- checkEqual(-1, map.remove(cap + 25, -1), text);
- checkEqual(cap, map.getSize(), text);
- }
- void testHashMap()
- {
- testHashMap1("capacity greater or equal than inital value");
- testHashMap2("put increases size");
- testHashMap3("put over capacity");
- testHashMap4("get");
- testHashMap5("remove of existent value");
- testHashMap6("remove of non existent value");
- testHashMap7("clear");
- testHashMap8("put overwrites old value");
- testHashMap9("remove with return value of existent value");
- testHashMap10("remove with return value of non existent value");
- finalizeTest();
- }
- // -----------------------------------------------------------------------------
- // main
- // -----------------------------------------------------------------------------
- int main(int argc, char** argv)
- {
- testUnsortedArrayList();
- testHashMap();
- return 0;
- }
|