Subject: [boost] [Boost.Test] Custom DataSet compiler error with no match for »operator^
From: Olaf Peter (ope-devel_at_[hidden])
Date: 2017-03-28 19:38:32


Hello,

I run into a compile problem with [Boost.Test] DataSet. I can reduce it
by re-using the example provided by the docs:

http://www.boost.org/doc/libs/1_62_0/libs/test/doc/html/boost_test/tests_organization/test_cases/test_case_generation/datasets.html#boost_test.tests_organization.test_cases.test_case_generation.datasets.example_descr

#define BOOST_TEST_MODULE dataset_example68
#include <boost/test/included/unit_test.hpp>
#include <boost/test/data/test_case.hpp>
#include <boost/test/data/monomorphic.hpp>
#include <sstream>

namespace bdata = boost::unit_test::data;

// Dataset generating a Fibonacci sequence
class fibonacci_dataset {
public:
     // Samples type is int
     using sample=int;
     enum { arity = 1 };

     struct iterator {

         iterator() : a(1), b(1) {}

         int operator*() const { return b; }
         void operator++()
         {
             a = a + b;
             std::swap(a, b);
         }
     private:
         int a;
         int b; // b is the output
     };

     fibonacci_dataset() {}

     // size is infinite
     bdata::size_t size() const { return bdata::BOOST_TEST_DS_INFINITE_SIZE; }

     // iterator
     iterator begin() const { return iterator(); }
};

namespace boost { namespace unit_test { namespace data { namespace monomorphic {
   // registering fibonacci_dataset as a proper dataset
   template <>
   struct is_dataset<fibonacci_dataset> : boost::mpl::true_ {};
}}}}

// Creating a test-driven dataset
BOOST_DATA_TEST_CASE(
     test1,
     fibonacci_dataset() ^ fibonacci_dataset(),
     fib_sample, exp)
{
       BOOST_TEST(fib_sample == exp);
}

  error: no match for 'operator^' (operand types are
'boost::unit_test::data::result_of::make<fibonacci_dataset>::type {aka
fibonacci_dataset}' and 'fibonacci_dataset')
      fibonacci_dataset() ^ fibonacci_dataset(),

My use case has to load input and expect files provides by two datasets.
How to fix it?

Thanks,

Olaf