/* * Copyright 2013 (c) Anna Schumaker. */ #include #include #include class DBTest : public DatabaseEntry { public: unsigned int value; DBTest(); DBTest(unsigned int); void write(File &); void read(File &); void print(); }; DBTest :: DBTest() { } DBTest :: DBTest(unsigned int val) { std::stringstream ss; value = val; ss << value; primary_key = ss.str(); } void DBTest :: write(File &file) { file << value; } void DBTest :: read(File &file) { file >> value; } void DBTest :: print() { :: print("%u", value); } void print_db(Database &db) { print("Database size: %u\n", db.size()); print("Num rows: %u\n", db.num_rows()); print("First: %u\n", db.first()); print("Last: %u\n", db.last()); for (unsigned int i = db.first(); i != db.num_rows(); i = db.next(i)) print("db[%u] = %u\n", i, db[i].value); } void test_insertion(Database &db) { for (unsigned int i = 1; i <= 100000; i++) db.insert(DBTest(i)); print_db(db); } void test_deletion(Database &db) { for (unsigned int i = db.first(); i < db.num_rows(); i = db.next(i)) { db.remove(i); i = db.next(i); } print_db(db); } /* * Test everything except reloading. */ void test_0() { print("Test 0\n"); Database db("test.db"); test_insertion(db); test_deletion(db); test_deletion(db); db.save(); } /* * Reload the database from disk. */ void test_1() { print("\nTest 1\n"); Database db("test.db"); db.load(); print_db(db); } /* * Attempt to save a db with an empty filepath. */ void test_2() { print("\nTest 2\n"); Database db(""); test_insertion(db); db.save(); } /* * Attempt to load a db with an empty filepath */ void test_3() { print("\nTest 3\n"); Database db(""); db.load(); } /* * Test unique insertion */ void test_4() { print("\nTest 4\n"); Database db(""); for (unsigned int i = 0; i < 100; i++) db.insert(DBTest(i % 5)); print_db(db); } /* * Test the database's built-in print() function */ void test_5() { print("\nTest 5\n"); Database db(""); for (unsigned int i = 0; i < 10; i++) db.insert(DBTest(i)); db.print(); } /* * Test the database's clear() function */ void test_6() { print("\nTest 6\n"); Database db(""); for (unsigned int i = 0; i < 10; i++) db.insert(DBTest(i)); print_db(db); db.clear(); print_db(db); } /* * Print databases with no valid rows */ void test_7() { print("\nTest 7\n"); Database db(""); print_db(db); for (unsigned int i = 0; i < 10; i++) db.insert(DBTest(i)); print_db(db); for (unsigned int i = 0; i < 10; i++) db.remove(i); print_db(db); } int main(int argc, char **argv) { test_0(); test_1(); test_2(); test_3(); test_4(); test_5(); test_6(); test_7(); return 0; }