// vim: syntax=cpp /* * Copyright (C) 2007-2010 Xagasoft, All rights reserved. * * This file is part of the libbu++ library and is released under the * terms of the license contained in the file LICENSE. */ #include "bu/string.h" #include "bu/hash.h" #include typedef Bu::Hash StrIntHash; typedef Bu::Hash StrStrHash; typedef Bu::Hash IntStrHash; suite Hash { test probe1 { StrIntHash h; char buf[20]; for(int i=1;i<10000;i++) { sprintf(buf,"%d",i); Bu::String sTmp(buf); h[sTmp] = i; unitTest( h.has(sTmp) ); } } test insert1 { StrIntHash h; h["Hi"] = 42; unitTest( h["Hi"] == 42 ); } test insert2 { StrStrHash h; h["Hi"] = "Yo"; h["Bye"] = "Later"; unitTest( h["Hi"].getValue() == "Yo" ); StrStrHash h2(h); unitTest( h2["Hi"].getValue() == "Yo" ); unitTest( h2["Bye"].getValue() == "Later" ); StrStrHash h3; h3 = h; unitTest( h3["Hi"].getValue() == "Yo" ); unitTest( h3["Bye"].getValue() == "Later" ); } test insert3 { IntStrHash h; for( unsigned int i=1; i<50; i++ ) { h[i] = "testing"; unitTest( h.getSize() == i ); } } test erase1 { StrIntHash h; h.insert("Number 1", 1 ); h.insert("Number 2", 2 ); h.insert("Number 3", 3 ); h.erase("Number 2"); h.get("Number 3"); try { h.get("Number 2"); unitFailed("h.get(\"Number 2\") should have thrown an exception."); } catch( Bu::HashException &e ) { } /* printf("\n"); for( StrIntHash::iterator i = h.begin(); i != h.end(); i++ ) { printf(" - \"%s\" = %d\n", i.getKey().getStr(), i.getValue() ); } */ } test copy { StrIntHash h; h.insert("hello", 55 ); h.insert("goodbye", -1812 ); StrIntHash h2 = h; unitTest( h2.isCoreShared( h ) ); StrIntHash h3 = h.clone(); unitTest( !h3.isCoreShared( h ) ); } }