Migrate libi2ncommon to boost::test
authorThomas Jarosch <thomas.jarosch@intra2net.com>
Wed, 3 Feb 2010 21:00:18 +0000 (22:00 +0100)
committerThomas Jarosch <thomas.jarosch@intra2net.com>
Wed, 3 Feb 2010 21:00:18 +0000 (22:00 +0100)
16 files changed:
Makefile.am
configure.in
m4/ax_boost_base.m4 [new file with mode: 0644]
m4/ax_boost_unit_test_framework.m4 [new file with mode: 0644]
test/Makefile.am
test/ip_range.cpp
test/stringfunc.cpp
test/test.cpp [deleted file]
test/test_containerfunc.cpp
test/test_cron_interval.cpp
test/test_cron_point.cpp
test/test_filefunc.cpp
test/test_global_config.cpp
test/test_logging.cpp
test/test_pidfile.cpp
test/test_timefunc.cpp

index 498e4b9..d8cacae 100644 (file)
@@ -1,6 +1,7 @@
 # not a GNU package. You can remove this line, if
 # have all needed files, that a GNU package needs
 AUTOMAKE_OPTIONS = foreign 1.4
+ACLOCAL_FLAGS = -I m4
 
 SUBDIRS = src configlib xmllib utils doc test
 
index b029813..2a58ac2 100644 (file)
@@ -43,7 +43,8 @@ dnl check for doxygen
 AC_PATH_PROG(DOXYGEN, doxygen)
 AM_CONDITIONAL(HAVE_DOXYGEN, test -n $DOXYGEN)
 
-AM_PATH_CPPUNIT(1.8.0)
+AX_BOOST_BASE([1.34])
+AX_BOOST_UNIT_TEST_FRAMEWORK
 
 AC_OUTPUT(Doxyfile Makefile doc/Makefile doc/Doxyfile configlib/Makefile xmllib/Makefile utils/Makefile src/Makefile \
        test/Makefile libi2ncommon.pc libi2ncommon_config.pc libi2ncommon_xml.pc libi2ncommon_utils.pc)
diff --git a/m4/ax_boost_base.m4 b/m4/ax_boost_base.m4
new file mode 100644 (file)
index 0000000..b2a00b8
--- /dev/null
@@ -0,0 +1,219 @@
+# ===========================================================================
+#          http://www.nongnu.org/autoconf-archive/ax_boost_base.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_BOOST_BASE([MINIMUM-VERSION])
+#
+# DESCRIPTION
+#
+#   Test for the Boost C++ libraries of a particular version (or newer)
+#
+#   If no path to the installed boost library is given the macro searchs
+#   under /usr, /usr/local, /opt and /opt/local and evaluates the
+#   $BOOST_ROOT environment variable. Further documentation is available at
+#   <http://randspringer.de/boost/index.html>.
+#
+#   This macro calls:
+#
+#     AC_SUBST(BOOST_CPPFLAGS) / AC_SUBST(BOOST_LDFLAGS)
+#
+#   And sets:
+#
+#     HAVE_BOOST
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Thomas Porschberg <thomas@randspringer.de>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved.
+
+AC_DEFUN([AX_BOOST_BASE],
+[
+AC_ARG_WITH([boost],
+       AS_HELP_STRING([--with-boost@<:@=DIR@:>@], [use boost (default is yes) - it is possible to specify the root directory for boost (optional)]),
+       [
+    if test "$withval" = "no"; then
+               want_boost="no"
+    elif test "$withval" = "yes"; then
+        want_boost="yes"
+        ac_boost_path=""
+    else
+           want_boost="yes"
+        ac_boost_path="$withval"
+       fi
+    ],
+    [want_boost="yes"])
+
+
+AC_ARG_WITH([boost-libdir],
+        AS_HELP_STRING([--with-boost-libdir=LIB_DIR],
+        [Force given directory for boost libraries. Note that this will overwrite library path detection, so use this parameter only if default library detection fails and you know exactly where your boost libraries are located.]),
+        [
+        if test -d $withval
+        then
+                ac_boost_lib_path="$withval"
+        else
+                AC_MSG_ERROR(--with-boost-libdir expected directory name)
+        fi
+        ],
+        [ac_boost_lib_path=""]
+)
+
+if test "x$want_boost" = "xyes"; then
+       boost_lib_version_req=ifelse([$1], ,1.20.0,$1)
+       boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'`
+       boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'`
+       boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'`
+       boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
+       if test "x$boost_lib_version_req_sub_minor" = "x" ; then
+               boost_lib_version_req_sub_minor="0"
+       fi
+       WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+  $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor`
+       AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req)
+       succeeded=no
+
+       dnl first we check the system location for boost libraries
+       dnl this location ist chosen if boost libraries are installed with the --layout=system option
+       dnl or if you install boost with RPM
+       if test "$ac_boost_path" != ""; then
+               BOOST_LDFLAGS="-L$ac_boost_path/lib"
+               BOOST_CPPFLAGS="-I$ac_boost_path/include"
+       else
+               for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do
+                       if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then
+                               BOOST_LDFLAGS="-L$ac_boost_path_tmp/lib"
+                               BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include"
+                               break;
+                       fi
+               done
+       fi
+
+    dnl overwrite ld flags if we have required special directory with
+    dnl --with-boost-libdir parameter
+    if test "$ac_boost_lib_path" != ""; then
+       BOOST_LDFLAGS="-L$ac_boost_lib_path"
+    fi
+
+       CPPFLAGS_SAVED="$CPPFLAGS"
+       CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
+       export CPPFLAGS
+
+       LDFLAGS_SAVED="$LDFLAGS"
+       LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
+       export LDFLAGS
+
+       AC_LANG_PUSH(C++)
+       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+       @%:@include <boost/version.hpp>
+       ]], [[
+       #if BOOST_VERSION >= $WANT_BOOST_VERSION
+       // Everything is okay
+       #else
+       #  error Boost version is too old
+       #endif
+       ]])],[
+        AC_MSG_RESULT(yes)
+       succeeded=yes
+       found_system=yes
+               ],[
+               ])
+       AC_LANG_POP([C++])
+
+
+
+       dnl if we found no boost with system layout we search for boost libraries
+       dnl built and installed without the --layout=system option or for a staged(not installed) version
+       if test "x$succeeded" != "xyes"; then
+               _version=0
+               if test "$ac_boost_path" != ""; then
+                       if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
+                               for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
+                                       _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
+                                       V_CHECK=`expr $_version_tmp \> $_version`
+                                       if test "$V_CHECK" = "1" ; then
+                                               _version=$_version_tmp
+                                       fi
+                                       VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
+                                       BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE"
+                               done
+                       fi
+               else
+                       for ac_boost_path in /usr /usr/local /opt /opt/local ; do
+                               if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
+                                       for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
+                                               _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
+                                               V_CHECK=`expr $_version_tmp \> $_version`
+                                               if test "$V_CHECK" = "1" ; then
+                                                       _version=$_version_tmp
+                                                       best_path=$ac_boost_path
+                                               fi
+                                       done
+                               fi
+                       done
+
+                       VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
+                       BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE"
+            if test "$ac_boost_lib_path" = ""
+            then
+               BOOST_LDFLAGS="-L$best_path/lib"
+            fi
+
+                       if test "x$BOOST_ROOT" != "x"; then
+                               if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/lib" && test -r "$BOOST_ROOT/stage/lib"; then
+                                       version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'`
+                                       stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'`
+                                       stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'`
+                                       V_CHECK=`expr $stage_version_shorten \>\= $_version`
+                    if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then
+                                               AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT)
+                                               BOOST_CPPFLAGS="-I$BOOST_ROOT"
+                                               BOOST_LDFLAGS="-L$BOOST_ROOT/stage/lib"
+                                       fi
+                               fi
+                       fi
+               fi
+
+               CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
+               export CPPFLAGS
+               LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
+               export LDFLAGS
+
+               AC_LANG_PUSH(C++)
+               AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+               @%:@include <boost/version.hpp>
+               ]], [[
+               #if BOOST_VERSION >= $WANT_BOOST_VERSION
+               // Everything is okay
+               #else
+               #  error Boost version is too old
+               #endif
+               ]])],[
+               AC_MSG_RESULT(yes)
+               succeeded=yes
+               found_system=yes
+                       ],[
+               ])
+               AC_LANG_POP([C++])
+       fi
+
+       if test "$succeeded" != "yes" ; then
+               if test "$_version" = "0" ; then
+                       AC_MSG_ERROR([[We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option.  If you are sure you have boost installed, then check your version number looking in <boost/version.hpp>. See http://randspringer.de/boost for more documentation.]])
+               else
+                       AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).])
+               fi
+       else
+               AC_SUBST(BOOST_CPPFLAGS)
+               AC_SUBST(BOOST_LDFLAGS)
+               AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available])
+       fi
+
+        CPPFLAGS="$CPPFLAGS_SAVED"
+               LDFLAGS="$LDFLAGS_SAVED"
+fi
+
+])
diff --git a/m4/ax_boost_unit_test_framework.m4 b/m4/ax_boost_unit_test_framework.m4
new file mode 100644 (file)
index 0000000..5333da3
--- /dev/null
@@ -0,0 +1,131 @@
+# ===========================================================================
+#  http://www.nongnu.org/autoconf-archive/ax_boost_unit_test_framework.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_BOOST_UNIT_TEST_FRAMEWORK
+#
+# DESCRIPTION
+#
+#   Test for Unit_Test_Framework library from the Boost C++ libraries. The
+#   macro requires a preceding call to AX_BOOST_BASE. Further documentation
+#   is available at <http://randspringer.de/boost/index.html>.
+#
+#   This macro calls:
+#
+#     AC_SUBST(BOOST_UNIT_TEST_FRAMEWORK_LIB)
+#
+#   And sets:
+#
+#     HAVE_BOOST_UNIT_TEST_FRAMEWORK
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Thomas Porschberg <thomas@randspringer.de>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved.
+
+AC_DEFUN([AX_BOOST_UNIT_TEST_FRAMEWORK],
+[
+       AC_ARG_WITH([boost-unit-test-framework],
+       AS_HELP_STRING([--with-boost-unit-test-framework@<:@=special-lib@:>@],
+                   [use the Unit_Test_Framework library from boost - it is possible to specify a certain library for the linker
+                        e.g. --with-boost-unit-test-framework=boost_unit_test_framework-gcc ]),
+        [
+        if test "$withval" = "no"; then
+                       want_boost="no"
+        elif test "$withval" = "yes"; then
+            want_boost="yes"
+            ax_boost_user_unit_test_framework_lib=""
+        else
+                   want_boost="yes"
+               ax_boost_user_unit_test_framework_lib="$withval"
+               fi
+        ],
+        [want_boost="yes"]
+       )
+
+       if test "x$want_boost" = "xyes"; then
+        AC_REQUIRE([AC_PROG_CC])
+               CPPFLAGS_SAVED="$CPPFLAGS"
+               CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
+               export CPPFLAGS
+
+               LDFLAGS_SAVED="$LDFLAGS"
+               LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
+               export LDFLAGS
+
+        AC_CACHE_CHECK(whether the Boost::Unit_Test_Framework library is available,
+                                          ax_cv_boost_unit_test_framework,
+        [AC_LANG_PUSH([C++])
+                        AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[@%:@include <boost/test/unit_test.hpp>]],
+                                    [[using boost::unit_test::test_suite;
+                                                        test_suite* test= BOOST_TEST_SUITE( "Unit test example 1" ); return 0;]]),
+                   ax_cv_boost_unit_test_framework=yes, ax_cv_boost_unit_test_framework=no)
+         AC_LANG_POP([C++])
+               ])
+               if test "x$ax_cv_boost_unit_test_framework" = "xyes"; then
+                       AC_DEFINE(HAVE_BOOST_UNIT_TEST_FRAMEWORK,,[define if the Boost::Unit_Test_Framework library is available])
+            BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'`
+
+            if test "x$ax_boost_user_unit_test_framework_lib" = "x"; then
+                       saved_ldflags="${LDFLAGS}"
+                for monitor_library in `ls $BOOSTLIBDIR/libboost_unit_test_framework*.{so,a}* 2>/dev/null` ; do
+                    if test -r $monitor_library ; then
+                       libextension=`echo $monitor_library | sed 's,.*/,,' | sed -e 's;^lib\(boost_unit_test_framework.*\)\.so.*$;\1;' -e 's;^lib\(boost_unit_test_framework.*\)\.a*$;\1;'`
+                       ax_lib=${libextension}
+                       link_unit_test_framework="yes"
+                    else
+                       link_unit_test_framework="no"
+                    fi
+
+                           if test "x$link_unit_test_framework" = "xyes"; then
+                      BOOST_UNIT_TEST_FRAMEWORK_LIB="-l$ax_lib"
+                      AC_SUBST(BOOST_UNIT_TEST_FRAMEWORK_LIB)
+                                         break
+                                   fi
+                done
+                if test "x$link_unit_test_framework" != "xyes"; then
+                for libextension in `ls $BOOSTLIBDIR/boost_unit_test_framework*.{dll,a}* 2>/dev/null  | sed 's,.*/,,' | sed -e 's;^\(boost_unit_test_framework.*\)\.dll.*$;\1;' -e 's;^\(boost_unit_test_framework.*\)\.a*$;\1;'` ; do
+                     ax_lib=${libextension}
+                                   AC_CHECK_LIB($ax_lib, exit,
+                                 [BOOST_UNIT_TEST_FRAMEWORK_LIB="-l$ax_lib"; AC_SUBST(BOOST_UNIT_TEST_FRAMEWORK_LIB) link_unit_test_framework="yes"; break],
+                                 [link_unit_test_framework="no"])
+                               done
+                fi
+            else
+                link_unit_test_framework="no"
+                       saved_ldflags="${LDFLAGS}"
+                for ax_lib in boost_unit_test_framework-$ax_boost_user_unit_test_framework_lib $ax_boost_user_unit_test_framework_lib ; do
+                   if test "x$link_unit_test_framework" = "xyes"; then
+                      break;
+                   fi
+                   for unittest_library in `ls $BOOSTLIBDIR/lib${ax_lib}.{so,a}* 2>/dev/null` ; do
+                   if test -r $unittest_library ; then
+                       libextension=`echo $unittest_library | sed 's,.*/,,' | sed -e 's;^lib\(boost_unit_test_framework.*\)\.so.*$;\1;' -e 's;^lib\(boost_unit_test_framework.*\)\.a*$;\1;'`
+                       ax_lib=${libextension}
+                       link_unit_test_framework="yes"
+                    else
+                       link_unit_test_framework="no"
+                    fi
+
+                               if test "x$link_unit_test_framework" = "xyes"; then
+                        BOOST_UNIT_TEST_FRAMEWORK_LIB="-l$ax_lib"
+                        AC_SUBST(BOOST_UNIT_TEST_FRAMEWORK_LIB)
+                                           break
+                                   fi
+                  done
+               done
+            fi
+                       if test "x$link_unit_test_framework" != "xyes"; then
+                               AC_MSG_ERROR(Could not link against $ax_lib !)
+                       fi
+               fi
+
+               CPPFLAGS="$CPPFLAGS_SAVED"
+       LDFLAGS="$LDFLAGS_SAVED"
+       fi
+])
index bc53604..b1319ff 100644 (file)
@@ -1,10 +1,10 @@
-INCLUDES = -I$(top_srcdir)/configlib -I$(top_srcdir)/src -I$(top_srcdir)/utils @CPPUNIT_CFLAGS@
+INCLUDES = -I$(top_srcdir)/configlib -I$(top_srcdir)/src -I$(top_srcdir)/utils @BOOST_CPPFLAGS@
 METASOURCES = AUTO
 check_PROGRAMS =  test
-test_SOURCES = ip_range.cpp stringfunc.cpp test.cpp test_containerfunc.cpp \
+test_SOURCES = ip_range.cpp stringfunc.cpp test_containerfunc.cpp \
        test_cron_interval.cpp test_cron_point.cpp test_filefunc.cpp test_global_config.cpp \
        test_logging.cpp test_pidfile.cpp test_timefunc.cpp
 test_LDADD = $(top_builddir)/src/libi2ncommon.la $(top_builddir)/utils/libi2ncommon_utils.la \
-       $(top_builddir)/configlib/libi2ncommon_config.la @CPPUNIT_LIBS@
+       $(top_builddir)/configlib/libi2ncommon_config.la @BOOST_UNIT_TEST_FRAMEWORK_LIB@
 
 TESTS = test
index 3048507..e18cf41 100644 (file)
 #include <sstream>
 #include <stdexcept>
 
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-#include <cppunit/extensions/HelperMacros.h>
+#define BOOST_TEST_MAIN
+#define BOOST_TEST_DYN_LINK
+#include <boost/test/unit_test.hpp>
 
 #include <ipfunc.hxx>
 
-namespace CppUnit
+namespace std
 {
 
-template<> 
-struct assertion_traits<std::vector<IP_RANGE> >
+template <class charT, class traits>
+inline std::basic_ostream<charT, traits>& operator<<(std::basic_ostream<charT, traits>& os,
+                                                     const std::vector<IP_RANGE>& x)
 {
-    static bool equal( const std::vector<IP_RANGE>& x, const std::vector<IP_RANGE>& y )
+    bool is_first = true;
+    for (std::vector<IP_RANGE>::const_iterator i=x.begin(); i!=x.end(); i++)
     {
-        return x == y;
+        if (!is_first)
+            os << ", ";
+        os << i->to_string();
+        is_first = false;
     }
-    static std::string toString( const std::vector<IP_RANGE>& x )
-    {
-        std::ostringstream os;
-        
-        for (std::vector<IP_RANGE>::const_iterator i=x.begin(); i!=x.end(); i++)
-        {
-            if (os.str().length())
-                os << ", ";
-            os << i->to_string();
-        }
-        return os.str();
-    }
-};
 
+    return os;
 }
+} // eo namespace std
+
 
 using namespace std;
