#include <vector>
#include <string>

#include <gtest/gtest.h>
#include "CommonTests.h"

#include "boolinq.h"

using namespace boolinq;

//////////////////////////////////////////////////////////////////////////

TEST(SkipRange, ManyToMany)
{
    int src[] = {1,2,3,4,5,6};
    int ans[] = {1,2,3,4,5,6};

    auto rng = from(src);
    auto dst = rng.skip(0);

    CheckRangeEqArray(dst, ans);
}

TEST(SkipRange, ManyToLess)
{
    int src[] = {1,2,3,4,5,6};
    int ans[] = {4,5,6};

    auto rng = from(src);
    auto dst = rng.skip(3);

    CheckRangeEqArray(dst, ans);
}

TEST(SkipRange, ManyToOne)
{
    int src[] = {1,2,3,4,5,6};
    int ans[] = {6};

    auto rng = from(src);
    auto dst = rng.skip(5);

    CheckRangeEqArray(dst, ans);
}

TEST(SkipRange, ManyToZero)
{
    int src[] = {1,2,3,4,5,6};

    auto rng = from(src);
    auto dst = rng.skip(6);

    EXPECT_THROW(dst.nextObject(), EnumeratorEndException);
}

TEST(SkipRange, ManyToZeroLess)
{
    int src[] = {1,2,3,4,5,6};

    auto rng = from(src);
    auto dst = rng.skip(10);

    EXPECT_THROW(dst.nextObject(), EnumeratorEndException);
}

//////////////////////////////////////////////////////////////////////////

TEST(SkipRange, OneToOne)
{
    int src[] = {5};
    int ans[] = {5};

    auto rng = from(src);
    auto dst = rng.skip(0);

    CheckRangeEqArray(dst, ans);
}

TEST(SkipRange, OneToZero)
{
    int src[] = {5};

    auto rng = from(src);
    auto dst = rng.skip(1);

    EXPECT_THROW(dst.nextObject(), EnumeratorEndException);
}

TEST(SkipRange, OneToZeroLess)
{
    int src[] = {5};

    auto rng = from(src);
    auto dst = rng.skip(2);

    EXPECT_THROW(dst.nextObject(), EnumeratorEndException);
}

TEST(SkipRange, ZeroToZero)
{
    std::vector<int> src;

    auto rng = from(src);
    auto dst = rng.skip(0);

    EXPECT_THROW(rng.nextObject(), EnumeratorEndException);
}

TEST(SkipRange, ZeroToZeroLess)
{
    std::vector<int> src;

    auto rng = from(src);
    auto dst = rng.skip(2);

    EXPECT_THROW(rng.nextObject(), EnumeratorEndException);
}

//////////////////////////////////////////////////////////////////////////