// Description: Testing for insertion sort
// DocumentationOf: insertion_sort.h
#include "test/test_init.h"
#include "pastel/sys/sequence/insertion_sort.h"
namespace
{
    class A
    {
    public:
        A()
            : data_(0)
        {
        }
        explicit A(integer data)
            : data_(data)
        {
        }
        void swap(A& that)
        {
            std::swap(data_, that.data_);
        }
    private:
        integer data_;
    };
    void swap(A& left, A& right)
    {
        left.swap(right);
    }
}
TEST_CASE("InsertionSort (InsertionSort)")
{
    integer n = 100;
    std::vector<integer> v;
    v.reserve(n);
    for (integer i = 0;i < n;++i)
    {
        v.push_back(i);
    }
    std::random_shuffle(v.begin(), v.end());
    insertionSort(v.begin(), v.end());
    for (integer i = 0;i < n;++i)
    {
        REQUIRE(v[i] == i);
    }
}