-using namespace CppUnit;
-     
-class ip_range : public TestFixture
-{
-    CPPUNIT_TEST_SUITE(ip_range);
-    
-    CPPUNIT_TEST(ConstructIP1);
-    CPPUNIT_TEST(ConstructIP2);
-    CPPUNIT_TEST(ConstructNet1);
-    CPPUNIT_TEST(ConstructNet2);
-    CPPUNIT_TEST(ConstructNet3);
-    CPPUNIT_TEST(ConstructRange1);
-    CPPUNIT_TEST(ConstructRange2);
-    CPPUNIT_TEST(ConstructRangeSwap);
-    CPPUNIT_TEST(OverlapIP);
-    CPPUNIT_TEST(OverlapNet1);
-    CPPUNIT_TEST(OverlapNet2);
-    CPPUNIT_TEST(OverlapNet3);
-    CPPUNIT_TEST(OverlapNet4);
-    CPPUNIT_TEST(OverlapRange1);
-    CPPUNIT_TEST(OverlapRange2);
-    CPPUNIT_TEST(OverlapRange3);
-    CPPUNIT_TEST(OverlapRange4);
-    CPPUNIT_TEST(OverlapRange5);
-    CPPUNIT_TEST(OverlapRange6);
-    CPPUNIT_TEST(OverlapRange7);
-    CPPUNIT_TEST(WithinNet1);
-    CPPUNIT_TEST(WithinNet2);
-    CPPUNIT_TEST(WithinNet3);
-    CPPUNIT_TEST(WithinNet4);
-    CPPUNIT_TEST(WithinNet5);
-    CPPUNIT_TEST(WithinNet6);
-    CPPUNIT_TEST(WithinNet7);
-    CPPUNIT_TEST(WithinRange1);
-    CPPUNIT_TEST(WithinRange2);
-    CPPUNIT_TEST(WithinRange3);
-    CPPUNIT_TEST(WithinRange4);
-    CPPUNIT_TEST(WithinRange5);
-    CPPUNIT_TEST(WithinRange6);
-    CPPUNIT_TEST(WithinRange7);
-    CPPUNIT_TEST(WithinRange8);
-    CPPUNIT_TEST(WithinRange9);
-    CPPUNIT_TEST(WithinRange10);
-    CPPUNIT_TEST(OperatorPlus1);
-    CPPUNIT_TEST(OperatorPlus2);
-    CPPUNIT_TEST(OperatorPlusOverflow);
-    CPPUNIT_TEST(OperatorMinus);
-    CPPUNIT_TEST(NetmaskToBits1);
-    CPPUNIT_TEST(NetmaskToBits2);
-    CPPUNIT_TEST(NetmaskToBits3);
-    CPPUNIT_TEST(NetmaskToBits4);
-    CPPUNIT_TEST(Range2Cidr1);
-    CPPUNIT_TEST(Range2Cidr2);
-    CPPUNIT_TEST(Range2Cidr3);
-    CPPUNIT_TEST(Range2Cidr4);
-    CPPUNIT_TEST(Range2Cidr5);
-    CPPUNIT_TEST(Range2Cidr6);
-    CPPUNIT_TEST(Range2Cidr7);
-    CPPUNIT_TEST(Substract1);
-    CPPUNIT_TEST(Substract2);
-    CPPUNIT_TEST(Substract3);
-    CPPUNIT_TEST(Substract4);
-    CPPUNIT_TEST(Substract5);
-    CPPUNIT_TEST(Substract6);
-    CPPUNIT_TEST(Substract7);
-    CPPUNIT_TEST(Substract8);
-    CPPUNIT_TEST(Substract9);
-    CPPUNIT_TEST(Substract10);
-    CPPUNIT_TEST(Substract11);
-    CPPUNIT_TEST(Substract12);
-    CPPUNIT_TEST(Substract13);
-    CPPUNIT_TEST(Substract14);
-    CPPUNIT_TEST(Substract15);
-    CPPUNIT_TEST(IpNumString1);
-    CPPUNIT_TEST(IpNumString2);
-    CPPUNIT_TEST(IpNumString3);
-    
-    CPPUNIT_TEST_SUITE_END();
-    
-    
-    
-    public:
-        void setUp()
-        {
-        }
-        
-        void tearDown()
-        {
-        }
-
-        void ConstructIP1()
-        {
-            IP_RANGE i("192.168.1.1");
-            CPPUNIT_ASSERT_EQUAL(string("192.168.1.1"),i.to_string());
-        }
-
-        void ConstructIP2()
-        {
-            IP_RANGE i(ip_type::IP,"192.168.1.1");
-            CPPUNIT_ASSERT_EQUAL(string("192.168.1.1"),i.to_string());
-        }
-
-        void ConstructNet1()
-        {
-            IP_RANGE i("192.168.1.1/255.255.255.0");
-            CPPUNIT_ASSERT_EQUAL(string("192.168.1.0/255.255.255.0"),i.to_string());
-        }
-
-        void ConstructNet2()
-        {
-            IP_RANGE i(ip_type::NETWORK,"192.168.1.1","255.255.255.0");
-            CPPUNIT_ASSERT_EQUAL(string("192.168.1.0/255.255.255.0"),i.to_string());
-        }
-
-        void ConstructNet3()
-        {
-            IP_RANGE i("172.16.0.0/16");
-            CPPUNIT_ASSERT_EQUAL(string("172.16.0.0/255.255.0.0"),i.to_string());
-        }
-        
-        void ConstructRange1()
-        {
-            IP_RANGE i("192.168.1.5-192.168.3.1");
-            CPPUNIT_ASSERT_EQUAL(string("192.168.1.5-192.168.3.1"),i.to_string());
-        }
-
-        void ConstructRange2()
-        {
-            IP_RANGE i(ip_type::RANGE,"192.168.1.5","192.168.3.1");
-            CPPUNIT_ASSERT_EQUAL(string("192.168.1.5-192.168.3.1"),i.to_string());
-        }
-
-        void ConstructRangeSwap()
-        {
-            IP_RANGE i(ip_type::RANGE,"192.168.3.1","192.168.1.5");
-            CPPUNIT_ASSERT_EQUAL(string("192.168.1.5-192.168.3.1"),i.to_string());
-        }
-        
-        void OverlapIP()
-        {
-            IP_RANGE a("192.168.1.5");
-            IP_RANGE b("192.168.1.5");
-            
-            CPPUNIT_ASSERT_EQUAL(true,a.overlapping(b));
-        }
-
-        void OverlapNet1()
-        {
-            IP_RANGE a("192.168.1.5/255.255.255.0");
-            IP_RANGE b("192.168.1.6");
-            
-            CPPUNIT_ASSERT_EQUAL(true,a.overlapping(b));
-        }
-
-        void OverlapNet2()
-        {
-            IP_RANGE a("192.168.1.5/255.255.255.0");
-            IP_RANGE b("192.168.1.44/255.255.255.248");
-            
-            CPPUNIT_ASSERT_EQUAL(true,a.overlapping(b));
-        }
-
-        void OverlapNet3()
-        {
-            IP_RANGE a("192.168.1.5/255.255.255.0");
-            IP_RANGE b("192.168.0.0/255.255.0.0");
-            
-            CPPUNIT_ASSERT_EQUAL(true,a.overlapping(b));
-        }
-
-        void OverlapNet4()
-        {
-            IP_RANGE a("192.169.1.5/255.255.255.0");
-            IP_RANGE b("192.168.0.0/255.255.0.0");
-            
-            CPPUNIT_ASSERT_EQUAL(false,a.overlapping(b));
-        }
-
-        void OverlapRange1()
-        {
-            IP_RANGE a("192.168.1.5-192.168.1.50");
-            IP_RANGE b("192.168.1.6");
-            
-            CPPUNIT_ASSERT_EQUAL(true,a.overlapping(b));
-        }
-
-        void OverlapRange2()
-        {
-            IP_RANGE a("192.168.1.5-192.168.1.50");
-            IP_RANGE b("192.168.1.0/255.255.255.128");
-            
-            CPPUNIT_ASSERT_EQUAL(true,a.overlapping(b));
-        }
-
-        void OverlapRange3()
-        {
-            IP_RANGE a("192.168.1.5-192.168.1.50");
-            IP_RANGE b("192.168.0.0/255.255.0.0");
-            
-            CPPUNIT_ASSERT_EQUAL(true,a.overlapping(b));
-        }
-
-        void OverlapRange4()
-        {
-            IP_RANGE a("192.168.1.5-192.168.1.50");
-            IP_RANGE b("192.168.1.1-192.168.1.5");
-            
-            CPPUNIT_ASSERT_EQUAL(true,a.overlapping(b));
-        }
-
-        void OverlapRange5()
-        {
-            IP_RANGE a("192.168.1.5-192.168.1.50");
-            IP_RANGE b("192.168.1.1-192.168.1.4");
-            
-            CPPUNIT_ASSERT_EQUAL(false,a.overlapping(b));
-        }
-
-        void OverlapRange6()
-        {
-            IP_RANGE a("192.168.1.5-192.168.1.50");
-            IP_RANGE b("192.168.1.1-192.168.2.4");
-            
-            CPPUNIT_ASSERT_EQUAL(true,a.overlapping(b));
-        }
-
-        void OverlapRange7()
-        {
-            IP_RANGE a("192.168.1.5-192.168.1.50");
-            IP_RANGE b("192.168.1.6-192.168.1.7");
-            
-            CPPUNIT_ASSERT_EQUAL(true,a.overlapping(b));
-        }
-
-        void WithinNet1()
-        {
-            IP_RANGE a("192.168.1.0/255.255.255.0");
-            IP_RANGE b("192.168.1.6");
-            
-            CPPUNIT_ASSERT_EQUAL(false,a.is_within(b));
-        }
-
-        void WithinNet2()
-        {
-            IP_RANGE a("192.168.1.6");
-            IP_RANGE b("192.168.1.0/255.255.255.0");
-            
-            CPPUNIT_ASSERT_EQUAL(true,a.is_within(b));
-        }
-
-        void WithinNet3()
-        {
-            IP_RANGE a("192.168.1.6/255.255.255.248");
-            IP_RANGE b("192.168.1.0/255.255.255.0");
-            
-            CPPUNIT_ASSERT_EQUAL(true,a.is_within(b));
-        }
-
-        void WithinNet4()
-        {
-            IP_RANGE a("192.168.0.0/255.255.0.0");
-            IP_RANGE b("192.168.1.0/255.255.255.0");
-            
-            CPPUNIT_ASSERT_EQUAL(false,a.is_within(b));
-        }
-
-        void WithinNet5()
-        {
-            IP_RANGE a("192.168.1.0/255.255.255.0");
-            IP_RANGE b("192.168.1.0/255.255.255.0");
-            
-            CPPUNIT_ASSERT_EQUAL(true,a.is_within(b));
-        }
-
-        void WithinNet6()
-        {
-            IP_RANGE a("192.168.1.0/255.255.255.0");
-            IP_RANGE b("192.168.1.0/255.255.255.128");
-            
-            CPPUNIT_ASSERT_EQUAL(false,a.is_within(b));
-        }
-
-        void WithinNet7()
-        {
-            IP_RANGE a("192.168.1.0/255.255.255.128");
-            IP_RANGE b("192.168.1.0/255.255.255.0");
-            
-            CPPUNIT_ASSERT_EQUAL(true,a.is_within(b));
-        }
-
-        void WithinRange1()
-        {
-            IP_RANGE a("192.168.1.0/255.255.255.0");
-            IP_RANGE b("192.168.1.0-192.168.1.255");
-            
-            CPPUNIT_ASSERT_EQUAL(true,a.is_within(b));
-        }
-
-        void WithinRange2()
-        {
-            IP_RANGE a("192.168.1.0");
-            IP_RANGE b("192.168.1.0-192.168.1.255");
-            
-            CPPUNIT_ASSERT_EQUAL(true,a.is_within(b));
-        }
-
-        void WithinRange3()
-        {
-            IP_RANGE a("192.168.1.1-192.168.1.1");
-            IP_RANGE b("192.168.1.0-192.168.1.255");
-            
-            CPPUNIT_ASSERT_EQUAL(true,a.is_within(b));
-        }
-
-        void WithinRange4()
-        {
-            IP_RANGE a("192.168.1.0-192.168.1.2");
-            IP_RANGE b("192.168.1.1-192.168.1.255");
-            
-            CPPUNIT_ASSERT_EQUAL(false,a.is_within(b));
-        }
-
-        void WithinRange5()
-        {
-            IP_RANGE a("192.168.1.199-192.168.1.202");
-            IP_RANGE b("192.168.1.1-192.168.1.200");
-            
-            CPPUNIT_ASSERT_EQUAL(false,a.is_within(b));
-        }
-
-        void WithinRange6()
-        {
-            IP_RANGE a("192.168.1.0-192.168.1.202");
-            IP_RANGE b("192.168.1.1-192.168.1.200");
-            
-            CPPUNIT_ASSERT_EQUAL(false,a.is_within(b));
-        }
-
-        void WithinRange7()
-        {
-            IP_RANGE a("192.168.1.0-192.168.1.202");
-            IP_RANGE b("192.168.1.0/255.255.255.0");
-            
-            CPPUNIT_ASSERT_EQUAL(true,a.is_within(b));
-        }
-
-        void WithinRange8()
-        {
-            IP_RANGE a("192.168.0.0-192.168.1.202");
-            IP_RANGE b("192.168.1.0/255.255.255.0");
-            
-            CPPUNIT_ASSERT_EQUAL(false,a.is_within(b));
-        }
-
-        void WithinRange9()
-        {
-            IP_RANGE a("192.168.0.0-192.168.2.202");
-            IP_RANGE b("192.168.1.0/255.255.255.0");
-            
-            CPPUNIT_ASSERT_EQUAL(false,a.is_within(b));
-        }
-
-        void WithinRange10()
-        {
-            IP_RANGE a("192.168.1.10-192.168.2.0");
-            IP_RANGE b("192.168.1.0/255.255.255.0");
-            
-            CPPUNIT_ASSERT_EQUAL(false,a.is_within(b));
-        }
-
-        void OperatorPlus1()
-        {
-            IP_RANGE a("192.168.2.0/255.255.255.0");
-            
-            a=a+256;
-            
-            CPPUNIT_ASSERT_EQUAL(string("192.168.3.0/255.255.255.0"),a.to_string());
-        }
-
-        void OperatorPlus2()
-        {
-            IP_RANGE a("192.168.2.0/255.255.255.0");
-            
-            a=a+13;
-            
-            CPPUNIT_ASSERT_EQUAL(string("192.168.2.13-192.168.3.12"),a.to_string());
-        }
-        
-        void OperatorPlusOverflow()
-        {
-            IP_RANGE a("255.255.255.0/255.255.255.0");
-            CPPUNIT_ASSERT_THROW(a=a+1, std::range_error);
-        }
-        
-        void OperatorMinus()
-        {
-            IP_RANGE a("192.168.2.0/255.255.255.0");
-            IP_RANGE b("192.168.1.0/255.255.255.0");
-            
-            CPPUNIT_ASSERT_EQUAL(256,a-b);
-        }
-
-        void NetmaskToBits1()
-        {
-            IP_RANGE a("255.255.255.255");
-            int bits = a.calc_netmask_bits(a.get_base());
-            CPPUNIT_ASSERT_EQUAL(32,bits);
-        }
-        
-        void NetmaskToBits2()
-        {
-            IP_RANGE a("255.255.255.0");
-            int bits = a.calc_netmask_bits(a.get_base());
-            CPPUNIT_ASSERT_EQUAL(24,bits);
-        }
-        
-        void NetmaskToBits3()
-        {
-            IP_RANGE a("255.255.0.0");
-            int bits = a.calc_netmask_bits(a.get_base());
-            CPPUNIT_ASSERT_EQUAL(16,bits);
-        }
-    
-        void NetmaskToBits4()
-        {
-            IP_RANGE a("255.0.0.0");
-            int bits = a.calc_netmask_bits(a.get_base());
-            CPPUNIT_ASSERT_EQUAL(8,bits);
-        }
-        void Range2Cidr1()
-        {
-            IP_RANGE range("192.168.1.100-192.168.1.227");
-            vector<IP_RANGE> cidrs = range.to_cidr();
-            
-            vector<IP_RANGE> check_cidrs;
-            check_cidrs.push_back("192.168.1.100/30");
-            check_cidrs.push_back("192.168.1.104/29");
-            check_cidrs.push_back("192.168.1.112/28");
-            check_cidrs.push_back("192.168.1.128/26");
-            check_cidrs.push_back("192.168.1.192/27");
-            check_cidrs.push_back("192.168.1.224/30");
-
-            CPPUNIT_ASSERT_EQUAL(check_cidrs,cidrs);
-        }
-
-        void Range2Cidr2()
-        {
-            IP_RANGE range("0.0.0.0-255.255.255.255");
-            vector<IP_RANGE> cidrs = range.to_cidr();
-            
-            vector<IP_RANGE> check_cidrs;
-            check_cidrs.push_back("0.0.0.0/0");
-
-            CPPUNIT_ASSERT_EQUAL(check_cidrs,cidrs);
-        }
-
-        void Range2Cidr3()
-        {
-            IP_RANGE range("192.168.1.3");
-            vector<IP_RANGE> cidrs = range.to_cidr();
-            
-            vector<IP_RANGE> check_cidrs;
-            check_cidrs.push_back("192.168.1.3/32");
-
-            CPPUNIT_ASSERT_EQUAL(check_cidrs,cidrs);
-        }
-
-        void Range2Cidr4()
-        {
-            IP_RANGE range("172.16.0.0/16");
-            vector<IP_RANGE> cidrs = range.to_cidr();
-            
-            vector<IP_RANGE> check_cidrs;
-            check_cidrs.push_back("172.16.0.0/16");
-
-            CPPUNIT_ASSERT_EQUAL(check_cidrs,cidrs);
-        }
-
-        void Range2Cidr5()
-        {
-            IP_RANGE range(ip_type::NETWORK, "172.16.0.0", "255.255.0.0");
-            vector<IP_RANGE> cidrs = range.to_cidr();
-            
-            vector<IP_RANGE> check_cidrs;
-            check_cidrs.push_back("172.16.0.0/16");
-
-            CPPUNIT_ASSERT_EQUAL(check_cidrs,cidrs);
-        }
-        void Range2Cidr6()
-        {
-            IP_RANGE range("192.168.1.0-192.168.2.0");
-            vector<IP_RANGE> cidrs = range.to_cidr();
-            
-            vector<IP_RANGE> check_cidrs;
-            check_cidrs.push_back("192.168.1.0/24");
-            check_cidrs.push_back("192.168.2.0/32");
-
-            CPPUNIT_ASSERT_EQUAL(check_cidrs,cidrs);
-        }
-
-        void Range2Cidr7()
-        {
-            IP_RANGE range("0.0.0.1-255.255.255.254");
-            vector<IP_RANGE> cidrs = range.to_cidr();
-            
-            vector<IP_RANGE> check_cidrs;
-            check_cidrs.push_back("0.0.0.1/32");
-            check_cidrs.push_back("0.0.0.2/31");
-            check_cidrs.push_back("0.0.0.4/30");
-            check_cidrs.push_back("0.0.0.8/29");
-            check_cidrs.push_back("0.0.0.16/28");
-            check_cidrs.push_back("0.0.0.32/27");
-            check_cidrs.push_back("0.0.0.64/26");
-            check_cidrs.push_back("0.0.0.128/25");
-            check_cidrs.push_back("0.0.1.0/24");
-            check_cidrs.push_back("0.0.2.0/23");
-            check_cidrs.push_back("0.0.4.0/22");
-            check_cidrs.push_back("0.0.8.0/21");
-            check_cidrs.push_back("0.0.16.0/20");
-            check_cidrs.push_back("0.0.32.0/19");
-            check_cidrs.push_back("0.0.64.0/18");
-            check_cidrs.push_back("0.0.128.0/17");
-            check_cidrs.push_back("0.1.0.0/16");
-            check_cidrs.push_back("0.2.0.0/15");
-            check_cidrs.push_back("0.4.0.0/14");
-            check_cidrs.push_back("0.8.0.0/13");
-            check_cidrs.push_back("0.16.0.0/12");
-            check_cidrs.push_back("0.32.0.0/11");
-            check_cidrs.push_back("0.64.0.0/10");
-            check_cidrs.push_back("0.128.0.0/9");
-            check_cidrs.push_back("1.0.0.0/8");
-            check_cidrs.push_back("2.0.0.0/7");
-            check_cidrs.push_back("4.0.0.0/6");
-            check_cidrs.push_back("8.0.0.0/5");
-            check_cidrs.push_back("16.0.0.0/4");
-            check_cidrs.push_back("32.0.0.0/3");
-            check_cidrs.push_back("64.0.0.0/2");
-            check_cidrs.push_back("128.0.0.0/2");
-            check_cidrs.push_back("192.0.0.0/3");
-            check_cidrs.push_back("224.0.0.0/4");
-            check_cidrs.push_back("240.0.0.0/5");
-            check_cidrs.push_back("248.0.0.0/6");
-            check_cidrs.push_back("252.0.0.0/7");
-            check_cidrs.push_back("254.0.0.0/8");
-            check_cidrs.push_back("255.0.0.0/9");
-            check_cidrs.push_back("255.128.0.0/10");
-            check_cidrs.push_back("255.192.0.0/11");
-            check_cidrs.push_back("255.224.0.0/12");
-            check_cidrs.push_back("255.240.0.0/13");
-            check_cidrs.push_back("255.248.0.0/14");
-            check_cidrs.push_back("255.252.0.0/15");
-            check_cidrs.push_back("255.254.0.0/16");
-            check_cidrs.push_back("255.255.0.0/17");
-            check_cidrs.push_back("255.255.128.0/18");
-            check_cidrs.push_back("255.255.192.0/19");
-            check_cidrs.push_back("255.255.224.0/20");
-            check_cidrs.push_back("255.255.240.0/21");
-            check_cidrs.push_back("255.255.248.0/22");
-            check_cidrs.push_back("255.255.252.0/23");
-            check_cidrs.push_back("255.255.254.0/24");
-            check_cidrs.push_back("255.255.255.0/25");
-            check_cidrs.push_back("255.255.255.128/26");
-            check_cidrs.push_back("255.255.255.192/27");
-            check_cidrs.push_back("255.255.255.224/28");
-            check_cidrs.push_back("255.255.255.240/29");
-            check_cidrs.push_back("255.255.255.248/30");
-            check_cidrs.push_back("255.255.255.252/31");
-            check_cidrs.push_back("255.255.255.254/32");
-
-            CPPUNIT_ASSERT_EQUAL(check_cidrs,cidrs);
-        }
-        
-        void Substract1()
-        {
-            IP_RANGE range("192.168.1.1-192.168.1.100");
-            set<IP_RANGE> to_sub;
-            to_sub.insert(IP_RANGE("192.168.1.3"));
-            
-            vector<IP_RANGE> new_range = range.substract(to_sub);
-            
-            vector<IP_RANGE> check_range;
-            check_range.push_back("192.168.1.1-192.168.1.2");
-            check_range.push_back("192.168.1.4-192.168.1.100");
-            
-            CPPUNIT_ASSERT_EQUAL(check_range,new_range);
-        }
-
-        void Substract2()
-        {
-            IP_RANGE range("192.168.1.1-192.168.1.100");
-            set<IP_RANGE> to_sub;
-            to_sub.insert(IP_RANGE("192.168.1.1"));
-            
-            vector<IP_RANGE> new_range = range.substract(to_sub);
-            
-            vector<IP_RANGE> check_range;
-            check_range.push_back("192.168.1.2-192.168.1.100");
-            
-            CPPUNIT_ASSERT_EQUAL(check_range,new_range);
-        }
-
-        void Substract3()
-        {
-            IP_RANGE range("192.168.1.1-192.168.1.100");
-            set<IP_RANGE> to_sub;
-            to_sub.insert(IP_RANGE("192.168.1.1"));
-            to_sub.insert(IP_RANGE("192.168.1.61"));
-            to_sub.insert(IP_RANGE("192.168.1.50-192.168.1.60"));
-            
-            vector<IP_RANGE> new_range = range.substract(to_sub);
-            
-            vector<IP_RANGE> check_range;
-            check_range.push_back("192.168.1.2-192.168.1.49");
-            check_range.push_back("192.168.1.62-192.168.1.100");
-            
-            CPPUNIT_ASSERT_EQUAL(check_range,new_range);
-        }
-
-        void Substract4()
-        {
-            IP_RANGE range("192.168.1.1-192.168.1.100");
-            set<IP_RANGE> to_sub;
-            to_sub.insert(IP_RANGE("192.168.1.50-192.168.1.100"));
-            
-            vector<IP_RANGE> new_range = range.substract(to_sub);
-            
-            vector<IP_RANGE> check_range;
-            check_range.push_back("192.168.1.1-192.168.1.49");
-            
-            CPPUNIT_ASSERT_EQUAL(check_range,new_range);
-        }
-
-        void Substract5()
-        {
-            IP_RANGE range("192.168.1.1-192.168.1.100");
-            set<IP_RANGE> to_sub;
-            to_sub.insert(IP_RANGE("192.168.1.50-192.168.1.99"));
-            
-            vector<IP_RANGE> new_range = range.substract(to_sub);
-            
-            vector<IP_RANGE> check_range;
-            check_range.push_back("192.168.1.1-192.168.1.49");
-            check_range.push_back("192.168.1.100-192.168.1.100");
-            
-            CPPUNIT_ASSERT_EQUAL(check_range,new_range);
-        }
-
-        void Substract6()
-        {
-            IP_RANGE range("192.168.1.1-192.168.1.100");
-            set<IP_RANGE> to_sub;
-            to_sub.insert(IP_RANGE("192.168.1.2-192.168.1.100"));
-            
-            vector<IP_RANGE> new_range = range.substract(to_sub);
-            
-            vector<IP_RANGE> check_range;
-            check_range.push_back("192.168.1.1");
-            
-            CPPUNIT_ASSERT_EQUAL(check_range,new_range);
-        }
-
-        void Substract7()
-        {
-            IP_RANGE range("192.168.1.1-192.168.1.100");
-            set<IP_RANGE> to_sub;
-            to_sub.insert(IP_RANGE("192.168.1.1-192.168.1.100"));
-            to_sub.insert(IP_RANGE("192.168.1.50-192.168.1.61"));
-            to_sub.insert(IP_RANGE("192.168.1.61"));
-            to_sub.insert(IP_RANGE("192.168.1.62"));
-            to_sub.insert(IP_RANGE("192.168.1.63"));
-            
-            vector<IP_RANGE> new_range = range.substract(to_sub);
-            
-            vector<IP_RANGE> check_range;
-            
-            CPPUNIT_ASSERT_EQUAL(check_range,new_range);
-        }
-        
-        void Substract8()
-        {
-            IP_RANGE range("192.168.1.1-192.168.1.100");
-            set<IP_RANGE> to_sub;
-            to_sub.insert(IP_RANGE("192.168.1.10-192.168.1.20"));
-            to_sub.insert(IP_RANGE("192.168.1.11-192.168.1.30"));
-            to_sub.insert(IP_RANGE("192.168.1.1-192.168.1.3"));
-            to_sub.insert(IP_RANGE("192.168.1.8"));
-            to_sub.insert(IP_RANGE("192.168.1.9"));
-            
-            vector<IP_RANGE> new_range = range.substract(to_sub);
-            
-            vector<IP_RANGE> check_range;
-            check_range.push_back("192.168.1.4-192.168.1.7");
-            check_range.push_back("192.168.1.31-192.168.1.100");
-            
-            CPPUNIT_ASSERT_EQUAL(check_range,new_range);
-        }
-
-        void Substract9()
-        {
-            IP_RANGE range("192.168.1.1-192.168.1.100");
-            set<IP_RANGE> to_sub;
-            to_sub.insert(IP_RANGE("192.168.1.9-192.168.1.15"));
-            to_sub.insert(IP_RANGE("192.168.1.10-192.168.1.20"));
-            
-            vector<IP_RANGE> new_range = range.substract(to_sub);
-            
-            vector<IP_RANGE> check_range;
-            check_range.push_back("192.168.1.1-192.168.1.8");
-            check_range.push_back("192.168.1.21-192.168.1.100");
-            
-            CPPUNIT_ASSERT_EQUAL(check_range,new_range);
-        }
-
-        void Substract10()
-        {
-            IP_RANGE range("192.168.1.1-192.168.1.2");
-            set<IP_RANGE> to_sub;
-            to_sub.insert(IP_RANGE("192.168.1.1"));
-            
-            vector<IP_RANGE> new_range = range.substract(to_sub);
-            
-            vector<IP_RANGE> check_range;
-            check_range.push_back("192.168.1.2");
-            
-            CPPUNIT_ASSERT_EQUAL(check_range,new_range);
-        }
-
-        void Substract11()
-        {
-            IP_RANGE range("192.168.1.1-192.168.1.2");
-            set<IP_RANGE> to_sub;
-            to_sub.insert(IP_RANGE("192.168.1.2"));
-            
-            vector<IP_RANGE> new_range = range.substract(to_sub);
-            
-            vector<IP_RANGE> check_range;
-            check_range.push_back("192.168.1.1");
-            
-            CPPUNIT_ASSERT_EQUAL(check_range,new_range);
-        }
-
-        void Substract12()
-        {
-            IP_RANGE range("192.168.1.1");
-            set<IP_RANGE> to_sub;
-            to_sub.insert(IP_RANGE("192.168.1.1"));
-            
-            vector<IP_RANGE> new_range = range.substract(to_sub);
-            
-            vector<IP_RANGE> check_range;
-            
-            CPPUNIT_ASSERT_EQUAL(check_range,new_range);
-        }
-
-        void Substract13()
-        {
-            IP_RANGE range("192.168.1.1");
-            
-            set<IP_RANGE> to_sub;
-            vector<IP_RANGE> new_range = range.substract(to_sub);
-            
-            vector<IP_RANGE> check_range;
-            check_range.push_back("192.168.1.1");
-            
-            CPPUNIT_ASSERT_EQUAL(check_range,new_range);
-        }
-
-        void Substract14()
-        {
-            IP_RANGE range("192.168.1.1-192.168.1.100");
-            set<IP_RANGE> to_sub;
-            
-            vector<IP_RANGE> new_range = range.substract(to_sub);
-            
-            vector<IP_RANGE> check_range;
-            check_range.push_back("192.168.1.1-192.168.1.100");
-            
-            CPPUNIT_ASSERT_EQUAL(check_range,new_range);
-        }
-
-        void Substract15()
-        {
-            IP_RANGE range("192.168.1.1-192.168.1.100");
-            set<IP_RANGE> to_sub;
-            to_sub.insert(IP_RANGE("192.168.1.1-192.168.1.60"));
-            to_sub.insert(IP_RANGE("192.168.1.62-192.168.1.100"));
-            
-            vector<IP_RANGE> new_range = range.substract(to_sub);
-            
-            vector<IP_RANGE> check_range;
-            check_range.push_back("192.168.1.61");
-            
-            CPPUNIT_ASSERT_EQUAL(check_range,new_range);
-        }
-        
-        void IpNumString1()
-        {
-            IP_RANGE myip("192.168.1.50");
-            string expected("192168001050");
-            
-            CPPUNIT_ASSERT_EQUAL(expected,IP_RANGE::ip_num_string(myip.get_base()));
-        }
-
-        void IpNumString2()
-        {
-            IP_RANGE myip("0.0.0.0");
-            string expected("000000000000");
-            
-            CPPUNIT_ASSERT_EQUAL(expected,IP_RANGE::ip_num_string(myip.get_base()));
-        }
-        
-        void IpNumString3()
-        {
-            IP_RANGE myip("255.255.255.255");
-            string expected("255255255255");
-            
-            CPPUNIT_ASSERT_EQUAL(expected,IP_RANGE::ip_num_string(myip.get_base()));
-        }
-
-};
-
-CPPUNIT_TEST_SUITE_REGISTRATION(ip_range);
+
+BOOST_AUTO_TEST_SUITE(ip_range)
+
+BOOST_AUTO_TEST_CASE(ConstructIP1)
+{
+    IP_RANGE i("192.168.1.1");
+    BOOST_CHECK_EQUAL(string("192.168.1.1"),i.to_string());
+}
+
+BOOST_AUTO_TEST_CASE(ConstructIP2)
+{
+    IP_RANGE i(ip_type::IP,"192.168.1.1");
+    BOOST_CHECK_EQUAL(string("192.168.1.1"),i.to_string());
+}
+
+BOOST_AUTO_TEST_CASE(ConstructNet1)
+{
+    IP_RANGE i("192.168.1.1/255.255.255.0");
+    BOOST_CHECK_EQUAL(string("192.168.1.0/255.255.255.0"),i.to_string());
+}
+
+BOOST_AUTO_TEST_CASE(ConstructNet2)
+{
+    IP_RANGE i(ip_type::NETWORK,"192.168.1.1","255.255.255.0");
+    BOOST_CHECK_EQUAL(string("192.168.1.0/255.255.255.0"),i.to_string());
+}
+
+BOOST_AUTO_TEST_CASE(ConstructNet3)
+{
+    IP_RANGE i("172.16.0.0/16");
+    BOOST_CHECK_EQUAL(string("172.16.0.0/255.255.0.0"),i.to_string());
+}
+
+BOOST_AUTO_TEST_CASE(ConstructRange1)
+{
+    IP_RANGE i("192.168.1.5-192.168.3.1");
+    BOOST_CHECK_EQUAL(string("192.168.1.5-192.168.3.1"),i.to_string());
+}
+
+BOOST_AUTO_TEST_CASE(ConstructRange2)
+{
+    IP_RANGE i(ip_type::RANGE,"192.168.1.5","192.168.3.1");
+    BOOST_CHECK_EQUAL(string("192.168.1.5-192.168.3.1"),i.to_string());
+}
+
+BOOST_AUTO_TEST_CASE(ConstructRangeSwap)
+{
+    IP_RANGE i(ip_type::RANGE,"192.168.3.1","192.168.1.5");
+    BOOST_CHECK_EQUAL(string("192.168.1.5-192.168.3.1"),i.to_string());
+}
+
+BOOST_AUTO_TEST_CASE(OverlapIP)
+{
+    IP_RANGE a("192.168.1.5");
+    IP_RANGE b("192.168.1.5");
+
+    BOOST_CHECK_EQUAL(true,a.overlapping(b));
+}
+
+BOOST_AUTO_TEST_CASE(OverlapNet1)
+{
+    IP_RANGE a("192.168.1.5/255.255.255.0");
+    IP_RANGE b("192.168.1.6");
+
+    BOOST_CHECK_EQUAL(true,a.overlapping(b));
+}
+
+BOOST_AUTO_TEST_CASE(OverlapNet2)
+{
+    IP_RANGE a("192.168.1.5/255.255.255.0");
+    IP_RANGE b("192.168.1.44/255.255.255.248");
+
+    BOOST_CHECK_EQUAL(true,a.overlapping(b));
+}
+
+BOOST_AUTO_TEST_CASE(OverlapNet3)
+{
+    IP_RANGE a("192.168.1.5/255.255.255.0");
+    IP_RANGE b("192.168.0.0/255.255.0.0");
+
+    BOOST_CHECK_EQUAL(true,a.overlapping(b));
+}
+
+BOOST_AUTO_TEST_CASE(OverlapNet4)
+{
+    IP_RANGE a("192.169.1.5/255.255.255.0");
+    IP_RANGE b("192.168.0.0/255.255.0.0");
+
+    BOOST_CHECK_EQUAL(false,a.overlapping(b));
+}
+
+BOOST_AUTO_TEST_CASE(OverlapRange1)
+{
+    IP_RANGE a("192.168.1.5-192.168.1.50");
+    IP_RANGE b("192.168.1.6");
+
+    BOOST_CHECK_EQUAL(true,a.overlapping(b));
+}
+
+BOOST_AUTO_TEST_CASE(OverlapRange2)
+{
+    IP_RANGE a("192.168.1.5-192.168.1.50");
+    IP_RANGE b("192.168.1.0/255.255.255.128");
+
+    BOOST_CHECK_EQUAL(true,a.overlapping(b));
+}
+
+BOOST_AUTO_TEST_CASE(OverlapRange3)
+{
+    IP_RANGE a("192.168.1.5-192.168.1.50");
+    IP_RANGE b("192.168.0.0/255.255.0.0");
+
+    BOOST_CHECK_EQUAL(true,a.overlapping(b));
+}
+
+BOOST_AUTO_TEST_CASE(OverlapRange4)
+{
+    IP_RANGE a("192.168.1.5-192.168.1.50");
+    IP_RANGE b("192.168.1.1-192.168.1.5");
+
+    BOOST_CHECK_EQUAL(true,a.overlapping(b));
+}
+
+BOOST_AUTO_TEST_CASE(OverlapRange5)
+{
+    IP_RANGE a("192.168.1.5-192.168.1.50");
+    IP_RANGE b("192.168.1.1-192.168.1.4");
+
+    BOOST_CHECK_EQUAL(false,a.overlapping(b));
+}
+
+BOOST_AUTO_TEST_CASE(OverlapRange6)
+{
+    IP_RANGE a("192.168.1.5-192.168.1.50");
+    IP_RANGE b("192.168.1.1-192.168.2.4");
+
+    BOOST_CHECK_EQUAL(true,a.overlapping(b));
+}
+
+BOOST_AUTO_TEST_CASE(OverlapRange7)
+{
+    IP_RANGE a("192.168.1.5-192.168.1.50");
+    IP_RANGE b("192.168.1.6-192.168.1.7");
+
+    BOOST_CHECK_EQUAL(true,a.overlapping(b));
+}
+
+BOOST_AUTO_TEST_CASE(WithinNet1)
+{
+    IP_RANGE a("192.168.1.0/255.255.255.0");
+    IP_RANGE b("192.168.1.6");
+
+    BOOST_CHECK_EQUAL(false,a.is_within(b));
+}
+
+BOOST_AUTO_TEST_CASE(WithinNet2)
+{
+    IP_RANGE a("192.168.1.6");
+    IP_RANGE b("192.168.1.0/255.255.255.0");
+
+    BOOST_CHECK_EQUAL(true,a.is_within(b));
+}
+
+BOOST_AUTO_TEST_CASE(WithinNet3)
+{
+    IP_RANGE a("192.168.1.6/255.255.255.248");
+    IP_RANGE b("192.168.1.0/255.255.255.0");
+
+    BOOST_CHECK_EQUAL(true,a.is_within(b));
+}
+
+BOOST_AUTO_TEST_CASE(WithinNet4)
+{
+    IP_RANGE a("192.168.0.0/255.255.0.0");
+    IP_RANGE b("192.168.1.0/255.255.255.0");
+
+    BOOST_CHECK_EQUAL(false,a.is_within(b));
+}
+
+BOOST_AUTO_TEST_CASE(WithinNet5)
+{
+    IP_RANGE a("192.168.1.0/255.255.255.0");
+    IP_RANGE b("192.168.1.0/255.255.255.0");
+
+    BOOST_CHECK_EQUAL(true,a.is_within(b));
+}
+
+BOOST_AUTO_TEST_CASE(WithinNet6)
+{
+    IP_RANGE a("192.168.1.0/255.255.255.0");
+    IP_RANGE b("192.168.1.0/255.255.255.128");
+
+    BOOST_CHECK_EQUAL(false,a.is_within(b));
+}
+
+BOOST_AUTO_TEST_CASE(WithinNet7)
+{
+    IP_RANGE a("192.168.1.0/255.255.255.128");
+    IP_RANGE b("192.168.1.0/255.255.255.0");
+
+    BOOST_CHECK_EQUAL(true,a.is_within(b));
+}
+
+BOOST_AUTO_TEST_CASE(WithinRange1)
+{
+    IP_RANGE a("192.168.1.0/255.255.255.0");
+    IP_RANGE b("192.168.1.0-192.168.1.255");
+
+    BOOST_CHECK_EQUAL(true,a.is_within(b));
+}
+
+BOOST_AUTO_TEST_CASE(WithinRange2)
+{
+    IP_RANGE a("192.168.1.0");
+    IP_RANGE b("192.168.1.0-192.168.1.255");
+
+    BOOST_CHECK_EQUAL(true,a.is_within(b));
+}
+
+BOOST_AUTO_TEST_CASE(WithinRange3)
+{
+    IP_RANGE a("192.168.1.1-192.168.1.1");
+    IP_RANGE b("192.168.1.0-192.168.1.255");
+
+    BOOST_CHECK_EQUAL(true,a.is_within(b));
+}
+
+BOOST_AUTO_TEST_CASE(WithinRange4)
+{
+    IP_RANGE a("192.168.1.0-192.168.1.2");
+    IP_RANGE b("192.168.1.1-192.168.1.255");
+
+    BOOST_CHECK_EQUAL(false,a.is_within(b));
+}
+
+BOOST_AUTO_TEST_CASE(WithinRange5)
+{
+    IP_RANGE a("192.168.1.199-192.168.1.202");
+    IP_RANGE b("192.168.1.1-192.168.1.200");
+
+    BOOST_CHECK_EQUAL(false,a.is_within(b));
+}
+
+BOOST_AUTO_TEST_CASE(WithinRange6)
+{
+    IP_RANGE a("192.168.1.0-192.168.1.202");
+    IP_RANGE b("192.168.1.1-192.168.1.200");
+
+    BOOST_CHECK_EQUAL(false,a.is_within(b));
+}
+
+BOOST_AUTO_TEST_CASE(WithinRange7)
+{
+    IP_RANGE a("192.168.1.0-192.168.1.202");
+    IP_RANGE b("192.168.1.0/255.255.255.0");
+
+    BOOST_CHECK_EQUAL(true,a.is_within(b));
+}
+
+BOOST_AUTO_TEST_CASE(WithinRange8)
+{
+    IP_RANGE a("192.168.0.0-192.168.1.202");
+    IP_RANGE b("192.168.1.0/255.255.255.0");
+
+    BOOST_CHECK_EQUAL(false,a.is_within(b));
+}
+
+BOOST_AUTO_TEST_CASE(WithinRange9)
+{
+    IP_RANGE a("192.168.0.0-192.168.2.202");
+    IP_RANGE b("192.168.1.0/255.255.255.0");
+
+    BOOST_CHECK_EQUAL(false,a.is_within(b));
+}
+
+BOOST_AUTO_TEST_CASE(WithinRange10)
+{
+    IP_RANGE a("192.168.1.10-192.168.2.0");
+    IP_RANGE b("192.168.1.0/255.255.255.0");
+
+    BOOST_CHECK_EQUAL(false,a.is_within(b));
+}
+
+BOOST_AUTO_TEST_CASE(OperatorPlus1)
+{
+    IP_RANGE a("192.168.2.0/255.255.255.0");
+
+    a=a+256;
+
+    BOOST_CHECK_EQUAL(string("192.168.3.0/255.255.255.0"),a.to_string());
+}
+
+BOOST_AUTO_TEST_CASE(OperatorPlus2)
+{
+    IP_RANGE a("192.168.2.0/255.255.255.0");
+
+    a=a+13;
+
+    BOOST_CHECK_EQUAL(string("192.168.2.13-192.168.3.12"),a.to_string());
+}
+
+BOOST_AUTO_TEST_CASE(OperatorPlusOverflow)
+{
+    IP_RANGE a("255.255.255.0/255.255.255.0");
+    BOOST_REQUIRE_THROW(a=a+1, std::range_error);
+}
+
+BOOST_AUTO_TEST_CASE(OperatorMinus)
+{
+    IP_RANGE a("192.168.2.0/255.255.255.0");
+    IP_RANGE b("192.168.1.0/255.255.255.0");
+
+    BOOST_CHECK_EQUAL(256,a-b);
+}
+
+BOOST_AUTO_TEST_CASE(NetmaskToBits1)
+{
+    IP_RANGE a("255.255.255.255");
+    int bits = a.calc_netmask_bits(a.get_base());
+    BOOST_CHECK_EQUAL(32,bits);
+}
+
+BOOST_AUTO_TEST_CASE(NetmaskToBits2)
+{
+    IP_RANGE a("255.255.255.0");
+    int bits = a.calc_netmask_bits(a.get_base());
+    BOOST_CHECK_EQUAL(24,bits);
+}
+
+BOOST_AUTO_TEST_CASE(NetmaskToBits3)
+{
+    IP_RANGE a("255.255.0.0");
+    int bits = a.calc_netmask_bits(a.get_base());
+    BOOST_CHECK_EQUAL(16,bits);
+}
+
+BOOST_AUTO_TEST_CASE(NetmaskToBits4)
+{
+    IP_RANGE a("255.0.0.0");
+    int bits = a.calc_netmask_bits(a.get_base());
+    BOOST_CHECK_EQUAL(8,bits);
+}
+BOOST_AUTO_TEST_CASE(Range2Cidr1)
+{
+    IP_RANGE range("192.168.1.100-192.168.1.227");
+    vector<IP_RANGE> cidrs = range.to_cidr();
+
+    vector<IP_RANGE> check_cidrs;
+    check_cidrs.push_back("192.168.1.100/30");
+    check_cidrs.push_back("192.168.1.104/29");
+    check_cidrs.push_back("192.168.1.112/28");
+    check_cidrs.push_back("192.168.1.128/26");
+    check_cidrs.push_back("192.168.1.192/27");
+    check_cidrs.push_back("192.168.1.224/30");
+
+    BOOST_CHECK_EQUAL(check_cidrs,cidrs);
+}
+
+BOOST_AUTO_TEST_CASE(Range2Cidr2)
+{
+    IP_RANGE range("0.0.0.0-255.255.255.255");
+    vector<IP_RANGE> cidrs = range.to_cidr();
+
+    vector<IP_RANGE> check_cidrs;
+    check_cidrs.push_back("0.0.0.0/0");
+
+    BOOST_CHECK_EQUAL(check_cidrs,cidrs);
+}
+
+BOOST_AUTO_TEST_CASE(Range2Cidr3)
+{
+    IP_RANGE range("192.168.1.3");
+    vector<IP_RANGE> cidrs = range.to_cidr();
+
+    vector<IP_RANGE> check_cidrs;
+    check_cidrs.push_back("192.168.1.3/32");
+
+    BOOST_CHECK_EQUAL(check_cidrs,cidrs);
+}
+
+BOOST_AUTO_TEST_CASE(Range2Cidr4)
+{
+    IP_RANGE range("172.16.0.0/16");
+    vector<IP_RANGE> cidrs = range.to_cidr();
+
+    vector<IP_RANGE> check_cidrs;
+    check_cidrs.push_back("172.16.0.0/16");
+
+    BOOST_CHECK_EQUAL(check_cidrs,cidrs);
+}
+
+BOOST_AUTO_TEST_CASE(Range2Cidr5)
+{
+    IP_RANGE range(ip_type::NETWORK, "172.16.0.0", "255.255.0.0");
+    vector<IP_RANGE> cidrs = range.to_cidr();
+
+    vector<IP_RANGE> check_cidrs;
+    check_cidrs.push_back("172.16.0.0/16");
+
+    BOOST_CHECK_EQUAL(check_cidrs,cidrs);
+}
+BOOST_AUTO_TEST_CASE(Range2Cidr6)
+{
+    IP_RANGE range("192.168.1.0-192.168.2.0");
+    vector<IP_RANGE> cidrs = range.to_cidr();
+
+    vector<IP_RANGE> check_cidrs;
+    check_cidrs.push_back("192.168.1.0/24");
+    check_cidrs.push_back("192.168.2.0/32");
+
+    BOOST_CHECK_EQUAL(check_cidrs,cidrs);
+}
+
+BOOST_AUTO_TEST_CASE(Range2Cidr7)
+{
+    IP_RANGE range("0.0.0.1-255.255.255.254");
+    vector<IP_RANGE> cidrs = range.to_cidr();
+
+    vector<IP_RANGE> check_cidrs;
+    check_cidrs.push_back("0.0.0.1/32");
+    check_cidrs.push_back("0.0.0.2/31");
+    check_cidrs.push_back("0.0.0.4/30");
+    check_cidrs.push_back("0.0.0.8/29");
+    check_cidrs.push_back("0.0.0.16/28");
+    check_cidrs.push_back("0.0.0.32/27");
+    check_cidrs.push_back("0.0.0.64/26");
+    check_cidrs.push_back("0.0.0.128/25");
+    check_cidrs.push_back("0.0.1.0/24");
+    check_cidrs.push_back("0.0.2.0/23");
+    check_cidrs.push_back("0.0.4.0/22");
+    check_cidrs.push_back("0.0.8.0/21");
+    check_cidrs.push_back("0.0.16.0/20");
+    check_cidrs.push_back("0.0.32.0/19");
+    check_cidrs.push_back("0.0.64.0/18");
+    check_cidrs.push_back("0.0.128.0/17");
+    check_cidrs.push_back("0.1.0.0/16");
+    check_cidrs.push_back("0.2.0.0/15");
+    check_cidrs.push_back("0.4.0.0/14");
+    check_cidrs.push_back("0.8.0.0/13");
+    check_cidrs.push_back("0.16.0.0/12");
+    check_cidrs.push_back("0.32.0.0/11");
+    check_cidrs.push_back("0.64.0.0/10");
+    check_cidrs.push_back("0.128.0.0/9");
+    check_cidrs.push_back("1.0.0.0/8");
+    check_cidrs.push_back("2.0.0.0/7");
+    check_cidrs.push_back("4.0.0.0/6");
+    check_cidrs.push_back("8.0.0.0/5");
+    check_cidrs.push_back("16.0.0.0/4");
+    check_cidrs.push_back("32.0.0.0/3");
+    check_cidrs.push_back("64.0.0.0/2");
+    check_cidrs.push_back("128.0.0.0/2");
+    check_cidrs.push_back("192.0.0.0/3");
+    check_cidrs.push_back("224.0.0.0/4");
+    check_cidrs.push_back("240.0.0.0/5");
+    check_cidrs.push_back("248.0.0.0/6");
+    check_cidrs.push_back("252.0.0.0/7");
+    check_cidrs.push_back("254.0.0.0/8");
+    check_cidrs.push_back("255.0.0.0/9");
+    check_cidrs.push_back("255.128.0.0/10");
+    check_cidrs.push_back("255.192.0.0/11");
+    check_cidrs.push_back("255.224.0.0/12");
+    check_cidrs.push_back("255.240.0.0/13");
+    check_cidrs.push_back("255.248.0.0/14");
+    check_cidrs.push_back("255.252.0.0/15");
+    check_cidrs.push_back("255.254.0.0/16");
+    check_cidrs.push_back("255.255.0.0/17");
+    check_cidrs.push_back("255.255.128.0/18");
+    check_cidrs.push_back("255.255.192.0/19");
+    check_cidrs.push_back("255.255.224.0/20");
+    check_cidrs.push_back("255.255.240.0/21");
+    check_cidrs.push_back("255.255.248.0/22");
+    check_cidrs.push_back("255.255.252.0/23");
+    check_cidrs.push_back("255.255.254.0/24");
+    check_cidrs.push_back("255.255.255.0/25");
+    check_cidrs.push_back("255.255.255.128/26");
+    check_cidrs.push_back("255.255.255.192/27");
+    check_cidrs.push_back("255.255.255.224/28");
+    check_cidrs.push_back("255.255.255.240/29");
+    check_cidrs.push_back("255.255.255.248/30");
+    check_cidrs.push_back("255.255.255.252/31");
+    check_cidrs.push_back("255.255.255.254/32");
+
+    BOOST_CHECK_EQUAL(check_cidrs,cidrs);
+}
+
+BOOST_AUTO_TEST_CASE(Substract1)
+{
+    IP_RANGE range("192.168.1.1-192.168.1.100");
+    set<IP_RANGE> to_sub;
+    to_sub.insert(IP_RANGE("192.168.1.3"));
+
+    vector<IP_RANGE> new_range = range.substract(to_sub);
+
+    vector<IP_RANGE> check_range;
+    check_range.push_back("192.168.1.1-192.168.1.2");
+    check_range.push_back("192.168.1.4-192.168.1.100");
+
+    BOOST_CHECK_EQUAL(check_range,new_range);
+}
+
+BOOST_AUTO_TEST_CASE(Substract2)
+{
+    IP_RANGE range("192.168.1.1-192.168.1.100");
+    set<IP_RANGE> to_sub;
+    to_sub.insert(IP_RANGE("192.168.1.1"));
+
+    vector<IP_RANGE> new_range = range.substract(to_sub);
+
+    vector<IP_RANGE> check_range;
+    check_range.push_back("192.168.1.2-192.168.1.100");
+
+    BOOST_CHECK_EQUAL(check_range,new_range);
+}
+
+BOOST_AUTO_TEST_CASE(Substract3)
+{
+    IP_RANGE range("192.168.1.1-192.168.1.100");
+    set<IP_RANGE> to_sub;
+    to_sub.insert(IP_RANGE("192.168.1.1"));
+    to_sub.insert(IP_RANGE("192.168.1.61"));
+    to_sub.insert(IP_RANGE("192.168.1.50-192.168.1.60"));
+
+    vector<IP_RANGE> new_range = range.substract(to_sub);
+
+    vector<IP_RANGE> check_range;
+    check_range.push_back("192.168.1.2-192.168.1.49");
+    check_range.push_back("192.168.1.62-192.168.1.100");
+
+    BOOST_CHECK_EQUAL(check_range,new_range);
+}
+
+BOOST_AUTO_TEST_CASE(Substract4)
+{
+    IP_RANGE range("192.168.1.1-192.168.1.100");
+    set<IP_RANGE> to_sub;
+    to_sub.insert(IP_RANGE("192.168.1.50-192.168.1.100"));
+
+    vector<IP_RANGE> new_range = range.substract(to_sub);
+
+    vector<IP_RANGE> check_range;
+    check_range.push_back("192.168.1.1-192.168.1.49");
+
+    BOOST_CHECK_EQUAL(check_range,new_range);
+}
+
+BOOST_AUTO_TEST_CASE(Substract5)
+{
+    IP_RANGE range("192.168.1.1-192.168.1.100");
+    set<IP_RANGE> to_sub;
+    to_sub.insert(IP_RANGE("192.168.1.50-192.168.1.99"));
+
+    vector<IP_RANGE> new_range = range.substract(to_sub);
+
+    vector<IP_RANGE> check_range;
+    check_range.push_back("192.168.1.1-192.168.1.49");
+    check_range.push_back("192.168.1.100-192.168.1.100");
+
+    BOOST_CHECK_EQUAL(check_range,new_range);
+}
+
+BOOST_AUTO_TEST_CASE(Substract6)
+{
+    IP_RANGE range("192.168.1.1-192.168.1.100");
+    set<IP_RANGE> to_sub;
+    to_sub.insert(IP_RANGE("192.168.1.2-192.168.1.100"));
+
+    vector<IP_RANGE> new_range = range.substract(to_sub);
+
+    vector<IP_RANGE> check_range;
+    check_range.push_back("192.168.1.1");
+
+    BOOST_CHECK_EQUAL(check_range,new_range);
+}
+
+BOOST_AUTO_TEST_CASE(Substract7)
+{
+    IP_RANGE range("192.168.1.1-192.168.1.100");
+    set<IP_RANGE> to_sub;
+    to_sub.insert(IP_RANGE("192.168.1.1-192.168.1.100"));
+    to_sub.insert(IP_RANGE("192.168.1.50-192.168.1.61"));
+    to_sub.insert(IP_RANGE("192.168.1.61"));
+    to_sub.insert(IP_RANGE("192.168.1.62"));
+    to_sub.insert(IP_RANGE("192.168.1.63"));
+
+    vector<IP_RANGE> new_range = range.substract(to_sub);
+
+    vector<IP_RANGE> check_range;
+
+    BOOST_CHECK_EQUAL(check_range,new_range);
+}
+
+BOOST_AUTO_TEST_CASE(Substract8)
+{
+    IP_RANGE range("192.168.1.1-192.168.1.100");
+    set<IP_RANGE> to_sub;
+    to_sub.insert(IP_RANGE("192.168.1.10-192.168.1.20"));
+    to_sub.insert(IP_RANGE("192.168.1.11-192.168.1.30"));
+    to_sub.insert(IP_RANGE("192.168.1.1-192.168.1.3"));
+    to_sub.insert(IP_RANGE("192.168.1.8"));
+    to_sub.insert(IP_RANGE("192.168.1.9"));
+
+    vector<IP_RANGE> new_range = range.substract(to_sub);
+
+    vector<IP_RANGE> check_range;
+    check_range.push_back("192.168.1.4-192.168.1.7");
+    check_range.push_back("192.168.1.31-192.168.1.100");
+
+    BOOST_CHECK_EQUAL(check_range,new_range);
+}
+
+BOOST_AUTO_TEST_CASE(Substract9)
+{
+    IP_RANGE range("192.168.1.1-192.168.1.100");
+    set<IP_RANGE> to_sub;
+    to_sub.insert(IP_RANGE("192.168.1.9-192.168.1.15"));
+    to_sub.insert(IP_RANGE("192.168.1.10-192.168.1.20"));
+
+    vector<IP_RANGE> new_range = range.substract(to_sub);
+
+    vector<IP_RANGE> check_range;
+    check_range.push_back("192.168.1.1-192.168.1.8");
+    check_range.push_back("192.168.1.21-192.168.1.100");
+
+    BOOST_CHECK_EQUAL(check_range,new_range);
+}
+
+BOOST_AUTO_TEST_CASE(Substract10)
+{
+    IP_RANGE range("192.168.1.1-192.168.1.2");
+    set<IP_RANGE> to_sub;
+    to_sub.insert(IP_RANGE("192.168.1.1"));
+
+    vector<IP_RANGE> new_range = range.substract(to_sub);
+
+    vector<IP_RANGE> check_range;
+    check_range.push_back("192.168.1.2");
+
+    BOOST_CHECK_EQUAL(check_range,new_range);
+}
+
+BOOST_AUTO_TEST_CASE(Substract11)
+{
+    IP_RANGE range("192.168.1.1-192.168.1.2");
+    set<IP_RANGE> to_sub;
+    to_sub.insert(IP_RANGE("192.168.1.2"));
+
+    vector<IP_RANGE> new_range = range.substract(to_sub);
+
+    vector<IP_RANGE> check_range;
+    check_range.push_back("192.168.1.1");
+
+    BOOST_CHECK_EQUAL(check_range,new_range);
+}
+
+BOOST_AUTO_TEST_CASE(Substract12)
+{
+    IP_RANGE range("192.168.1.1");
+    set<IP_RANGE> to_sub;
+    to_sub.insert(IP_RANGE("192.168.1.1"));
+
+    vector<IP_RANGE> new_range = range.substract(to_sub);
+
+    vector<IP_RANGE> check_range;
+
+    BOOST_CHECK_EQUAL(check_range,new_range);
+}
+
+BOOST_AUTO_TEST_CASE(Substract13)
+{
+    IP_RANGE range("192.168.1.1");
+
+    set<IP_RANGE> to_sub;
+    vector<IP_RANGE> new_range = range.substract(to_sub);
+
+    vector<IP_RANGE> check_range;
+    check_range.push_back("192.168.1.1");
+
+    BOOST_CHECK_EQUAL(check_range,new_range);
+}
+
+BOOST_AUTO_TEST_CASE(Substract14)
+{
+    IP_RANGE range("192.168.1.1-192.168.1.100");
+    set<IP_RANGE> to_sub;
+
+    vector<IP_RANGE> new_range = range.substract(to_sub);
+
+    vector<IP_RANGE> check_range;
+    check_range.push_back("192.168.1.1-192.168.1.100");
+
+    BOOST_CHECK_EQUAL(check_range,new_range);
+}
+
+BOOST_AUTO_TEST_CASE(Substract15)
+{
+    IP_RANGE range("192.168.1.1-192.168.1.100");
+    set<IP_RANGE> to_sub;
+    to_sub.insert(IP_RANGE("192.168.1.1-192.168.1.60"));
+    to_sub.insert(IP_RANGE("192.168.1.62-192.168.1.100"));
+
+    vector<IP_RANGE> new_range = range.substract(to_sub);
+
+    vector<IP_RANGE> check_range;
+    check_range.push_back("192.168.1.61");
+
+    BOOST_CHECK_EQUAL(check_range,new_range);
+}
+
+BOOST_AUTO_TEST_CASE(IpNumString1)
+{
+    IP_RANGE myip("192.168.1.50");
+    string expected("192168001050");
+
+    BOOST_CHECK_EQUAL(expected,IP_RANGE::ip_num_string(myip.get_base()));
+}
+
+BOOST_AUTO_TEST_CASE(IpNumString2)
+{
+    IP_RANGE myip("0.0.0.0");
+    string expected("000000000000");
+
+    BOOST_CHECK_EQUAL(expected,IP_RANGE::ip_num_string(myip.get_base()));
+}
+
+BOOST_AUTO_TEST_CASE(IpNumString3)
+{
+    IP_RANGE myip("255.255.255.255");
+    string expected("255255255255");
+
+    BOOST_CHECK_EQUAL(expected,IP_RANGE::ip_num_string(myip.get_base()));
+}
+
+BOOST_AUTO_TEST_SUITE_END()
index 50ae643..de9db50 100644 (file)
 // #include <sstream>
 // #include <stdexcept>
 
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-#include <cppunit/extensions/HelperMacros.h>
+#define BOOST_TEST_DYN_LINK
+#include <boost/test/unit_test.hpp>
 
 #include <stringfunc.hxx>
 #include <containerfunc.hpp>
 
 using namespace std;
