Index: src/unittests/LineUnittest.cpp
===================================================================
--- src/unittests/LineUnittest.cpp	(revision 3dcb1fbe66c95e1473208ab3eefbd14acd66c2f9)
+++ src/unittests/LineUnittest.cpp	(revision 5e588b597a4bec93c790fd6f6ceca487ee3773de)
@@ -353,2 +353,52 @@
   CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
 }
+
+void LineUnittest::sphereIntersectionTest(){
+  {
+    std::vector<Vector> res = la1->getSphereIntersections();
+    CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
+    CPPUNIT_ASSERT(testDirection(res[0],e1));
+    CPPUNIT_ASSERT(testDirection(res[1],e1));
+    CPPUNIT_ASSERT(res[0]!=res[1]);
+  }
+
+  {
+    std::vector<Vector> res = la2->getSphereIntersections();
+    CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
+    CPPUNIT_ASSERT(testDirection(res[0],e2));
+    CPPUNIT_ASSERT(testDirection(res[1],e2));
+    CPPUNIT_ASSERT(res[0]!=res[1]);
+  }
+
+  {
+    std::vector<Vector> res = la3->getSphereIntersections();
+    CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
+    CPPUNIT_ASSERT(testDirection(res[0],e3));
+    CPPUNIT_ASSERT(testDirection(res[1],e3));
+    CPPUNIT_ASSERT(res[0]!=res[1]);
+  }
+
+  {
+    std::vector<Vector> res = lp1->getSphereIntersections();
+    CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
+    CPPUNIT_ASSERT((res[0]==e1) || (res[0]==e2));
+    CPPUNIT_ASSERT((res[1]==e1) || (res[1]==e2));
+    CPPUNIT_ASSERT(res[0]!=res[1]);
+  }
+
+  {
+    std::vector<Vector> res = lp2->getSphereIntersections();
+    CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
+    CPPUNIT_ASSERT((res[0]==e2) || (res[0]==e3));
+    CPPUNIT_ASSERT((res[1]==e2) || (res[1]==e3));
+    CPPUNIT_ASSERT(res[0]!=res[1]);
+  }
+
+  {
+    std::vector<Vector> res = lp3->getSphereIntersections();
+    CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
+    CPPUNIT_ASSERT((res[0]==e3) || (res[0]==e1));
+    CPPUNIT_ASSERT((res[1]==e3) || (res[1]==e1));
+    CPPUNIT_ASSERT(res[0]!=res[1]);
+  }
+}
Index: src/unittests/LineUnittest.hpp
===================================================================
--- src/unittests/LineUnittest.hpp	(revision 3dcb1fbe66c95e1473208ab3eefbd14acd66c2f9)
+++ src/unittests/LineUnittest.hpp	(revision 5e588b597a4bec93c790fd6f6ceca487ee3773de)
@@ -22,4 +22,5 @@
   CPPUNIT_TEST ( intersectionTest );
   CPPUNIT_TEST ( rotationTest );
+  CPPUNIT_TEST ( sphereIntersectionTest );
   CPPUNIT_TEST_SUITE_END();
 
@@ -33,4 +34,5 @@
   void intersectionTest();
   void rotationTest();
+  void sphereIntersectionTest();
 
 private:
Index: src/unittests/Makefile.am
===================================================================
--- src/unittests/Makefile.am	(revision 3dcb1fbe66c95e1473208ab3eefbd14acd66c2f9)
+++ src/unittests/Makefile.am	(revision 5e588b597a4bec93c790fd6f6ceca487ee3773de)
@@ -38,4 +38,5 @@
   periodentafelTest \
   PlaneUnittest \
+  ShapeUnittest \
   SingletonTest \
   StackClassUnitTest \
@@ -83,4 +84,5 @@
   periodentafelTest.cpp \
   PlaneUnittest.cpp \
+  ShapeUnittest.cpp \
   SingletonTest.cpp \
   stackclassunittest.cpp \
@@ -210,4 +212,7 @@
 PlaneUnittest_LDADD = ${ALLLIBS}
 
+ShapeUnittest_SOURCES = UnitTestMain.cpp ShapeUnittest.cpp ShapeUnittest.hpp
+ShapeUnittest_LDADD = ${ALLLIBS}
+
 SingletonTest_SOURCES = UnitTestMain.cpp SingletonTest.cpp SingletonTest.hpp
 SingletonTest_LDADD = ${ALLLIBS} $(BOOST_LIB) ${BOOST_THREAD_LIB}
