diff --git a/applications/test/HashTable/hashTableTest.C b/applications/test/HashTable/hashTableTest.C index 29f1e4574e..8c4e20cbfc 100644 --- a/applications/test/HashTable/hashTableTest.C +++ b/applications/test/HashTable/hashTableTest.C @@ -24,90 +24,122 @@ License \*---------------------------------------------------------------------------*/ -#include #include "HashTable.H" +#include "IOstreams.H" +#include "IStringStream.H" +#include "OStringStream.H" using namespace Foam; +// use define so we can easily test other implementations +#define HASHTABLE_CLASS HashTable + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // Main program: int main() { - //for (;;) + HASHTABLE_CLASS table1(100); + + table1.insert("aaa", 1.0); + table1.insert("aba", 2.0); + table1.insert("aca", 3.0); + table1.insert("ada", 4.0); + table1.insert("aeq", 5.0); + table1.insert("aaw", 6.0); + table1.insert("abs", 7.0); + table1.insert("acr", 8.0); + table1.insert("adx", 9.0); + table1.insert("aec", 10.0); + + table1.erase("aaw"); + table1.erase("abs"); + + Info<< "\ntable1 toc: " << table1.toc() << endl; + Info<< "\ntable1 [" << table1.size() << "] " << endl; + forAllIter(HASHTABLE_CLASS, table1, iter) { - HashTable myTable(100); - - myTable.insert("aaa", 1.0); - myTable.insert("aba", 2.0); - myTable.insert("aca", 3.0); - myTable.insert("ada", 4.0); - myTable.insert("aeq", 5.0); - myTable.insert("aaw", 6.0); - myTable.insert("abs", 7.0); - myTable.insert("acr", 8.0); - myTable.insert("adx", 9.0); - myTable.insert("aec", 10.0); - - myTable.erase("aaw"); - myTable.erase("abs"); - - std::cerr << myTable.find("aaa")() << '\n'; - std::cerr << myTable.find("aba")() << '\n'; - std::cerr << myTable.find("aca")() << '\n'; - std::cerr << myTable.find("ada")() << '\n'; - std::cerr << myTable.find("aeq")() << '\n'; - //std::cerr << myTable.find("aaw")() << '\n'; - //std::cerr << myTable.find("abs")() << '\n'; - std::cerr << myTable.find("acr")() << '\n'; - std::cerr << myTable.find("adx")() << '\n'; - std::cerr << myTable.find("aec")() << '\n'; - - std::cerr << "\nprint table\n" << std::endl; - - for - ( - HashTable::iterator iter = myTable.begin(); - iter != myTable.end(); - ++iter - ) - { - std::cerr << *iter << '\n'; + Info<< iter.key() << " => " << iter() << nl; } - std::cerr << "\nprint table\n" << std::endl; + table1.set("acr", 108); + table1.set("adx", 109); + table1.set("aec", 100); + table1("aaw") -= 1000; + table1("aeq") += 1000; + + Info<< "\noverwrote some values table1: " << table1 << endl; + + Info<< "\ntest find:" << endl; + Info<< table1.find("aaa")() << nl + << table1.find("aba")() << nl + << table1.find("aca")() << nl + << table1.find("ada")() << nl + << table1.find("aeq")() << nl + << table1.find("acr")() << nl + << table1.find("adx")() << nl + << table1.find("aec")() << nl + << table1["aaa"] << nl; - forAllIter(HashTable, myTable, iter) { - std::cerr << *iter << '\n'; + OStringStream os; + os << table1; + HASHTABLE_CLASS readTable(IStringStream(os.str())(), 100); + + Info<< "Istream constructor:" << readTable << endl; } - std::cerr << "\ncopy of table\n" << std::endl; - HashTable myTable2; - myTable2 = myTable; + HASHTABLE_CLASS table2(table1); + HASHTABLE_CLASS table3(table1.transfer()); - forAllConstIter(HashTable, myTable2, iter2) + Info<< "\ncopy table1 -> table2" << nl + << "transfer table1 -> table3 via the transfer() method" << nl; + + Info<< "\ntable1" << table1 << nl + << "\ntable2" << table1 << nl + << "\ntable3" << table3 << nl; + + Info<< "\ndelete table2" << nl; + forAllIter(HASHTABLE_CLASS, table2, iter) { - std::cerr << *iter2 << '\n'; + Info<< "deleting " << iter.key() << " => " << iter() << " ... "; + table2.erase(iter); + Info<< "deleted" << endl; } - std::cerr << "\ndelete entries\n" << std::endl; + Info<< "\ntable1" << table1 << nl + << "\ntable2" << table2 << nl + << "\ntable3" << table3 << nl; - forAllIter(HashTable, myTable, iter) - { - std::cerr << "deleting " << *iter << '\n'; - myTable.erase(iter); - std::cerr << "deleted\n"; - } + table3.resize(1); + Info<< "\nresize(1) table3" << table3 << nl; - forAllConstIter(HashTable, myTable, iter) - { - std::cerr << *iter << '\n'; - } - } + table3.resize(10000); + Info<< "\nresize(10000) table3" << table3 << nl; - std::cerr << "\nBye.\n"; + HASHTABLE_CLASS table4; + + table4 = table3; + Info<< "\ncopy table3 -> table4 " << table4 << nl; + + Info<< "\nclear table4 ... "; + table4.clear(); + Info<< "[" << table4.size() << "] " << table4 << nl; + + table1 = table3; + Info<< "\ncopy table3 -> table1 (previously transferred)" << table1 << nl; + + Info<< "test table1 == table3 : " << (table1 == table3) << nl; + table1.erase(table1.begin()); + Info<< "removed an element - test table1 != table3 : " + << (table1 != table3) << nl; + + Info<< "\nclearStorage table3 ... "; + table3.clearStorage(); + Info<< table3 << nl; + + Info<< "\nDone\n"; return 0; } diff --git a/applications/test/HashTable2/hashTableTest2.C b/applications/test/HashTable2/hashTableTest2.C index 80f0e421e9..f51be6984d 100644 --- a/applications/test/HashTable2/hashTableTest2.C +++ b/applications/test/HashTable2/hashTableTest2.C @@ -28,6 +28,7 @@ Description #include "HashTable.H" #include "HashPtrTable.H" +#include "Map.H" using namespace Foam; @@ -36,38 +37,46 @@ using namespace Foam; int main(int argc, char *argv[]) { - HashTable testTable(0); + HashTable table1(0); - testTable.insert("kjhk", 10); - testTable.insert("kjhk2", 12); + table1.insert("kjhk", 10); + table1.insert("kjhk2", 12); - Info<< testTable << endl; - Info<< testTable.toc() << endl; + Info<< "table1: " << table1 << nl + << "toc: " << table1.toc() << endl; - HashTable > testTable2(10); + HashTable > table2(10); - testTable2.insert(3, 10); - testTable2.insert(5, 12); - testTable2.insert(7, 16); + table2.insert(3, 10); + table2.insert(5, 12); + table2.insert(7, 16); - Info<< testTable2 << endl; - Info<< testTable2.toc() << endl; + Info<< "table2: " << table2 << nl + << "toc: " << table2.toc() << endl; - HashTable > testTable3(1); - testTable3.transfer(testTable2); + Map