-using namespace CppUnit;
 using namespace I2n;
 
-class stringfunc : public TestFixture
+typedef std::list< std::string > StringList;
+
+BOOST_AUTO_TEST_SUITE(stringfunc)
+
+BOOST_AUTO_TEST_CASE(smart_html_entites1)
+{
+    string output = smart_html_entities("Test");
+
+    BOOST_CHECK_EQUAL(string("Test"), output);
+}
+
+BOOST_AUTO_TEST_CASE(smart_html_entites2)
+{
+    string output = smart_html_entities("Täst");
+
+    BOOST_CHECK_EQUAL(string("T&auml;st"), output);
+}
+
+BOOST_AUTO_TEST_CASE(smart_html_entites3)
+{
+    string output = smart_html_entities("<>");
+
+    BOOST_CHECK_EQUAL(string("<>"), output);
+}
+
+BOOST_AUTO_TEST_CASE(smart_html_entites4)
+{
+    string output = smart_html_entities("<ümlaut>");
+
+    BOOST_CHECK_EQUAL(string("<ümlaut>"), output);
+}
+
+BOOST_AUTO_TEST_CASE(smart_html_entites5)
+{
+    string output = smart_html_entities("Test<ümlaut>Blä");
+
+    BOOST_CHECK_EQUAL(string("Test<ümlaut>Bl&auml;"), output);
+}
+
+BOOST_AUTO_TEST_CASE(smart_html_entites6)
+{
+    string output = smart_html_entities("System > Einstellungen");
+
+    BOOST_CHECK_EQUAL(string("System &gt; Einstellungen"), output);
+}
+
+BOOST_AUTO_TEST_CASE(smart_html_entites7)
+{
+    string output = smart_html_entities("Finden Sie <b>auf</b> der Seite <a href=\"fdslfsl\">\"System > Einstellungen\"</a>. Oder etwa nicht?");
+
+    BOOST_CHECK_EQUAL(string("Finden Sie <b>auf</b> der Seite <a href=\"fdslfsl\">&quot;System &gt; Einstellungen&quot;</a>. Oder etwa nicht?"), output);
+}
+
+BOOST_AUTO_TEST_CASE(strip_html_tags1)
+{
+    string output = strip_html_tags("Was für ein schöner Tag, finden Sie nicht?");
+
+    BOOST_CHECK_EQUAL(string("Was für ein schöner Tag, finden Sie nicht?"), output);
+}
+
+BOOST_AUTO_TEST_CASE(strip_html_tags2)
+{
+    string output = strip_html_tags("Was für ein <a href=\"wikipedia\" target=\"new\">schöner Tag</a>, finden Sie nicht?");
+
+    BOOST_CHECK_EQUAL(string("Was für ein schöner Tag, finden Sie nicht?"), output);
+}
+
+BOOST_AUTO_TEST_CASE(html_entities1)
+{
+    string output = html_entities("\xC3\xA4\xC3\xB6\xC3\xBC");
+    BOOST_CHECK_EQUAL(string("&auml;&ouml;&uuml;"), output);
+}
+
+BOOST_AUTO_TEST_CASE(html_entities2)
+{
+    string output = html_entities("\xC3\xA5 \xC3\xB5 \xC3\xBF");
+    BOOST_CHECK_EQUAL(string("&#229; &#245; &#255;"), output);
+}
+
+BOOST_AUTO_TEST_CASE(html_entities3)
+{
+    string output = html_entities("\xC4\x8E \xE0\xBC\xB1 \xE8\x82\x88");
+    BOOST_CHECK_EQUAL(string("&#270; &#3889; &#32904;"), output);
+}
+
+BOOST_AUTO_TEST_CASE(imaputf7_to_utf8)
+{
+    string output = utf7imap_to_utf8("Sp&AOQ-m");
+    BOOST_CHECK_EQUAL(string("Späm"), output);
+}
+
+BOOST_AUTO_TEST_CASE(utf8_to_imaputf7)
+{
+    string output = utf8_to_utf7imap("Späm");
+    BOOST_CHECK_EQUAL(string("Sp&AOQ-m"), output);
+}
+
+/*
+**
+*/
+
+BOOST_AUTO_TEST_CASE(TestTrim)
+{
+    std::string s("s1");
+    trim_mod(s);
+    BOOST_CHECK_EQUAL( std::string("s1"), s );
+
+    s="  s2";
+    trim_mod(s);
+    BOOST_CHECK_EQUAL( std::string("s2"), s );
+
+    s="s3   ";
+    trim_mod(s);
+    BOOST_CHECK_EQUAL( std::string("s3"), s );
+
+    s="::s4:s4::++--aa";
+    trim_mod(s,":+-a");
+    BOOST_CHECK_EQUAL( std::string("s4:s4"), s);
+
+    /* non modifying version */
+
+    s= "s1";
+    BOOST_CHECK_EQUAL( std::string("s1"), trim(s) );
+
+    s="  s2";
+    BOOST_CHECK_EQUAL( std::string("s2"), trim(s) );
+    BOOST_CHECK_EQUAL( std::string("  s2"), s );
+
+    s="s3   ";
+    BOOST_CHECK_EQUAL( std::string("s3"), trim(s) );
+    BOOST_CHECK_EQUAL( std::string("s3   "), s );
+
+    s="::s4:s4::++--aa";
+    BOOST_CHECK_EQUAL( std::string("s4:s4"), trim(s,":+-a") );
+} // eo TestTrim()
+
+
+
+BOOST_AUTO_TEST_CASE(TestChomp)
+{
+    std::string s("s1");
+
+    chomp_mod(s);
+    BOOST_CHECK_EQUAL( std::string("s1"), s );
+
+    s="s2\n";
+    chomp_mod(s);
+    BOOST_CHECK_EQUAL( std::string("s2"), s );
+
+    s="s3:";
+    chomp_mod(s,":");
+    BOOST_CHECK_EQUAL( std::string("s3"), s );
+
+    s=":s4::";
+    chomp_mod(s,"s:");
+    BOOST_CHECK_EQUAL( std::string(":s4:"), s);
+
+    /* non modifiying versions */
+    s= "s1";
+
+    BOOST_CHECK_EQUAL( std::string("s1"), chomp(s) );
+
+    s="s2\n";
+    BOOST_CHECK_EQUAL( std::string("s2"), chomp(s) );
+    BOOST_CHECK_EQUAL( std::string("s2\n"), s);
+
+    s="s3:";
+    BOOST_CHECK_EQUAL( std::string("s3"), chomp(s,":") );
+    BOOST_CHECK_EQUAL( std::string("s3:"), s);
+
+    s=":s4::";
+    BOOST_CHECK_EQUAL( std::string(":s4:"), chomp(s,"s:") );
+    BOOST_CHECK_EQUAL( std::string(":s4::"), s);
+} // eo TestChomp()
+
+
+
+BOOST_AUTO_TEST_CASE(TestSuffixFuncs)
+{
+    std::string s1("12.cpp");
+
+    BOOST_CHECK_EQUAL( true, has_suffix(s1,".cpp") );
+    BOOST_CHECK_EQUAL( true, has_suffix(s1,"pp") );
+    BOOST_CHECK_EQUAL( false, has_suffix(s1,"hpp") );
+    BOOST_CHECK_EQUAL( false, has_suffix(s1,"cp") );
+    BOOST_CHECK_EQUAL( false, has_suffix(s1,"") );
+
+    std::string s1c1= remove_suffix(s1,".cpp");
+    BOOST_CHECK_EQUAL( std::string("12"), s1c1 );
+
+    std::string s1c2= remove_suffix(s1,"p");
+    BOOST_CHECK_EQUAL( std::string("12.cp"), s1c2 );
+
+    std::string s1c3= remove_suffix(s1,"cp");
+    BOOST_CHECK_EQUAL( std::string("12.cpp"), s1c3 );
+
+    std::string s2(".cpp");
+    BOOST_CHECK_EQUAL( true, has_suffix(s2,".cpp") );
+
+    std::string s2c1= remove_suffix(s2,".cpp");
+    BOOST_CHECK_EQUAL( std::string(""), s2c1 );
+
+} // eo TestSuffixFuncs()
+
+
+
+BOOST_AUTO_TEST_CASE(TestPrefixFuncs)
+{
+    std::string s1("12.cpp");
+
+    BOOST_CHECK_EQUAL( true, has_prefix(s1,"12") );
+    BOOST_CHECK_EQUAL( true, has_prefix(s1, "1") );
+    BOOST_CHECK_EQUAL( false, has_prefix(s1, "2") );
+    BOOST_CHECK_EQUAL( false, has_prefix(s1, "") );
+
+    std::string s1c1= remove_prefix(s1, "12");
+    BOOST_CHECK_EQUAL( std::string(".cpp"), s1c1);
+} // eo TestPrefixFuncs()
+
+
+
+BOOST_AUTO_TEST_CASE(TestLowerUpperFuncs)
+{
+    std::string u1("CASE CONVERSION TEST..");
+    std::string l1("case conversion test..");
+
+    std::string test1(l1);
+
+    to_upper_mod(test1);
+    BOOST_CHECK_EQUAL( u1, test1 );
+
+    to_lower_mod(test1);
+    BOOST_CHECK_EQUAL( l1, test1 );
+
+
+    BOOST_CHECK_EQUAL( u1, to_upper(l1) );
+    BOOST_CHECK_EQUAL( l1, to_lower(u1) );
+} // eo TestLowerUpper
+
+
+
+BOOST_AUTO_TEST_CASE(PairSplit1)
+{
+    StringList str_list;
+    get_push_back_filler(str_list)
+        ("a=11")("a= 11")("a =11 ")("a =  11 ")("  a    =    11   ")
+    ;
+    BOOST_CHECK_EQUAL( 5u, str_list.size() );
+    for(StringList::iterator it= str_list.begin();
+        it != str_list.end();
+        ++it)
+    {
+        std::string key, value;
+        bool res= pair_split( *it, key, value);
+
+        BOOST_CHECK_EQUAL( true , res );
+        BOOST_CHECK_EQUAL( std::string("a"), key );
+        BOOST_CHECK_EQUAL( std::string("11"), value );
+    }
+
+    std::string key, value;
+    bool res;
+
+    res= pair_split(" 1 : 2 ", key, value, ':');
+    BOOST_CHECK_EQUAL( true, res );
+    BOOST_CHECK_EQUAL( std::string("1"), key);
+    BOOST_CHECK_EQUAL( std::string("2"), value);
+} // eo PairSplit1
+
+
+
+BOOST_AUTO_TEST_CASE(SplitString1)
 {
-    CPPUNIT_TEST_SUITE(stringfunc);
-
-    CPPUNIT_TEST(smart_html_entites1);
-    CPPUNIT_TEST(smart_html_entites2);
-    CPPUNIT_TEST(smart_html_entites3);
-    CPPUNIT_TEST(smart_html_entites4);
-    CPPUNIT_TEST(smart_html_entites5);
-    CPPUNIT_TEST(smart_html_entites6);
-    CPPUNIT_TEST(smart_html_entites7);
-    CPPUNIT_TEST(strip_html_tags1);
-    CPPUNIT_TEST(strip_html_tags2);
-    CPPUNIT_TEST(html_entities1);
-    CPPUNIT_TEST(html_entities2);
-    CPPUNIT_TEST(html_entities3);
-    CPPUNIT_TEST(imaputf7_to_utf8);
-    CPPUNIT_TEST(utf8_to_imaputf7);
-
-    
-    CPPUNIT_TEST(TestTrim);
-    CPPUNIT_TEST(TestChomp);
-    CPPUNIT_TEST(TestSuffixFuncs);
-    CPPUNIT_TEST(TestPrefixFuncs);
-    CPPUNIT_TEST(TestLowerUpperFuncs);
-    
-    CPPUNIT_TEST(PairSplit1);
-    CPPUNIT_TEST(SplitString1);
-    CPPUNIT_TEST(SplitString2);
-    CPPUNIT_TEST(SplitStringEmpty);
-    CPPUNIT_TEST(SplitStringDelimiterOnly);
-    CPPUNIT_TEST(JoinString1);
-    
-    CPPUNIT_TEST(ConversionStringInt);
-    
-    CPPUNIT_TEST(HexConversion);
-    
-
-    CPPUNIT_TEST_SUITE_END();
-
-    protected:
-      typedef std::list< std::string > StringList;
-
-    public:
-        void smart_html_entites1()
-        {
-            string output = smart_html_entities("Test");
-
-            CPPUNIT_ASSERT_EQUAL(string("Test"), output);
-        }
-
-        void smart_html_entites2()
-        {
-            string output = smart_html_entities("Täst");
-
-            CPPUNIT_ASSERT_EQUAL(string("T&auml;st"), output);
-        }
-
-        void smart_html_entites3()
-        {
-            string output = smart_html_entities("<>");
-
-            CPPUNIT_ASSERT_EQUAL(string("<>"), output);
-        }
-
-        void smart_html_entites4()
-        {
-            string output = smart_html_entities("<ümlaut>");
-
-            CPPUNIT_ASSERT_EQUAL(string("<ümlaut>"), output);
-        }
-
-        void smart_html_entites5()
-        {
-            string output = smart_html_entities("Test<ümlaut>Blä");
-
-            CPPUNIT_ASSERT_EQUAL(string("Test<ümlaut>Bl&auml;"), output);
-        }
-
-        void smart_html_entites6()
-        {
-            string output = smart_html_entities("System > Einstellungen");
-
-            CPPUNIT_ASSERT_EQUAL(string("System &gt; Einstellungen"), output);
-        }
-
-        void smart_html_entites7()
-        {
-            string output = smart_html_entities("Finden Sie <b>auf</b> der Seite <a href=\"fdslfsl\">\"System > Einstellungen\"</a>. Oder etwa nicht?");
-
-            CPPUNIT_ASSERT_EQUAL(string("Finden Sie <b>auf</b> der Seite <a href=\"fdslfsl\">&quot;System &gt; Einstellungen&quot;</a>. Oder etwa nicht?"), output);
-        }
-
-        void strip_html_tags1()
-        {
-            string output = strip_html_tags("Was für ein schöner Tag, finden Sie nicht?");
-
-            CPPUNIT_ASSERT_EQUAL(string("Was für ein schöner Tag, finden Sie nicht?"), output);
-        }
-
-        void strip_html_tags2()
-        {
-            string output = strip_html_tags("Was für ein <a href=\"wikipedia\" target=\"new\">schöner Tag</a>, finden Sie nicht?");
-
-            CPPUNIT_ASSERT_EQUAL(string("Was für ein schöner Tag, finden Sie nicht?"), output);
-        }
-
-        void html_entities1()
-        {
-            string output = html_entities("\xC3\xA4\xC3\xB6\xC3\xBC");
-            CPPUNIT_ASSERT_EQUAL(string("&auml;&ouml;&uuml;"), output);
-        }
-
-        void html_entities2()
-        {
-            string output = html_entities("\xC3\xA5 \xC3\xB5 \xC3\xBF");
-            CPPUNIT_ASSERT_EQUAL(string("&#229; &#245; &#255;"), output);
-        }
-
-        void html_entities3()
-        {
-            string output = html_entities("\xC4\x8E \xE0\xBC\xB1 \xE8\x82\x88");
-            CPPUNIT_ASSERT_EQUAL(string("&#270; &#3889; &#32904;"), output);
-        }
-
-        void imaputf7_to_utf8()
-        {
-            string output = utf7imap_to_utf8("Sp&AOQ-m");
-            CPPUNIT_ASSERT_EQUAL(string("Späm"), output);
-        }
-
-        void utf8_to_imaputf7()
-        {
-            string output = utf8_to_utf7imap("Späm");
-            CPPUNIT_ASSERT_EQUAL(string("Sp&AOQ-m"), output);
-        }
-
-      /*
-      **
-      */
-
-        void TestTrim()
-        {
-            std::string s("s1");
-            trim_mod(s);
-            CPPUNIT_ASSERT_EQUAL( std::string("s1"), s );
-            
-            s="  s2";
-            trim_mod(s);
-            CPPUNIT_ASSERT_EQUAL( std::string("s2"), s );
-            
-            s="s3   ";
-            trim_mod(s);
-            CPPUNIT_ASSERT_EQUAL( std::string("s3"), s );
-            
-            s="::s4:s4::++--aa";
-            trim_mod(s,":+-a");
-            CPPUNIT_ASSERT_EQUAL( std::string("s4:s4"), s);
-            
-            /* non modifying version */
-            
-            s= "s1";
-            CPPUNIT_ASSERT_EQUAL( std::string("s1"), trim(s) );
-            
-            s="  s2";
-            CPPUNIT_ASSERT_EQUAL( std::string("s2"), trim(s) );
-            CPPUNIT_ASSERT_EQUAL( std::string("  s2"), s );
-            
-            s="s3   ";
-            CPPUNIT_ASSERT_EQUAL( std::string("s3"), trim(s) );
-            CPPUNIT_ASSERT_EQUAL( std::string("s3   "), s );
-            
-            s="::s4:s4::++--aa";
-            CPPUNIT_ASSERT_EQUAL( std::string("s4:s4"), trim(s,":+-a") );
-        } // eo TestTrim()
-        
-        
-        
-        void TestChomp()
-        {
-            std::string s("s1");
-            
-            chomp_mod(s);
-            CPPUNIT_ASSERT_EQUAL( std::string("s1"), s );
-            
-            s="s2\n";
-            chomp_mod(s);
-            CPPUNIT_ASSERT_EQUAL( std::string("s2"), s );
-            
-            s="s3:";
-            chomp_mod(s,":");
-            CPPUNIT_ASSERT_EQUAL( std::string("s3"), s );
-            
-            s=":s4::";
-            chomp_mod(s,"s:");
-            CPPUNIT_ASSERT_EQUAL( std::string(":s4:"), s);
-            
-            /* non modifiying versions */
-            s= "s1";
-            
-            CPPUNIT_ASSERT_EQUAL( std::string("s1"), chomp(s) );
-            
-            s="s2\n";
-            CPPUNIT_ASSERT_EQUAL( std::string("s2"), chomp(s) );
-            CPPUNIT_ASSERT_EQUAL( std::string("s2\n"), s);
-            
-            s="s3:";
-            CPPUNIT_ASSERT_EQUAL( std::string("s3"), chomp(s,":") );
-            CPPUNIT_ASSERT_EQUAL( std::string("s3:"), s);
-            
-            s=":s4::";
-            CPPUNIT_ASSERT_EQUAL( std::string(":s4:"), chomp(s,"s:") );
-            CPPUNIT_ASSERT_EQUAL( std::string(":s4::"), s);
-        } // eo TestChomp()
-        
-        
-        
-        void TestSuffixFuncs()
-        {
-            std::string s1("12.cpp");
-            
-            CPPUNIT_ASSERT_EQUAL( true, has_suffix(s1,".cpp") );
-            CPPUNIT_ASSERT_EQUAL( true, has_suffix(s1,"pp") );
-            CPPUNIT_ASSERT_EQUAL( false, has_suffix(s1,"hpp") );
-            CPPUNIT_ASSERT_EQUAL( false, has_suffix(s1,"cp") );
-            CPPUNIT_ASSERT_EQUAL( false, has_suffix(s1,"") );
-            
-            std::string s1c1= remove_suffix(s1,".cpp");
-            CPPUNIT_ASSERT_EQUAL( std::string("12"), s1c1 );
-            
-            std::string s1c2= remove_suffix(s1,"p");
-            CPPUNIT_ASSERT_EQUAL( std::string("12.cp"), s1c2 );
-            
-            std::string s1c3= remove_suffix(s1,"cp");
-            CPPUNIT_ASSERT_EQUAL( std::string("12.cpp"), s1c3 );
-            
-            std::string s2(".cpp");
-            CPPUNIT_ASSERT_EQUAL( true, has_suffix(s2,".cpp") );
-            
-            std::string s2c1= remove_suffix(s2,".cpp");
-            CPPUNIT_ASSERT_EQUAL( std::string(""), s2c1 );
-            
-        } // eo TestSuffixFuncs()
-        
-        
-        
-        void TestPrefixFuncs()
-        {
-            std::string s1("12.cpp");
-            
-            CPPUNIT_ASSERT_EQUAL( true, has_prefix(s1,"12") );
-            CPPUNIT_ASSERT_EQUAL( true, has_prefix(s1, "1") );
-            CPPUNIT_ASSERT_EQUAL( false, has_prefix(s1, "2") );
-            CPPUNIT_ASSERT_EQUAL( false, has_prefix(s1, "") );
-            
-            std::string s1c1= remove_prefix(s1, "12");
-            CPPUNIT_ASSERT_EQUAL( std::string(".cpp"), s1c1);
-        } // eo TestPrefixFuncs()
-        
-        
-        
-        void TestLowerUpperFuncs()
-        {
-            std::string u1("CASE CONVERSION TEST..");
-            std::string l1("case conversion test..");
-            
-            std::string test1(l1);
-            
-            to_upper_mod(test1);
-            CPPUNIT_ASSERT_EQUAL( u1, test1 );
-            
-            to_lower_mod(test1);
-            CPPUNIT_ASSERT_EQUAL( l1, test1 );
-            
-            
-            CPPUNIT_ASSERT_EQUAL( u1, to_upper(l1) );
-            CPPUNIT_ASSERT_EQUAL( l1, to_lower(u1) );
-        } // eo TestLowerUpper
-        
-        
-        
-        void PairSplit1()
-        {
-            StringList str_list;
-            get_push_back_filler(str_list)
-                ("a=11")("a= 11")("a =11 ")("a =  11 ")("  a    =    11   ")
-            ;
-            CPPUNIT_ASSERT_EQUAL( 5u, str_list.size() );
-            for(StringList::iterator it= str_list.begin();
-                it != str_list.end();
-                ++it)
-            {
-                std::string key, value;
-                bool res= pair_split( *it, key, value);
-                
-                CPPUNIT_ASSERT_EQUAL( true , res );
-                CPPUNIT_ASSERT_EQUAL( std::string("a"), key );
-                CPPUNIT_ASSERT_EQUAL( std::string("11"), value );
-            }
-            
-            std::string key, value;
-            bool res;
-            
-            res= pair_split(" 1 : 2 ", key, value, ':');
-            CPPUNIT_ASSERT_EQUAL( true, res );
-            CPPUNIT_ASSERT_EQUAL( std::string("1"), key);
-            CPPUNIT_ASSERT_EQUAL( std::string("2"), value);
-        } // eo PairSplit1
-        
-        
-        
-        void SplitString1()
-        {
-            std::string block(
-                "Zeile 1\n"
-                "++Zeile-2--\n"
-                "Zeile 3\n"
-                "\n"
-                "Zeile 5\n"
-            );
-            
-            StringList list1;
-            
-            split_string(block, list1, "\n");
-            // since the blocks ends with \n we should have 6 lines (the last one empty):
-            CPPUNIT_ASSERT_EQUAL( 6u, list1.size() );
-            CPPUNIT_ASSERT_EQUAL( std::string(), list1.back() );
-            CPPUNIT_ASSERT_EQUAL( std::string("Zeile 1"), list1.front() );
-            
-            StringList list2;
-            
-            split_string(block, list2, "\n", true);
-            
-            // now we omitted empty lines, now we should have only 4 lines left:
-            CPPUNIT_ASSERT_EQUAL( 4u, list2.size() );
-            CPPUNIT_ASSERT_EQUAL( std::string("Zeile 5"), list2.back() );
-            CPPUNIT_ASSERT_EQUAL( std::string("Zeile 1"), list2.front() );
-            
-            list2= split_string(block, "\n", true, "+-");
-            
-            // again, we omitted empty lines, but also trimmed away leading and trailing "+" and "-"
-            CPPUNIT_ASSERT_EQUAL( 4u, list2.size() );
-            CPPUNIT_ASSERT_EQUAL( std::string("Zeile 5"), list2.back() );
-            CPPUNIT_ASSERT_EQUAL( std::string("Zeile 1"), list2.front() );
-            CPPUNIT_ASSERT_EQUAL( std::string("Zeile-2"), *(++list2.begin()) );
-        } // eo SplitString1
-        
-        
-        
-        void SplitString2()
-        {
-            std::string line("172.16.0.0/16 dev eth0  scope link  src 172.16.1.111");
-            
-            StringList list1;
-            
-            split_string(line, list1, " ", true, Whitespaces);
-            
-            CPPUNIT_ASSERT_EQUAL( 7u, list1.size() );
-            
-        } // eo SplitString2
-
-
-
-        void SplitStringEmpty()
-        {
-            std::string line("");
-
-            StringList list1;
-
-            split_string(line, list1, " ", true, Whitespaces);
-
-            CPPUNIT_ASSERT_EQUAL( 0u, list1.size() );
-        } // eo SplitStringEmpty
-
-
-        void SplitStringDelimiterOnly()
-        {
-            std::string line(" ");
-
-            StringList list1;
-
-            split_string(line, list1, " ", true, Whitespaces);
-
-            CPPUNIT_ASSERT_EQUAL( 0u, list1.size() );
-        } // eo SplitStringDelimiterOnly
-        
-        
-        
-        void JoinString1()
-        {
-            std::list< std::string > parts;
-            get_push_back_filler(parts)("1")("2")("drei");
-            
-            std::string joined_string= join_string(parts,"/");
-            // we should have slashes between the strings:
-            CPPUNIT_ASSERT_EQUAL( std::string("1/2/drei") , joined_string );
-            
-            parts.push_back( std::string() );
-            joined_string= join_string(parts,"/");
-            // now we should have an additional trailing slash:
-            CPPUNIT_ASSERT_EQUAL( std::string("1/2/drei/") , joined_string );
-            
-            parts.push_front( std::string() );
-            joined_string= join_string(parts,"/");
-            // now we should have an additional leading slash:
-            CPPUNIT_ASSERT_EQUAL( std::string("/1/2/drei/") , joined_string );
-            
-        } // eo JoinString1
-        
-        
-        
-        void ConversionStringInt()
-        {
-            std::string s1("24");
-            std::string s1x("25x");
-            int i1=0;
-            bool res= false;
-            
-            i1= string_to<int>(s1);
-            CPPUNIT_ASSERT_EQUAL( 24, i1 );
-            i1= string_to<int>(s1x);
-            CPPUNIT_ASSERT_EQUAL( 25, i1 );
-            
-            res= string_to<int>(s1,i1);
-            CPPUNIT_ASSERT_EQUAL( true, res );
-            CPPUNIT_ASSERT_EQUAL( 24, i1 );
-            
-            res= string_to<int>(s1x,i1);
-            CPPUNIT_ASSERT_EQUAL( false, res );
-            
-            std::string ss1= to_string( 24 );
-            CPPUNIT_ASSERT_EQUAL( std::string("24"), ss1);
-            
-        } // eo ConversionStringInt()
-        
-        
-        
-        void HexConversion()
-        {
-            std::string hex1("49324E");
-            std::string bin1("I2N");
-            
-            CPPUNIT_ASSERT_EQUAL( hex1, convert_binary_to_hex(bin1,true) );
-            CPPUNIT_ASSERT_EQUAL( bin1, convert_hex_to_binary(hex1) );
-            CPPUNIT_ASSERT_EQUAL( to_lower(hex1), convert_binary_to_hex(bin1) );
-            
-            std::string hex2("0001");
-            std::string hex2a("00 01");
-            std::string hex2b("00:01");
-            std::string bin2("\0\1",2);
-            
-            CPPUNIT_ASSERT_EQUAL( hex2, convert_binary_to_hex(bin2) );
-            CPPUNIT_ASSERT_EQUAL( bin2, convert_hex_to_binary(hex2) );
-            CPPUNIT_ASSERT_EQUAL( bin2, convert_hex_to_binary(hex2a) );
-            CPPUNIT_ASSERT_EQUAL( bin2, convert_hex_to_binary(hex2b) );
-            
-            CPPUNIT_ASSERT_THROW( convert_hex_to_binary("01 kein hex"), std::runtime_error);
-        } // eo HexConversion()
-        
-        
-        
-};
-
-CPPUNIT_TEST_SUITE_REGISTRATION(stringfunc);
+    std::string block(
+        "Zeile 1\n"
+        "++Zeile-2--\n"
+        "Zeile 3\n"
+        "\n"
+        "Zeile 5\n"
+    );
+
+    StringList list1;
+
+    split_string(block, list1, "\n");
+    // since the blocks ends with \n we should have 6 lines (the last one empty):
+    BOOST_CHECK_EQUAL( 6u, list1.size() );
+    BOOST_CHECK_EQUAL( std::string(), list1.back() );
+    BOOST_CHECK_EQUAL( std::string("Zeile 1"), list1.front() );
+
+    StringList list2;
+
+    split_string(block, list2, "\n", true);
+
+    // now we omitted empty lines, now we should have only 4 lines left:
+    BOOST_CHECK_EQUAL( 4u, list2.size() );
+    BOOST_CHECK_EQUAL( std::string("Zeile 5"), list2.back() );
+    BOOST_CHECK_EQUAL( std::string("Zeile 1"), list2.front() );
+
+    list2= split_string(block, "\n", true, "+-");
+
+    // again, we omitted empty lines, but also trimmed away leading and trailing "+" and "-"
+    BOOST_CHECK_EQUAL( 4u, list2.size() );
+    BOOST_CHECK_EQUAL( std::string("Zeile 5"), list2.back() );
+    BOOST_CHECK_EQUAL( std::string("Zeile 1"), list2.front() );
+    BOOST_CHECK_EQUAL( std::string("Zeile-2"), *(++list2.begin()) );
+} // eo SplitString1
+
+
+
+BOOST_AUTO_TEST_CASE(SplitString2)
+{
+    std::string line("172.16.0.0/16 dev eth0  scope link  src 172.16.1.111");
+
+    StringList list1;
+
+    split_string(line, list1, " ", true, Whitespaces);
+
+    BOOST_CHECK_EQUAL( 7u, list1.size() );
+
+} // eo SplitString2
+
+
+
+BOOST_AUTO_TEST_CASE(SplitStringEmpty)
+{
+    std::string line("");
+
+    StringList list1;
+
+    split_string(line, list1, " ", true, Whitespaces);
+
+    BOOST_CHECK_EQUAL( 0u, list1.size() );
+} // eo SplitStringEmpty
+
+
+BOOST_AUTO_TEST_CASE(SplitStringDelimiterOnly)
+{
+    std::string line(" ");
+
+    StringList list1;
+
+    split_string(line, list1, " ", true, Whitespaces);
+
+    BOOST_CHECK_EQUAL( 0u, list1.size() );
+} // eo SplitStringDelimiterOnly
+
+
+
+BOOST_AUTO_TEST_CASE(JoinString1)
+{
+    std::list< std::string > parts;
+    get_push_back_filler(parts)("1")("2")("drei");
+
+    std::string joined_string= join_string(parts,"/");
+    // we should have slashes between the strings:
+    BOOST_CHECK_EQUAL( std::string("1/2/drei") , joined_string );
+
+    parts.push_back( std::string() );
+    joined_string= join_string(parts,"/");
+    // now we should have an additional trailing slash:
+    BOOST_CHECK_EQUAL( std::string("1/2/drei/") , joined_string );
+
+    parts.push_front( std::string() );
+    joined_string= join_string(parts,"/");
+    // now we should have an additional leading slash:
+    BOOST_CHECK_EQUAL( std::string("/1/2/drei/") , joined_string );
+
+} // eo JoinString1
+
+
+
+BOOST_AUTO_TEST_CASE(ConversionStringInt)
+{
+    std::string s1("24");
+    std::string s1x("25x");
+    int i1=0;
+    bool res= false;
+
+    i1= string_to<int>(s1);
+    BOOST_CHECK_EQUAL( 24, i1 );
+    i1= string_to<int>(s1x);
+    BOOST_CHECK_EQUAL( 25, i1 );
+
+    res= string_to<int>(s1,i1);
+    BOOST_CHECK_EQUAL( true, res );
+    BOOST_CHECK_EQUAL( 24, i1 );
+
+    res= string_to<int>(s1x,i1);
+    BOOST_CHECK_EQUAL( false, res );
+
+    std::string ss1= to_string( 24 );
+    BOOST_CHECK_EQUAL( std::string("24"), ss1);
+
+} // eo ConversionStringInt()
+
+
+
+BOOST_AUTO_TEST_CASE(HexConversion)
+{
+    std::string hex1("49324E");
+    std::string bin1("I2N");
+
+    BOOST_CHECK_EQUAL( hex1, convert_binary_to_hex(bin1,true) );
+    BOOST_CHECK_EQUAL( bin1, convert_hex_to_binary(hex1) );
+    BOOST_CHECK_EQUAL( to_lower(hex1), convert_binary_to_hex(bin1) );
+
+    std::string hex2("0001");
+    std::string hex2a("00 01");
+    std::string hex2b("00:01");
+    std::string bin2("\0\1",2);
+
+    BOOST_CHECK_EQUAL( hex2, convert_binary_to_hex(bin2) );
+    BOOST_CHECK_EQUAL( bin2, convert_hex_to_binary(hex2) );
+    BOOST_CHECK_EQUAL( bin2, convert_hex_to_binary(hex2a) );
+    BOOST_CHECK_EQUAL( bin2, convert_hex_to_binary(hex2b) );
+
+    BOOST_REQUIRE_THROW( convert_hex_to_binary("01 kein hex"), std::runtime_error);
+} // eo HexConversion()
+
+BOOST_AUTO_TEST_SUITE_END()
diff --git a/test/test.cpp b/test/test.cpp
deleted file mode 100644 (file)
index 4451c48..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/***************************************************************************
- *   Copyright (C) 2004 by Intra2net AG                                    *
- *   info@intra2net.com                                                    *
- *                                                                         *
- ***************************************************************************/
-
-#include <iostream>
-#include <iomanip>
-#include <string>
-
-#include <time.h>
-#include <sys/timeb.h>
-
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-#include <cppunit/TestListener.h>
-#include <cppunit/TestFailure.h> 
-#include <cppunit/TestResult.h> 
-#include <cppunit/CompilerOutputter.h> 
-
-class VerboseTimingListener : public CppUnit::TestListener
-{
-    private:
-        double start_time;
-        std::string resultstr;
-
-        double get_time(void)
-        {
-            struct timeb tb;
-            ftime(&tb);
-            return tb.time+(static_cast<float>(tb.millitm)/1000);
-        }
-    
-    public:
-   
-        void startTest( CppUnit::Test *test )
-        {
-            resultstr="OK";
-            std::cout << test->getName() << ": ";
-            start_time=get_time();
-        }
-    
-        void endTest( CppUnit::Test *test )
-        {
-            double timediff=get_time()-start_time;
-            
-            // fix clock unpreciseness for small timespans
-            if (timediff < 0) timediff=0;
-            
-            std::cout << resultstr << " (" 
-                      << std::fixed << std::setprecision(3) 
-                      << timediff << " sec)" << std::endl;
-        }
-
-        void addFailure(const CppUnit::TestFailure &failure)
-        {
-            if(failure.isError())
-                resultstr="ERROR";
-            else
-                resultstr="FAIL";
-        }
-};
-int main(int argc, char **argv)
-{
-    CppUnit::TextTestRunner runner;
-    CppUnit::TestFactoryRegistry &registry = CppUnit::TestFactoryRegistry::getRegistry();
-    
-    // set output format that KDevelop can catch errors
-    CppUnit::CompilerOutputter *op=CppUnit::CompilerOutputter::defaultOutputter(&runner.result(),std::cout);
-    op->setLocationFormat("%p:%l: error: ");
-    runner.setOutputter(op);
-
-    // show every test with timing
-    VerboseTimingListener listener;        
-    runner.eventManager().addListener(&listener); 
-    
-    runner.addTest(registry.makeTest());
-    
-    // run all tests in registry (not using the default progress listener)
-    bool wasSucessful = runner.run("",false,true,false);
-    
-    return (wasSucessful ? 0 : 1);
-}
index 585df32..5ec6041 100644 (file)
 #include <list>
 #include <algorithm>
 
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-#include <cppunit/extensions/HelperMacros.h>
+#define BOOST_TEST_DYN_LINK
+#include <boost/test/unit_test.hpp>
 
 #include <containerfunc.hpp>
 
