File: testing.hh

package info (click to toggle)
olm 3.2.16%2Bdfsg-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,208 kB
  • sloc: cpp: 15,245; ansic: 10,894; java: 3,244; objc: 2,291; javascript: 1,882; python: 1,839; makefile: 439; sh: 245; asm: 7; xml: 1
file content (42 lines) | stat: -rw-r--r-- 1,162 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#pragma once

#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#define DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
#include "doctest.h"

template<class T>
struct ospan {
    ospan(T* data, std::size_t size) : data(data), size(size) {}

    template<std::size_t N>
    ospan(T (&array)[N]) : data(array), size(N) {}

    friend bool operator==(const ospan& a, const ospan& b) {
        if (a.size != b.size)
            return false;

        for (size_t i = 0; i < a.size; i++)
            if (a.data[i] != b.data[i])
                return false;

        return true;
    }

    friend std::ostream& operator<<(std::ostream& os, const ospan& v) {
        os << "sz:" << std::dec << v.size << " [" << std::hex;
        for (size_t i = 0; i < v.size; i++)
            os << (std::size_t)v.data[i];
        os << "]";
        return os;
    }

    T* data;
    std::size_t size;
};

template<class T>
auto with_size(T* data, std::size_t sz) -> ospan<T> { return ospan<T>(data, sz); }
template<class T, std::size_t N>
auto with_size(T (&data)[N]) -> ospan<T> { return ospan<T>(data, N); }

#define CHECK_EQ_SIZE(A, B, SIZE) CHECK_EQ(with_size(A, SIZE), with_size(B, SIZE))