7 #include <gtest/gtest.h>
11 TEST(fields2cover_utils_Random, init) {
24 d2 = rand3.getRandomDouble();
32 std::vector<f2c::Random> v_rand {rand1, rand2, rand3};
35 for (
auto&& r : v_rand) {
38 d2 = r2.getRandomDouble();
49 TEST(fields2cover_utils_Random, get_angle_random) {
52 auto two_pi = boost::math::constants::two_pi<double>();
53 for (
int i = 0; i < 10000; ++i) {
54 rand_val =
rand.getAngleRandom();
55 EXPECT_LT( rand_val, two_pi);
56 EXPECT_GE( rand_val, 0.0);
60 TEST(fields2cover_utils_Random, get_random_double) {
64 for (
int i = 0; i < N; ++i) {
65 auto rand_val =
rand.getRandomDouble();
66 EXPECT_LT( rand_val, 1.0);
67 EXPECT_GT( rand_val, 0.0);
70 EXPECT_NEAR(sum_val, N/2, N/10);
74 TEST(fields2cover_utils_Random, get_linear_random) {
77 for (
int i = 0; i < 10000; ++i) {
78 double max_rand =
rand.getRandomDouble();
79 double min_rand =
rand.getRandomDouble() - 1.0;
80 rand_val =
rand.getRandomLinear(min_rand, max_rand);
81 EXPECT_LT( rand_val, max_rand);
82 EXPECT_GE( rand_val, min_rand);
86 TEST(fields2cover_utils_Random, get_exp_random) {
89 for (
int i = 0; i < 100; ++i) {
90 double max_rand =
rand.getRandomDouble() + 1.5;
91 double min_rand =
rand.getRandomDouble() + 0.5;
92 rand_val =
rand.getRandomExp(min_rand, max_rand);
93 EXPECT_LT( rand_val, max_rand);
94 EXPECT_GE( rand_val, min_rand);
98 TEST(fields2cover_utils_Random, get_random_exp_dist) {
100 size_t count0To1 = 0;
101 size_t count1To2 = 0;
102 size_t count2To3 = 0;
103 size_t count3To4 = 0;
104 size_t count4ToInf = 0;
106 for (
size_t i = 0; i < n; ++i) {
107 auto d =
rand.getRandomExpDist(1.0);
111 }
else if (d <= 2.0) {
113 }
else if (d <= 3.0) {
115 }
else if (d <= 4.0) {
121 EXPECT_EQ(n, count0To1 + count1To2 + count2To3 + count3To4 + count4ToInf);
122 EXPECT_GT(count0To1, count1To2);
123 EXPECT_GT(count1To2, count2To3);
124 EXPECT_GT(count2To3, count3To4);
125 EXPECT_GT(count3To4, count4ToInf);
129 TEST(fields2cover_utils_Random, mod_2pi) {
130 const double two_pi {boost::math::constants::two_pi<double>()};
131 for (
double i = 0.01; i < 100.0; i += 0.1) {
135 EXPECT_NEAR(fmod(1e5 * two_pi - i, two_pi),
140 TEST(fields2cover_utils_Random, genRandField) {
142 auto field =
rand.generateRandField(1e2, 4);
143 EXPECT_NEAR(
field.area(), 1e2 , 1e-6);
144 EXPECT_THROW(
rand.generateRandField(1e2, -2), std::invalid_argument);
145 EXPECT_THROW(
rand.generateRandField(1e2, 0), std::invalid_argument);
146 EXPECT_THROW(
rand.generateRandField(1e2, 2), std::invalid_argument);
147 EXPECT_THROW(
rand.generateRandField(-1e2, 6), std::invalid_argument);
150 TEST(fields2cover_utils_Random, isConvex) {
153 auto field =
rand.generateRandField(1e2, 3);
154 auto poly =
field.getField().getCell(0);
155 int convex_fields {0}, non_convex_fields {0};
156 for (
int i = 0; i < n; ++i) {
158 if (
field.getField().isConvex()) {
162 EXPECT_GT(
static_cast<double>(convex_fields) / n, 0.9999);
164 for (
int i = 0; i < n; ++i) {
166 if (!
field.getField().isConvex()) {
170 EXPECT_GT(
static_cast<double>(non_convex_fields) / n, 0.9999);
172 EXPECT_FALSE(
F2CCell().isConvex());