/* * Copyright 2014 (c) Anna Schumaker. * Test a Database */ #include #include #include #include unsigned int test_num = 0; void test_results(bool success, unsigned int line) { print(" %u: ", test_num); if (success) print("Success!\n"); else { print("FAILED (%u) =(\n", line); exit(1); } test_num++; } int main(int argc, char **argv) { bool autosave = false; unsigned int n; char c; while ((c = getopt(argc, argv, "a")) != -1) { switch (c) { case 'a': autosave = true; break; } } n = atoi(argv[optind]); Index index("index.idx", autosave); /** * 0: Test inserting when there is no key */ index.insert("a", 0); Index :: iterator it = index.find("a"); if (it == index.end()) test_results(false, __LINE__); if (it->values.size() == 0) test_results(false, __LINE__); test_results(*(it->values.begin()) == 0, __LINE__); /** * 1: Test removing */ index.remove("a", 0); test_results((index.size() == 1) && (index.find("a")->values.size() == 0), __LINE__); /** * 2: Test adding multiple values */ for (c = 'a'; c <= 'z'; c++) { std::string key = ""; key += c; for (unsigned int i = 0; i < n; i++) index.insert(key, i); } test_results(index.size() == 26, __LINE__); /** * 3: Make sure we have multiple values for each key */ for (c = 'a'; c <= 'z'; c++) { std::string key = ""; key += c; if (index.find(key)->values.size() != n) test_results(false, __LINE__); } test_results(true, __LINE__); /** * 4: Test removing multiple values */ for (c = 'a'; c <= 'z'; c+=2) { std::string key = ""; key += c; for (unsigned int i = 0; i < n; i++) index.remove(key, i); if (index.find(key)->values.size() > 0) test_results(false, __LINE__); } test_results(index.size() == 26, __LINE__); /** * Everything after this point tests loading from a file */ if (autosave == false) return 0; Index index2("index.idx", autosave); index2.load(); /** * 5: Load database from file */ test_results(index.size() == index2.size(), __LINE__); /** * 6: Check that everything is the right size */ for (c = 'a'; c <= 'z'; c++) { std::string key = ""; key += c; if (index.find(key)->values.size() != index2.find(key)->values.size()) test_results(false, __LINE__); } test_results(true, __LINE__); return 0; }