#include <iostream.h>
#include "Array.h"
#include "Array.cc"
#include "AssocList.h"
#include "AssocList.cc"
#include "Hash.h"
#include "Hash.cc"
void test_array() {
Array<int> g;
{
Array<int> h;
h[1] = 2;
h[2] = 4;
h[3] = 6;
cout << "here is h:" << endl;
cout << h << endl;
g = h;
}
Array<int> f(g);
cout << "here is f:" << endl;
cout << f << endl;
}
void test_assoc() {
AssocList<char *,char *> g;
{
AssocList<char *,char *> h;
h["hello"] = "goodbye";
h["dog"] = "dog food";
h["cat"] = "bird";
h["hello"] = "hi";
cout << "here is h:" << endl;
cout << h << endl;
g = h;
}
AssocList<char *,char *> f(g);
cout << "here is f:" << endl;
cout << f << endl;
cout << "here is f again:" << endl;
Array<char *> keys(f.keys());
for (int i = 0; i < keys.size(); ++i)
cout << keys[i] << " -> " << f[keys[i]] << endl;
}
void test_hash() {
HashTable<char *,char *> g;
{
HashTable<char *,char *> h;
h["hello"] = "goodbye";
h["dog"] = "dog food";
h["cat"] = "bird";
h["hello"] = "hi";
cout << "here is h:" << endl;
cout << h << endl;
g = h;
}
HashTable<char *,char *> f(g);
cout << "here is f:" << endl;
cout << f << endl;
cout << "here is f again:" << endl;
cout << "keys:" << endl;
cout << f.keys() << endl;
cout << "end keys" << endl;
Array<char *> keys = f.keys();
cout << "size = " << keys.size() << endl;
for (int i = 0; i < keys.size(); ++i)
cout << i << ": " << keys[i] << " -> " << f[keys[i]] << endl;
cout << "there was f." << endl;
}
void hard_test_hash() {
Array<int> a(0);
HashTable<int,int> h(1);
int errors = 0;
for (int i = 0; i < 1000; ++i) {
h[i] = 100-i;
a[i] = 100-i;
}
for (int i = 0; i < 1000; ++i) {
if (a[i] != h[i]) {
cerr << "ERROR: disagreement at " << i << ": "
<< a[i] << " != " << h[i] << endl;
++errors;
}
h.remove(i);
}
if (h.keys().size() != 0) {
cerr << "ERROR: h.keys().size() == " <<
h.keys().size() << endl;
++errors;
}
if (errors > 0)
cout << "hard_test_hash failed. # errors = " << errors << endl;
else
cout << "hard_test_hash passed with no errors.\n";
}
main() {
cout << "TEST ARRAY:\n";
test_array();
cout << "TEST ASSOCLIST:\n";
test_assoc();
cout << "TEST HASH:\n";
test_hash();
cout << "HARD TEST HASH:\n";
hard_test_hash();
}