Есть ли способ с помощью framework для сравнения потоков или файлов? - PullRequest
0 голосов
/ 30 октября 2018

Я видел в инструментах буст-тестирования макрос:

BOOST_<level>_EQUAL_COLLECTION(left_begin, left_end, right_begin, right_end)

, который может работать для потоков с помощью ifstream_iterator.

Предоставляет ли Catch Framework такой способ сравнения потоков / файлов?

1 Ответ

0 голосов
/ 30 октября 2018

Не встроенный, но не имеет смысла.

Для этого вы пишете свой собственный matcher .

Вот пример документации для проверки целочисленного диапазона:

// The matcher class
class IntRange : public Catch::MatcherBase<int> {
    int m_begin, m_end;
public:
    IntRange( int begin, int end ) : m_begin( begin ), m_end( end ) {}

    // Performs the test for this matcher
    virtual bool match( int const& i ) const override {
        return i >= m_begin && i <= m_end;
    }

    // Produces a string describing what this matcher does. It should
    // include any provided data (the begin/ end in this case) and
    // be written as if it were stating a fact (in the output it will be
    // preceded by the value under test).
    virtual std::string describe() const {
        std::ostringstream ss;
        ss << "is between " << m_begin << " and " << m_end;
        return ss.str();
    }
};

// The builder function
inline IntRange IsBetween( int begin, int end ) {
    return IntRange( begin, end );
}

// ...

// Usage
TEST_CASE("Integers are within a range")
{
    CHECK_THAT( 3, IsBetween( 1, 10 ) );
    CHECK_THAT( 100, IsBetween( 1, 10 ) );
}

Очевидно, что вы можете адаптировать это для выполнения любой проверки, которая вам нужна.

...