+using namespace I2n;
 
+BOOST_AUTO_TEST_SUITE(TestContainerFunc)
 
-using namespace I2n;
+BOOST_AUTO_TEST_CASE(FillStringVector)
+{
+    std::vector< std::string > v;
+    BOOST_CHECK_EQUAL( true, v.empty() );
+
+    get_push_back_filler(v)("1")("2")("drei");
 
-using namespace CppUnit;
+    BOOST_CHECK_EQUAL( 3u, v.size() );
+    BOOST_CHECK_EQUAL( std::string("2"), v[1]);
+    BOOST_CHECK_EQUAL( std::string("drei"), v[2]);
+    BOOST_CHECK_EQUAL( std::string("1"), v[0]);
 
-namespace {
+    get_push_back_filler(v)("i3")("i4");
 
+    BOOST_CHECK_EQUAL( 5u, v.size() );
+    BOOST_CHECK_EQUAL( std::string("i4"), v[4]);
+    BOOST_CHECK_EQUAL( std::string("i3"), v[3]);
+} // eo FillStringVector
 
-} // eo namespace <anonymous>
 
 
-class TestContainerFunc : public TestFixture
+BOOST_AUTO_TEST_CASE(RetrieveMapKeys)
 {
-    CPPUNIT_TEST_SUITE(TestContainerFunc);
-    
-    // data tools:
-    
-    CPPUNIT_TEST(FillStringVector);
-    CPPUNIT_TEST(RetrieveMapKeys);
-    
-    CPPUNIT_TEST_SUITE_END();
-    
-    protected:
-    
-
-    public:
-    
-        void setUp()
-        {
-        } // eo setUp
-        
-        
-        void tearDown()
-        {
-        } // eo tearDown
-        
-        
-        /*
-         * the tests:
-         */
-        
-        
-        
-        void FillStringVector()
-        {
-            std::vector< std::string > v;
-            CPPUNIT_ASSERT_EQUAL( true, v.empty() );
-            
-            get_push_back_filler(v)("1")("2")("drei");
-            
-            CPPUNIT_ASSERT_EQUAL( 3u, v.size() );
-            CPPUNIT_ASSERT_EQUAL( std::string("2"), v[1]);
-            CPPUNIT_ASSERT_EQUAL( std::string("drei"), v[2]);
-            CPPUNIT_ASSERT_EQUAL( std::string("1"), v[0]);
-            
-            get_push_back_filler(v)("i3")("i4");
-            
-            CPPUNIT_ASSERT_EQUAL( 5u, v.size() );
-            CPPUNIT_ASSERT_EQUAL( std::string("i4"), v[4]);
-            CPPUNIT_ASSERT_EQUAL( std::string("i3"), v[3]);
-        } // eo FillStringVector
-        
-        
-        
-        void RetrieveMapKeys()
-        {
-            std::map< int, std::string > map1;
-            std::list< int > key_list;
-            std::set< int > key_set;
-            
-            {
-                MapFiller< int, std::string > fill(map1);
-                fill
-                    (1, "one")
-                    (2, "two")
-                    (3, "three" )
-                    (4, "many..." )
-                ;
-            }
-            CPPUNIT_ASSERT_EQUAL( 4u, map1.size() );
-            
-            get_key_list(map1, key_list);
-            CPPUNIT_ASSERT_EQUAL( 4u, key_list.size() );
-            CPPUNIT_ASSERT( std::find(key_list.begin(), key_list.end(), 1) != key_list.end() );
-            CPPUNIT_ASSERT( std::find(key_list.begin(), key_list.end(), 2) != key_list.end() );
-            CPPUNIT_ASSERT( std::find(key_list.begin(), key_list.end(), 3) != key_list.end() );
-            CPPUNIT_ASSERT( std::find(key_list.begin(), key_list.end(), 4) != key_list.end() );
-            
-            get_key_set(map1, key_set);
-            CPPUNIT_ASSERT_EQUAL( 4u, key_set.size() );
-            CPPUNIT_ASSERT( key_set.find(1) != key_set.end() );
-            CPPUNIT_ASSERT( key_set.find(2) != key_set.end() );
-            CPPUNIT_ASSERT( key_set.find(3) != key_set.end() );
-            CPPUNIT_ASSERT( key_set.find(4) != key_set.end() );
-        } // RetrieveMapKeys()
-        
-        
-}; // eo class TestContainerFunc
-
-CPPUNIT_TEST_SUITE_REGISTRATION(TestContainerFunc);
+    std::map< int, std::string > map1;
+    std::list< int > key_list;
+    std::set< int > key_set;
+
+    {
+        MapFiller< int, std::string > fill(map1);
+        fill
+            (1, "one")
+            (2, "two")
+            (3, "three" )
+            (4, "many..." )
+        ;
+    }
+    BOOST_CHECK_EQUAL( 4u, map1.size() );
+
+    get_key_list(map1, key_list);
+    BOOST_CHECK_EQUAL( 4u, key_list.size() );
+    BOOST_CHECK( std::find(key_list.begin(), key_list.end(), 1) != key_list.end() );
+    BOOST_CHECK( std::find(key_list.begin(), key_list.end(), 2) != key_list.end() );
+    BOOST_CHECK( std::find(key_list.begin(), key_list.end(), 3) != key_list.end() );
+    BOOST_CHECK( std::find(key_list.begin(), key_list.end(), 4) != key_list.end() );
+
+    get_key_set(map1, key_set);
+    BOOST_CHECK_EQUAL( 4u, key_set.size() );
+    BOOST_CHECK( key_set.find(1) != key_set.end() );
+    BOOST_CHECK( key_set.find(2) != key_set.end() );
+    BOOST_CHECK( key_set.find(3) != key_set.end() );
+    BOOST_CHECK( key_set.find(4) != key_set.end() );
+} // RetrieveMapKeys()
+
+BOOST_AUTO_TEST_SUITE_END()
index aa5e97b..28c7802 100644 (file)
@@ -7,9 +7,8 @@
  *
  */
 
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-#include <cppunit/extensions/HelperMacros.h>
+#define BOOST_TEST_DYN_LINK
+#include <boost/test/unit_test.hpp>
 
 #include <time.h>
 #include <stdlib.h>
 
 using namespace std;
 using namespace I2n::Time;
-using namespace CppUnit;
-
-class TestCronIntervalFunc : public TestFixture
-{
-    CPPUNIT_TEST_SUITE(TestCronIntervalFunc);
-
-    // Intervals
-    CPPUNIT_TEST(IntervalBeginToday);
-    CPPUNIT_TEST(IntervalDoneToday);
-    CPPUNIT_TEST(IntervalBeginNow);
-    CPPUNIT_TEST(IntervalBeginStep);
-    CPPUNIT_TEST(IntervalWithin);
-    CPPUNIT_TEST(IntervalLaststep1);
-    CPPUNIT_TEST(IntervalLaststep2);
-    CPPUNIT_TEST(IntervalLaststep3);
-    CPPUNIT_TEST(IntervalLaststep4);
-    CPPUNIT_TEST(IntervalLaststep5);
-    CPPUNIT_TEST(IntervalLaststepMatch);
-    CPPUNIT_TEST(IntervalEnd);
-    CPPUNIT_TEST(IntervalBigstep);
-    CPPUNIT_TEST(IntervalWholeDayStart);
-    CPPUNIT_TEST(IntervalWholeDayStartNow);
-    CPPUNIT_TEST(IntervalWholeDayEnd);
-    CPPUNIT_TEST(IntervalWholeDayWithin1);
-    CPPUNIT_TEST(IntervalWholeDayWithin2);
-    CPPUNIT_TEST(IntervalWholeDayWithinBoundary);
-    CPPUNIT_TEST(IntervalBeforeOnce);
-    CPPUNIT_TEST(IntervalBeforeOnceBig);
-    CPPUNIT_TEST(IntervalAfterOnce);
-    CPPUNIT_TEST(IntervalOnceShort);
-    CPPUNIT_TEST(IntervalTooShort);
-    CPPUNIT_TEST(IntervalOverDSTBackwards1);
-    CPPUNIT_TEST(IntervalOverDSTBackwards2);
-    CPPUNIT_TEST(IntervalOverDSTBackwards3);
-    CPPUNIT_TEST(IntervalOverDSTBackwards4);
-    CPPUNIT_TEST(IntervalInFirstDSTBackwards1);
-    CPPUNIT_TEST(IntervalInFirstDSTBackwards2);
-    CPPUNIT_TEST(IntervalInSecondDSTBackwards1);
-    CPPUNIT_TEST(IntervalInSecondDSTBackwards2);
-    CPPUNIT_TEST(IntervalOutFirstDSTBackwards1);
-    CPPUNIT_TEST(IntervalOutFirstDSTBackwards2);
-    CPPUNIT_TEST(IntervalOutSecondDSTBackwards1);
-    CPPUNIT_TEST(IntervalDSTBackwardsWholeday1);
-    CPPUNIT_TEST(IntervalDSTBackwardsWholeday2);
-    CPPUNIT_TEST(IntervalDSTBackwardsWholeday3);
-    CPPUNIT_TEST(IntervalOverDSTForward1);
-    CPPUNIT_TEST(IntervalOverDSTForward2);
-    CPPUNIT_TEST(IntervalOverDSTForward3);
-    CPPUNIT_TEST(IntervalInDSTForward1);
-    CPPUNIT_TEST(IntervalInDSTForward2);
-    CPPUNIT_TEST(IntervalInDSTForward3);
-    CPPUNIT_TEST(IntervalOutDSTForward);
-    CPPUNIT_TEST(IntervalDuringDSTForward);
-    CPPUNIT_TEST(IntervalDSTForwardWholeday1);
-    CPPUNIT_TEST(IntervalDSTForwardWholeday2);
-    CPPUNIT_TEST(IntervalDSTForwardWholeday3);
-    CPPUNIT_TEST(IntervalDSTForwardWholeday4);
-    CPPUNIT_TEST(IntervalDSTForwardWholeday5);
-
-    CPPUNIT_TEST_SUITE_END();
 
+class TestCronIntervalFuncFixture
+{
 public:
-
-    void setUp()
+    TestCronIntervalFuncFixture()
     {
         // our check-values are set for Germany
         setenv("TZ",":Europe/Berlin",1);
     }
+};
 
-    void tearDown()
-    { }
-
-
-    void IntervalBeginToday()
-    {
-        WeekCron cron("2345",3600,7200,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100800), cron.get_next_run(1233099657));
-    }
-
-    void IntervalDoneToday()
-    {
-        WeekCron cron("2345",3600);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233150000));
-    }
-
-    void IntervalBeginNow()
-    {
-        WeekCron cron("2345",3600,7200,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100810), cron.get_next_run(1233100800));
-    }
-
-    void IntervalBeginStep()
-    {
-        WeekCron cron("2345",3600,7200,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100820), cron.get_next_run(1233100810));
-    }
+BOOST_FIXTURE_TEST_SUITE(TestCronIntervalFunc, TestCronIntervalFuncFixture)
 
-    void IntervalWithin()
-    {
-        WeekCron cron("2345",3600,7200,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100830), cron.get_next_run(1233100822));
-    }
+BOOST_AUTO_TEST_CASE(IntervalBeginToday)
+{
+    WeekCron cron("2345",3600,7200,10);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233100800), cron.get_next_run(1233099657));
+}
 
-    void IntervalLaststep1()
-    {
-        WeekCron cron("2345",3600,7200,11);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104399));
-    }
+BOOST_AUTO_TEST_CASE(IntervalDoneToday)
+{
+    WeekCron cron("2345",3600);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233150000));
+}
 
-    void IntervalLaststep2()
-    {
-        WeekCron cron("2345",3600,7200,11);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104398));
-    }
+BOOST_AUTO_TEST_CASE(IntervalBeginNow)
+{
+    WeekCron cron("2345",3600,7200,10);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233100810), cron.get_next_run(1233100800));
+}
 
-    void IntervalLaststep3()
-    {
-        WeekCron cron("2345",3600,7199,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104397));
-    }
+BOOST_AUTO_TEST_CASE(IntervalBeginStep)
+{
+    WeekCron cron("2345",3600,7200,10);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233100820), cron.get_next_run(1233100810));
+}
 
-    void IntervalLaststep4()
-    {
-        WeekCron cron("2345",3600,7200,3599);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233104399), cron.get_next_run(1233104398));
-    }
+BOOST_AUTO_TEST_CASE(IntervalWithin)
+{
+    WeekCron cron("2345",3600,7200,10);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233100830), cron.get_next_run(1233100822));
+}
 
-    void IntervalLaststep5()
-    {
-        WeekCron cron("2345",3600,7200,3598);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104398));
-    }
+BOOST_AUTO_TEST_CASE(IntervalLaststep1)
+{
+    WeekCron cron("2345",3600,7200,11);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104399));
+}
 