Index: src/unittests/ShapeUnittest.cpp
===================================================================
--- src/unittests/ShapeUnittest.cpp	(revision 5e588b597a4bec93c790fd6f6ceca487ee3773de)
+++ src/unittests/ShapeUnittest.cpp	(revision 5e588b597a4bec93c790fd6f6ceca487ee3773de)
@@ -0,0 +1,362 @@
+/*
+ * ShapeUnittest.cpp
+ *
+ *  Created on: Jun 18, 2010
+ *      Author: crueger
+ */
+
+#include "ShapeUnittest.hpp"
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+#include "Shapes/Shape.hpp"
+#include "vector.cpp"
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ShapeUnittest );
+
+void ShapeUnittest::setUp()
+{
+  v000 =  0*e1+0*e2+0*e3;
+  v100 =  1*e1+0*e2+0*e3;
+  v200 = -1*e1+0*e2+0*e3;
+  v010 =  0*e1+1*e2+0*e3;
+  v110 =  1*e1+1*e2+0*e3;
+  v210 = -1*e1+1*e2+0*e3;
+  v020 =  0*e1-1*e2+0*e3;
+  v120 =  1*e1-1*e2+0*e3;
+  v220 = -1*e1-1*e2+0*e3;
+  v001 =  0*e1+0*e2+1*e3;
+  v101 =  1*e1+0*e2+1*e3;
+  v201 = -1*e1+0*e2+1*e3;
+  v011 =  0*e1+1*e2+1*e3;
+  v111 =  1*e1+1*e2+1*e3;
+  v211 = -1*e1+1*e2+1*e3;
+  v021 =  0*e1-1*e2+1*e3;
+  v121 =  1*e1-1*e2+1*e3;
+  v221 = -1*e1-1*e2+1*e3;
+  v002 =  0*e1+0*e2-1*e3;
+  v102 =  1*e1+0*e2-1*e3;
+  v202 = -1*e1+0*e2-1*e3;
+  v012 =  0*e1+1*e2-1*e3;
+  v112 =  1*e1+1*e2-1*e3;
+  v212 = -1*e1+1*e2-1*e3;
+  v022 =  0*e1-1*e2-1*e3;
+  v122 =  1*e1-1*e2-1*e3;
+  v222 = -1*e1-1*e2-1*e3;
+}
+
+void ShapeUnittest::tearDown()
+{}
+
+
+void ShapeUnittest::baseShapesTest(){
+  CPPUNIT_ASSERT(!Nowhere().isInside(v000));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v100));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v200));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v010));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v110));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v210));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v020));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v120));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v220));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v001));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v101));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v201));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v011));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v111));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v211));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v021));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v121));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v221));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v002));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v102));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v202));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v012));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v112));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v212));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v022));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v122));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v222));
+
+  CPPUNIT_ASSERT(Everywhere().isInside(v000));
+  CPPUNIT_ASSERT(Everywhere().isInside(v100));
+  CPPUNIT_ASSERT(Everywhere().isInside(v200));
+  CPPUNIT_ASSERT(Everywhere().isInside(v010));
+  CPPUNIT_ASSERT(Everywhere().isInside(v110));
+  CPPUNIT_ASSERT(Everywhere().isInside(v210));
+  CPPUNIT_ASSERT(Everywhere().isInside(v020));
+  CPPUNIT_ASSERT(Everywhere().isInside(v120));
+  CPPUNIT_ASSERT(Everywhere().isInside(v220));
+  CPPUNIT_ASSERT(Everywhere().isInside(v001));
+  CPPUNIT_ASSERT(Everywhere().isInside(v101));
+  CPPUNIT_ASSERT(Everywhere().isInside(v201));
+  CPPUNIT_ASSERT(Everywhere().isInside(v011));
+  CPPUNIT_ASSERT(Everywhere().isInside(v111));
+  CPPUNIT_ASSERT(Everywhere().isInside(v211));
+  CPPUNIT_ASSERT(Everywhere().isInside(v021));
+  CPPUNIT_ASSERT(Everywhere().isInside(v121));
+  CPPUNIT_ASSERT(Everywhere().isInside(v221));
+  CPPUNIT_ASSERT(Everywhere().isInside(v002));
+  CPPUNIT_ASSERT(Everywhere().isInside(v102));
+  CPPUNIT_ASSERT(Everywhere().isInside(v202));
+  CPPUNIT_ASSERT(Everywhere().isInside(v012));
+  CPPUNIT_ASSERT(Everywhere().isInside(v112));
+  CPPUNIT_ASSERT(Everywhere().isInside(v212));
+  CPPUNIT_ASSERT(Everywhere().isInside(v022));
+  CPPUNIT_ASSERT(Everywhere().isInside(v122));
+  CPPUNIT_ASSERT(Everywhere().isInside(v222));
+}
+
+void ShapeUnittest::assignmentTest(){
+  Shape s1 = Nowhere();
+  s1 = Everywhere();
+
+  CPPUNIT_ASSERT(s1.isInside(v000));
+  CPPUNIT_ASSERT(s1.isInside(v100));
+  CPPUNIT_ASSERT(s1.isInside(v200));
+  CPPUNIT_ASSERT(s1.isInside(v010));
+  CPPUNIT_ASSERT(s1.isInside(v110));
+  CPPUNIT_ASSERT(s1.isInside(v210));
+  CPPUNIT_ASSERT(s1.isInside(v020));
+  CPPUNIT_ASSERT(s1.isInside(v120));
+  CPPUNIT_ASSERT(s1.isInside(v220));
+  CPPUNIT_ASSERT(s1.isInside(v001));
+  CPPUNIT_ASSERT(s1.isInside(v101));
+  CPPUNIT_ASSERT(s1.isInside(v201));
+  CPPUNIT_ASSERT(s1.isInside(v011));
+  CPPUNIT_ASSERT(s1.isInside(v111));
+  CPPUNIT_ASSERT(s1.isInside(v211));
+  CPPUNIT_ASSERT(s1.isInside(v021));
+  CPPUNIT_ASSERT(s1.isInside(v121));
+  CPPUNIT_ASSERT(s1.isInside(v221));
+  CPPUNIT_ASSERT(s1.isInside(v002));
+  CPPUNIT_ASSERT(s1.isInside(v102));
+  CPPUNIT_ASSERT(s1.isInside(v202));
+  CPPUNIT_ASSERT(s1.isInside(v012));
+  CPPUNIT_ASSERT(s1.isInside(v112));
+  CPPUNIT_ASSERT(s1.isInside(v212));
+  CPPUNIT_ASSERT(s1.isInside(v022));
+  CPPUNIT_ASSERT(s1.isInside(v122));
+  CPPUNIT_ASSERT(s1.isInside(v222));
+
+  Shape s2 = Everywhere();
+  s2 = Nowhere();
+
+  CPPUNIT_ASSERT(!s2.isInside(v000));
+  CPPUNIT_ASSERT(!s2.isInside(v100));
+  CPPUNIT_ASSERT(!s2.isInside(v200));
+  CPPUNIT_ASSERT(!s2.isInside(v010));
+  CPPUNIT_ASSERT(!s2.isInside(v110));
+  CPPUNIT_ASSERT(!s2.isInside(v210));
+  CPPUNIT_ASSERT(!s2.isInside(v020));
+  CPPUNIT_ASSERT(!s2.isInside(v120));
+  CPPUNIT_ASSERT(!s2.isInside(v220));
+  CPPUNIT_ASSERT(!s2.isInside(v001));
+  CPPUNIT_ASSERT(!s2.isInside(v101));
+  CPPUNIT_ASSERT(!s2.isInside(v201));
+  CPPUNIT_ASSERT(!s2.isInside(v011));
+  CPPUNIT_ASSERT(!s2.isInside(v111));
+  CPPUNIT_ASSERT(!s2.isInside(v211));
+  CPPUNIT_ASSERT(!s2.isInside(v021));
+  CPPUNIT_ASSERT(!s2.isInside(v121));
+  CPPUNIT_ASSERT(!s2.isInside(v221));
+  CPPUNIT_ASSERT(!s2.isInside(v002));
+  CPPUNIT_ASSERT(!s2.isInside(v102));
+  CPPUNIT_ASSERT(!s2.isInside(v202));
+  CPPUNIT_ASSERT(!s2.isInside(v012));
+  CPPUNIT_ASSERT(!s2.isInside(v112));
+  CPPUNIT_ASSERT(!s2.isInside(v212));
+  CPPUNIT_ASSERT(!s2.isInside(v022));
+  CPPUNIT_ASSERT(!s2.isInside(v122));
+  CPPUNIT_ASSERT(!s2.isInside(v222));
+
+}
+void ShapeUnittest::operatorTest(){
+  {
+    Shape s1 = !Nowhere();
+    CPPUNIT_ASSERT(s1.isInside(v000));
+    CPPUNIT_ASSERT(s1.isInside(v100));
+    CPPUNIT_ASSERT(s1.isInside(v200));
+    CPPUNIT_ASSERT(s1.isInside(v010));
+    CPPUNIT_ASSERT(s1.isInside(v110));
+    CPPUNIT_ASSERT(s1.isInside(v210));
+    CPPUNIT_ASSERT(s1.isInside(v020));
+    CPPUNIT_ASSERT(s1.isInside(v120));
+    CPPUNIT_ASSERT(s1.isInside(v220));
+    CPPUNIT_ASSERT(s1.isInside(v001));
+    CPPUNIT_ASSERT(s1.isInside(v101));
+    CPPUNIT_ASSERT(s1.isInside(v201));
+    CPPUNIT_ASSERT(s1.isInside(v011));
+    CPPUNIT_ASSERT(s1.isInside(v111));
+    CPPUNIT_ASSERT(s1.isInside(v211));
+    CPPUNIT_ASSERT(s1.isInside(v021));
+    CPPUNIT_ASSERT(s1.isInside(v121));
+    CPPUNIT_ASSERT(s1.isInside(v221));
+    CPPUNIT_ASSERT(s1.isInside(v002));
+    CPPUNIT_ASSERT(s1.isInside(v102));
+    CPPUNIT_ASSERT(s1.isInside(v202));
+    CPPUNIT_ASSERT(s1.isInside(v012));
+    CPPUNIT_ASSERT(s1.isInside(v112));
+    CPPUNIT_ASSERT(s1.isInside(v212));
+    CPPUNIT_ASSERT(s1.isInside(v022));
+    CPPUNIT_ASSERT(s1.isInside(v122));
+    CPPUNIT_ASSERT(s1.isInside(v222));
+
+    Shape s2 = !Everywhere();
+    CPPUNIT_ASSERT(!s2.isInside(v000));
+    CPPUNIT_ASSERT(!s2.isInside(v100));
+    CPPUNIT_ASSERT(!s2.isInside(v200));
+    CPPUNIT_ASSERT(!s2.isInside(v010));
+    CPPUNIT_ASSERT(!s2.isInside(v110));
+    CPPUNIT_ASSERT(!s2.isInside(v210));
+    CPPUNIT_ASSERT(!s2.isInside(v020));
+    CPPUNIT_ASSERT(!s2.isInside(v120));
+    CPPUNIT_ASSERT(!s2.isInside(v220));
+    CPPUNIT_ASSERT(!s2.isInside(v001));
+    CPPUNIT_ASSERT(!s2.isInside(v101));
+    CPPUNIT_ASSERT(!s2.isInside(v201));
+    CPPUNIT_ASSERT(!s2.isInside(v011));
+    CPPUNIT_ASSERT(!s2.isInside(v111));
+    CPPUNIT_ASSERT(!s2.isInside(v211));
+    CPPUNIT_ASSERT(!s2.isInside(v021));
+    CPPUNIT_ASSERT(!s2.isInside(v121));
+    CPPUNIT_ASSERT(!s2.isInside(v221));
+    CPPUNIT_ASSERT(!s2.isInside(v002));
+    CPPUNIT_ASSERT(!s2.isInside(v102));
+    CPPUNIT_ASSERT(!s2.isInside(v202));
+    CPPUNIT_ASSERT(!s2.isInside(v012));
+    CPPUNIT_ASSERT(!s2.isInside(v112));
+    CPPUNIT_ASSERT(!s2.isInside(v212));
+    CPPUNIT_ASSERT(!s2.isInside(v022));
+    CPPUNIT_ASSERT(!s2.isInside(v122));
+    CPPUNIT_ASSERT(!s2.isInside(v222));
+  }
+
+  {
+    Shape s1 = Nowhere() || Everywhere();
+    CPPUNIT_ASSERT(s1.isInside(v000));
+    CPPUNIT_ASSERT(s1.isInside(v100));
+    CPPUNIT_ASSERT(s1.isInside(v200));
+    CPPUNIT_ASSERT(s1.isInside(v010));
+    CPPUNIT_ASSERT(s1.isInside(v110));
+    CPPUNIT_ASSERT(s1.isInside(v210));
+    CPPUNIT_ASSERT(s1.isInside(v020));
+    CPPUNIT_ASSERT(s1.isInside(v120));
+    CPPUNIT_ASSERT(s1.isInside(v220));
+    CPPUNIT_ASSERT(s1.isInside(v001));
+    CPPUNIT_ASSERT(s1.isInside(v101));
+    CPPUNIT_ASSERT(s1.isInside(v201));
+    CPPUNIT_ASSERT(s1.isInside(v011));
+    CPPUNIT_ASSERT(s1.isInside(v111));
+    CPPUNIT_ASSERT(s1.isInside(v211));
+    CPPUNIT_ASSERT(s1.isInside(v021));
+    CPPUNIT_ASSERT(s1.isInside(v121));
+    CPPUNIT_ASSERT(s1.isInside(v221));
+    CPPUNIT_ASSERT(s1.isInside(v002));
+    CPPUNIT_ASSERT(s1.isInside(v102));
+    CPPUNIT_ASSERT(s1.isInside(v202));
+    CPPUNIT_ASSERT(s1.isInside(v012));
+    CPPUNIT_ASSERT(s1.isInside(v112));
+    CPPUNIT_ASSERT(s1.isInside(v212));
+    CPPUNIT_ASSERT(s1.isInside(v022));
+    CPPUNIT_ASSERT(s1.isInside(v122));
+    CPPUNIT_ASSERT(s1.isInside(v222));
+
+    Shape s2 = Nowhere() && Everywhere();
+    CPPUNIT_ASSERT(!s2.isInside(v000));
+    CPPUNIT_ASSERT(!s2.isInside(v100));
+    CPPUNIT_ASSERT(!s2.isInside(v200));
+    CPPUNIT_ASSERT(!s2.isInside(v010));
+    CPPUNIT_ASSERT(!s2.isInside(v110));
+    CPPUNIT_ASSERT(!s2.isInside(v210));
+    CPPUNIT_ASSERT(!s2.isInside(v020));
+    CPPUNIT_ASSERT(!s2.isInside(v120));
+    CPPUNIT_ASSERT(!s2.isInside(v220));
+    CPPUNIT_ASSERT(!s2.isInside(v001));
+    CPPUNIT_ASSERT(!s2.isInside(v101));
+    CPPUNIT_ASSERT(!s2.isInside(v201));
+    CPPUNIT_ASSERT(!s2.isInside(v011));
+    CPPUNIT_ASSERT(!s2.isInside(v111));
+    CPPUNIT_ASSERT(!s2.isInside(v211));
+    CPPUNIT_ASSERT(!s2.isInside(v021));
+    CPPUNIT_ASSERT(!s2.isInside(v121));
+    CPPUNIT_ASSERT(!s2.isInside(v221));
+    CPPUNIT_ASSERT(!s2.isInside(v002));
+    CPPUNIT_ASSERT(!s2.isInside(v102));
+    CPPUNIT_ASSERT(!s2.isInside(v202));
+    CPPUNIT_ASSERT(!s2.isInside(v012));
+    CPPUNIT_ASSERT(!s2.isInside(v112));
+    CPPUNIT_ASSERT(!s2.isInside(v212));
+    CPPUNIT_ASSERT(!s2.isInside(v022));
+    CPPUNIT_ASSERT(!s2.isInside(v122));
+    CPPUNIT_ASSERT(!s2.isInside(v222));
+  }
+
+  {
+    Shape s1 = Everywhere() || Nowhere();
+    CPPUNIT_ASSERT(s1.isInside(v000));
+    CPPUNIT_ASSERT(s1.isInside(v100));
+    CPPUNIT_ASSERT(s1.isInside(v200));
+    CPPUNIT_ASSERT(s1.isInside(v010));
+    CPPUNIT_ASSERT(s1.isInside(v110));
+    CPPUNIT_ASSERT(s1.isInside(v210));
+    CPPUNIT_ASSERT(s1.isInside(v020));
+    CPPUNIT_ASSERT(s1.isInside(v120));
+    CPPUNIT_ASSERT(s1.isInside(v220));
+    CPPUNIT_ASSERT(s1.isInside(v001));
+    CPPUNIT_ASSERT(s1.isInside(v101));
+    CPPUNIT_ASSERT(s1.isInside(v201));
+    CPPUNIT_ASSERT(s1.isInside(v011));
+    CPPUNIT_ASSERT(s1.isInside(v111));
+    CPPUNIT_ASSERT(s1.isInside(v211));
+    CPPUNIT_ASSERT(s1.isInside(v021));
+    CPPUNIT_ASSERT(s1.isInside(v121));
+    CPPUNIT_ASSERT(s1.isInside(v221));
+    CPPUNIT_ASSERT(s1.isInside(v002));
+    CPPUNIT_ASSERT(s1.isInside(v102));
+    CPPUNIT_ASSERT(s1.isInside(v202));
+    CPPUNIT_ASSERT(s1.isInside(v012));
+    CPPUNIT_ASSERT(s1.isInside(v112));
+    CPPUNIT_ASSERT(s1.isInside(v212));
+    CPPUNIT_ASSERT(s1.isInside(v022));
+    CPPUNIT_ASSERT(s1.isInside(v122));
+    CPPUNIT_ASSERT(s1.isInside(v222));
+
+    Shape s2 = Everywhere() && Nowhere();
+    CPPUNIT_ASSERT(!s2.isInside(v000));
+    CPPUNIT_ASSERT(!s2.isInside(v100));
+    CPPUNIT_ASSERT(!s2.isInside(v200));
+    CPPUNIT_ASSERT(!s2.isInside(v010));
+    CPPUNIT_ASSERT(!s2.isInside(v110));
+    CPPUNIT_ASSERT(!s2.isInside(v210));
+    CPPUNIT_ASSERT(!s2.isInside(v020));
+    CPPUNIT_ASSERT(!s2.isInside(v120));
+    CPPUNIT_ASSERT(!s2.isInside(v220));
+    CPPUNIT_ASSERT(!s2.isInside(v001));
+    CPPUNIT_ASSERT(!s2.isInside(v101));
+    CPPUNIT_ASSERT(!s2.isInside(v201));
+    CPPUNIT_ASSERT(!s2.isInside(v011));
+    CPPUNIT_ASSERT(!s2.isInside(v111));
+    CPPUNIT_ASSERT(!s2.isInside(v211));
+    CPPUNIT_ASSERT(!s2.isInside(v021));
+    CPPUNIT_ASSERT(!s2.isInside(v121));
+    CPPUNIT_ASSERT(!s2.isInside(v221));
+    CPPUNIT_ASSERT(!s2.isInside(v002));
+    CPPUNIT_ASSERT(!s2.isInside(v102));
+    CPPUNIT_ASSERT(!s2.isInside(v202));
+    CPPUNIT_ASSERT(!s2.isInside(v012));
+    CPPUNIT_ASSERT(!s2.isInside(v112));
+    CPPUNIT_ASSERT(!s2.isInside(v212));
+    CPPUNIT_ASSERT(!s2.isInside(v022));
+    CPPUNIT_ASSERT(!s2.isInside(v122));
+    CPPUNIT_ASSERT(!s2.isInside(v222));
+  }
+
+}
Index: src/unittests/ShapeUnittest.hpp
===================================================================
--- src/unittests/ShapeUnittest.hpp	(revision 5e588b597a4bec93c790fd6f6ceca487ee3773de)
+++ src/unittests/ShapeUnittest.hpp	(revision 5e588b597a4bec93c790fd6f6ceca487ee3773de)
@@ -0,0 +1,66 @@
+/*
+ * ShapeUnittest.hpp
+ *
+ *  Created on: Jun 18, 2010
+ *      Author: crueger
+ */
+
+#ifndef SHAPEUNITTEST_HPP_
+#define SHAPEUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+class Shape;
+class Vector;
+
+#include "vector.hpp"
+
+class ShapeUnittest : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( ShapeUnittest) ;
+  CPPUNIT_TEST ( baseShapesTest );
+  CPPUNIT_TEST ( assignmentTest );
+  CPPUNIT_TEST ( operatorTest );
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+  void setUp();
+  void tearDown();
+
+  void baseShapesTest();
+  void assignmentTest();
+  void operatorTest();
+
+  // a lot of vectors.
+  // these define all the edges of a box around -1 +1 on each axis
+  // 0 is 0, 1 is 1 and 2 is -1
+  Vector v000;
+  Vector v100;
+  Vector v200;
+  Vector v010;
+  Vector v110;
+  Vector v210;
+  Vector v020;
+  Vector v120;
+  Vector v220;
+  Vector v001;
+  Vector v101;
+  Vector v201;
+  Vector v011;
+  Vector v111;
+  Vector v211;
+  Vector v021;
+  Vector v121;
+  Vector v221;
+  Vector v002;
+  Vector v102;
+  Vector v202;
+  Vector v012;
+  Vector v112;
+  Vector v212;
+  Vector v022;
+  Vector v122;
+  Vector v222;
+};
+
+#endif /* SHAPEUNITTEST_HPP_ */
