//
// Negative test for BOOST_TEST_ALL_EQ
//
// Copyright (c) 2017 Bjorn Reese
//
// Distributed under the Boost Software License, Version 1.0.
// See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt
//

#include <vector>
#include <set>
#include <boost/core/lightweight_test.hpp>

int main()
{
    int test_cases = 0;

    // Array

    {
        int x[] = { 1 };
        int y[] = { 1, 2 };
        BOOST_TEST_ALL_EQ( x, x + sizeof(x)/sizeof(x[0]), y, y + sizeof(y)/sizeof(y[0]) );
        ++test_cases;
    }

    {
        int x[] = { 1, 2 };
        int y[] = { 1 };
        BOOST_TEST_ALL_EQ( x, x + sizeof(x)/sizeof(x[0]), y, y + sizeof(y)/sizeof(y[0]) );
        ++test_cases;
    }

    {
        int x[] = { 2 };
        int y[] = { 1, 2 };
        BOOST_TEST_ALL_EQ( x, x + sizeof(x)/sizeof(x[0]), y, y + sizeof(y)/sizeof(y[0]) );
        ++test_cases;
    }

    {
        int x[] = { 1, 2, 3, 4 };
        int y[] = { 1, 3, 2, 4 };
        BOOST_TEST_ALL_EQ( x, x + sizeof(x)/sizeof(x[0]), y, y + sizeof(y)/sizeof(y[0]) );
        ++test_cases;
    }

    // Vector

    {
        std::vector<int> x, y;
        x.push_back( 1 );
        BOOST_TEST_ALL_EQ( x.begin(), x.end(), y.begin(), y.end() );
        ++test_cases;
    }

    {
        std::vector<int> x, y;
        y.push_back( 1 );
        BOOST_TEST_ALL_EQ( x.begin(), x.end(), y.begin(), y.end() );
        ++test_cases;
    }

    {
        std::vector<int> x, y;
        x.push_back( 1 ); x.push_back( 2 ); x.push_back( 3 ); x.push_back( 4 );
        y.push_back( 1 ); y.push_back( 3 ); y.push_back( 2 ); y.push_back( 4 );
        BOOST_TEST_ALL_EQ( x.begin(), x.end(), y.begin(), y.end() );
        ++test_cases;
    }

    {
        std::vector<float> x, y;
        x.push_back( 1.0f ); x.push_back( 2.0f ); x.push_back( 3.0f ); x.push_back( 4.0f );
        y.push_back( 4.0f ); y.push_back( 2.0f ); y.push_back( 3.0f ); y.push_back( 1.0f );
        BOOST_TEST_ALL_EQ( x.begin(), x.end(), y.begin(), y.end() );
        ++test_cases;
    }

    {
        std::vector<int> x, y;
        x.push_back( 1 ); x.push_back( 2 ); x.push_back( 3 );
        y.push_back( 1 ); y.push_back( 3 ); y.push_back( 2 ); y.push_back( 4 );
        BOOST_TEST_ALL_EQ( x.begin(), x.end(), y.begin(), y.end() );
        ++test_cases;
    }

    {
        std::vector<int> x, y;
        x.push_back( 1 ); x.push_back( 2 ); x.push_back( 3 ); x.push_back( 4 );
        y.push_back( 1 ); y.push_back( 3 ); y.push_back( 2 );;
        BOOST_TEST_ALL_EQ( x.begin(), x.end(), y.begin(), y.end() );
        ++test_cases;
    }

    // Set

    {
        std::set<int> x, y;
        x.insert(1);
        y.insert(1); y.insert(3);
        BOOST_TEST_ALL_EQ( x.begin(), x.end(), y.begin(), y.end() );
        ++test_cases;
    }

    {
        std::set<int> x, y;
        x.insert(1); x.insert(2);
        y.insert(1);
        BOOST_TEST_ALL_EQ( x.begin(), x.end(), y.begin(), y.end() );
        ++test_cases;
    }

    {
        std::set<int> x, y;
        x.insert(1); x.insert(2);
        y.insert(1); y.insert(3);
        BOOST_TEST_ALL_EQ( x.begin(), x.end(), y.begin(), y.end() );
        ++test_cases;
    }

    boost::report_errors();

    return boost::detail::test_errors() != test_cases;
}
