|
From: <ric...@us...> - 2011-09-30 23:14:06
|
Revision: 1125
http://loki-lib.svn.sourceforge.net/loki-lib/?rev=1125&view=rev
Author: rich_sposato
Date: 2011-09-30 23:13:59 +0000 (Fri, 30 Sep 2011)
Log Message:
-----------
Added tests for AssocVector class.
Added Paths:
-----------
trunk/test/AssocVector/
trunk/test/AssocVector/AssocVector.cbp
trunk/test/AssocVector/main.cpp
Added: trunk/test/AssocVector/AssocVector.cbp
===================================================================
--- trunk/test/AssocVector/AssocVector.cbp (rev 0)
+++ trunk/test/AssocVector/AssocVector.cbp 2011-09-30 23:13:59 UTC (rev 1125)
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<CodeBlocks_project_file>
+ <FileVersion major="1" minor="6" />
+ <Project>
+ <Option title="AssocVector" />
+ <Option pch_mode="2" />
+ <Option compiler="gcc" />
+ <Build>
+ <Target title="Debug">
+ <Option output="bin/Debug/AssocVector" prefix_auto="1" extension_auto="1" />
+ <Option object_output="obj/Debug/" />
+ <Option type="1" />
+ <Option compiler="gcc" />
+ <Compiler>
+ <Add option="-std=c++0x" />
+ <Add option="-std=c++98" />
+ <Add option="-Wextra" />
+ <Add option="-Wall" />
+ <Add option="-g" />
+ <Add directory="../../include" />
+ </Compiler>
+ </Target>
+ <Target title="Release">
+ <Option output="bin/Release/AssocVector" prefix_auto="1" extension_auto="1" />
+ <Option object_output="obj/Release/" />
+ <Option type="1" />
+ <Option compiler="gcc" />
+ <Compiler>
+ <Add option="-O2" />
+ <Add option="-std=c++0x" />
+ <Add option="-std=c++98" />
+ <Add option="-Wextra" />
+ <Add option="-Wall" />
+ <Add directory="../../include" />
+ </Compiler>
+ <Linker>
+ <Add option="-s" />
+ </Linker>
+ </Target>
+ </Build>
+ <Compiler>
+ <Add option="-Wall" />
+ <Add option="-fexceptions" />
+ </Compiler>
+ <Unit filename="main.cpp" />
+ <Extensions>
+ <envvars />
+ <code_completion />
+ <lib_finder disable_auto="1" />
+ <debugger />
+ </Extensions>
+ </Project>
+</CodeBlocks_project_file>
Added: trunk/test/AssocVector/main.cpp
===================================================================
--- trunk/test/AssocVector/main.cpp (rev 0)
+++ trunk/test/AssocVector/main.cpp 2011-09-30 23:13:59 UTC (rev 1125)
@@ -0,0 +1,191 @@
+////////////////////////////////////////////////////////////////////////////////
+// The Loki Library
+// Copyright (c) 2011 by Rich Sposato
+//
+// This code does not accompany the book:
+// Alexandrescu, Andrei. "Modern C++ Design: Generic Programming and Design
+// Patterns Applied". Copyright (c) 2001. Addison-Wesley.
+// Code covered by the MIT License
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+////////////////////////////////////////////////////////////////////////////////
+
+#include <loki/AssocVector.h>
+
+#include <cassert>
+
+#include <string>
+#include <iostream>
+
+using namespace std;
+
+typedef ::std::map< ::std::string, unsigned int > StudentGradeMap;
+typedef StudentGradeMap::iterator StudentGradeMapIter;
+typedef StudentGradeMap::const_iterator StudentGradeMapCIter;
+
+typedef ::Loki::AssocVector< ::std::string, unsigned int > StudentGrades;
+typedef StudentGrades::iterator StudentGradeIter;
+typedef StudentGrades::const_iterator StudentGradeCIter;
+
+typedef ::std::pair< ::std::string, unsigned int > GradeInfo;
+
+
+GradeInfo oneStudent = ::std::make_pair( "Anne", 100 );
+
+GradeInfo noDuplicates[] =
+{
+ ::std::make_pair( "Anne", 100 ),
+ ::std::make_pair( "Bill", 88 ),
+ ::std::make_pair( "Clay", 91 ),
+ ::std::make_pair( "Dina", 62 ),
+ ::std::make_pair( "Evan", 77 ),
+ ::std::make_pair( "Fran", 84 ),
+ ::std::make_pair( "Greg", 95 )
+};
+
+
+GradeInfo hasDuplicates[] =
+{
+ ::std::make_pair( "Anne", 100 ),
+ ::std::make_pair( "Anne", 73 ),
+ ::std::make_pair( "Bill", 88 ),
+ ::std::make_pair( "Clay", 91 ),
+ ::std::make_pair( "Dina", 62 ),
+ ::std::make_pair( "Evan", 77 ),
+ ::std::make_pair( "Fran", 74 ),
+ ::std::make_pair( "Fran", 84 ),
+ ::std::make_pair( "Greg", 95 )
+};
+
+// ----------------------------------------------------------------------------
+
+void TestEmptyAssocVector( void )
+{
+ cout << "Starting TestEmptyAssocVector" << endl;
+
+ StudentGrades grades;
+ const StudentGrades & cGrades = grades;
+ assert( grades.empty() );
+ assert( grades.size() == 0 );
+ assert( cGrades.empty() );
+ assert( cGrades.size() == 0 );
+
+ StudentGradeIter it1( grades.begin() );
+ assert( it1 == grades.end() );
+
+ const StudentGradeIter it2( grades.begin() );
+ assert( it2 == grades.end() );
+ assert( it2 == it1 );
+ assert( it1 == it2 );
+
+ StudentGradeCIter cit1( grades.begin() );
+ assert( cit1 == grades.end() );
+ assert( cit1 == it1 );
+ assert( cit1 == it2 );
+ assert( it1 == cit1 );
+ assert( it2 == cit1 );
+
+ const StudentGradeCIter cit2( grades.begin() );
+ assert( cit2 == grades.end() );
+ assert( cit1 == cit2 );
+ assert( cit2 == cit1 );
+ assert( cit2 == it1 );
+ assert( cit2 == it2 );
+ assert( it1 == cit2 );
+ assert( it2 == cit2 );
+
+ StudentGradeCIter cit3( cGrades.begin() );
+ assert( cit3 == cGrades.end() );
+ assert( cit3 == it1 );
+ assert( cit3 == it2 );
+ assert( it1 == cit3 );
+ assert( it2 == cit3 );
+
+ const StudentGradeCIter cit4( cGrades.begin() );
+ assert( cit4 == cGrades.end() );
+ assert( cit1 == cit4 );
+ assert( cit4 == cit1 );
+ assert( cit4 == it1 );
+ assert( cit4 == it2 );
+ assert( it1 == cit4 );
+ assert( it2 == cit4 );
+
+ cout << "Finished TestEmptyAssocVector" << endl;
+}
+
+// ----------------------------------------------------------------------------
+
+void TestAssocVectorCtor( void )
+{
+ cout << "Starting TestAssocVectorCtor" << endl;
+
+ static const unsigned int noDuplicateCount = ( sizeof(noDuplicates) / sizeof(noDuplicates[0]) );
+ static const unsigned int hasDuplicateCount = ( sizeof(hasDuplicates) / sizeof(hasDuplicates[0]) );
+
+ {
+ // This test demonstrates the iterator constructor does not allow any duplicate elements.
+ StudentGrades grades1( noDuplicates, noDuplicates + noDuplicateCount );
+ StudentGrades grades2( hasDuplicates, hasDuplicates + hasDuplicateCount );
+ assert( grades1.size() != 0 );
+ assert( grades2.size() != 0 );
+ assert( grades1.size() == noDuplicateCount );
+ assert( grades2.size() == noDuplicateCount );
+ assert( grades1.size() == grades2.size() );
+ }
+
+ {
+ // This test demonstrates copy construction.
+ StudentGrades grades1( noDuplicates, noDuplicates + noDuplicateCount );
+ const StudentGrades grades2( grades1 );
+ assert( grades1.size() != 0 );
+ assert( grades2.size() != 0 );
+ assert( grades1.size() == noDuplicateCount );
+ assert( grades2.size() == noDuplicateCount );
+ assert( grades1.size() == grades2.size() );
+ assert( grades1 == grades2 );
+
+ StudentGrades grades3;
+ grades3 = grades1;
+ assert( grades3.size() != 0 );
+ assert( grades3.size() == noDuplicateCount );
+ assert( grades3.size() == grades1.size() );
+ assert( grades1 == grades3 );
+ }
+
+ cout << "Finished TestAssocVectorCtor" << endl;
+}
+
+// ----------------------------------------------------------------------------
+
+int main( int argc, const char * const argv[] )
+{
+ (void)argc;
+ (void)argv;
+ char ender;
+
+ TestEmptyAssocVector();
+ TestAssocVectorCtor();
+
+ cout << "Press <Enter> key to finish. " << endl;
+ cin.get( ender );
+
+ return 0;
+}
+
+// ----------------------------------------------------------------------------
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|