#include "catch.hpp"

#include "vtr_range.h"
#include <vector>

TEST_CASE("Range Ops", "[vtr_range]") {

    std::vector<int> vec = {1, 2, 3};

    {
        //From iterator pair
        auto range = vtr::make_range(vec.begin(), vec.end());
        REQUIRE(range.size() == vec.size());

        size_t i = 0;
        for (auto elem : range) {
            REQUIRE(elem == vec[i]);
            i++;
        }
        REQUIRE(i == vec.size());
    }

    {
        //From container
        auto range = vtr::make_range(vec);
        REQUIRE(range.size() == vec.size());

        size_t i = 0;
        for (auto elem : range) {
            REQUIRE(elem == vec[i]);
            i++;
        }
        REQUIRE(i == vec.size());
    }

    {
        //Empty
        auto range = vtr::make_range(vec.begin(), vec.begin());
        REQUIRE(range.size() == 0);
        REQUIRE(range.empty());

    }
}
