From f4c20290509d7ed3a8fd5304577e7a4cc0b9d974 Mon Sep 17 00:00:00 2001
From: Mike Buland <eichlan@xagasoft.com>
Date: Tue, 3 Apr 2007 03:49:53 +0000
Subject: Ok, no code is left in src, it's all in src/old.  We'll gradually
 move code back into src as it's fixed and re-org'd.  This includes tests,
 which, I may write a unit test system into libbu++ just to make my life
 easier.

---
 src/old/unit/hashtable/hashtable.cpp | 107 +++++++++++++++++++++++++++++++++++
 src/old/unit/xml/xml.cpp             |  59 +++++++++++++++++++
 2 files changed, 166 insertions(+)
 create mode 100644 src/old/unit/hashtable/hashtable.cpp
 create mode 100644 src/old/unit/xml/xml.cpp

(limited to 'src/old/unit')

diff --git a/src/old/unit/hashtable/hashtable.cpp b/src/old/unit/hashtable/hashtable.cpp
new file mode 100644
index 0000000..b2e1cf5
--- /dev/null
+++ b/src/old/unit/hashtable/hashtable.cpp
@@ -0,0 +1,107 @@
+#include <cstdlib>
+#include <cstring>
+#include <iostream>
+#include <cpptest.h>
+#include <string.h>
+#include <set>
+#include <map>
+
+#include "hashfunctionstring.h"
+#include "hashfunctioncasestring.h"
+#include "hashfunctionint.h"
+
+class HashFunctionSuite : public Test::Suite
+{
+public:
+	HashFunctionSuite()
+	{
+		TEST_ADD( HashFunctionSuite::functionString )
+		TEST_ADD( HashFunctionSuite::functionCaseString )
+		TEST_ADD( HashFunctionSuite::functionInt )
+	}
+
+private:
+	void functionStringWorker( HashFunction &hf, std::set<unsigned long> &sCodes, char *str, int nLevel, int nMax )
+	{
+		for( char let = 'A'; let <= 'z'; let += 3 )
+		{
+			str[nLevel+1] = '\0';
+			str[nLevel] = let;
+			unsigned long x = hf.hash( str );
+			TEST_ASSERT( sCodes.find( x ) == sCodes.end() );
+			TEST_ASSERT( hf.cmpIDs( str, str ) );
+			sCodes.insert( x );
+
+			if( nLevel < nMax )
+				functionStringWorker( hf, sCodes, str, nLevel+1, nMax );
+		}
+	}
+	
+	void functionString()
+	{
+		HashFunctionString hf;
+		char str[10];
+
+		std::set<unsigned long> sCodes;
+
+		functionStringWorker( hf, sCodes, str, 0, 3 );
+	}
+	
+	void functionCaseStringWorker( HashFunction &hf, std::map<unsigned long, char *> &sCodes, char *str, int nLevel, int nMax )
+	{
+		for( char let = 'A'; let <= 'z'; let += 3 )
+		{
+			str[nLevel+1] = '\0';
+			str[nLevel] = let;
+			unsigned long x = hf.hash( str );
+			std::map<unsigned long, char *>::iterator i = sCodes.find( x );
+			if( i == sCodes.end() )
+			{
+				sCodes[x] = strdup( str );
+			}
+			else
+			{
+				TEST_ASSERT( strcasecmp( (*i).second, str ) == 0 );
+				TEST_ASSERT( hf.cmpIDs( (*i).second, str ) == true );
+			}
+
+			if( nLevel < nMax )
+				functionCaseStringWorker( hf, sCodes, str, nLevel+1, nMax );
+		}
+	}
+	
+	void functionCaseString()
+	{
+		HashFunctionCaseString hf;
+		char str[10];
+
+		std::map<unsigned long, char *> sCodes;
+
+		functionCaseStringWorker( hf, sCodes, str, 0, 3 );
+
+		std::map<unsigned long, char *>::iterator i;
+		for( i = sCodes.begin(); i != sCodes.end(); i++ )
+		{
+			free( (*i).second );
+		}
+	}
+
+	void functionInt()
+	{
+		HashFunctionInt hf;
+
+		for( long i = -100000; i <= 100000; i += 100 )
+		{
+			TEST_ASSERT( ((long)hf.hash( (void *)i )) == i );
+			TEST_ASSERT( ((long)hf.cmpIDs( (void *)i, (void *)i )) );
+		}
+	}
+};
+
+int main( int argc, char *argv[] )
+{
+	Test::TextOutput output( Test::TextOutput::Verbose );
+	HashFunctionSuite ts;
+	return ts.run( output ) ? EXIT_SUCCESS : EXIT_FAILURE;
+}
+
diff --git a/src/old/unit/xml/xml.cpp b/src/old/unit/xml/xml.cpp
new file mode 100644
index 0000000..e4d779c
--- /dev/null
+++ b/src/old/unit/xml/xml.cpp
@@ -0,0 +1,59 @@
+#include <cstdlib>
+#include <cstring>
+#include <iostream>
+#include <cpptest.h>
+#include <string.h>
+
+#include "xmlstringreader.h"
+#include "xmlexception.h"
+
+class XmlCoreTestSuite : public Test::Suite
+{
+public:
+	XmlCoreTestSuite()
+	{
+		TEST_ADD( XmlCoreTestSuite::badXml01 )
+		TEST_ADD( XmlCoreTestSuite::badXml02 )
+		TEST_ADD( XmlCoreTestSuite::badXml03 )
+
+		TEST_ADD( XmlCoreTestSuite::entityBuiltin01 )
+
+		TEST_ADD( XmlCoreTestSuite::entityDoc01 )
+	}
+	
+private:
+	void badXml01()
+	{
+		TEST_THROWS( XmlStringReader r("<hello></bye>"), XmlException & );
+	}
+	
+	void badXml02()
+	{
+		TEST_THROWS( XmlStringReader r("<hello>"), XmlException & );
+	}
+
+	void badXml03()
+	{
+		TEST_THROWS( XmlStringReader r("<hello param=\"stuff?"), XmlException & );
+	}
+
+	void entityBuiltin01()
+	{
+		XmlStringReader r("<hello>&gt;&lt;&amp;&apos;&quot;</hello>");
+		TEST_ASSERT( strcmp( r.getRoot()->getContent(), "><&\'\"" ) == 0 );
+	}
+	
+	void entityDoc01()
+	{
+		XmlStringReader r("<!ENTITY  name  \"bob the man\"><hello>&quot;&name;&quot;</hello>");
+		TEST_ASSERT( strcmp( r.getRoot()->getContent(), "\"bob the man\"" ) == 0 );
+	}
+};
+
+int main( int argc, char *argv[] )
+{
+	Test::TextOutput output( Test::TextOutput::Verbose );
+	XmlCoreTestSuite ts;
+	return ts.run( output ) ? EXIT_SUCCESS : EXIT_FAILURE;
+}
+
-- 
cgit v1.2.3