68 lines
1.5 KiB
C++
68 lines
1.5 KiB
C++
#include <gtest/gtest.h>
|
|
|
|
#include <private/dvr/numeric.h>
|
|
|
|
using TestTypes = ::testing::Types<float, double, int>;
|
|
|
|
using android::dvr::RandomInRange;
|
|
|
|
template <typename T>
|
|
class NumericTest : public ::testing::TestWithParam<T> {
|
|
public:
|
|
using FT = T;
|
|
};
|
|
|
|
TYPED_TEST_CASE(NumericTest, TestTypes);
|
|
|
|
TYPED_TEST(NumericTest, RandomInRange) {
|
|
using FT = typename TestFixture::FT;
|
|
|
|
const int kNumTrials = 50;
|
|
const FT kLowRange = static_cast<FT>(-100);
|
|
const FT kHighRange = static_cast<FT>(100);
|
|
|
|
for (int i = 0; i < kNumTrials; ++i) {
|
|
FT value = RandomInRange(kLowRange, kHighRange);
|
|
|
|
EXPECT_LE(kLowRange, value);
|
|
EXPECT_GE(kHighRange, value);
|
|
}
|
|
}
|
|
|
|
TEST(RandomInRange, TestIntVersion) {
|
|
// This checks specifically that the function does not always give the lo
|
|
// value (this was previously a bug)
|
|
|
|
const int kNumTrials = 50;
|
|
const int kLowRange = -100;
|
|
const int kHighRange = 100;
|
|
|
|
for (int i = 0; i < kNumTrials; ++i) {
|
|
int value = RandomInRange(kLowRange, kHighRange);
|
|
|
|
if (value != kLowRange) {
|
|
SUCCEED();
|
|
return;
|
|
}
|
|
}
|
|
|
|
FAIL() << "Did not produce a value other than the range minimum for "
|
|
<< "integers.";
|
|
}
|
|
|
|
TEST(RandomInRange, TestVectorVersion) {
|
|
Eigen::Vector3d lo(-3.0, -4.0, -5.0);
|
|
Eigen::Vector3d hi(5.0, 4.0, 3.0);
|
|
|
|
const int kNumTrials = 50;
|
|
|
|
for (int i = 0; i < kNumTrials; ++i) {
|
|
Eigen::Vector3d result = RandomInRange(lo, hi);
|
|
|
|
for (int j = 0; j < 3; ++j) {
|
|
EXPECT_LE(lo[j], result[j]);
|
|
EXPECT_GE(hi[j], result[j]);
|
|
}
|
|
}
|
|
}
|