/*---------------------------------------------------------------------------*
* testhashmap.cpp *
* *
* Copyright 2007, 2008 Nuance Communciations, Inc. *
* *
* Licensed under the Apache License, Version 2.0 (the 'License'); *
* you may not use this file except in compliance with the License. *
* *
* You may obtain a copy of the License at *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, software *
* distributed under the License is distributed on an 'AS IS' BASIS, *
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
* See the License for the specific language governing permissions and *
* limitations under the License. *
* *
*---------------------------------------------------------------------------*/
#include <string>
#include <fstream>
#include <iostream>
#include "../src/hashmap.h"
using namespace std;
#if 1
void test1();
void test2();
void main(int argc, char* argv[])
{
test2();
}
// (INT,INT) hash
void test1()
{
HashMap<int,int > myHash;
int value;
int i;
i=10;
myHash.setName("TestHash");
myHash.insert(1, i);
myHash.getValue(1, &value);
std::cout << "Index 1 has value= " << value <<std::endl;
myHash.getIndex( 10, &i );
std::cout << "value " << value << " has index " << i <<std::endl;
unsigned int j;
myHash.getNumericIndex(i, &j);
std::cout << "index " << i << " has numeric index " << j <<std::endl;
myHash.getNumericIndexByValue(value, &j);
std::cout << "value " << value << " has numeric index " << j <<std::endl;
myHash.print();
myHash.remove(1);
myHash.print();
}
// (INT,STRING) hash
void test2()
{
HashMap<int,string> myHash;
string value = "hello";
int i;
i=10;
myHash.setName("TestHash");
myHash.insert(1, value);
myHash.insert(2, "world");
myHash.getValue(1, &value);
std::cout << "Index 1 has value= " << value <<std::endl;
myHash.getIndex( value, &i );
std::cout << "value " << value << " has index " << i <<std::endl;
unsigned int j;
myHash.getNumericIndex(i, &j);
std::cout << "index " << i << " has numeric index " << j <<std::endl;
myHash.getNumericIndexByValue(value, &j);
std::cout << "value " << value << " has numeric index " << j <<std::endl;
myHash.print();
myHash.getFirst(&i, &value);
std::cout << "First iterator values are " << i <<", " << value <<std::endl;
if (myHash.getNext(&i, &value)) {
std::cout << "Iterator values are " << i <<", " << value <<std::endl;
}
else {
std::cout << "No first index - map is empty" <<std::endl;
}
myHash.remove(1);
myHash.getFirst(&i, &value);
std::cout << "First iterator values are " << i <<", " << value <<std::endl;
if (myHash.getNext(&i, &value)) {
std::cout << "Iterator values are " << i <<", " << value <<std::endl;
}
else {
std::cout << "No next index - map is empty" <<std::endl;
}
myHash.print();
}
#else
void findi(string s);
void finds(int i);
void insert(int i, const string &s);
void remove( int i );
HashMap<int,string> myHash;
void main(int argc, char* argv[])
{
string s;
s = "hello";
insert(1,s);
insert(2,"world");
finds(2);
finds(1);
finds(99);
findi("hello");
findi("world");
findi("xox");
s = "bollocks";
findi("hello");
finds(1);
insert(3,s);
finds(3);
insert(3,"zzz");
finds(3);
remove(3);
insert(3,"zzz");
finds(3);
}
void findi(string s)
{
int i;
if ( myHash.getIndex(s, &i) ) {
cout << "'" << s << "' has index of " << i <<endl;
}
else {
cout << "'" << s << "' not found!" << endl;
}
}
void finds(int i)
{
string s;
if ( myHash.getValue(i, &s) ) {
cout << "'" << i << "' has value of " << s <<endl;
}
else {
cout << "'" << i << "' not found!" << endl;
}
}
void insert( int i, const string &s)
{
string ss;
if (!myHash.getValue(i, &ss) ) {
if ( myHash.insert(i, s) ) {
cout << "Inserted: " << i << "," << s <<endl;
}
}
else {
cout << "Failed to insert '" << i << "," << s <<"'" << endl;
}
}
void remove( int i )
{
string ss;
if (myHash.getValue(i, &ss) ) {
if ( myHash.remove(i) ) {
cout << "Removed: " << i << endl;
}
}
else {
cout << "Failed to remove '" << i << "'" << endl;
}
}
#endif