Added unit tests for Var
authorJoris Mooij <joris.mooij@tuebingen.mpg.de>
Fri, 19 Mar 2010 12:38:04 +0000 (13:38 +0100)
committerJoris Mooij <joris.mooij@tuebingen.mpg.de>
Fri, 19 Mar 2010 12:38:04 +0000 (13:38 +0100)
ChangeLog
include/dai/var.h
tests/unit/var.cpp

index 772351e..108f23f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,7 @@
 git HEAD
 --------
 
+* Added unit tests for Var
 * Added unit testing framework
 * Added initialization of TRWBP weights by sampling spanning trees
 * Cleaned up MR code:
index 6423390..74dea69 100644 (file)
@@ -26,7 +26,7 @@ namespace dai {
 
 
 /// Represents a discrete random variable.
-/** A Var stores the \a label of the variable (a nonnegative integer-valued
+/** A Var stores the \a label of the variable (an unsigned integer-valued
  *  unique ID) and the number of possible values (\a states) of that variable. 
  *  Two Var objects with the same label are assumed to be identical (i.e., it
  *  is assumed that they have the same number of possible states).
@@ -46,8 +46,8 @@ class Var {
         size_t  _states;
 
     public:
-        /// Default constructor (creates a variable with label -1 and 0 states)
-        Var() : _label(-1), _states(0) {}
+        /// Default constructor (creates a variable with label 0 and 0 states)
+        Var() : _label(0), _states(0) {}
         /// Constructs a variable with a given label and number of states
         Var( size_t label, size_t states ) : _label(label), _states(states) {}
 
@@ -62,9 +62,23 @@ class Var {
         size_t& states () { return _states; }
 
         /// Smaller-than operator (only compares labels)
-        bool operator < ( const Var& n ) const { return( _label <  n._label ); }
+        bool operator < ( const Var& n ) const { 
+#ifdef DAI_DEBUG
+            if( _label == n._label )
+                DAI_ASSERT( _states == n._states );
+#endif
+            return( _label <  n._label );
+        }
+
         /// Larger-than operator (only compares labels)
-        bool operator > ( const Var& n ) const { return( _label >  n._label ); }
+        bool operator > ( const Var& n ) const { 
+#ifdef DAI_DEBUG
+            if( _label == n._label )
+                DAI_ASSERT( _states == n._states );
+#endif
+            return( _label >  n._label ); 
+        }
+
         /// Smaller-than-or-equal-to operator (only compares labels)
         bool operator <= ( const Var& n ) const {
 #ifdef DAI_DEBUG
@@ -73,6 +87,7 @@ class Var {
 #endif
             return( _label <= n._label );
         }
+
         /// Larger-than-or-equal-to operator (only compares labels)
         bool operator >= ( const Var& n ) const {
 #ifdef DAI_DEBUG
@@ -81,6 +96,7 @@ class Var {
 #endif
             return( _label >= n._label );
         }
+
         /// Not-equal-to operator (only compares labels)
         bool operator != ( const Var& n ) const {
 #ifdef DAI_DEBUG
@@ -89,6 +105,7 @@ class Var {
 #endif
             return( _label != n._label );
         }
+
         /// Equal-to operator (only compares labels)
         bool operator == ( const Var& n ) const {
 #ifdef DAI_DEBUG
index 80d1c43..d8c226c 100644 (file)
@@ -1,14 +1,75 @@
+/*  This file is part of libDAI - http://www.libdai.org/
+ *
+ *  libDAI is licensed under the terms of the GNU General Public License version
+ *  2, or (at your option) any later version. libDAI is distributed without any
+ *  warranty. See the file COPYING for more details.
+ *
+ *  Copyright (C) 2010  Joris Mooij      [joris dot mooij at libdai dot org]
+ */
+
+
 #define BOOST_TEST_DYN_LINK
 
+
 #include <dai/var.h>
+#include <strstream>
+
 
 using namespace dai;
 
-#define BOOST_TEST_MODULE MyTest
+
+#define BOOST_TEST_MODULE VarTest
+
 
 #include <boost/test/unit_test.hpp>
 
-BOOST_AUTO_TEST_CASE( my_test ) {
-    Var x( 0, 2 );
-    BOOST_CHECK( x.states() == 2 );
+
+BOOST_AUTO_TEST_CASE( ConstructorsTest ) {
+    // check constructors and states and labels accessors
+    Var x;
+    BOOST_CHECK_EQUAL( x.label(), 0 );
+    BOOST_CHECK_EQUAL( x.states(), 0 );
+
+    x = Var( 0, 2 );
+    BOOST_CHECK_EQUAL( x.label(), 0 );
+    BOOST_CHECK_EQUAL( x.states(), 2 );
+}
+
+BOOST_AUTO_TEST_CASE( AccMutTest ) {
+    // check states and labels mutators
+    Var x;
+    x.states() = 3;
+    BOOST_CHECK_EQUAL( x.states(), 3 );
+
+    x.label() = 5;
+    BOOST_CHECK_EQUAL( x.label(), 5 );
+}
+
+BOOST_AUTO_TEST_CASE( ComparisonTest ) {
+    // check comparison operators
+    Var x( 5, 3 );
+    Var y( 6, 3 );
+    Var z( 5, 3 );
+    BOOST_CHECK( x < y );
+    BOOST_CHECK( !(x < z) );
+    BOOST_CHECK( y > x );
+    BOOST_CHECK( !(z > x) );
+    BOOST_CHECK( x <= y );
+    BOOST_CHECK( x <= z );
+    BOOST_CHECK( !(x >= y) );
+    BOOST_CHECK( x >= z );
+    BOOST_CHECK( !(x == y) );
+    BOOST_CHECK( x == z );
+    BOOST_CHECK( x != y );
+    BOOST_CHECK( !(x != z) );
+}
+
+BOOST_AUTO_TEST_CASE( StreamTest ) {
+    // check stream output
+    Var x( 5, 3 );
+    std::stringstream ss;
+    ss << x;
+    std::string s;
+    ss >> s;
+    BOOST_CHECK_EQUAL( s, "x5" );
 }