blob: 1ee1447703c40961755c893efb6692572b923df4 [file] [log] [blame]
#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]);
}
}
}