CommonTests.h 1.38 KB
Newer Older
k06a's avatar
k06a committed
1 2
#pragma once

Anton Bukov's avatar
Anton Bukov committed
3 4
#include <set>

5 6 7 8
#include "boolinq.h"

using namespace boolinq;

k06a's avatar
k06a committed
9 10 11 12 13 14 15
//////////////////////////////////////////////////////////////////////////
// Compare Range with array
//////////////////////////////////////////////////////////////////////////

template<typename R, typename T, int N, typename F>
void CheckRangeEqArray(R dst, T (&ans)[N], F f)
{
Anton Bukov's avatar
Anton Bukov committed
16 17
    for (int i = 0; i < N; i++)
        EXPECT_EQ(f(ans[i]), f(dst.nextObject()));
k06a's avatar
k06a committed
18

Anton Bukov's avatar
Anton Bukov committed
19
    EXPECT_THROW(dst.nextObject(), EnumeratorEndException);
k06a's avatar
k06a committed
20 21 22 23 24
}

template<typename R, typename T, int N>
void CheckRangeEqArray(R dst, T (&ans)[N])
{
Anton Bukov's avatar
Anton Bukov committed
25 26
    for (int i = 0; i < N; i++)
        EXPECT_EQ(ans[i], dst.nextObject());
k06a's avatar
k06a committed
27

Anton Bukov's avatar
Anton Bukov committed
28 29
    EXPECT_THROW(dst.nextObject(), EnumeratorEndException);
}
k06a's avatar
k06a committed
30 31 32 33 34 35 36 37 38 39 40 41 42

template<typename T, int N>
std::set<T> ArrayToSet(T (&ans)[N])
{
    std::set<T> res;
    for(int i = 0; i < N; i++)
        res.insert(ans[i]);

    EXPECT_EQ(N, res.size());

    return res;
}

Anton Bukov's avatar
Anton Bukov committed
43 44
template<typename R, typename T, int N>
void CheckRangeEqSet(R dst, T (&ans)[N])
k06a's avatar
k06a committed
45
{
Anton Bukov's avatar
Anton Bukov committed
46 47
    std::set<T> expected = ArrayToSet(ans);
    std::set<typename R::value_type> actual = dst.toSet();
k06a's avatar
k06a committed
48

Anton Bukov's avatar
Anton Bukov committed
49
    EXPECT_EQ(expected.size(), actual.size());
k06a's avatar
k06a committed
50

51 52
    typename std::set<T>::iterator it1 = expected.begin();
    typename std::set<typename R::value_type>::iterator it2 = actual.begin();
Anton Bukov's avatar
Anton Bukov committed
53
    for(; it1 != expected.end() && it2 != actual.end(); it1++, it2++)
k06a's avatar
k06a committed
54
    {
Anton Bukov's avatar
Anton Bukov committed
55
        EXPECT_EQ(*it2, *it1);
k06a's avatar
k06a committed
56 57
    }
}