-    void IntervalLaststepMatch()
-    {
-        WeekCron cron("2345",3600,7200,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104399));
-    }
+BOOST_AUTO_TEST_CASE(IntervalLaststep2)
+{
+    WeekCron cron("2345",3600,7200,11);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104398));
+}
 
-    void IntervalEnd()
-    {
-        WeekCron cron("2345",3600,7200,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104400));
-    }
+BOOST_AUTO_TEST_CASE(IntervalLaststep3)
+{
+    WeekCron cron("2345",3600,7199,10);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104397));
+}
 
-    void IntervalBigstep()
-    {
-        WeekCron cron("2345",3600,7200,10000);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233100800));
-    }
+BOOST_AUTO_TEST_CASE(IntervalLaststep4)
+{
+    WeekCron cron("2345",3600,7200,3599);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233104399), cron.get_next_run(1233104398));
+}
 
-    void IntervalWholeDayStart()
-    {
-        WeekCron cron("345",0,86400,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
-    }
+BOOST_AUTO_TEST_CASE(IntervalLaststep5)
+{
+    WeekCron cron("2345",3600,7200,3598);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104398));
+}
 
-    void IntervalWholeDayStartNow()
-    {
-        WeekCron cron("345",0,86400,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097210), cron.get_next_run(1233097200));
-    }
+BOOST_AUTO_TEST_CASE(IntervalLaststepMatch)
+{
+    WeekCron cron("2345",3600,7200,10);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104399));
+}
 
-    void IntervalWholeDayEnd()
-    {
-        WeekCron cron("2",0,86400,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233615600), cron.get_next_run(1233097199));
-    }
+BOOST_AUTO_TEST_CASE(IntervalEnd)
+{
+    WeekCron cron("2345",3600,7200,10);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233104400));
+}
 
-    void IntervalWholeDayWithin1()
-    {
-        WeekCron cron("2345",0,86400,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097230), cron.get_next_run(1233097220));
-    }
+BOOST_AUTO_TEST_CASE(IntervalBigstep)
+{
+    WeekCron cron("2345",3600,7200,10000);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233100800));
+}
 
-    void IntervalWholeDayWithin2()
-    {
-        WeekCron cron("2345",0,86400,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097230), cron.get_next_run(1233097229));
-    }
+BOOST_AUTO_TEST_CASE(IntervalWholeDayStart)
+{
+    WeekCron cron("345",0,86400,10);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
+}
 
-    void IntervalWholeDayWithinBoundary()
-    {
-        WeekCron cron("2345",0,86400,10);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
-    }
+BOOST_AUTO_TEST_CASE(IntervalWholeDayStartNow)
+{
+    WeekCron cron("345",0,86400,10);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233097210), cron.get_next_run(1233097200));
+}
 
-    void IntervalBeforeOnce()
-    {
-        WeekCron cron("2345",0,3600,3600);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233100799));
-    }
+BOOST_AUTO_TEST_CASE(IntervalWholeDayEnd)
+{
+    WeekCron cron("2",0,86400,10);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233615600), cron.get_next_run(1233097199));
+}
 
-    void IntervalBeforeOnceBig()
-    {
-        WeekCron cron("2345",0,3600,86400);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233100799));
-    }
+BOOST_AUTO_TEST_CASE(IntervalWholeDayWithin1)
+{
+    WeekCron cron("2345",0,86400,10);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233097230), cron.get_next_run(1233097220));
+}
 
-    void IntervalAfterOnce()
-    {
-        WeekCron cron("2345",0,3600,86400);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233097200));
-    }
+BOOST_AUTO_TEST_CASE(IntervalWholeDayWithin2)
+{
+    WeekCron cron("2345",0,86400,10);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233097230), cron.get_next_run(1233097229));
+}
 
-    void IntervalOnceShort()
-    {
-        WeekCron cron("2345",0,1,86400);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
-    }
+BOOST_AUTO_TEST_CASE(IntervalWholeDayWithinBoundary)
+{
+    WeekCron cron("2345",0,86400,10);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
+}
 
-    void IntervalTooShort()
-    {
-        WeekCron cron("2345",0,0,86400);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233097200));
-    }
+BOOST_AUTO_TEST_CASE(IntervalBeforeOnce)
+{
+    WeekCron cron("2345",0,3600,3600);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233100799));
+}
 
-    void IntervalOverDSTBackwards1()
-    {
-        WeekCron cron("0123456",0,14400,60);
-        // calc at: Sun Oct 26 01:59:59 CEST 2008
-        // expected next run: Sun Oct 26 02:00:00 CEST 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224979200), cron.get_next_run(1224979199));
-    }
+BOOST_AUTO_TEST_CASE(IntervalBeforeOnceBig)
+{
+    WeekCron cron("2345",0,3600,86400);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233100799));
+}
 
-    void IntervalOverDSTBackwards2()
-    {
-        WeekCron cron("0123456",0,14400,60);
-        // calc at: Sun Oct 26 02:29:59 CEST 2008
-        // expected next run: Sun Oct 26 02:30:00 CEST 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224981000), cron.get_next_run(1224980999));
-    }
+BOOST_AUTO_TEST_CASE(IntervalAfterOnce)
+{
+    WeekCron cron("2345",0,3600,86400);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233097200));
+}
 
-    void IntervalOverDSTBackwards3()
-    {
-        WeekCron cron("0123456",0,14400,60);
-        // calc at: Sun Oct 26 02:59:59 CEST 2008
-        // expected next run: Sun Oct 26 02:00:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224982800), cron.get_next_run(1224982799));
-    }
+BOOST_AUTO_TEST_CASE(IntervalOnceShort)
+{
+    WeekCron cron("2345",0,1,86400);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
+}
 
-    void IntervalOverDSTBackwards4()
-    {
-        WeekCron cron("0123456",0,14400,60);
-        // calc at: Sun Oct 26 02:59:59 CET 2008
-        // expected next run: Sun Oct 26 03:00:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224986400), cron.get_next_run(1224986399));
-    }
+BOOST_AUTO_TEST_CASE(IntervalTooShort)
+{
+    WeekCron cron("2345",0,0,86400);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233097200));
+}
 
-    void IntervalInFirstDSTBackwards1()
-    {
-        WeekCron cron("0123456",0,9000,60);
-        // calc at: Sun Oct 26 02:28:59 CEST 2008
-        // expected next run: Sun Oct 26 02:29:00 CEST 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224980940), cron.get_next_run(1224980939));
-    }
+BOOST_AUTO_TEST_CASE(IntervalOverDSTBackwards1)
+{
+    WeekCron cron("0123456",0,14400,60);
+    // calc at: Sun Oct 26 01:59:59 CEST 2008
+    // expected next run: Sun Oct 26 02:00:00 CEST 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1224979200), cron.get_next_run(1224979199));
+}
 
-    void IntervalInFirstDSTBackwards2()
-    {
-        WeekCron cron("0123456",0,9000,60);
-        // calc at: Sun Oct 26 02:29:01 CEST 2008
-        // expected next run: Mon Oct 27 00:00:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225062000), cron.get_next_run(1224980941));
-    }
+BOOST_AUTO_TEST_CASE(IntervalOverDSTBackwards2)
+{
+    WeekCron cron("0123456",0,14400,60);
+    // calc at: Sun Oct 26 02:29:59 CEST 2008
+    // expected next run: Sun Oct 26 02:30:00 CEST 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1224981000), cron.get_next_run(1224980999));
+}
 
-    void IntervalInSecondDSTBackwards1()
-    {
-        WeekCron cron("0123456",0,12600,60);
-        // calc at: Sun Oct 26 02:28:59 CET 2008
-        // expected next run: Sun Oct 26 02:29:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224984540), cron.get_next_run(1224984539));
-    }
+BOOST_AUTO_TEST_CASE(IntervalOverDSTBackwards3)
+{
+    WeekCron cron("0123456",0,14400,60);
+    // calc at: Sun Oct 26 02:59:59 CEST 2008
+    // expected next run: Sun Oct 26 02:00:00 CET 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1224982800), cron.get_next_run(1224982799));
+}
 
-    void IntervalInSecondDSTBackwards2()
-    {
-        WeekCron cron("0123456",0,12600,60);
-        // calc at: Sun Oct 26 02:29:01 CET 2008
-        // expected next run: Sun Oct 26 02:30:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224984600), cron.get_next_run(1224984541));
-    }
+BOOST_AUTO_TEST_CASE(IntervalOverDSTBackwards4)
+{
+    WeekCron cron("0123456",0,14400,60);
+    // calc at: Sun Oct 26 02:59:59 CET 2008
+    // expected next run: Sun Oct 26 03:00:00 CET 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1224986400), cron.get_next_run(1224986399));
+}
 
-    void IntervalOutFirstDSTBackwards1()
-    {
-        WeekCron cron("0123456",9000,18000,60);
-        // calc at: Sun Oct 26 02:29:00 CEST 2008
-        // expected next run: Sun Oct 26 02:30:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224984600), cron.get_next_run(1224980940));
-    }
+BOOST_AUTO_TEST_CASE(IntervalInFirstDSTBackwards1)
+{
+    WeekCron cron("0123456",0,9000,60);
+    // calc at: Sun Oct 26 02:28:59 CEST 2008
+    // expected next run: Sun Oct 26 02:29:00 CEST 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1224980940), cron.get_next_run(1224980939));
+}
 
-    void IntervalOutFirstDSTBackwards2()
-    {
-        WeekCron cron("0123456",9000,18000,60);
-        // calc at: Sun Oct 26 02:29:00 CET 2008
-        // expected next run: Sun Oct 26 02:30:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224984600), cron.get_next_run(1224984540));
-    }
+BOOST_AUTO_TEST_CASE(IntervalInFirstDSTBackwards2)
+{
+    WeekCron cron("0123456",0,9000,60);
+    // calc at: Sun Oct 26 02:29:01 CEST 2008
+    // expected next run: Mon Oct 27 00:00:00 CET 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1225062000), cron.get_next_run(1224980941));
+}
 
-    void IntervalOutSecondDSTBackwards1()
-    {
-        WeekCron cron("0123456",12600,18000,60);
-        // calc at: Sun Oct 26 02:29:59 CET 2008
-        // expected next run: Sun Oct 26 03:30:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224988200), cron.get_next_run(1224984599));
-    }
+BOOST_AUTO_TEST_CASE(IntervalInSecondDSTBackwards1)
+{
+    WeekCron cron("0123456",0,12600,60);
+    // calc at: Sun Oct 26 02:28:59 CET 2008
+    // expected next run: Sun Oct 26 02:29:00 CET 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1224984540), cron.get_next_run(1224984539));
+}
 
-    void IntervalDSTBackwardsWholeday1()
-    {
-        WeekCron cron("0123456",0,86400,60);
-        // calc at: Sun Oct 26 22:58:59 CET 2008
-        // expected next run: Sun Oct 26 22:59:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225058340), cron.get_next_run(1225058339));
-    }
+BOOST_AUTO_TEST_CASE(IntervalInSecondDSTBackwards2)
+{
+    WeekCron cron("0123456",0,12600,60);
+    // calc at: Sun Oct 26 02:29:01 CET 2008
+    // expected next run: Sun Oct 26 02:30:00 CET 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1224984600), cron.get_next_run(1224984541));
+}
 
-    void IntervalDSTBackwardsWholeday2()
-    {
-        WeekCron cron("0123456",0,86400,60);
-        // calc at: Sun Oct 26 22:59:59 CET 2008
-        // expected next run: Sun Oct 26 23:00:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225058400), cron.get_next_run(1225058399));
-    }
+BOOST_AUTO_TEST_CASE(IntervalOutFirstDSTBackwards1)
+{
+    WeekCron cron("0123456",9000,18000,60);
+    // calc at: Sun Oct 26 02:29:00 CEST 2008
+    // expected next run: Sun Oct 26 02:30:00 CET 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1224984600), cron.get_next_run(1224980940));
+}
 
-    void IntervalDSTBackwardsWholeday3()
-    {
-        WeekCron cron("0123456",0,86400,60);
-        // calc at: Sun Oct 26 23:30:00 CET 2008
-        // expected next run: Sun Oct 26 23:31:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225060260), cron.get_next_run(1225060200));
-    }
+BOOST_AUTO_TEST_CASE(IntervalOutFirstDSTBackwards2)
+{
+    WeekCron cron("0123456",9000,18000,60);
+    // calc at: Sun Oct 26 02:29:00 CET 2008
+    // expected next run: Sun Oct 26 02:30:00 CET 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1224984600), cron.get_next_run(1224984540));
+}
 
-    void IntervalOverDSTForward1()
-    {
-        WeekCron cron("0123456",0,14400,60);
-        // calc at: Sun Mar 29 01:59:59 CET 2009
-        // expected next run: Sun Mar 29 03:00:00 CEST 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238288400), cron.get_next_run(1238288399));
-    }
+BOOST_AUTO_TEST_CASE(IntervalOutSecondDSTBackwards1)
+{
+    WeekCron cron("0123456",12600,18000,60);
+    // calc at: Sun Oct 26 02:29:59 CET 2008
+    // expected next run: Sun Oct 26 03:30:00 CET 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1224988200), cron.get_next_run(1224984599));
+}
 
-    void IntervalOverDSTForward2()
-    {
-        WeekCron cron("0123456",0,14400,60);
-        // calc at: Sun Mar 29 03:58:59 CEST 2009
-        // expected next run: Sun Mar 29 03:59:00 CEST 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238291940), cron.get_next_run(1238291939));
-    }
+BOOST_AUTO_TEST_CASE(IntervalDSTBackwardsWholeday1)
+{
+    WeekCron cron("0123456",0,86400,60);
+    // calc at: Sun Oct 26 22:58:59 CET 2008
+    // expected next run: Sun Oct 26 22:59:00 CET 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1225058340), cron.get_next_run(1225058339));
+}
 
-    void IntervalOverDSTForward3()
-    {
-        WeekCron cron("0123456",0,14400,60);
-        // calc at: Sun Mar 29 03:59:59 CEST 2009
-        // expected next run: Mon Mar 30 00:00:00 CEST 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238364000), cron.get_next_run(1238291999));
-    }
+BOOST_AUTO_TEST_CASE(IntervalDSTBackwardsWholeday2)
+{
+    WeekCron cron("0123456",0,86400,60);
+    // calc at: Sun Oct 26 22:59:59 CET 2008
+    // expected next run: Sun Oct 26 23:00:00 CET 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1225058400), cron.get_next_run(1225058399));
+}
 
-    void IntervalInDSTForward1()
-    {
-        WeekCron cron("0123456",3600,9000,60);
-        // calc at: Sun Mar 29 01:59:59 CET 2009
-        // expected next run: Sun Mar 29 03:00:00 CEST 2009
-        // glibc update: CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238288400), cron.get_next_run(1238288399));
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238367600), cron.get_next_run(1238288399));
-    }
+BOOST_AUTO_TEST_CASE(IntervalDSTBackwardsWholeday3)
+{
+    WeekCron cron("0123456",0,86400,60);
+    // calc at: Sun Oct 26 23:30:00 CET 2008
+    // expected next run: Sun Oct 26 23:31:00 CET 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1225060260), cron.get_next_run(1225060200));
+}
 
-    void IntervalInDSTForward2()
-    {
-        WeekCron cron("0123456",3600,9000,60);
-        // calc at: Sun Mar 29 03:29:59 CEST 2009
-        // expected next run: Mon Mar 30 01:00:00 CEST 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238367600), cron.get_next_run(1238290199));
-    }
+BOOST_AUTO_TEST_CASE(IntervalOverDSTForward1)
+{
+    WeekCron cron("0123456",0,14400,60);
+    // calc at: Sun Mar 29 01:59:59 CET 2009
+    // expected next run: Sun Mar 29 03:00:00 CEST 2009
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238288400), cron.get_next_run(1238288399));
+}
 
-    void IntervalInDSTForward3()
-    {
-        WeekCron cron("0123456",7200,9000,60);
-        // calc at: Sun Mar 29 01:59:59 CET 2009
-        // expected next run: Sun Mar 29 03:00:00 CEST 2009
-        // glibc update: CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238288400), cron.get_next_run(1238288399));
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238371200), cron.get_next_run(1238288399));
-    }
+BOOST_AUTO_TEST_CASE(IntervalOverDSTForward2)
+{
+    WeekCron cron("0123456",0,14400,60);
+    // calc at: Sun Mar 29 03:58:59 CEST 2009
+    // expected next run: Sun Mar 29 03:59:00 CEST 2009
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238291940), cron.get_next_run(1238291939));
+}
 
-    void IntervalOutDSTForward()
-    {
-        WeekCron cron("0123456",9000,14400,60);
-        // calc at: Sun Mar 29 03:29:59 CEST 2009
-        // expected next run: Sun Mar 29 03:30:30 CEST 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238290200), cron.get_next_run(1238290199));
-    }
+BOOST_AUTO_TEST_CASE(IntervalOverDSTForward3)
+{
+    WeekCron cron("0123456",0,14400,60);
+    // calc at: Sun Mar 29 03:59:59 CEST 2009
+    // expected next run: Mon Mar 30 00:00:00 CEST 2009
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238364000), cron.get_next_run(1238291999));
+}
 
-    void IntervalDuringDSTForward()
-    {
-        WeekCron cron("0123456",7200,10800,60);
-        // calc at: Sun Mar 29 01:59:59 CET 2009
-        // expected next run: Sun Mar 29 03:00:00 CEST 2009
-        // glibc update: CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238288400), cron.get_next_run(1238288399));
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238371200), cron.get_next_run(1238288399));
-    }
+BOOST_AUTO_TEST_CASE(IntervalInDSTForward1)
+{
+    WeekCron cron("0123456",3600,9000,60);
+    // calc at: Sun Mar 29 01:59:59 CET 2009
+    // expected next run: Sun Mar 29 03:00:00 CEST 2009
+    // glibc update: BOOST_CHECK_EQUAL( static_cast<time_t>(1238288400), cron.get_next_run(1238288399));
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238367600), cron.get_next_run(1238288399));
+}
+
+BOOST_AUTO_TEST_CASE(IntervalInDSTForward2)
+{
+    WeekCron cron("0123456",3600,9000,60);
+    // calc at: Sun Mar 29 03:29:59 CEST 2009
+    // expected next run: Mon Mar 30 01:00:00 CEST 2009
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238367600), cron.get_next_run(1238290199));
+}
 
-    void IntervalDSTForwardWholeday1()
-    {
-        WeekCron cron("03",0,86400,60);
-        // calc at: Sun Mar 29 23:59:59 CEST 2009
-        // expected next run: Wed Apr  1 00:00:00 CEST 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238536800), cron.get_next_run(1238363999));
-    }
+BOOST_AUTO_TEST_CASE(IntervalInDSTForward3)
+{
+    WeekCron cron("0123456",7200,9000,60);
+    // calc at: Sun Mar 29 01:59:59 CET 2009
+    // expected next run: Sun Mar 29 03:00:00 CEST 2009
+    // glibc update: BOOST_CHECK_EQUAL( static_cast<time_t>(1238288400), cron.get_next_run(1238288399));
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238371200), cron.get_next_run(1238288399));
+}
+
+BOOST_AUTO_TEST_CASE(IntervalOutDSTForward)
+{
+    WeekCron cron("0123456",9000,14400,60);
+    // calc at: Sun Mar 29 03:29:59 CEST 2009
+    // expected next run: Sun Mar 29 03:30:30 CEST 2009
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238290200), cron.get_next_run(1238290199));
+}
 
-    void IntervalDSTForwardWholeday2()
-    {
-        WeekCron cron("03",0,86400,60);
-        // calc at: Mon Mar 30 00:59:59 CEST 2009
-        // expected next run: Wed Apr  1 00:00:00 CEST 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238536800), cron.get_next_run(1238367599));
-    }
+BOOST_AUTO_TEST_CASE(IntervalDuringDSTForward)
+{
+    WeekCron cron("0123456",7200,10800,60);
+    // calc at: Sun Mar 29 01:59:59 CET 2009
+    // expected next run: Sun Mar 29 03:00:00 CEST 2009
+    // glibc update: BOOST_CHECK_EQUAL( static_cast<time_t>(1238288400), cron.get_next_run(1238288399));
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238371200), cron.get_next_run(1238288399));
+}
+
+BOOST_AUTO_TEST_CASE(IntervalDSTForwardWholeday1)
+{
+    WeekCron cron("03",0,86400,60);
+    // calc at: Sun Mar 29 23:59:59 CEST 2009
+    // expected next run: Wed Apr  1 00:00:00 CEST 2009
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238536800), cron.get_next_run(1238363999));
+}
 
-    void IntervalDSTForwardWholeday3()
-    {
-        WeekCron cron("0123456",0,86340,60);
-        // calc at: Sun Mar 29 11:42:06 CEST 2009
-        // expected next run: Sun Mar 29 11:43:00 CEST 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238319780), cron.get_next_run(1238319726));
-    }
+BOOST_AUTO_TEST_CASE(IntervalDSTForwardWholeday2)
+{
+    WeekCron cron("03",0,86400,60);
+    // calc at: Mon Mar 30 00:59:59 CEST 2009
+    // expected next run: Wed Apr  1 00:00:00 CEST 2009
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238536800), cron.get_next_run(1238367599));
+}
 
-    void IntervalDSTForwardWholeday4()
-    {
-        WeekCron cron("0123456",3599,86340,60);
-        // calc at: Sun Mar 29 11:42:06 CEST 2009
-        // expected next run: Sun Mar 29 11:42:59 CEST 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238319779), cron.get_next_run(1238319726));
-    }
+BOOST_AUTO_TEST_CASE(IntervalDSTForwardWholeday3)
+{
+    WeekCron cron("0123456",0,86340,60);
+    // calc at: Sun Mar 29 11:42:06 CEST 2009
+    // expected next run: Sun Mar 29 11:43:00 CEST 2009
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238319780), cron.get_next_run(1238319726));
+}
 
-    void IntervalDSTForwardWholeday5()
-    {
-        WeekCron cron("0123456",3600,86340,60);
-        // calc at: Sun Mar 29 11:42:06 CEST 2009
-        // expected next run: Sun Mar 29 11:43:00 CEST 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238319780), cron.get_next_run(1238319726));
-    }
+BOOST_AUTO_TEST_CASE(IntervalDSTForwardWholeday4)
+{
+    WeekCron cron("0123456",3599,86340,60);
+    // calc at: Sun Mar 29 11:42:06 CEST 2009
+    // expected next run: Sun Mar 29 11:42:59 CEST 2009
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238319779), cron.get_next_run(1238319726));
+}
 
-};
+BOOST_AUTO_TEST_CASE(IntervalDSTForwardWholeday5)
+{
+    WeekCron cron("0123456",3600,86340,60);
+    // calc at: Sun Mar 29 11:42:06 CEST 2009
+    // expected next run: Sun Mar 29 11:43:00 CEST 2009
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238319780), cron.get_next_run(1238319726));
+}
 
-CPPUNIT_TEST_SUITE_REGISTRATION(TestCronIntervalFunc);
+BOOST_AUTO_TEST_SUITE_END()
index 7742ce0..5344d9e 100644 (file)
@@ -7,9 +7,8 @@
  *
  */
 
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-#include <cppunit/extensions/HelperMacros.h>
+#define BOOST_TEST_DYN_LINK
+#include <boost/test/unit_test.hpp>
 
 #include <time.h>
 #include <stdlib.h>
 
 using namespace std;
 using namespace I2n::Time;
-using namespace CppUnit;
-
-class TestCronPointFunc : public TestFixture
-{
-    CPPUNIT_TEST_SUITE(TestCronPointFunc);
-
-    // Points in time
-    CPPUNIT_TEST(NotYetToday);
-    CPPUNIT_TEST(LaterToday);
-    CPPUNIT_TEST(Now);
-    CPPUNIT_TEST(Tomorrow);
-    CPPUNIT_TEST(NextWeek);
-    CPPUNIT_TEST(NextWeekFromToday);
-    CPPUNIT_TEST(StartMidnight);
-    CPPUNIT_TEST(StartMidnightTomorrow);
-    CPPUNIT_TEST(StartLastDaysec);
-    CPPUNIT_TEST(HalfOpenInterval);
-    CPPUNIT_TEST(LongBeforeDSTBackwards);
-    CPPUNIT_TEST(BeforeDSTBackwards1);
-    CPPUNIT_TEST(BeforeDSTBackwards2);
-    CPPUNIT_TEST(AtDSTBackwards);
-    CPPUNIT_TEST(DuringDSTBackwards);
-    CPPUNIT_TEST(EndDSTBackwards1);
-    CPPUNIT_TEST(EndDSTBackwards2);
-    CPPUNIT_TEST(EndDSTBackwards3);
-    CPPUNIT_TEST(EndDSTBackwards4);
-    CPPUNIT_TEST(OverDSTBackwards);
-    CPPUNIT_TEST(OverDSTBackwardsDaychange);
-    CPPUNIT_TEST(LongBeforeDSTForward);
-    CPPUNIT_TEST(BeforeDSTForward1);
-    CPPUNIT_TEST(BeforeDSTForward2);
-    CPPUNIT_TEST(AtDSTForward);
-    CPPUNIT_TEST(DuringDSTForward);
-    CPPUNIT_TEST(EndDSTForward1);
-    CPPUNIT_TEST(EndDSTForward2);
-    CPPUNIT_TEST(EndDSTForward3);
-    CPPUNIT_TEST(EndDSTForward4);
-    CPPUNIT_TEST(OverDSTForward);
-    CPPUNIT_TEST(OverDSTForwardDaychange);
-
-    CPPUNIT_TEST(StartHourStaysTheSameTill2038);
-
-    CPPUNIT_TEST_SUITE_END();
 
+class TestCronPointFuncFixture
+{
 public:
-
-    void setUp()
+    TestCronPointFuncFixture()
     {
         // our check-values are set for Germany
         setenv("TZ",":Europe/Berlin",1);
     }
+};
 
-    void tearDown()
-    { }
+BOOST_FIXTURE_TEST_SUITE(TestCronPointFunc, TestCronPointFuncFixture)
 
-    /////////////////////////////////////////////////////
-    // Points in time
-    /////////////////////////////////////////////////////
+/////////////////////////////////////////////////////
+// Points in time
+/////////////////////////////////////////////////////
 
-    void NotYetToday()
-    {
-        WeekCron cron("2345",3600);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233100800), cron.get_next_run(1233099657));
-    }
+BOOST_AUTO_TEST_CASE(NotYetToday)
+{
+    WeekCron cron("2345",3600);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233100800), cron.get_next_run(1233099657));
+}
 
-    void Now()
-    {
-        WeekCron cron("2345",3600);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233100800));
-    }
+BOOST_AUTO_TEST_CASE(Now)
+{
+    WeekCron cron("2345",3600);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233100800));
+}
 
-    void LaterToday()
-    {
-        WeekCron cron("2345",3600);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233100801));
-    }
+BOOST_AUTO_TEST_CASE(LaterToday)
+{
+    WeekCron cron("2345",3600);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233100801));
+}
 
-    void Tomorrow()
-    {
-        WeekCron cron("45",3600);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233099657));
-    }
+BOOST_AUTO_TEST_CASE(Tomorrow)
+{
+    WeekCron cron("45",3600);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233187200), cron.get_next_run(1233099657));
+}
 
-    void NextWeek()
-    {
-        WeekCron cron("1",3600);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233532800), cron.get_next_run(1233099657));
-    }
+BOOST_AUTO_TEST_CASE(NextWeek)
+{
+    WeekCron cron("1",3600);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233532800), cron.get_next_run(1233099657));
+}
 
-    void NextWeekFromToday()
-    {
-        WeekCron cron("13",3600);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233532800), cron.get_next_run(1233100801));
-    }
+BOOST_AUTO_TEST_CASE(NextWeekFromToday)
+{
+    WeekCron cron("13",3600);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233532800), cron.get_next_run(1233100801));
+}
 
-    void StartMidnight()
-    {
-        WeekCron cron("2345",0);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
-    }
+BOOST_AUTO_TEST_CASE(StartMidnight)
+{
+    WeekCron cron("2345",0);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233097200), cron.get_next_run(1233097199));
+}
 
-    void StartMidnightTomorrow()
-    {
-        WeekCron cron("2345",0);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233097200));
-    }
+BOOST_AUTO_TEST_CASE(StartMidnightTomorrow)
+{
+    WeekCron cron("2345",0);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233183600), cron.get_next_run(1233097200));
+}
 
-    void StartLastDaysec()
-    {
-        WeekCron cron("2345",86399);
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1233183599), cron.get_next_run(1233097200));
-    }
+BOOST_AUTO_TEST_CASE(StartLastDaysec)
+{
+    WeekCron cron("2345",86399);
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1233183599), cron.get_next_run(1233097200));
+}
 
-    void HalfOpenInterval()
-    {
-        WeekCron cron("2345",86400);
-        CPPUNIT_ASSERT_THROW(cron.get_next_run(1233097200),std::runtime_error);
-    }
+BOOST_AUTO_TEST_CASE(HalfOpenInterval)
+{
+    WeekCron cron("2345",86400);
+    BOOST_REQUIRE_THROW(cron.get_next_run(1233097200),std::runtime_error);
+}
 
-    void LongBeforeDSTBackwards()
-    {
-        WeekCron cron("0123456",75600);
-        // calc at: Sun Oct 26 00:00:00 CEST 2008
-        // expected next run: Sun Oct 26 21:00:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225051200), cron.get_next_run(1224972000));
-    }
+BOOST_AUTO_TEST_CASE(LongBeforeDSTBackwards)
+{
+    WeekCron cron("0123456",75600);
+    // calc at: Sun Oct 26 00:00:00 CEST 2008
+    // expected next run: Sun Oct 26 21:00:00 CET 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1225051200), cron.get_next_run(1224972000));
+}
 
-    void BeforeDSTBackwards1()
-    {
-        WeekCron cron("0123456",7200);
-        // calc at: Sun Oct 26 01:59:59 CEST 2008
-        // expected next run: Sun Oct 26 02:00:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224982800), cron.get_next_run(1224979199));
-    }
+BOOST_AUTO_TEST_CASE(BeforeDSTBackwards1)
+{
+    WeekCron cron("0123456",7200);
+    // calc at: Sun Oct 26 01:59:59 CEST 2008
+    // expected next run: Sun Oct 26 02:00:00 CET 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1224982800), cron.get_next_run(1224979199));
+}
 
-    void BeforeDSTBackwards2()
-    {
-        WeekCron cron("0123456",7200);
-        // calc at: Sun Oct 26 02:59:59 CEST 2008
-        // expected next run: Sun Oct 26 02:00:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224982800), cron.get_next_run(1224982799));
-    }
+BOOST_AUTO_TEST_CASE(BeforeDSTBackwards2)
+{
+    WeekCron cron("0123456",7200);
+    // calc at: Sun Oct 26 02:59:59 CEST 2008
+    // expected next run: Sun Oct 26 02:00:00 CET 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1224982800), cron.get_next_run(1224982799));
+}
 
-    void AtDSTBackwards()
-    {
-        WeekCron cron("0123456",7200);
-        // calc at: Sun Oct 26 02:00:00 CET 2008
-        // expected next run: Mon Oct 27 02:00:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225069200), cron.get_next_run(1224982800));
-    }
+BOOST_AUTO_TEST_CASE(AtDSTBackwards)
+{
+    WeekCron cron("0123456",7200);
+    // calc at: Sun Oct 26 02:00:00 CET 2008
+    // expected next run: Mon Oct 27 02:00:00 CET 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1225069200), cron.get_next_run(1224982800));
+}
 
-    void DuringDSTBackwards()
-    {
-        WeekCron cron("0123456",7200);
-        // calc at: Sun Oct 26 02:00:01 CET 2008
-        // expected next run: Mon Oct 27 02:00:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225069200), cron.get_next_run(1224982801));
-    }
+BOOST_AUTO_TEST_CASE(DuringDSTBackwards)
+{
+    WeekCron cron("0123456",7200);
+    // calc at: Sun Oct 26 02:00:01 CET 2008
+    // expected next run: Mon Oct 27 02:00:00 CET 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1225069200), cron.get_next_run(1224982801));
+}
 
