RawSpeed
fast raw decoding library
Loading...
Searching...
No Matches
BitTest.cpp
Go to the documentation of this file.
1
/*
2
RawSpeed - RAW file decoder.
3
4
Copyright (C) 2017 Roman Lebedev
5
6
This library is free software; you can redistribute it and/or
7
modify it under the terms of the GNU Lesser General Public
8
License as published by the Free Software Foundation; either
9
version 2 of the License, or (at your option) any later version.
10
11
This library is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; withexpected even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
Lesser General Public License for more details.
15
16
You should have received a copy of the GNU Lesser General Public
17
License along with this library; if not, write to the Free Software
18
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
#include "
adt/Bit.h
"
22
#include <algorithm>
23
#include <cstdint>
24
#include <limits>
25
#include <string>
26
#include <tuple>
27
#include <vector>
28
#include <gtest/gtest.h>
29
30
using
rawspeed::clampBits
;
31
using
rawspeed::isPowerOfTwo
;
32
using
std::make_tuple;
33
using
std::min;
34
using
std::numeric_limits;
35
using
std::string;
36
using
std::vector;
37
38
namespace
rawspeed_test
{
39
40
namespace
{
41
42
using
powerOfTwoType
= std::tuple<int, bool>;
43
class
PowerOfTwoTest
:
public
::testing::TestWithParam<powerOfTwoType> {
44
protected
:
45
PowerOfTwoTest
() =
default
;
46
virtual
void
SetUp
() {
47
in
= std::get<0>(GetParam());
48
expected
= std::get<1>(GetParam());
49
}
50
51
int
in
;
// input
52
bool
expected
;
// expected output
53
};
54
const
powerOfTwoType
powerOfTwoValues
[] = {
55
make_tuple(0,
true
), make_tuple(1,
true
), make_tuple(2,
true
),
56
make_tuple(3,
false
), make_tuple(4,
true
), make_tuple(5,
false
),
57
make_tuple(6,
false
), make_tuple(7,
false
), make_tuple(8,
true
),
58
make_tuple(9,
false
), make_tuple(10,
false
), make_tuple(11,
false
),
59
60
};
61
INSTANTIATE_TEST_SUITE_P
(
PowerOfTwoTest
,
PowerOfTwoTest
,
62
::testing::ValuesIn(
powerOfTwoValues
));
63
TEST_P
(
PowerOfTwoTest
,
PowerOfTwoTest
) {
64
ASSERT_EQ(
isPowerOfTwo
(in), expected);
65
}
66
67
using
ClampBitsType
= std::tuple<int, int, uint16_t>;
68
class
ClampBitsTest
:
public
::testing::TestWithParam<ClampBitsType> {
69
protected
:
70
ClampBitsTest
() =
default
;
71
virtual
void
SetUp
() {
72
in
= std::get<0>(GetParam());
73
n
= std::get<1>(GetParam());
74
expected
= std::get<2>(GetParam());
75
}
76
77
int
in
;
// input
78
int
n
;
79
uint16_t
expected
;
// expected output
80
};
81
82
#define MIN(a, b) ((a) < (b) ? (a) : (b))
83
#define MAX(a, b) ((a) > (b) ? (a) : (b))
84
85
#define ROW(v, p, pv) make_tuple((v), (p), MIN(pv, MAX(v, 0))),
86
87
#define ROWS(v, p, pv) ROW(-v, p, 0) ROW(v, p, pv)
88
89
#define THREEROWS(v, p) \
90
ROWS(((1 << (v)) - 1), (p), ((1 << (p)) - 1)) \
91
ROWS(((1 << (v)) - 0), (p), ((1 << (p)) - 1)) \
92
ROWS(((1 << (v)) + 1), (p), ((1 << (p)) - 1))
93
94
#define MOREROWS(v) \
95
THREEROWS(v, 0) \
96
THREEROWS(v, 1) \
97
THREEROWS(v, 2) \
98
THREEROWS(v, 4) \
99
THREEROWS(v, 8) THREEROWS(v, 16)
100
101
#define GENERATE() \
102
MOREROWS(0) \
103
MOREROWS(1) \
104
MOREROWS(2) MOREROWS(4) MOREROWS(8) MOREROWS(16) MOREROWS(24) MOREROWS(30)
105
106
const
ClampBitsType
ClampBitsValues
[] = {
107
make_tuple(0, 0, 0), make_tuple(0, 16, 0),
108
make_tuple(32, 0, 0), make_tuple(32, 16, 32),
109
make_tuple(32, 2, 3), make_tuple(-32, 0, 0),
110
make_tuple(-32, 16, 0),
GENERATE
()};
111
INSTANTIATE_TEST_SUITE_P
(
ClampBitsTest
,
ClampBitsTest
,
112
::testing::ValuesIn(
ClampBitsValues
));
113
TEST_P
(
ClampBitsTest
,
ClampBitsTest
) { ASSERT_EQ(
clampBits
(in, n), expected); }
114
TEST
(ClampBitsDeathTest, Only16Bit) {
115
#ifndef NDEBUG
116
ASSERT_DEATH({ ASSERT_EQ(
clampBits
(0, 17), 0); },
"nBits <= 16"
);
117
#endif
118
}
119
120
TEST
(ClampBitsUnsignedDeathTest, NoNopClamps) {
121
#ifndef NDEBUG
122
ASSERT_DEATH(
123
{ ASSERT_EQ(
clampBits<uint16_t>
(0, 16), 0); },
124
"bitwidth<T>\\(\\) > nBits"
);
125
#endif
126
}
127
128
}
// namespace
129
130
}
// namespace rawspeed_test
Bit.h
GENERATE
#define GENERATE()
Definition
BitTest.cpp:101
isPowerOfTwo
constexpr bool RAWSPEED_READNONE isPowerOfTwo(T val)
Definition
Bit.h:38
clampBits
constexpr auto RAWSPEED_READNONE clampBits(T value, unsigned int nBits)
Definition
Bit.h:75
INSTANTIATE_TEST_SUITE_P
INSTANTIATE_TEST_SUITE_P(MD5Test, MD5Test, ::testing::ValuesIn(testCases))
TEST_P
TEST_P(MD5Test, CheckTestCaseSet)
Definition
MD5Test.cpp:388
rawspeed_test::anonymous_namespace{BitTest.cpp}::ClampBitsTest
Definition
BitTest.cpp:68
rawspeed_test::anonymous_namespace{BitTest.cpp}::ClampBitsTest::expected
uint16_t expected
Definition
BitTest.cpp:79
rawspeed_test::anonymous_namespace{BitTest.cpp}::ClampBitsTest::in
int in
Definition
BitTest.cpp:77
rawspeed_test::anonymous_namespace{BitTest.cpp}::ClampBitsTest::ClampBitsTest
ClampBitsTest()=default
rawspeed_test::anonymous_namespace{BitTest.cpp}::ClampBitsTest::SetUp
virtual void SetUp()
Definition
BitTest.cpp:71
rawspeed_test::anonymous_namespace{BitTest.cpp}::ClampBitsTest::n
int n
Definition
BitTest.cpp:78
rawspeed_test::anonymous_namespace{BitTest.cpp}::PowerOfTwoTest
Definition
BitTest.cpp:43
rawspeed_test::anonymous_namespace{BitTest.cpp}::PowerOfTwoTest::expected
bool expected
Definition
BitTest.cpp:52
rawspeed_test::anonymous_namespace{BitTest.cpp}::PowerOfTwoTest::in
int in
Definition
BitTest.cpp:51
rawspeed_test::anonymous_namespace{BitTest.cpp}::PowerOfTwoTest::PowerOfTwoTest
PowerOfTwoTest()=default
rawspeed_test::anonymous_namespace{BitTest.cpp}::PowerOfTwoTest::SetUp
virtual void SetUp()
Definition
BitTest.cpp:46
uint16_t
rawspeed_test::anonymous_namespace{BitTest.cpp}::powerOfTwoType
std::tuple< int, bool > powerOfTwoType
Definition
BitTest.cpp:42
rawspeed_test::anonymous_namespace{BitTest.cpp}::ClampBitsValues
const ClampBitsType ClampBitsValues[]
Definition
BitTest.cpp:106
rawspeed_test::anonymous_namespace{BitTest.cpp}::ClampBitsType
std::tuple< int, int, uint16_t > ClampBitsType
Definition
BitTest.cpp:67
rawspeed_test::anonymous_namespace{BitTest.cpp}::TEST
TEST(ClampBitsDeathTest, Only16Bit)
Definition
BitTest.cpp:114
rawspeed_test::anonymous_namespace{BitTest.cpp}::powerOfTwoValues
const powerOfTwoType powerOfTwoValues[]
Definition
BitTest.cpp:54
rawspeed_test
Definition
BitTest.cpp:38
rawspeed::isPowerOfTwo
constexpr bool RAWSPEED_READNONE isPowerOfTwo(T val)
Definition
Bit.h:38
rawspeed::clampBits
constexpr auto RAWSPEED_READNONE clampBits(T value, unsigned int nBits)
Definition
Bit.h:75
test
librawspeed
adt
BitTest.cpp
Generated by
1.15.0