#ifndef DLIB_CHECKERBOARD_TeST_H_
#define DLIB_CHECKERBOARD_TeST_H_

#include <dlib/matrix.h>
#include <vector>
#include <dlib/rand.h>

namespace dlib
{

    template <typename scalar_type>
    void get_checkerboard_problem (
        std::vector<matrix<scalar_type,2,1> >& x,
        std::vector<scalar_type>& y,
        const long num_samples,
        const long board_dimension = 8
    )
    /*!
        requires
            - num_samples > 0
            - board_dimension > 0
        ensures
            - #x.size() == y.size() == num_samples
            - is_binary_classification_problem(#x,#y) == true
            - #x will contain points and #y labels that were
              sampled randomly from a checkers board that has 
              board_dimension squares on each side. 
    !*/
    {
        static dlib::rand rnd;

        x.clear();
        y.clear();

        matrix<scalar_type,2,1> sample;
        for (long i = 0; i < num_samples; ++i)
        {
            sample(0) = rnd.get_random_double();
            sample(1) = rnd.get_random_double();
            sample *= board_dimension;

            x.push_back(sample);
            if (((int)sum(floor(sample)) %2) == 0)
                y.push_back(+1);
            else
                y.push_back(-1);
            
        }
    }


}

#endif // DLIB_CHECKERBOARD_TeST_H_