-    void EndDSTBackwards1()
-    {
-        WeekCron cron("0123456",10800);
-        // calc at: Sun Oct 26 02:00:00 CEST 2008
-        // expected next run: Sun Oct 26 03:00:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224986400), cron.get_next_run(1224979200));
-    }
+BOOST_AUTO_TEST_CASE(EndDSTBackwards1)
+{
+    WeekCron cron("0123456",10800);
+    // calc at: Sun Oct 26 02:00:00 CEST 2008
+    // expected next run: Sun Oct 26 03:00:00 CET 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1224986400), cron.get_next_run(1224979200));
+}
 
-    void EndDSTBackwards2()
-    {
-        WeekCron cron("0123456",10800);
-        // calc at: Sun Oct 26 02:00:01 CEST 2008
-        // expected next run: Sun Oct 26 03:00:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224986400), cron.get_next_run(1224979201));
-    }
+BOOST_AUTO_TEST_CASE(EndDSTBackwards2)
+{
+    WeekCron cron("0123456",10800);
+    // calc at: Sun Oct 26 02:00:01 CEST 2008
+    // expected next run: Sun Oct 26 03:00:00 CET 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1224986400), cron.get_next_run(1224979201));
+}
 
-    void EndDSTBackwards3()
-    {
-        WeekCron cron("0123456",10799);
-        // calc at: Sun Oct 26 02:00:01 CEST 2008
-        // expected next run: Sun Oct 26 02:59:59 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224986399), cron.get_next_run(1224979201));
-    }
+BOOST_AUTO_TEST_CASE(EndDSTBackwards3)
+{
+    WeekCron cron("0123456",10799);
+    // calc at: Sun Oct 26 02:00:01 CEST 2008
+    // expected next run: Sun Oct 26 02:59:59 CET 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1224986399), cron.get_next_run(1224979201));
+}
 
-    void EndDSTBackwards4()
-    {
-        WeekCron cron("0123456",10799);
-        // calc at: Sun Oct 26 02:03:20 CET 2008
-        // expected next run: Sun Oct 26 02:59:59 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1224986399), cron.get_next_run(1224983000));
-    }
+BOOST_AUTO_TEST_CASE(EndDSTBackwards4)
+{
+    WeekCron cron("0123456",10799);
+    // calc at: Sun Oct 26 02:03:20 CET 2008
+    // expected next run: Sun Oct 26 02:59:59 CET 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1224986399), cron.get_next_run(1224983000));
+}
 
-    void OverDSTBackwards()
-    {
-        WeekCron cron("234",10800);
-        // calc at: Sat Oct 25 05:00:00 CEST 2008
-        // expected next run: Tue Oct 28 03:00:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225159200), cron.get_next_run(1224903600));
-    }
+BOOST_AUTO_TEST_CASE(OverDSTBackwards)
+{
+    WeekCron cron("234",10800);
+    // calc at: Sat Oct 25 05:00:00 CEST 2008
+    // expected next run: Tue Oct 28 03:00:00 CET 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1225159200), cron.get_next_run(1224903600));
+}
 
-    void OverDSTBackwardsDaychange()
-    {
-        WeekCron cron("234",0);
-        // calc at: Sat Oct 25 00:00:00 CEST 2008
-        // expected next run: Tue Oct 28 00:00:00 CET 2008
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1225148400), cron.get_next_run(1224885600));
-    }
+BOOST_AUTO_TEST_CASE(OverDSTBackwardsDaychange)
+{
+    WeekCron cron("234",0);
+    // calc at: Sat Oct 25 00:00:00 CEST 2008
+    // expected next run: Tue Oct 28 00:00:00 CET 2008
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1225148400), cron.get_next_run(1224885600));
+}
 
-    void LongBeforeDSTForward()
-    {
-        WeekCron cron("0123456",75600);
-        // calc at: Sat Mar 28 22:00:00 CET 2009
-        // expected next run: Sun Mar 29 21:00:00 CEST 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238353200), cron.get_next_run(1238274000));
-    }
+BOOST_AUTO_TEST_CASE(LongBeforeDSTForward)
+{
+    WeekCron cron("0123456",75600);
+    // calc at: Sat Mar 28 22:00:00 CET 2009
+    // expected next run: Sun Mar 29 21:00:00 CEST 2009
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238353200), cron.get_next_run(1238274000));
+}
 
-    void BeforeDSTForward1()
-    {
-        // TODO: resultat Mon Mar 30 02:00:00 CEST 2009
+BOOST_AUTO_TEST_CASE(BeforeDSTForward1)
+{
+    // TODO: resultat Mon Mar 30 02:00:00 CEST 2009
 
-        WeekCron cron("0123456",7200);
-        // calc at: Sun Mar 29 01:59:59 CET 2009
-        // expected next run: Sun Mar 29 03:00:00 CEST 2009
-        // glibc update: CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238288400), cron.get_next_run(1238288399));
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238371200), cron.get_next_run(1238288399));
-    }
+    WeekCron cron("0123456",7200);
+    // calc at: Sun Mar 29 01:59:59 CET 2009
+    // expected next run: Sun Mar 29 03:00:00 CEST 2009
+    // glibc update: BOOST_CHECK_EQUAL( static_cast<time_t>(1238288400), cron.get_next_run(1238288399));
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238371200), cron.get_next_run(1238288399));
+}
 
-    void BeforeDSTForward2()
-    {
-        WeekCron cron("0123456",0);
-        // calc at: Sun Mar 29 01:59:59 CET 2009
-        // expected next run: Mon Mar 30 00:00:00 CEST 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238364000), cron.get_next_run(1238288399));
-    }
+BOOST_AUTO_TEST_CASE(BeforeDSTForward2)
+{
+    WeekCron cron("0123456",0);
+    // calc at: Sun Mar 29 01:59:59 CET 2009
+    // expected next run: Mon Mar 30 00:00:00 CEST 2009
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238364000), cron.get_next_run(1238288399));
+}
 
-    void AtDSTForward()
-    {
-        WeekCron cron("0123456",7200);
-        // calc at: Sun Mar 29 03:00:00 CEST 2009
-        // expected next run: Mon Mar 30 02:00:00 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238371200), cron.get_next_run(1238288400));
-    }
+BOOST_AUTO_TEST_CASE(AtDSTForward)
+{
+    WeekCron cron("0123456",7200);
+    // calc at: Sun Mar 29 03:00:00 CEST 2009
+    // expected next run: Mon Mar 30 02:00:00 2009
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238371200), cron.get_next_run(1238288400));
+}
 
-    void DuringDSTForward()
-    {
-        // TODO: resultat Mon Mar 30 02:30:00 CEST 2009
+BOOST_AUTO_TEST_CASE(DuringDSTForward)
+{
+    // TODO: resultat Mon Mar 30 02:30:00 CEST 2009
 
-        WeekCron cron("0123456",9000);
-        // calc at: Sun Mar 29 01:59:59 CET 2009
-        // expected next run: Sun Mar 29 03:30:00 CEST 2009
-        // glibc update: CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238290200), cron.get_next_run(1238288399));
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238373000), cron.get_next_run(1238288399));
-    }
+    WeekCron cron("0123456",9000);
+    // calc at: Sun Mar 29 01:59:59 CET 2009
+    // expected next run: Sun Mar 29 03:30:00 CEST 2009
+    // glibc update: BOOST_CHECK_EQUAL( static_cast<time_t>(1238290200), cron.get_next_run(1238288399));
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238373000), cron.get_next_run(1238288399));
+}
 
-    void EndDSTForward1()
-    {
-        WeekCron cron("0123456",10800);
-        // calc at: Sun Mar 29 01:59:59 CET 2009
-        // expected next run: Sun Mar 29 03:00:00 CEST 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238288400), cron.get_next_run(1238288399));
-    }
+BOOST_AUTO_TEST_CASE(EndDSTForward1)
+{
+    WeekCron cron("0123456",10800);
+    // calc at: Sun Mar 29 01:59:59 CET 2009
+    // expected next run: Sun Mar 29 03:00:00 CEST 2009
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238288400), cron.get_next_run(1238288399));
+}
 
-    void EndDSTForward2()
-    {
-        WeekCron cron("0123456",10800);
-        // calc at: Sun Mar 29 03:00:00 CEST 2009
-        // expected next run: Mon Mar 30 03:00:00 CEST 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238374800), cron.get_next_run(1238288400));
-    }
+BOOST_AUTO_TEST_CASE(EndDSTForward2)
+{
+    WeekCron cron("0123456",10800);
+    // calc at: Sun Mar 29 03:00:00 CEST 2009
+    // expected next run: Mon Mar 30 03:00:00 CEST 2009
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238374800), cron.get_next_run(1238288400));
+}
 
-    void EndDSTForward3()
-    {
-        WeekCron cron("0123456",10800);
-        // calc at: Sun Mar 29 04:00:00 CEST 2009
-        // expected next run: Mon Mar 30 03:00:00 CEST 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238374800), cron.get_next_run(1238292000));
-    }
+BOOST_AUTO_TEST_CASE(EndDSTForward3)
+{
+    WeekCron cron("0123456",10800);
+    // calc at: Sun Mar 29 04:00:00 CEST 2009
+    // expected next run: Mon Mar 30 03:00:00 CEST 2009
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238374800), cron.get_next_run(1238292000));
+}
 
-    void EndDSTForward4()
-    {
-        WeekCron cron("0123456",86339);
-        // calc at: Sun Mar 29 11:42:06 CEST 2009
-        // expected next run: Sun Mar 29 23:58:59 CEST 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238363939), cron.get_next_run(1238319726));
-    }
+BOOST_AUTO_TEST_CASE(EndDSTForward4)
+{
+    WeekCron cron("0123456",86339);
+    // calc at: Sun Mar 29 11:42:06 CEST 2009
+    // expected next run: Sun Mar 29 23:58:59 CEST 2009
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238363939), cron.get_next_run(1238319726));
+}
 
-    void OverDSTForward()
-    {
-        WeekCron cron("234",10800);
-        // calc at: Sat Mar 28 23:00:00 CET 2009
-        // expected next run: Tue Mar 31 03:00:00 CEST 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238461200), cron.get_next_run(1238277600));
-    }
+BOOST_AUTO_TEST_CASE(OverDSTForward)
+{
+    WeekCron cron("234",10800);
+    // calc at: Sat Mar 28 23:00:00 CET 2009
+    // expected next run: Tue Mar 31 03:00:00 CEST 2009
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238461200), cron.get_next_run(1238277600));
+}
 
-    void OverDSTForwardDaychange()
-    {
-        WeekCron cron("1234",0);
-        // calc at: Sun Mar 29 00:00:00 CET 2009
-        // expected next run: Mon Mar 30 00:00:00 CEST 2009
-        CPPUNIT_ASSERT_EQUAL( static_cast<time_t>(1238364000), cron.get_next_run(1238281200));
-    }
+BOOST_AUTO_TEST_CASE(OverDSTForwardDaychange)
+{
+    WeekCron cron("1234",0);
+    // calc at: Sun Mar 29 00:00:00 CET 2009
+    // expected next run: Mon Mar 30 00:00:00 CEST 2009
+    BOOST_CHECK_EQUAL( static_cast<time_t>(1238364000), cron.get_next_run(1238281200));
+}
 
-    void StartHourStaysTheSameTill2038()
-    {
-        int daysec = 79200;
+BOOST_AUTO_TEST_CASE(StartHourStaysTheSameTill2038)
+{
+    int daysec = 79200;
 
-        // Schedule daily at 22h from 1970 till 01.01.2038. Check every 90 minutes.
-        WeekCron cron("0123456", daysec);
-        for (time_t now = 86400*15; now < 2145916800; now += 90*60)
-        {
-            time_t result = cron.get_next_run(now);
+    // Schedule daily at 22h from 1970 till 01.01.2038. Check every 90 minutes.
+    WeekCron cron("0123456", daysec);
+    for (time_t now = 86400*15; now < 2145916800; now += 90*60)
+    {
+        time_t result = cron.get_next_run(now);
 
-            // Calculate unix time for the begin of the day
-            struct tm calc_daybegin;
-            bool conversion_ok = (localtime_r(&result, &calc_daybegin) != NULL);
-            CPPUNIT_ASSERT_EQUAL(true, conversion_ok);
+        // Calculate unix time for the begin of the day
+        struct tm calc_daybegin;
+        bool conversion_ok = (localtime_r(&result, &calc_daybegin) != NULL);
+        BOOST_CHECK_EQUAL(true, conversion_ok);
 
-            int remain=daysec;
+        int remain=daysec;
 
-            calc_daybegin.tm_hour=remain/3600;
-            remain-=calc_daybegin.tm_hour*3600;
+        calc_daybegin.tm_hour=remain/3600;
+        remain-=calc_daybegin.tm_hour*3600;
 
-            calc_daybegin.tm_min=remain/60;
-            remain-=calc_daybegin.tm_min*60;
+        calc_daybegin.tm_min=remain/60;
+        remain-=calc_daybegin.tm_min*60;
 
-            calc_daybegin.tm_sec=remain;
+        calc_daybegin.tm_sec=remain;
 
-            // tm_isdst=-1 means to use the dst in use at the given time
-            calc_daybegin.tm_isdst=-1;
+        // tm_isdst=-1 means to use the dst in use at the given time
+        calc_daybegin.tm_isdst=-1;
 
-            time_t daytime = mktime(&calc_daybegin);
+        time_t daytime = mktime(&calc_daybegin);
 
-            CPPUNIT_ASSERT_EQUAL(daytime, result);
-        }
+        BOOST_CHECK_EQUAL(daytime, result);
     }
-};
+}
 
-CPPUNIT_TEST_SUITE_REGISTRATION(TestCronPointFunc);
+BOOST_AUTO_TEST_SUITE_END()
index 92cc923..2ca37b0 100644 (file)
 #include <string>
 #include <vector>
 #include <list>
+#include <set>
 #include <iostream>
 #include <iomanip>
 #include <fstream>
 #include <sstream>
 #include <algorithm>
 
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-#include <cppunit/extensions/HelperMacros.h>
+#define BOOST_TEST_DYN_LINK
+#include <boost/test/unit_test.hpp>
 
 #include <filefunc.hxx>
 #include <daemonfunc.hpp>
 using namespace std;
 using namespace I2n;
 
-using namespace CppUnit;
-
-namespace
+class TestFileFuncFixture
 {
-
-
-} // eo namespace <anonymous>
-
-
-class TestFileFunc : public TestFixture
-{
-   CPPUNIT_TEST_SUITE(TestFileFunc);
-
-   CPPUNIT_TEST(StatTest1);
-   CPPUNIT_TEST(DirTest1);
-   CPPUNIT_TEST(PathCuts1);
-   CPPUNIT_TEST(NormalizePath1);
-   CPPUNIT_TEST(NormalizePath2);
-   CPPUNIT_TEST(TestUserAndGroupStuff1);
-   CPPUNIT_TEST(TestUserAndGroupStuff2);
-   CPPUNIT_TEST(TestFileModes1);
-   CPPUNIT_TEST(TestPidOf1);
-   CPPUNIT_TEST(TestCopyFileSourceFail);
-   CPPUNIT_TEST(TestCopyFileDestFail);
-   CPPUNIT_TEST(TestCopyFileOk);
-
-   CPPUNIT_TEST_SUITE_END();
-
 protected:
-
    typedef std::list< std::string > StringList;
-
    std::set<std::string>  used_check_files;
 
    std::string get_check_file_path(std::string tag)
@@ -76,7 +48,6 @@ protected:
       return result;
    } // eo get_check_file_path
 
-
    void remove_check_files()
    {
       for (std::set<std::string>::iterator it= used_check_files.begin();
@@ -93,259 +64,250 @@ protected:
       used_check_files.clear();
    } // eo remove_check_files
 
-
-
 public:
+    TestFileFuncFixture()
+    {
+    }
 
-   void setUp()
-   {
-   } // eo setUp
+    ~TestFileFuncFixture()
+    {
+        remove_check_files();
+    }
+};
 
+BOOST_FIXTURE_TEST_SUITE(TestFileFunc, TestFileFuncFixture)
 
-   void tearDown()
-   {
-      remove_check_files();
-   } // eo tearDown
-
-
-   /*
-    * the tests:
-    */
-
-
-
-   void StatTest1()
-   {
-      I2n::Stat stat("test_filefunc.cpp");
-
-      CPPUNIT_ASSERT_EQUAL( true, (bool)stat );
-      CPPUNIT_ASSERT_EQUAL( true, stat.is_regular_file() );
-      CPPUNIT_ASSERT_EQUAL( false, stat.is_directory() );
-
-      stat= Stat("/dev/null");
-
-      CPPUNIT_ASSERT_EQUAL( true, (bool)stat );
-      CPPUNIT_ASSERT_EQUAL( false, stat.is_regular_file() );
-      CPPUNIT_ASSERT_EQUAL( false, stat.is_directory() );
-      CPPUNIT_ASSERT_EQUAL( true, stat.is_device() );
-      CPPUNIT_ASSERT_EQUAL( true, stat.is_character_device() );
-      CPPUNIT_ASSERT_EQUAL( false, stat.is_block_device() );
-   } // eo StatTest1
-
-
-   void DirTest1()
-   {
-      typedef std::vector< std::string > StringVector;
-      StringVector names;
+BOOST_AUTO_TEST_CASE(StatTest1)
+{
+    I2n::Stat stat("test_filefunc.cpp");
 
-      bool res= I2n::get_dir(".",names);
+    BOOST_CHECK_EQUAL( true, (bool)stat );
+    BOOST_CHECK_EQUAL( true, stat.is_regular_file() );
+    BOOST_CHECK_EQUAL( false, stat.is_directory() );
 
-      CPPUNIT_ASSERT_EQUAL( true, res );
-      CPPUNIT_ASSERT( ! names.empty() );
+    stat= Stat("/dev/null");
 
-      StringVector::iterator it = std::find( names.begin(), names.end(), "test_filefunc.cpp");
-      CPPUNIT_ASSERT( it != names.end() );
+    BOOST_CHECK_EQUAL( true, (bool)stat );
+    BOOST_CHECK_EQUAL( false, stat.is_regular_file() );
+    BOOST_CHECK_EQUAL( false, stat.is_directory() );
+    BOOST_CHECK_EQUAL( true, stat.is_device() );
+    BOOST_CHECK_EQUAL( true, stat.is_character_device() );
+    BOOST_CHECK_EQUAL( false, stat.is_block_device() );
+} // eo StatTest1
 
-      it = std::find( names.begin(), names.end(), "." );
-      CPPUNIT_ASSERT( it == names.end() );
 
-      names= get_dir(".",true);
-      CPPUNIT_ASSERT( ! names.empty() );
+BOOST_AUTO_TEST_CASE(DirTest1)
+{
+    typedef std::vector< std::string > StringVector;
+    StringVector names;
 
-      for (it= names.begin(); it!=names.end(); ++it)
-      {
-         DOUT("  \"" << *it << "\"");
-         CPPUNIT_ASSERT_EQUAL( false, it->empty() );
-      }
+    bool res= I2n::get_dir(".",names);
 
-      it = std::find( names.begin(), names.end(), "." );
-      CPPUNIT_ASSERT( it != names.end() );
-   } // eo DirTest1
+    BOOST_CHECK_EQUAL( true, res );
+    BOOST_CHECK( ! names.empty() );
 
+    StringVector::iterator it = std::find( names.begin(), names.end(), "test_filefunc.cpp");
+    BOOST_CHECK( it != names.end() );
 
+    it = std::find( names.begin(), names.end(), "." );
+    BOOST_CHECK( it == names.end() );
 
-   void PathCuts1()
-   {
-      std::string path1("/an/absolute/path");
+    names= get_dir(".",true);
+    BOOST_CHECK( ! names.empty() );
 
-      CPPUNIT_ASSERT_EQUAL( std::string("/an/absolute"), dirname(path1) );
-      CPPUNIT_ASSERT_EQUAL( std::string("path"), basename(path1) );
+    for (it= names.begin(); it!=names.end(); ++it)
+    {
+        DOUT("  \"" << *it << "\"");
+        BOOST_CHECK_EQUAL( false, it->empty() );
+    }
 
-      std::string path2("just.a.name");
-      CPPUNIT_ASSERT_EQUAL( std::string("just.a.name"), basename(path2) );
-      CPPUNIT_ASSERT_EQUAL( std::string("."), dirname(path2) );
-   } // eo PathCuts1()
+    it = std::find( names.begin(), names.end(), "." );
+    BOOST_CHECK( it != names.end() );
+} // eo DirTest1
 
 
 
-   void NormalizePath1()
-   {
-      std::string path;
+BOOST_AUTO_TEST_CASE(PathCuts1)
+{
+    std::string path1("/an/absolute/path");
 
-      path= normalize_path("/a/simple/path/");
-      CPPUNIT_ASSERT_EQUAL( std::string("/a/simple/path"), path );
+    BOOST_CHECK_EQUAL( std::string("/an/absolute"), dirname(path1) );
+    BOOST_CHECK_EQUAL( std::string("path"), basename(path1) );
 
-      path= normalize_path("//another///simple/.//path//");
-      CPPUNIT_ASSERT_EQUAL( std::string("/another/simple/path"), path );
+    std::string path2("just.a.name");
+    BOOST_CHECK_EQUAL( std::string("just.a.name"), basename(path2) );
+    BOOST_CHECK_EQUAL( std::string("."), dirname(path2) );
+} // eo PathCuts1()
 
-      path= normalize_path("//..//..//a/dummy///../././simple/././/path//");
-      CPPUNIT_ASSERT_EQUAL( std::string("/a/simple/path"), path );
 
-      path= normalize_path("../a/dummy//././..//simple//nice//absolute//.././..//relative/path//");
-      CPPUNIT_ASSERT_EQUAL( std::string("../a/simple/relative/path"), path );
 
-      path= normalize_path("../../a/dummy//././..//simple/../nice//absolute//../.x/..//relative/path//");
-      CPPUNIT_ASSERT_EQUAL( std::string("../../a/nice/relative/path"), path );
+BOOST_AUTO_TEST_CASE(NormalizePath1)
+{
+    std::string path;
 
-   } // eo NormalizePath1
+    path= normalize_path("/a/simple/path/");
+    BOOST_CHECK_EQUAL( std::string("/a/simple/path"), path );
 
-   void NormalizePath2()
-   {
-      std::string path;
+    path= normalize_path("//another///simple/.//path//");
+    BOOST_CHECK_EQUAL( std::string("/another/simple/path"), path );
 
-      path= normalize_path("/");
-      CPPUNIT_ASSERT_EQUAL( std::string("/"), path );
+    path= normalize_path("//..//..//a/dummy///../././simple/././/path//");
+    BOOST_CHECK_EQUAL( std::string("/a/simple/path"), path );
 
-      path= normalize_path("//");
-      CPPUNIT_ASSERT_EQUAL( std::string("/"), path );
+    path= normalize_path("../a/dummy//././..//simple//nice//absolute//.././..//relative/path//");
+    BOOST_CHECK_EQUAL( std::string("../a/simple/relative/path"), path );
 
-      path= normalize_path("/.//");
-      CPPUNIT_ASSERT_EQUAL( std::string("/"), path );
+    path= normalize_path("../../a/dummy//././..//simple/../nice//absolute//../.x/..//relative/path//");
+    BOOST_CHECK_EQUAL( std::string("../../a/nice/relative/path"), path );
 
-      path= normalize_path(".");
-      CPPUNIT_ASSERT_EQUAL( std::string(""), path );
+} // eo NormalizePath1
 
-      path= normalize_path("./");
-      CPPUNIT_ASSERT_EQUAL( std::string(""), path );
+BOOST_AUTO_TEST_CASE(NormalizePath2)
+{
+    std::string path;
 
-      path= normalize_path(".///");
-      CPPUNIT_ASSERT_EQUAL( std::string(""), path );
+    path= normalize_path("/");
+    BOOST_CHECK_EQUAL( std::string("/"), path );
 
-      path= normalize_path("/./data/files");
-      CPPUNIT_ASSERT_EQUAL( std::string("/data/files"), path );
+    path= normalize_path("//");
+    BOOST_CHECK_EQUAL( std::string("/"), path );
 
-      path= normalize_path("./data/files/");
-      CPPUNIT_ASSERT_EQUAL( std::string("data/files"), path );
-   } // eo NormalizePath2
+    path= normalize_path("/.//");
+    BOOST_CHECK_EQUAL( std::string("/"), path );
 
-   void TestUserAndGroupStuff1()
-   {
-      User user_root((uid_t)0);
-      CPPUNIT_ASSERT_EQUAL( true, user_root.is_valid() );
-      CPPUNIT_ASSERT_EQUAL( true, (bool)user_root );
+    path= normalize_path(".");
+    BOOST_CHECK_EQUAL( std::string(""), path );
 
-      CPPUNIT_ASSERT_EQUAL( std::string("root"), user_root.Name );
-      CPPUNIT_ASSERT_EQUAL( (uid_t)0, user_root.Uid );
-      CPPUNIT_ASSERT_EQUAL( (gid_t)0, user_root.Gid );
+    path= normalize_path("./");
+    BOOST_CHECK_EQUAL( std::string(""), path );
 
-      User user_root2("root");
-      CPPUNIT_ASSERT_EQUAL( true, user_root2.is_valid() );
-      CPPUNIT_ASSERT_EQUAL( true, (bool)user_root2 );
+    path= normalize_path(".///");
+    BOOST_CHECK_EQUAL( std::string(""), path );
 
-      CPPUNIT_ASSERT_EQUAL( std::string("root"), user_root2.Name );
-      CPPUNIT_ASSERT_EQUAL( (uid_t)0, user_root2.Uid );
-      CPPUNIT_ASSERT_EQUAL( (gid_t)0, user_root2.Gid );
+    path= normalize_path("/./data/files");
+    BOOST_CHECK_EQUAL( std::string("/data/files"), path );
 
-      Group group_root("root");
-      CPPUNIT_ASSERT_EQUAL( true, group_root.is_valid() );
-      CPPUNIT_ASSERT_EQUAL( true, (bool)group_root );
+    path= normalize_path("./data/files/");
+    BOOST_CHECK_EQUAL( std::string("data/files"), path );
+} // eo NormalizePath2
 
-      CPPUNIT_ASSERT_EQUAL( std::string("root"), group_root.Name );
-      CPPUNIT_ASSERT_EQUAL( (gid_t)0, group_root.Gid );
+BOOST_AUTO_TEST_CASE(TestUserAndGroupStuff1)
+{
+    User user_root((uid_t)0);
+    BOOST_CHECK_EQUAL( true, user_root.is_valid() );
+    BOOST_CHECK_EQUAL( true, (bool)user_root );
 
-   } // TestUserAndGroupStuff1()
+    BOOST_CHECK_EQUAL( std::string("root"), user_root.Name );
+    BOOST_CHECK_EQUAL( (uid_t)0, user_root.Uid );
+    BOOST_CHECK_EQUAL( (gid_t)0, user_root.Gid );
 
-   void TestUserAndGroupStuff2()
-   {
-      // Test if is_valid() works correctly
-      User user_root;
-      CPPUNIT_ASSERT_EQUAL( false, user_root.is_valid() );
+    User user_root2("root");
+    BOOST_CHECK_EQUAL( true, user_root2.is_valid() );
+    BOOST_CHECK_EQUAL( true, (bool)user_root2 );
 
-      Group group_root;
-      CPPUNIT_ASSERT_EQUAL( false, group_root.is_valid() );
-   }
+    BOOST_CHECK_EQUAL( std::string("root"), user_root2.Name );
+    BOOST_CHECK_EQUAL( (uid_t)0, user_root2.Uid );
+    BOOST_CHECK_EQUAL( (gid_t)0, user_root2.Gid );
 
-   void TestFileModes1()
-   {
-      std::string path= get_check_file_path("FileModes1");
+    Group group_root("root");
+    BOOST_CHECK_EQUAL( true, group_root.is_valid() );
+    BOOST_CHECK_EQUAL( true, (bool)group_root );
 
-      write_file(path,"42");
+    BOOST_CHECK_EQUAL( std::string("root"), group_root.Name );
+    BOOST_CHECK_EQUAL( (gid_t)0, group_root.Gid );
 
-      Stat stat(path, false);
-      CPPUNIT_ASSERT_EQUAL( true, stat.is_valid() );
+} // TestUserAndGroupStuff1()
 
-      User user( stat.uid() );
-      Group group( stat.gid() );
+BOOST_AUTO_TEST_CASE(TestUserAndGroupStuff2)
+{
+    // Test if is_valid() works correctly
+    User user_root;
+    BOOST_CHECK_EQUAL( false, user_root.is_valid() );
 
-      CPPUNIT_ASSERT_EQUAL( true, user.is_valid() );
-      CPPUNIT_ASSERT_EQUAL( true, group.is_valid() );
+    Group group_root;
+    BOOST_CHECK_EQUAL( false, group_root.is_valid() );
+}
 
-      bool res=chown( path, user.Name.c_str(), group.Gid );
+BOOST_AUTO_TEST_CASE(TestFileModes1)
+{
+    std::string path= get_check_file_path("FileModes1");
 
-      CPPUNIT_ASSERT_EQUAL( true, res );
-   } // eo TestFileModes1()
+    write_file(path,"42");
 
+    Stat stat(path, false);
+    BOOST_CHECK_EQUAL( true, stat.is_valid() );
 
+    User user( stat.uid() );
+    Group group( stat.gid() );
 
-   void TestPidOf1()
-   {
-      using I2n::Daemon::pid_of;
+    BOOST_CHECK_EQUAL( true, user.is_valid() );
+    BOOST_CHECK_EQUAL( true, group.is_valid() );
 
-      std::vector< pid_t > pid_list;
+    bool res=chown( path, user.Name.c_str(), group.Gid );
 
-      bool res= pid_of("init", pid_list);
+    BOOST_CHECK_EQUAL( true, res );
+} // eo TestFileModes1()
 
-      CPPUNIT_ASSERT_EQUAL( true, res);
-      CPPUNIT_ASSERT_EQUAL( false, pid_list.empty() );
 
-      std::vector< pid_t >::const_iterator pos1 =
-         std::find( pid_list.begin(), pid_list.end(), 1);
 
-      CPPUNIT_ASSERT( pos1 != pid_list.end() );
-   } // eo TestPidOf1()
+BOOST_AUTO_TEST_CASE(TestPidOf1)
+{
+    using I2n::Daemon::pid_of;
 
-   void TestCopyFileSourceFail()
-   {
-      bool res = copy_file("does not exist", "destination");
-      CPPUNIT_ASSERT_EQUAL( false, res );
-   }
+    std::vector< pid_t > pid_list;
 
-   void TestCopyFileDestFail()
-   {
-      bool res = copy_file("/etc/HOSTNAME", "/proc/not/writable");
-      CPPUNIT_ASSERT_EQUAL( false, res );
-   }
+    bool res= pid_of("init", pid_list);
 
-   void TestCopyFileOk()
-   {
-      string input = "copy_source";
-      string data = "test";
+    BOOST_CHECK_EQUAL( true, res);
+    BOOST_CHECK_EQUAL( false, pid_list.empty() );
 
-      long input_size = 0;
-      ofstream finput(input.c_str());
-      if (finput)
-      {
-         finput << data;
-         finput.close();
-         input_size = file_size(input);
-      }
+    std::vector< pid_t >::const_iterator pos1 =
+        std::find( pid_list.begin(), pid_list.end(), 1);
 
-      string output = "copy_dest";
-      long output_size = 0;
-      bool res = copy_file(input, output);
-      if (res)
-      {
-         output_size = file_size(output);
-      }
-      unlink(input);
-      unlink(output);
+    BOOST_CHECK( pos1 != pid_list.end() );
+} // eo TestPidOf1()
 
-      bool size_is_zero = output_size == 0 ? true : false;
+BOOST_AUTO_TEST_CASE(TestCopyFileSourceFail)
+{
+    bool res = copy_file("does not exist", "destination");
+    BOOST_CHECK_EQUAL( false, res );
+}
 
-      CPPUNIT_ASSERT_EQUAL( true, res );
-      CPPUNIT_ASSERT_EQUAL( input_size, output_size );
-      CPPUNIT_ASSERT_EQUAL( false, size_is_zero );
-   }
-}; // eo class TestFileFunc
+BOOST_AUTO_TEST_CASE(TestCopyFileDestFail)
+{
+    bool res = copy_file("/etc/HOSTNAME", "/proc/not/writable");
+    BOOST_CHECK_EQUAL( false, res );
+}
 
-CPPUNIT_TEST_SUITE_REGISTRATION(TestFileFunc);
+BOOST_AUTO_TEST_CASE(TestCopyFileOk)
+{
+    string input = "copy_source";
+    string data = "test";
+
+    long input_size = 0;
+    ofstream finput(input.c_str());
+    if (finput)
+    {
+        finput << data;
+        finput.close();
+        input_size = file_size(input);
+    }
+
+    string output = "copy_dest";
+    long output_size = 0;
+    bool res = copy_file(input, output);
+    if (res)
+    {
+        output_size = file_size(output);
+    }
+    unlink(input);
+    unlink(output);
+
+    bool size_is_zero = output_size == 0 ? true : false;
+
+    BOOST_CHECK_EQUAL( true, res );
+    BOOST_CHECK_EQUAL( input_size, output_size );
+    BOOST_CHECK_EQUAL( false, size_is_zero );
+}
+
+BOOST_AUTO_TEST_SUITE_END()
index 55d04ea..95781c2 100644 (file)
 #include <iomanip>
 #include <list>
 #include <vector>
+#include <set>
 
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-#include <cppunit/extensions/HelperMacros.h>
+#define BOOST_TEST_DYN_LINK
+#include <boost/test/unit_test.hpp>
 
 #include <i2n_global_config.hpp>
 #include <filefunc.hxx>
 
 using namespace I2n;
 
+class TestGlobalConfigFixture
+{
+protected:
+    std::set<std::string>  used_check_files;
+
+    std::string getCheckFilepath(std::string tag)
+    {
+        std::string result;
+        result= "__unittest__" + tag + ".dat";
+        used_check_files.insert(result);
+        return result;
+    } // eo get_check_file_path
+
+    void removeCheckFiles()
+    {
+        for(std::set<std::string>::iterator it= used_check_files.begin();
+            it != used_check_files.end();
+            ++it)
+        {
+            std::string filepath(*it);
+            if (path_exists(filepath))
+            {
+                unlink(filepath);
+            }
+        }
+        used_check_files.clear();
+    } // eo removeCheckFiles
+
+public:
+    TestGlobalConfigFixture()
+    {
+        //Logger::enable_stderr_log(true);
+        //Logger::set_log_level( Logger::LogLevel::Debug );
+        used_check_files.clear();
+    }
+
+    ~TestGlobalConfigFixture()
+    {
+        removeCheckFiles();
+        //Logger::enable_stderr_log(false);
+        //Logger::set_log_level( Logger::LogLevel::Error );
+    }
+};
+
+BOOST_FIXTURE_TEST_SUITE(TestGlobalConfig, TestGlobalConfigFixture)
+
+BOOST_AUTO_TEST_CASE(Basics)
+{
+    std::string filename= getCheckFilepath("Basics");
+    std::string cfg(
+        "a path= /var/run/my.pid\n"
+        "\n"
+        "[sec1]\n"
+        "s1 = ein Text\n"
+        "i1 = 100\n"
+        "f1 = 2.5\n"
+    );
+    std::string cfg2(
+        "a path= /var/run/my.pid\n"
+        "\n"
+        "[sec1]\n"
+        "s1 = ein Text\n"
+        "i1 = 10\n"
+        "f1 = 3.5\n"
+        "i2 = 010\n"
+        "i3 = 0x10\n"
+    );
+    bool res= write_file(filename,cfg);
+    BOOST_CHECK_EQUAL( true, res );
 
-using namespace CppUnit;
+    Config::Var<std::string> var_s1("sec1", "s1", "nix");
 
+    res= Config::set_config_file(filename);
+    BOOST_CHECK_EQUAL( true, res );
 
-class TestGlobalConfig : public TestFixture
-{
-    CPPUNIT_TEST_SUITE(TestGlobalConfig);
+    BOOST_CHECK_EQUAL( std::string("ein Text"), (std::string)var_s1 );
 
-    CPPUNIT_TEST(Basics);
-    CPPUNIT_TEST(MultipleValues);
-    CPPUNIT_TEST(MultipleValuesVanish);
+    Config::Var<int> var_i1("sec1","i1",0);
+    BOOST_CHECK_EQUAL( 100, var_i1() );
 
-    CPPUNIT_TEST_SUITE_END();
+    Config::Var<double> var_f1("sec1","f1", 0.0);
+    BOOST_CHECK_EQUAL( 2.5, var_f1() );
 
-    protected:
+    Config::Var<const std::string> pid_path("a path", "/var/run/x.pid");
+    BOOST_CHECK_EQUAL( std::string("/var/run/my.pid"), pid_path() ); 
 
-        std::set<std::string>  used_check_files;
+    // try an already used var again as different type:
+    Config::Var<std::string> var_i1s("sec1","i1","0");
+    BOOST_CHECK_EQUAL( std::string("100"), var_i1s() );
 
 
-        std::string getCheckFilepath(std::string tag)
-        {
-            std::string result;
-            result= "__unittest__" + tag + ".dat";
-            used_check_files.insert(result);
-            return result;
-        } // eo get_check_file_path
-        
-        
-        void removeCheckFiles()
-        {
-            for(std::set<std::string>::iterator it= used_check_files.begin();
-                it != used_check_files.end();
-                ++it)
-            {
-                std::string filepath(*it);
-                if (path_exists(filepath))
-                {
-                    unlink(filepath);
-                }
-            }
-            used_check_files.clear();
-        } // eo removeCheckFiles
-    
-        
-    
-    public:
-    
-        void setUp()
-        {
-            //Logger::enable_stderr_log(true);
-            //Logger::set_log_level( Logger::LogLevel::Debug );
-            used_check_files.clear();
-        } // eo setUp
-        
-        
-        void tearDown()
-        {
-            removeCheckFiles();
-            //Logger::enable_stderr_log(false);
-            //Logger::set_log_level( Logger::LogLevel::Error );
-        } // eo tearDown
-        
-        
-        /*
-         * the tests:
-         */
-        
-        
-        
-        void Basics()
-        {
-            std::string filename= getCheckFilepath("Basics");
-            std::string cfg(
-                "a path= /var/run/my.pid\n"
-                "\n"
-                "[sec1]\n"
-                "s1 = ein Text\n"
-                "i1 = 100\n"
-                "f1 = 2.5\n"
-            );
-            std::string cfg2(
-                "a path= /var/run/my.pid\n"
-                "\n"
-                "[sec1]\n"
-                "s1 = ein Text\n"
-                "i1 = 10\n"
-                "f1 = 3.5\n"
-                "i2 = 010\n"
-                "i3 = 0x10\n"
-            );
-            bool res= write_file(filename,cfg);
-            CPPUNIT_ASSERT_EQUAL( true, res );
-            
-            Config::Var<std::string> var_s1("sec1", "s1", "nix");
-            
-            res= Config::set_config_file(filename);
-            CPPUNIT_ASSERT_EQUAL( true, res );
-            
-            CPPUNIT_ASSERT_EQUAL( std::string("ein Text"), (std::string)var_s1 );
-            
-            Config::Var<int> var_i1("sec1","i1",0);
-            CPPUNIT_ASSERT_EQUAL( 100, var_i1() );
-            
-            Config::Var<double> var_f1("sec1","f1", 0.0);
-            CPPUNIT_ASSERT_EQUAL( 2.5, var_f1() );
-            
-            Config::Var<const std::string> pid_path("a path", "/var/run/x.pid");
-            CPPUNIT_ASSERT_EQUAL( std::string("/var/run/my.pid"), pid_path() ); 
-            
-            // try an already used var again as different type:
-            Config::Var<std::string> var_i1s("sec1","i1","0");
-            CPPUNIT_ASSERT_EQUAL( std::string("100"), var_i1s() );
-            
-            
-            // make a copy from a given var:
-            Config::Var< int > var_i1_2 ( var_i1 );
-            CPPUNIT_ASSERT_EQUAL( 100, var_i1_2() );
-            
-            // now write a modified config
-            res= write_file(filename,cfg2);
-            CPPUNIT_ASSERT_EQUAL( true, res );
-            
-            // .. and reload.
-            res= Config::reload();
-            CPPUNIT_ASSERT_EQUAL( true, res );
-            
-            // check if the (right) vars changed..
-            
-            CPPUNIT_ASSERT_EQUAL( std::string("ein Text"), (std::string)var_s1 );
-            CPPUNIT_ASSERT_EQUAL( 10, var_i1() );
-            CPPUNIT_ASSERT_EQUAL( std::string("10"), var_i1s() );
-            CPPUNIT_ASSERT_EQUAL( 3.5, var_f1() );
-            CPPUNIT_ASSERT_EQUAL( 10, var_i1_2() );
-            
-            // check for the new vars
-            
-            Config::Var<int, Config::AutoIntConverter<int> > var_i2("sec1","i2",0);
-            CPPUNIT_ASSERT_EQUAL( 8, var_i2() );
-            
-            Config::Var<int, Config::AutoIntConverter<int> > var_i3("sec1","i3",0);
-            CPPUNIT_ASSERT_EQUAL( 16, var_i3() );
-        } // eo Basics
-
-
-
-        void MultipleValues()
-        {
-            std::string filename= getCheckFilepath("MultipleValues");
-            std::string cfg(
-                "[sec1]\n"
-                "g1 = 11\n"
-                "g1 = 12\n"
-                "g2 = 21\n"
-                "g2 = 22\n"
-                "g1 = 13\n"
-                "g1 = 14\n"
-            );
-            std::string cfg2(
-                "[sec1]\n"
-                "g1 = 11\n"
-                "g1 = 12\n"
-                "g2 = 20\n"
-                "g2 = 22\n"
-                "g1 = 13\n"
-            );
-
-            bool res= write_file(filename,cfg);
-            CPPUNIT_ASSERT_EQUAL( true, res );
-
-            typedef std::list< int > IntList;
-            typedef std::vector< int > IntVector;
-
-            res= Config::set_config_file(filename);
-            CPPUNIT_ASSERT_EQUAL( true, res );
-
-            Config::Var< IntList > list1("sec1","g1", IntList());
-            Config::Var< IntList > list2("sec1","g2", IntList());
-
-            CPPUNIT_ASSERT_EQUAL( 4u, list1().size() );
-            CPPUNIT_ASSERT_EQUAL( 2u, list2().size() );
-
-            CPPUNIT_ASSERT_EQUAL( 11, list1().front() );
-            CPPUNIT_ASSERT_EQUAL( 14, list1().back() );
-            CPPUNIT_ASSERT_EQUAL( 21, list2().front() );
-            CPPUNIT_ASSERT_EQUAL( 22, list2().back() );
-
-            Config::Var< IntVector > vector1("sec1","g1", IntVector());
-            Config::Var< IntVector > vector2("sec1","g2", IntVector());
-
-            CPPUNIT_ASSERT_EQUAL( 4u, vector1().size() );
-            CPPUNIT_ASSERT_EQUAL( 2u, vector2().size() );
-
-            CPPUNIT_ASSERT_EQUAL( 11, vector1().front() );
-            CPPUNIT_ASSERT_EQUAL( 14, vector1().back() );
-            CPPUNIT_ASSERT_EQUAL( 21, vector2().front() );
-            CPPUNIT_ASSERT_EQUAL( 22, vector2().back() );
-
-            // now write a modified config
-            res= write_file(filename,cfg2);
-            CPPUNIT_ASSERT_EQUAL( true, res );
-
-            // .. and reload.
-            res= Config::reload();
-            CPPUNIT_ASSERT_EQUAL( true, res );
-
-            // check if the (right) vars changed..
-
-            CPPUNIT_ASSERT_EQUAL( 3u, list1().size() );
-            CPPUNIT_ASSERT_EQUAL( 2u, list2().size() );
-
-            CPPUNIT_ASSERT_EQUAL( 11, list1().front() );
-            CPPUNIT_ASSERT_EQUAL( 13, list1().back() );
-            CPPUNIT_ASSERT_EQUAL( 20, list2().front() );
-            CPPUNIT_ASSERT_EQUAL( 22, list2().back() );
-
-        } // eo MultipleValues
-
-
-        void MultipleValuesVanish()
-        {
-            std::string filename= getCheckFilepath("MultipleValuesVanish");
-            std::string cfg(
-                "[sec1]\n"
-                "g1 = 11\n"
-                "g1 = 12\n"
-                "g2 = 21\n"
-            );
-            std::string cfg2(
-                "[sec1]\n"
-                "g1 = 11\n"
-            );
+    // make a copy from a given var:
+    Config::Var< int > var_i1_2 ( var_i1 );
+    BOOST_CHECK_EQUAL( 100, var_i1_2() );
+
+    // now write a modified config
+    res= write_file(filename,cfg2);
+    BOOST_CHECK_EQUAL( true, res );
+
+    // .. and reload.
+    res= Config::reload();
+    BOOST_CHECK_EQUAL( true, res );
+
+    // check if the (right) vars changed..
+
+    BOOST_CHECK_EQUAL( std::string("ein Text"), (std::string)var_s1 );
+    BOOST_CHECK_EQUAL( 10, var_i1() );
+    BOOST_CHECK_EQUAL( std::string("10"), var_i1s() );
+    BOOST_CHECK_EQUAL( 3.5, var_f1() );
+    BOOST_CHECK_EQUAL( 10, var_i1_2() );
 
-            bool res= write_file(filename,cfg);
-            CPPUNIT_ASSERT_EQUAL( true, res );
+    // check for the new vars
 
-            typedef std::list< int > IntList;
-            typedef std::vector< int > IntVector;
+    Config::Var<int, Config::AutoIntConverter<int> > var_i2("sec1","i2",0);
+    BOOST_CHECK_EQUAL( 8, var_i2() );
+
+    Config::Var<int, Config::AutoIntConverter<int> > var_i3("sec1","i3",0);
+    BOOST_CHECK_EQUAL( 16, var_i3() );
+} // eo Basics
+
+
+
+BOOST_AUTO_TEST_CASE(MultipleValues)
+{
+    std::string filename= getCheckFilepath("MultipleValues");
+    std::string cfg(
+        "[sec1]\n"
+        "g1 = 11\n"
+        "g1 = 12\n"
+        "g2 = 21\n"
+        "g2 = 22\n"
+        "g1 = 13\n"
+        "g1 = 14\n"
+    );
+    std::string cfg2(
+        "[sec1]\n"
+        "g1 = 11\n"
+        "g1 = 12\n"
+        "g2 = 20\n"
+        "g2 = 22\n"
+        "g1 = 13\n"
+    );
+
+    bool res= write_file(filename,cfg);
+    BOOST_CHECK_EQUAL( true, res );
+
+    typedef std::list< int > IntList;
+    typedef std::vector< int > IntVector;
+
+    res= Config::set_config_file(filename);
+    BOOST_CHECK_EQUAL( true, res );
+
+    Config::Var< IntList > list1("sec1","g1", IntList());
+    Config::Var< IntList > list2("sec1","g2", IntList());
+
+    BOOST_CHECK_EQUAL( 4u, list1().size() );
+    BOOST_CHECK_EQUAL( 2u, list2().size() );
+
+    BOOST_CHECK_EQUAL( 11, list1().front() );
+    BOOST_CHECK_EQUAL( 14, list1().back() );
+    BOOST_CHECK_EQUAL( 21, list2().front() );
+    BOOST_CHECK_EQUAL( 22, list2().back() );
+
+    Config::Var< IntVector > vector1("sec1","g1", IntVector());
+    Config::Var< IntVector > vector2("sec1","g2", IntVector());
+
+    BOOST_CHECK_EQUAL( 4u, vector1().size() );
+    BOOST_CHECK_EQUAL( 2u, vector2().size() );
+
+    BOOST_CHECK_EQUAL( 11, vector1().front() );
+    BOOST_CHECK_EQUAL( 14, vector1().back() );
+    BOOST_CHECK_EQUAL( 21, vector2().front() );
+    BOOST_CHECK_EQUAL( 22, vector2().back() );
+
+    // now write a modified config
+    res= write_file(filename,cfg2);
+    BOOST_CHECK_EQUAL( true, res );
+
+    // .. and reload.
+    res= Config::reload();
+    BOOST_CHECK_EQUAL( true, res );
+
+    // check if the (right) vars changed..
+
+    BOOST_CHECK_EQUAL( 3u, list1().size() );
+    BOOST_CHECK_EQUAL( 2u, list2().size() );
+
+    BOOST_CHECK_EQUAL( 11, list1().front() );
+    BOOST_CHECK_EQUAL( 13, list1().back() );
+    BOOST_CHECK_EQUAL( 20, list2().front() );
+    BOOST_CHECK_EQUAL( 22, list2().back() );
+
+} // eo MultipleValues
+
+
+BOOST_AUTO_TEST_CASE(MultipleValuesVanish)
+{
+    std::string filename= getCheckFilepath("MultipleValuesVanish");
+    std::string cfg(
+        "[sec1]\n"
+        "g1 = 11\n"
+        "g1 = 12\n"
+        "g2 = 21\n"
+    );
+    std::string cfg2(
+        "[sec1]\n"
+        "g1 = 11\n"
+    );
 
-            res= Config::set_config_file(filename);
-            CPPUNIT_ASSERT_EQUAL( true, res );
+    bool res= write_file(filename,cfg);
+    BOOST_CHECK_EQUAL( true, res );
 
-            Config::Var< IntList > list1("sec1","g1", IntList());
-            Config::Var< IntList > list2("sec1","g2", IntList());
+    typedef std::list< int > IntList;
+    typedef std::vector< int > IntVector;
 
-            CPPUNIT_ASSERT_EQUAL( 2u, list1().size() );
-            CPPUNIT_ASSERT_EQUAL( 1u, list2().size() );
+    res= Config::set_config_file(filename);
+    BOOST_CHECK_EQUAL( true, res );
 
-            CPPUNIT_ASSERT_EQUAL( 11, list1().front() );
-            CPPUNIT_ASSERT_EQUAL( 12, list1().back() );
-            CPPUNIT_ASSERT_EQUAL( 21, list2().front() );
-            CPPUNIT_ASSERT_EQUAL( 21, list2().back() );
+    Config::Var< IntList > list1("sec1","g1", IntList());
+    Config::Var< IntList > list2("sec1","g2", IntList());
 
-            Config::Var< IntVector > vector1("sec1","g1", IntVector());
-            Config::Var< IntVector > vector2("sec1","g2", IntVector());
+    BOOST_CHECK_EQUAL( 2u, list1().size() );
+    BOOST_CHECK_EQUAL( 1u, list2().size() );
 
-            CPPUNIT_ASSERT_EQUAL( 2u, vector1().size() );
-            CPPUNIT_ASSERT_EQUAL( 1u, vector2().size() );
+    BOOST_CHECK_EQUAL( 11, list1().front() );
+    BOOST_CHECK_EQUAL( 12, list1().back() );
+    BOOST_CHECK_EQUAL( 21, list2().front() );
+    BOOST_CHECK_EQUAL( 21, list2().back() );
 
-            CPPUNIT_ASSERT_EQUAL( 11, vector1().front() );
-            CPPUNIT_ASSERT_EQUAL( 12, vector1().back() );
-            CPPUNIT_ASSERT_EQUAL( 21, vector2().front() );
-            CPPUNIT_ASSERT_EQUAL( 21, vector2().back() );
+    Config::Var< IntVector > vector1("sec1","g1", IntVector());
+    Config::Var< IntVector > vector2("sec1","g2", IntVector());
 
-            // now write a modified config
-            res= write_file(filename,cfg2);
-            CPPUNIT_ASSERT_EQUAL( true, res );
+    BOOST_CHECK_EQUAL( 2u, vector1().size() );
+    BOOST_CHECK_EQUAL( 1u, vector2().size() );
 
-            // .. and reload.
-            res= Config::reload();
-            CPPUNIT_ASSERT_EQUAL( true, res );
+    BOOST_CHECK_EQUAL( 11, vector1().front() );
+    BOOST_CHECK_EQUAL( 12, vector1().back() );
+    BOOST_CHECK_EQUAL( 21, vector2().front() );
+    BOOST_CHECK_EQUAL( 21, vector2().back() );
 
-            // check if the (right) vars changed..
+    // now write a modified config
+    res= write_file(filename,cfg2);
+    BOOST_CHECK_EQUAL( true, res );
 
-            CPPUNIT_ASSERT_EQUAL( 1u, list1().size() );
-            CPPUNIT_ASSERT_EQUAL( 0u, list2().size() );
+    // .. and reload.
+    res= Config::reload();
+    BOOST_CHECK_EQUAL( true, res );
 
-            CPPUNIT_ASSERT_EQUAL( 11, list1().front() );
+    // check if the (right) vars changed..
 
-        } // eo MultipleValuesVanish
+    BOOST_CHECK_EQUAL( 1u, list1().size() );
+    BOOST_CHECK_EQUAL( 0u, list2().size() );
 
+    BOOST_CHECK_EQUAL( 11, list1().front() );
 
-}; // eo class TestGlobalConfig
+} // eo MultipleValuesVanish
 
-CPPUNIT_TEST_SUITE_REGISTRATION(TestGlobalConfig);
+BOOST_AUTO_TEST_SUITE_END()
index 8758e1f..a45ba46 100644 (file)
 #include <iomanip>
 #include <exception>
 
-
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-#include <cppunit/extensions/HelperMacros.h>
+#define BOOST_TEST_DYN_LINK
+#include <boost/test/unit_test.hpp>
 
 #include <logfunc.hpp>
 #include <tracefunc.hpp>
@@ -28,9 +26,6 @@
 #define DOUT(msg) do {} while (0)
 #endif
 
-
-using namespace CppUnit;
-
 using namespace I2n;
 
 namespace {
@@ -39,94 +34,77 @@ Logger::PartLogger module_logger(HERE);
 
 } // eo namespace <anonymous>
 
+class TestLoggingFixture
+{
+public:
+    TestLoggingFixture()
+    {
+    }
+
+    ~TestLoggingFixture()
+    {
+        Logger::set_log_level(0);
+        Logger::enable_syslog(false);
+        Logger::enable_stderr_log(false);
+        Logger::enable_log_file(false);
+    }
+};
+
+BOOST_FIXTURE_TEST_SUITE(TestLogging, TestLoggingFixture)
+
+BOOST_AUTO_TEST_CASE(Syslog1)
+{
+    //Logger::enable_syslog("I2N Unittest", Logger::Facility::User );
+    Logger::enable_syslog( Logger::Facility::User );
+    Logger::PartLogger log(__func__);
+
+    Logger::set_log_level( 7 );
+    Logger::enable_stderr_log();
+    Logger::enable_log_file("zzUnitTest.log");
+
+    log.error("Test error msg");
+    log.error() << "Stream test error msg #" << 2 << ".";
+    log.warning() << "Stream test warning msg";
+    log.notice() << "Stream test notice msg";
+    log.info() << "Stream test info msg";
+    log.debug() << "Stream test debug msg";
+
+    log.debug()
+        << "multiline log message" << std::endl
+        << "this (second) line should be indented" << std::endl
+        << "and this also!" << std::endl;
+    log.debug(HERE) << "This should have a source info";
+
+    module_logger.debug(HERE) << "module level debug message with source loc info";
+} // eo Syslog1()
+
 
 
-class TestLogging : public TestFixture
+BOOST_AUTO_TEST_CASE(TestScopeTrace1)
 {
-    CPPUNIT_TEST_SUITE(TestLogging);
-    
-    CPPUNIT_TEST(Syslog1);
-    CPPUNIT_TEST(TestScopeTrace1);
-    
-    CPPUNIT_TEST_SUITE_END();
-    
-    public:
-    
-        void setUp()
-        {
-        } // eo setUp
-        
-        
-        void tearDown()
-        {
-            Logger::set_log_level(0);
-            Logger::enable_syslog(false);
-            Logger::enable_stderr_log(false);
-            Logger::enable_log_file(false);
-        } // eo tearDown
-        
-        
-        /*
-         * the tests:
-         */
-        
-        
-        void Syslog1()
-        {
-            //Logger::enable_syslog("I2N Unittest", Logger::Facility::User );
-            Logger::enable_syslog( Logger::Facility::User );
-            Logger::PartLogger log(__func__);
-            
-            Logger::set_log_level( 7 );
-            Logger::enable_stderr_log();
-            Logger::enable_log_file("zzUnitTest.log");
-            
-            log.error("Test error msg");
-            log.error() << "Stream test error msg #" << 2 << ".";
-            log.warning() << "Stream test warning msg";
-            log.notice() << "Stream test notice msg";
-            log.info() << "Stream test info msg";
-            log.debug() << "Stream test debug msg";
-            
-            log.debug()
-                << "multiline log message" << std::endl
-                << "this (second) line should be indented" << std::endl
-                << "and this also!" << std::endl;
-            log.debug(HERE) << "This should have a source info";
-            
-            module_logger.debug(HERE) << "module level debug message with source loc info";
-        } // eo Syslog1()
-        
-        
-        
-        void TestScopeTrace1()
+    //Logger::enable_syslog("I2N Unittest", Logger::Facility::User );
+    Logger::enable_syslog( Logger::Facility::User );
+    Logger::PartLogger log(__func__);
+
+    Logger::set_log_level( 7 );
+    Logger::enable_stderr_log();
+    Logger::enable_log_file("zzUnitTest.log");
+
+    SCOPETRACKER();
+
+    log.notice() << "Stream test notice msg";
+    {
+        SCOPETRACKER(); // #2
         {
-            //Logger::enable_syslog("I2N Unittest", Logger::Facility::User );
-            Logger::enable_syslog( Logger::Facility::User );
-            Logger::PartLogger log(__func__);
-            
-            Logger::set_log_level( 7 );
-            Logger::enable_stderr_log();
-            Logger::enable_log_file("zzUnitTest.log");
-            
-            SCOPETRACKER();
-            
-            log.notice() << "Stream test notice msg";
+            SCOPETRACKER(); // #3
             {
-                SCOPETRACKER(); // #2
-                {
-                    SCOPETRACKER(); // #3
-                    {
-                        SCOPETRACKER(); // #4
-                    }
-                }
-                {
-                    SCOPETRACKER(); // #3
-                }
+                SCOPETRACKER(); // #4
             }
-        } // eo TestScopeTrace1()
-
-}; // eo class TestLogging
-
+        }
+        {
+            SCOPETRACKER(); // #3
+        }
+    }
+} // eo TestScopeTrace1()
 
-CPPUNIT_TEST_SUITE_REGISTRATION(TestLogging);
+BOOST_AUTO_TEST_SUITE_END()
index 815ae85..198c3ec 100644 (file)
 #include <sstream>
 #include <stdexcept>
 
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-#include <cppunit/extensions/HelperMacros.h>
+#define BOOST_TEST_DYN_LINK
+#include <boost/test/unit_test.hpp>
 
 #include <pidfile.hpp>
 #include <filefunc.hxx>
 
 using namespace std;
-using namespace CppUnit;
 
-class TestPidFile : public TestFixture
+class TestPidFileFixture
 {
-   CPPUNIT_TEST_SUITE(TestPidFile);
+protected:
+   string Filename;
 
-   CPPUNIT_TEST(WriteFile);
-   CPPUNIT_TEST(AutoRemoval);
-   CPPUNIT_TEST(NoAutoRemoval);
-   CPPUNIT_TEST(NotRunning);
-   CPPUNIT_TEST(IsAlreadyRunning);
+public:
+    TestPidFileFixture()
+    {
+        ostringstream out;
+        out << "/var/run/test_pidfile.run." << getpid();
 
-   CPPUNIT_TEST_SUITE_END();
+        Filename = out.str();
+    }
 
-public:
-   void setUp()
-   {
-      ostringstream out;
-      out << "/var/run/test_pidfile.run." << getpid();
-
-      Filename = out.str();
-   }
-
-   void tearDown()
-   {
-   }
-
-   void WriteFile()
-   {
-      PidFile pidfile(Filename);
-      bool rtn_write = pidfile.write();
-
-      CPPUNIT_ASSERT_EQUAL(true, rtn_write);
-   }
-
-   void AutoRemoval()
-   {
-      bool rtn_write = false;
-      {
-         PidFile pidfile(Filename);
-         rtn_write = pidfile.write();
-      }
-      bool exists = I2n::file_exists(Filename);
-
-      CPPUNIT_ASSERT_EQUAL(true, rtn_write);
-      CPPUNIT_ASSERT_EQUAL(false, exists);
-   }
-
-   void NoAutoRemoval()
-   {
-      bool rtn_write = false;
-      {
-         PidFile pidfile(Filename, false);
-         rtn_write = pidfile.write();
-      }
-      bool exists = I2n::file_exists(Filename);
-      I2n::unlink(Filename);
-
-      CPPUNIT_ASSERT_EQUAL(true, rtn_write);
-      CPPUNIT_ASSERT_EQUAL(true, exists);
-   }
-
-   void NotRunning()
-   {
-      PidFile pidfile(Filename);
-      bool rtn_check = pidfile.check_already_running();
-
-      CPPUNIT_ASSERT_EQUAL(false, rtn_check);
-   }
-
-   void IsAlreadyRunning()
-   {
-      PidFile pidfile1(Filename);
-      bool rtn_file1_check = pidfile1.check_already_running();
-      bool rtn_file1_write = pidfile1.write();
-
-      CPPUNIT_ASSERT_EQUAL(false, rtn_file1_check);
-      CPPUNIT_ASSERT_EQUAL(true, rtn_file1_write);
-
-      PidFile pidfile2(Filename);
-      pid_t my_pid = 0;
-      bool rtn_file2_check = pidfile2.check_already_running(&my_pid);
-
-      CPPUNIT_ASSERT_EQUAL(true, rtn_file2_check);
-      CPPUNIT_ASSERT_EQUAL(getpid(), my_pid);
-   }
-
-private:
-   string Filename;
+    ~TestPidFileFixture()
+    {
+    }
 };
 
-CPPUNIT_TEST_SUITE_REGISTRATION(TestPidFile);
+BOOST_FIXTURE_TEST_SUITE(TestPidFile, TestPidFileFixture)
+
+BOOST_AUTO_TEST_CASE(WriteFile)
+{
+    PidFile pidfile(Filename);
+    bool rtn_write = pidfile.write();
+
+    BOOST_CHECK_EQUAL(true, rtn_write);
+}
+
+BOOST_AUTO_TEST_CASE(AutoRemoval)
+{
+    bool rtn_write = false;
+    {
+        PidFile pidfile(Filename);
+        rtn_write = pidfile.write();
+    }
+    bool exists = I2n::file_exists(Filename);
+
+    BOOST_CHECK_EQUAL(true, rtn_write);
+    BOOST_CHECK_EQUAL(false, exists);
+}
+
+BOOST_AUTO_TEST_CASE(NoAutoRemoval)
+{
+    bool rtn_write = false;
+    {
+        PidFile pidfile(Filename, false);
+        rtn_write = pidfile.write();
+    }
+    bool exists = I2n::file_exists(Filename);
+    I2n::unlink(Filename);
+
+    BOOST_CHECK_EQUAL(true, rtn_write);
+    BOOST_CHECK_EQUAL(true, exists);
+}
+
+BOOST_AUTO_TEST_CASE(NotRunning)
+{
+    PidFile pidfile(Filename);
+    bool rtn_check = pidfile.check_already_running();
+
+    BOOST_CHECK_EQUAL(false, rtn_check);
+}
+
+BOOST_AUTO_TEST_CASE(IsAlreadyRunning)
+{
+    PidFile pidfile1(Filename);
+    bool rtn_file1_check = pidfile1.check_already_running();
+    bool rtn_file1_write = pidfile1.write();
+
+    BOOST_CHECK_EQUAL(false, rtn_file1_check);
+    BOOST_CHECK_EQUAL(true, rtn_file1_write);
+
+    PidFile pidfile2(Filename);
+    pid_t my_pid = 0;
+    bool rtn_file2_check = pidfile2.check_already_running(&my_pid);
+
+    BOOST_CHECK_EQUAL(true, rtn_file2_check);
+    BOOST_CHECK_EQUAL(getpid(), my_pid);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
index 53238b6..900d587 100644 (file)
@@ -7,71 +7,23 @@
  *
  */
 
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-#include <cppunit/extensions/HelperMacros.h>
+#define BOOST_TEST_DYN_LINK
+#include <boost/test/unit_test.hpp>
 
 #include <timefunc.hxx>
 #include <filefunc.hxx>
 
 #include <unistd.h>
-
+#include <set>
 
 using namespace std;
 using namespace I2n;
 using namespace I2n::Time;
-using namespace CppUnit;
-
-namespace
-{
-
-
-} // eo namespace <anonymous>
 
-
-class TestTimeFunc : public TestFixture
+class TestTimeFuncFixture
 {
-   CPPUNIT_TEST_SUITE(TestTimeFunc);
-
-   CPPUNIT_TEST(AddIntervalsDisjoint);
-   CPPUNIT_TEST(AddIntervalsInclude);
-   CPPUNIT_TEST(AddIntervalsEmbrace);
-   CPPUNIT_TEST(AddIntervalsJoin1);
-   CPPUNIT_TEST(AddIntervalsJoin1b);
-   CPPUNIT_TEST(AddIntervalsJoin2);
-
-   CPPUNIT_TEST(SubIntervalsDisjoint);
-   CPPUNIT_TEST(SubIntervalsExact);
-   CPPUNIT_TEST(SubIntervalsSplit1);
-   CPPUNIT_TEST(SubIntervalsCutFront);
-   CPPUNIT_TEST(SubIntervalsCutBack);
-   CPPUNIT_TEST(SubIntervalsCutMore);
-
-   CPPUNIT_TEST(IntervalComparisons);
-
-   CPPUNIT_TEST(MonotonicClock);
-
-   CPPUNIT_TEST(WeekInvalid);
-   CPPUNIT_TEST(WeekDisplayString1);
-   CPPUNIT_TEST(WeekDisplayString2);
-   CPPUNIT_TEST(WeekDisplayString3);
-   CPPUNIT_TEST(WeekDisplayString4);
-   CPPUNIT_TEST(WeekDisplayString5);
-   CPPUNIT_TEST(WeekDisplayString6);
-   CPPUNIT_TEST(WeekDisplayString7);
-   CPPUNIT_TEST(WeekDisplayString8);
-   CPPUNIT_TEST(WeekDisplayString9);
-   CPPUNIT_TEST(WeekDisplayString10);
-   CPPUNIT_TEST(WeekDisplayString11);
-   CPPUNIT_TEST(WeekDisplayString12);
-   CPPUNIT_TEST(WeekDisplayString13);
-
-   CPPUNIT_TEST_SUITE_END();
-
 protected:
-
    typedef std::list< std::string > StringList;
-
    std::set<std::string>  used_check_files;
 
    std::string get_check_file_path(std::string tag)
@@ -82,7 +34,6 @@ protected:
       return result;
    } // eo get_check_file_path
 
-
    void remove_check_files()
    {
       for (std::set<std::string>::iterator it= used_check_files.begin();
@@ -99,387 +50,379 @@ protected:
       used_check_files.clear();
    } // eo remove_check_files
 
-
-
 public:
+    TestTimeFuncFixture()
+    {
+    }
+
+    ~TestTimeFuncFixture()
+    {
+        remove_check_files();
+    }
+};
 
-   void setUp()
-   {
-   } // eo setUp
-
-
-   void tearDown()
-   {
-      remove_check_files();
-   } // eo tearDown
-
-
-   /*
-    * the tests:
-    */
-
+BOOST_FIXTURE_TEST_SUITE(TestTimeFunc, TestTimeFuncFixture)
 
-   void AddIntervalsDisjoint()
-   {
-       Intervals intervals;
+BOOST_AUTO_TEST_CASE(AddIntervalsDisjoint)
+{
+    Intervals intervals;
 
-       intervals.add( Interval( 10, 100 ) );
-       intervals.add( Interval( 600, 620 ) );
+    intervals.add( Interval( 10, 100 ) );
+    intervals.add( Interval( 600, 620 ) );
 
-       CPPUNIT_ASSERT_EQUAL( false, intervals.empty() );
-       CPPUNIT_ASSERT_EQUAL( 2u, intervals.size() );
+    BOOST_CHECK_EQUAL( false, intervals.empty() );
+    BOOST_CHECK_EQUAL( 2u, intervals.size() );
 
-       CPPUNIT_ASSERT_EQUAL( 10u, intervals.front().lower_bound() );
-       CPPUNIT_ASSERT_EQUAL( 100u, intervals.front().upper_bound() );
+    BOOST_CHECK_EQUAL( 10u, intervals.front().lower_bound() );
+    BOOST_CHECK_EQUAL( 100u, intervals.front().upper_bound() );
 
-       CPPUNIT_ASSERT_EQUAL( 600u, intervals.back().lower_bound() );
-       CPPUNIT_ASSERT_EQUAL( 620u, intervals.back().upper_bound() );
-   } // eo AddIntervalsDisjoint()
+    BOOST_CHECK_EQUAL( 600u, intervals.back().lower_bound() );
+    BOOST_CHECK_EQUAL( 620u, intervals.back().upper_bound() );
+} // eo AddIntervalsDisjoint()
 
 
 
-   void AddIntervalsInclude()
-   {
-       Intervals intervals;
+BOOST_AUTO_TEST_CASE(AddIntervalsInclude)
+{
+    Intervals intervals;
 
-       intervals.add( Interval( 10, 100 ) );
-       intervals.add( Interval( 10, 80 ) );
+    intervals.add( Interval( 10, 100 ) );
+    intervals.add( Interval( 10, 80 ) );
 
-       CPPUNIT_ASSERT_EQUAL( false, intervals.empty() );
-       CPPUNIT_ASSERT_EQUAL( 1u, intervals.size() );
+    BOOST_CHECK_EQUAL( false, intervals.empty() );
+    BOOST_CHECK_EQUAL( 1u, intervals.size() );
 
-       CPPUNIT_ASSERT_EQUAL( 10u, intervals.front().lower_bound() );
-       CPPUNIT_ASSERT_EQUAL( 100u, intervals.front().upper_bound() );
-       CPPUNIT_ASSERT_EQUAL( false, intervals.front().changed() );
-   } // eo AddIntervalsInclude()
+    BOOST_CHECK_EQUAL( 10u, intervals.front().lower_bound() );
+    BOOST_CHECK_EQUAL( 100u, intervals.front().upper_bound() );
+    BOOST_CHECK_EQUAL( false, intervals.front().changed() );
+} // eo AddIntervalsInclude()
 
 
 
-   void AddIntervalsEmbrace()
-   {
-       Intervals intervals;
+BOOST_AUTO_TEST_CASE(AddIntervalsEmbrace)
+{
+    Intervals intervals;
 
-       intervals.add( Interval( 10, 100 ) );
-       intervals.add( Interval( 5, 120 ) );
+    intervals.add( Interval( 10, 100 ) );
+    intervals.add( Interval( 5, 120 ) );
 
-       CPPUNIT_ASSERT_EQUAL( false, intervals.empty() );
-       CPPUNIT_ASSERT_EQUAL( 1u, intervals.size() );
+    BOOST_CHECK_EQUAL( false, intervals.empty() );
+    BOOST_CHECK_EQUAL( 1u, intervals.size() );
 
-       CPPUNIT_ASSERT_EQUAL( 5u, intervals.front().lower_bound() );
-       CPPUNIT_ASSERT_EQUAL( 120u, intervals.front().upper_bound() );
-       CPPUNIT_ASSERT_EQUAL( true, intervals.front().changed() );
-   } // eo AddIntervalsEmbrace()
+    BOOST_CHECK_EQUAL( 5u, intervals.front().lower_bound() );
+    BOOST_CHECK_EQUAL( 120u, intervals.front().upper_bound() );
+    BOOST_CHECK_EQUAL( true, intervals.front().changed() );
+} // eo AddIntervalsEmbrace()
 
 
 
-   void AddIntervalsJoin1()
-   {
-       Intervals intervals;
+BOOST_AUTO_TEST_CASE(AddIntervalsJoin1)
+{
+    Intervals intervals;
 
-       intervals.add( Interval( 10, 100 ) );
-       intervals.add( Interval( 60, 120 ) );
+    intervals.add( Interval( 10, 100 ) );
+    intervals.add( Interval( 60, 120 ) );
 
-       CPPUNIT_ASSERT_EQUAL( false, intervals.empty() );
-       CPPUNIT_ASSERT_EQUAL( 1u, intervals.size() );
+    BOOST_CHECK_EQUAL( false, intervals.empty() );
+    BOOST_CHECK_EQUAL( 1u, intervals.size() );
 
-       CPPUNIT_ASSERT_EQUAL( 10u, intervals.front().lower_bound() );
-       CPPUNIT_ASSERT_EQUAL( 120u, intervals.front().upper_bound() );
-       CPPUNIT_ASSERT_EQUAL( true, intervals.front().changed() );
-   } // eo AddIntervalsJoin1()
+    BOOST_CHECK_EQUAL( 10u, intervals.front().lower_bound() );
+    BOOST_CHECK_EQUAL( 120u, intervals.front().upper_bound() );
+    BOOST_CHECK_EQUAL( true, intervals.front().changed() );
+} // eo AddIntervalsJoin1()
 
 
 
-   void AddIntervalsJoin1b()
-   {
-       Intervals intervals;
+BOOST_AUTO_TEST_CASE(AddIntervalsJoin1b)
+{
+    Intervals intervals;
 
-       intervals.add( Interval( 10, 100 ) );
-       intervals.add( Interval( 100, 120 ) );
+    intervals.add( Interval( 10, 100 ) );
+    intervals.add( Interval( 100, 120 ) );
 
-       CPPUNIT_ASSERT_EQUAL( false, intervals.empty() );
-       CPPUNIT_ASSERT_EQUAL( 1u, intervals.size() );
+    BOOST_CHECK_EQUAL( false, intervals.empty() );
+    BOOST_CHECK_EQUAL( 1u, intervals.size() );
 
-       CPPUNIT_ASSERT_EQUAL( 10u, intervals.front().lower_bound() );
-       CPPUNIT_ASSERT_EQUAL( 120u, intervals.front().upper_bound() );
-       CPPUNIT_ASSERT_EQUAL( true, intervals.front().changed() );
-   } // eo AddIntervalsJoin1b()
+    BOOST_CHECK_EQUAL( 10u, intervals.front().lower_bound() );
+    BOOST_CHECK_EQUAL( 120u, intervals.front().upper_bound() );
+    BOOST_CHECK_EQUAL( true, intervals.front().changed() );
+} // eo AddIntervalsJoin1b()
 
 
 
-   void AddIntervalsJoin2()
-   {
-       Intervals intervals;
+BOOST_AUTO_TEST_CASE(AddIntervalsJoin2)
+{
+    Intervals intervals;
 
-       intervals.add( Interval( 10, 100 ) );
-       intervals.add( Interval( 200, 250 ) );
+    intervals.add( Interval( 10, 100 ) );
+    intervals.add( Interval( 200, 250 ) );
 
-       CPPUNIT_ASSERT_EQUAL( false, intervals.empty() );
-       CPPUNIT_ASSERT_EQUAL( 2u, intervals.size() );
+    BOOST_CHECK_EQUAL( false, intervals.empty() );
+    BOOST_CHECK_EQUAL( 2u, intervals.size() );
 
-       CPPUNIT_ASSERT_EQUAL( 10u, intervals.front().lower_bound() );
-       CPPUNIT_ASSERT_EQUAL( 100u, intervals.front().upper_bound() );
-       CPPUNIT_ASSERT_EQUAL( 200u, intervals.back().lower_bound() );
-       CPPUNIT_ASSERT_EQUAL( 250u, intervals.back().upper_bound() );
+    BOOST_CHECK_EQUAL( 10u, intervals.front().lower_bound() );
+    BOOST_CHECK_EQUAL( 100u, intervals.front().upper_bound() );
+    BOOST_CHECK_EQUAL( 200u, intervals.back().lower_bound() );
+    BOOST_CHECK_EQUAL( 250u, intervals.back().upper_bound() );
 
-       // now add the gap; the intervals should collapse to one covering all:
-       intervals.add( Interval(100, 200) );
+    // now add the gap; the intervals should collapse to one covering all:
+    intervals.add( Interval(100, 200) );
 
-       CPPUNIT_ASSERT_EQUAL( false, intervals.empty() );
-       CPPUNIT_ASSERT_EQUAL( 1u, intervals.size() );
+    BOOST_CHECK_EQUAL( false, intervals.empty() );
+    BOOST_CHECK_EQUAL( 1u, intervals.size() );
 
-       CPPUNIT_ASSERT_EQUAL( 10u, intervals.front().lower_bound() );
-       CPPUNIT_ASSERT_EQUAL( 250u, intervals.front().upper_bound() );
-       CPPUNIT_ASSERT_EQUAL( true, intervals.front().changed() );
-   } // eo AddIntervalsJoin2()
+    BOOST_CHECK_EQUAL( 10u, intervals.front().lower_bound() );
+    BOOST_CHECK_EQUAL( 250u, intervals.front().upper_bound() );
+    BOOST_CHECK_EQUAL( true, intervals.front().changed() );
+} // eo AddIntervalsJoin2()
 
 
 
-   void SubIntervalsDisjoint()
-   {
-       Intervals intervals;
+BOOST_AUTO_TEST_CASE(SubIntervalsDisjoint)
+{
+    Intervals intervals;
 
-       intervals.add( Interval(10, 100) );
-       intervals.sub( Interval(0, 10) );
+    intervals.add( Interval(10, 100) );
+    intervals.sub( Interval(0, 10) );
 
-       CPPUNIT_ASSERT_EQUAL( false, intervals.empty() );
-       CPPUNIT_ASSERT_EQUAL( 1u, intervals.size() );
+    BOOST_CHECK_EQUAL( false, intervals.empty() );
+    BOOST_CHECK_EQUAL( 1u, intervals.size() );
 
-       CPPUNIT_ASSERT_EQUAL( 10u, intervals.front().lower_bound() );
-       CPPUNIT_ASSERT_EQUAL( 100u, intervals.front().upper_bound() );
-       CPPUNIT_ASSERT_EQUAL( false, intervals.front().changed() );
-   } // eo SubIntervalsDisjoint()
+    BOOST_CHECK_EQUAL( 10u, intervals.front().lower_bound() );
+    BOOST_CHECK_EQUAL( 100u, intervals.front().upper_bound() );
+    BOOST_CHECK_EQUAL( false, intervals.front().changed() );
+} // eo SubIntervalsDisjoint()
 
 
 
-   void SubIntervalsExact()
-   {
-       Intervals intervals;
+BOOST_AUTO_TEST_CASE(SubIntervalsExact)
+{
+    Intervals intervals;
 
-       intervals.add( Interval(10, 100) );
-       intervals.sub( Interval(10, 100) );
+    intervals.add( Interval(10, 100) );
+    intervals.sub( Interval(10, 100) );
 
-       CPPUNIT_ASSERT_EQUAL( true, intervals.empty() );
-       CPPUNIT_ASSERT_EQUAL( 0u, intervals.size() );
-   } // eo SubIntervalsExact()
+    BOOST_CHECK_EQUAL( true, intervals.empty() );
+    BOOST_CHECK_EQUAL( 0u, intervals.size() );
+} // eo SubIntervalsExact()
 
 
 
-   void SubIntervalsSplit1()
-   {
-       Intervals intervals;
+BOOST_AUTO_TEST_CASE(SubIntervalsSplit1)
+{
+    Intervals intervals;
 
-       intervals.add( Interval(10, 100) );
-       intervals.sub( Interval(20, 40) );
+    intervals.add( Interval(10, 100) );
+    intervals.sub( Interval(20, 40) );
 
-       CPPUNIT_ASSERT_EQUAL( false, intervals.empty() );
-       CPPUNIT_ASSERT_EQUAL( 2u, intervals.size() );
+    BOOST_CHECK_EQUAL( false, intervals.empty() );
+    BOOST_CHECK_EQUAL( 2u, intervals.size() );
 
-       CPPUNIT_ASSERT_EQUAL( 10u, intervals.front().lower_bound() );
-       CPPUNIT_ASSERT_EQUAL( 20u, intervals.front().upper_bound() );
+    BOOST_CHECK_EQUAL( 10u, intervals.front().lower_bound() );
+    BOOST_CHECK_EQUAL( 20u, intervals.front().upper_bound() );
 
-       CPPUNIT_ASSERT_EQUAL( 40u, intervals.back().lower_bound() );
-       CPPUNIT_ASSERT_EQUAL( 100u, intervals.back().upper_bound() );
-       CPPUNIT_ASSERT_EQUAL( false, intervals.front().changed() );
-       CPPUNIT_ASSERT_EQUAL( true, intervals.back().changed() );
-   } // eo SubIntervalsSplit1()
+    BOOST_CHECK_EQUAL( 40u, intervals.back().lower_bound() );
+    BOOST_CHECK_EQUAL( 100u, intervals.back().upper_bound() );
+    BOOST_CHECK_EQUAL( false, intervals.front().changed() );
+    BOOST_CHECK_EQUAL( true, intervals.back().changed() );
+} // eo SubIntervalsSplit1()
 
 
-   void SubIntervalsCutFront()
-   {
-       Intervals intervals;
+BOOST_AUTO_TEST_CASE(SubIntervalsCutFront)
+{
+    Intervals intervals;
 
-       intervals.add( Interval(10, 100) );
-       intervals.sub( Interval(10, 20) );
+    intervals.add( Interval(10, 100) );
+    intervals.sub( Interval(10, 20) );
 
-       CPPUNIT_ASSERT_EQUAL( false, intervals.empty() );
-       CPPUNIT_ASSERT_EQUAL( 1u, intervals.size() );
+    BOOST_CHECK_EQUAL( false, intervals.empty() );
+    BOOST_CHECK_EQUAL( 1u, intervals.size() );
 
-       CPPUNIT_ASSERT_EQUAL( 20u, intervals.front().lower_bound() );
-       CPPUNIT_ASSERT_EQUAL( 100u, intervals.front().upper_bound() );
-       CPPUNIT_ASSERT_EQUAL( true, intervals.front().changed() );
-   } // eo SubIntervalsCutFront()
+    BOOST_CHECK_EQUAL( 20u, intervals.front().lower_bound() );
+    BOOST_CHECK_EQUAL( 100u, intervals.front().upper_bound() );
+    BOOST_CHECK_EQUAL( true, intervals.front().changed() );
+} // eo SubIntervalsCutFront()
 
 
-   void SubIntervalsCutBack()
-   {
-       Intervals intervals;
+BOOST_AUTO_TEST_CASE(SubIntervalsCutBack)
+{
+    Intervals intervals;
 
-       intervals.add( Interval(10, 100) );
-       intervals.sub( Interval(87, 100) );
+    intervals.add( Interval(10, 100) );
+    intervals.sub( Interval(87, 100) );
 
-       CPPUNIT_ASSERT_EQUAL( false, intervals.empty() );
-       CPPUNIT_ASSERT_EQUAL( 1u, intervals.size() );
+    BOOST_CHECK_EQUAL( false, intervals.empty() );
+    BOOST_CHECK_EQUAL( 1u, intervals.size() );
 
-       CPPUNIT_ASSERT_EQUAL( 10u, intervals.front().lower_bound() );
-       CPPUNIT_ASSERT_EQUAL( 87u, intervals.front().upper_bound() );
-       CPPUNIT_ASSERT_EQUAL( true, intervals.front().changed() );
-   } // eo SubIntervalsCutBack()
+    BOOST_CHECK_EQUAL( 10u, intervals.front().lower_bound() );
+    BOOST_CHECK_EQUAL( 87u, intervals.front().upper_bound() );
+    BOOST_CHECK_EQUAL( true, intervals.front().changed() );
+} // eo SubIntervalsCutBack()
 
 
 
-   void SubIntervalsCutMore()
-   {
-       Intervals intervals;
+BOOST_AUTO_TEST_CASE(SubIntervalsCutMore)
+{
+    Intervals intervals;
 
-       intervals.add( Interval( 10, 100) );
-       intervals.add( Interval(110, 200) );
-       intervals.add( Interval(210, 300) );
+    intervals.add( Interval( 10, 100) );
+    intervals.add( Interval(110, 200) );
+    intervals.add( Interval(210, 300) );
 
-       // this should remove the first 2 intervals and cut the third:
-       intervals.sub( Interval(8, 220) );
+    // this should remove the first 2 intervals and cut the third:
+    intervals.sub( Interval(8, 220) );
 
-       CPPUNIT_ASSERT_EQUAL( false, intervals.empty() );
-       CPPUNIT_ASSERT_EQUAL( 1u, intervals.size() );
+    BOOST_CHECK_EQUAL( false, intervals.empty() );
+    BOOST_CHECK_EQUAL( 1u, intervals.size() );
 
-       CPPUNIT_ASSERT_EQUAL( 220u, intervals.front().lower_bound() );
-       CPPUNIT_ASSERT_EQUAL( 300u, intervals.front().upper_bound() );
-       CPPUNIT_ASSERT_EQUAL( true, intervals.front().changed() );
-   } // eo SubIntervalsCutMore()
+    BOOST_CHECK_EQUAL( 220u, intervals.front().lower_bound() );
+    BOOST_CHECK_EQUAL( 300u, intervals.front().upper_bound() );
+    BOOST_CHECK_EQUAL( true, intervals.front().changed() );
+} // eo SubIntervalsCutMore()
 
 
-   void IntervalComparisons()
-   {
-       Intervals intervals1;
-       Intervals intervals2;
+BOOST_AUTO_TEST_CASE(IntervalComparisons)
+{
+    Intervals intervals1;
+    Intervals intervals2;
 
-       intervals1.add( Interval( 10, 120) );
+    intervals1.add( Interval( 10, 120) );
 
-       intervals2.add( Interval( 10, 110 ) );
-       intervals2.add( Interval( 100, 120 ) );
+    intervals2.add( Interval( 10, 110 ) );
+    intervals2.add( Interval( 100, 120 ) );
 
-       CPPUNIT_ASSERT_EQUAL( 1u, intervals2.size() );
+    BOOST_CHECK_EQUAL( 1u, intervals2.size() );
 
-       CPPUNIT_ASSERT( intervals1 == intervals2 );
-       CPPUNIT_ASSERT_EQUAL( true, intervals1.contains( intervals2 ));
-       CPPUNIT_ASSERT_EQUAL( true, intervals2.contains( intervals1 ));
+    BOOST_CHECK( intervals1 == intervals2 );
+    BOOST_CHECK_EQUAL( true, intervals1.contains( intervals2 ));
+    BOOST_CHECK_EQUAL( true, intervals2.contains( intervals1 ));
 
-       intervals2.sub( Interval( 40, 50) );
+    intervals2.sub( Interval( 40, 50) );
 
-       CPPUNIT_ASSERT( intervals1 != intervals2 );
-       CPPUNIT_ASSERT_EQUAL( true, intervals1.contains( intervals2 ));
-       CPPUNIT_ASSERT_EQUAL( false, intervals2.contains( intervals1 ));
-   } // eo IntervalComparisons()
+    BOOST_CHECK( intervals1 != intervals2 );
+    BOOST_CHECK_EQUAL( true, intervals1.contains( intervals2 ));
+    BOOST_CHECK_EQUAL( false, intervals2.contains( intervals1 ));
+} // eo IntervalComparisons()
 
 
 
-   void MonotonicClock()
-   {
-       long sec0, nsec0;
-       long sec1, nsec1;
+BOOST_AUTO_TEST_CASE(MonotonicClock)
+{
+    long sec0, nsec0;
+    long sec1, nsec1;
 
-       bool res = monotonic_clock_gettime(sec0,nsec0);
-       CPPUNIT_ASSERT_EQUAL( true, res );
+    bool res = monotonic_clock_gettime(sec0,nsec0);
+    BOOST_CHECK_EQUAL( true, res );
 
-       usleep(250000);
-       res= monotonic_clock_gettime(sec1,nsec1);
-       CPPUNIT_ASSERT_EQUAL( true, res);
+    usleep(250000);
+    res= monotonic_clock_gettime(sec1,nsec1);
+    BOOST_CHECK_EQUAL( true, res);
 
-       long delta_sec = sec1 - sec0;
-       long delta_nsec= nsec1 - nsec0;
+    long delta_sec = sec1 - sec0;
+    long delta_nsec= nsec1 - nsec0;
 
-       long delta_millisec= ( delta_nsec / 1000000L) + delta_sec * 1000L;
+    long delta_millisec= ( delta_nsec / 1000000L) + delta_sec * 1000L;
 
-       CPPUNIT_ASSERT( delta_millisec >= 250 - /*fuzz*/ 1);
-       CPPUNIT_ASSERT( delta_millisec < 300 );
-   } // eo MonotonicClock()
+    BOOST_CHECK( delta_millisec >= 250 - /*fuzz*/ 1);
+    BOOST_CHECK( delta_millisec < 300 );
+} // eo MonotonicClock()
 
-   void WeekInvalid()
-   {
-        Week week("99999999");
-        CPPUNIT_ASSERT_EQUAL(false, week.is_valid());
-        CPPUNIT_ASSERT_EQUAL(string(""), week.get_displaystring());
-   }
+BOOST_AUTO_TEST_CASE(WeekInvalid)
+{
+    Week week("99999999");
+    BOOST_CHECK_EQUAL(false, week.is_valid());
+    BOOST_CHECK_EQUAL(string(""), week.get_displaystring());
+}
 
-   void WeekDisplayString1()
-   {
-        Week week("");
-        CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
-        CPPUNIT_ASSERT_EQUAL(string(""), week.get_displaystring());
-   }
+BOOST_AUTO_TEST_CASE(WeekDisplayString1)
+{
+    Week week("");
+    BOOST_CHECK_EQUAL(true, week.is_valid());
+    BOOST_CHECK_EQUAL(string(""), week.get_displaystring());
+}
 
-   void WeekDisplayString2()
-   {
-        Week week("0123456");
-        CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
-        CPPUNIT_ASSERT_EQUAL(string("Mon-Sun"), week.get_displaystring());
-   }
+BOOST_AUTO_TEST_CASE(WeekDisplayString2)
+{
+    Week week("0123456");
+    BOOST_CHECK_EQUAL(true, week.is_valid());
+    BOOST_CHECK_EQUAL(string("Mon-Sun"), week.get_displaystring());
+}
 
-   void WeekDisplayString3()
-   {
-        Week week("123456");
-        CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
-        CPPUNIT_ASSERT_EQUAL(string("Mon-Sat"), week.get_displaystring());
-   }
+BOOST_AUTO_TEST_CASE(WeekDisplayString3)
+{
+    Week week("123456");
+    BOOST_CHECK_EQUAL(true, week.is_valid());
+    BOOST_CHECK_EQUAL(string("Mon-Sat"), week.get_displaystring());
+}
 
-   void WeekDisplayString4()
-   {
-        Week week("012345");
-        CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
-        CPPUNIT_ASSERT_EQUAL(string("Mon-Fri, Sun"), week.get_displaystring());
-   }
+BOOST_AUTO_TEST_CASE(WeekDisplayString4)
+{
+    Week week("012345");
+    BOOST_CHECK_EQUAL(true, week.is_valid());
+    BOOST_CHECK_EQUAL(string("Mon-Fri, Sun"), week.get_displaystring());
+}
 
-   void WeekDisplayString5()
-   {
-        Week week("1256");
-        CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
-        CPPUNIT_ASSERT_EQUAL(string("Mon, Tue, Fri, Sat"), week.get_displaystring());
-   }
+BOOST_AUTO_TEST_CASE(WeekDisplayString5)
+{
+    Week week("1256");
+    BOOST_CHECK_EQUAL(true, week.is_valid());
+    BOOST_CHECK_EQUAL(string("Mon, Tue, Fri, Sat"), week.get_displaystring());
+}
 
-   void WeekDisplayString6()
-   {
-        Week week("0246");
-        CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
-        CPPUNIT_ASSERT_EQUAL(string("Tue, Thu, Sat, Sun"), week.get_displaystring());
-   }
+BOOST_AUTO_TEST_CASE(WeekDisplayString6)
+{
+    Week week("0246");
+    BOOST_CHECK_EQUAL(true, week.is_valid());
+    BOOST_CHECK_EQUAL(string("Tue, Thu, Sat, Sun"), week.get_displaystring());
+}
 
-   void WeekDisplayString7()
-   {
-        Week week("135");
-        CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
-        CPPUNIT_ASSERT_EQUAL(string("Mon, Wed, Fri"), week.get_displaystring());
-   }
+BOOST_AUTO_TEST_CASE(WeekDisplayString7)
+{
+    Week week("135");
+    BOOST_CHECK_EQUAL(true, week.is_valid());
+    BOOST_CHECK_EQUAL(string("Mon, Wed, Fri"), week.get_displaystring());
+}
 
-   void WeekDisplayString8()
-   {
-        Week week("15");
-        CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
-        CPPUNIT_ASSERT_EQUAL(string("Mon, Fri"), week.get_displaystring());
-   }
+BOOST_AUTO_TEST_CASE(WeekDisplayString8)
+{
+    Week week("15");
+    BOOST_CHECK_EQUAL(true, week.is_valid());
+    BOOST_CHECK_EQUAL(string("Mon, Fri"), week.get_displaystring());
+}
 
-   void WeekDisplayString9()
-   {
-        Week week("06");
-        CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
-        CPPUNIT_ASSERT_EQUAL(string("Sat, Sun"), week.get_displaystring());
-   }
+BOOST_AUTO_TEST_CASE(WeekDisplayString9)
+{
+    Week week("06");
+    BOOST_CHECK_EQUAL(true, week.is_valid());
+    BOOST_CHECK_EQUAL(string("Sat, Sun"), week.get_displaystring());
+}
 
-   void WeekDisplayString10()
-   {
-        Week week("056");
-        CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
-        CPPUNIT_ASSERT_EQUAL(string("Fri-Sun"), week.get_displaystring());
-   }
+BOOST_AUTO_TEST_CASE(WeekDisplayString10)
+{
+    Week week("056");
+    BOOST_CHECK_EQUAL(true, week.is_valid());
+    BOOST_CHECK_EQUAL(string("Fri-Sun"), week.get_displaystring());
+}
 
-   void WeekDisplayString11()
-   {
-        Week week("0");
-        CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
-        CPPUNIT_ASSERT_EQUAL(string("Sun"), week.get_displaystring());
-   }
+BOOST_AUTO_TEST_CASE(WeekDisplayString11)
+{
+    Week week("0");
+    BOOST_CHECK_EQUAL(true, week.is_valid());
+    BOOST_CHECK_EQUAL(string("Sun"), week.get_displaystring());
+}
 
-   void WeekDisplayString12()
-   {
-        Week week("6");
-        CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
-        CPPUNIT_ASSERT_EQUAL(string("Sat"), week.get_displaystring());
-   }
+BOOST_AUTO_TEST_CASE(WeekDisplayString12)
+{
+    Week week("6");
+    BOOST_CHECK_EQUAL(true, week.is_valid());
+    BOOST_CHECK_EQUAL(string("Sat"), week.get_displaystring());
+}
 
-   void WeekDisplayString13()
-   {
-        Week week("123");
-        CPPUNIT_ASSERT_EQUAL(true, week.is_valid());
-        CPPUNIT_ASSERT_EQUAL(string("Mon-Wed"), week.get_displaystring());
-   }
-};
+BOOST_AUTO_TEST_CASE(WeekDisplayString13)
+{
+    Week week("123");
+    BOOST_CHECK_EQUAL(true, week.is_valid());
+    BOOST_CHECK_EQUAL(string("Mon-Wed"), week.get_displaystring());
+}
 
-CPPUNIT_TEST_SUITE_REGISTRATION(TestTimeFunc);
+BOOST_AUTO_TEST_SUITE_END()