summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib/fuzzer/tests/FuzzedDataProviderUnittest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'compiler-rt/lib/fuzzer/tests/FuzzedDataProviderUnittest.cpp')
-rw-r--r--compiler-rt/lib/fuzzer/tests/FuzzedDataProviderUnittest.cpp53
1 files changed, 52 insertions, 1 deletions
diff --git a/compiler-rt/lib/fuzzer/tests/FuzzedDataProviderUnittest.cpp b/compiler-rt/lib/fuzzer/tests/FuzzedDataProviderUnittest.cpp
index 36f2090b1ec..222283434eb 100644
--- a/compiler-rt/lib/fuzzer/tests/FuzzedDataProviderUnittest.cpp
+++ b/compiler-rt/lib/fuzzer/tests/FuzzedDataProviderUnittest.cpp
@@ -6,7 +6,7 @@
#include <cstdint>
#include <cstdlib>
-#include <fuzzer/FuzzedDataProvider.hpp>
+#include <fuzzer/FuzzedDataProvider.h>
// The test is intentionally extensive, as behavior of |FuzzedDataProvider| must
// not be broken, given than many fuzz targets depend on it. Changing the
@@ -348,6 +348,57 @@ TEST(FuzzedDataProvider, remaining_bytes) {
EXPECT_EQ(size_t(0), DataProv.remaining_bytes());
}
+TEST(FuzzedDataProvider, ConsumeProbability) {
+ FuzzedDataProvider DataProv(Data, sizeof(Data));
+ ASSERT_FLOAT_EQ(float(0.28969181), DataProv.ConsumeProbability<float>());
+ ASSERT_DOUBLE_EQ(double(0.086814121166605432),
+ DataProv.ConsumeProbability<double>());
+ ASSERT_FLOAT_EQ(float(0.30104411), DataProv.ConsumeProbability<float>());
+ ASSERT_DOUBLE_EQ(double(0.96218831486039413),
+ DataProv.ConsumeProbability<double>());
+ ASSERT_FLOAT_EQ(float(0.67005056), DataProv.ConsumeProbability<float>());
+ ASSERT_DOUBLE_EQ(double(0.69210584173832279),
+ DataProv.ConsumeProbability<double>());
+
+ // Exhaust the buffer.
+ EXPECT_EQ(std::vector<uint8_t>(Data, Data + sizeof(Data) - 36),
+ DataProv.ConsumeRemainingBytes<uint8_t>());
+ ASSERT_FLOAT_EQ(float(0.0), DataProv.ConsumeProbability<float>());
+}
+
+TEST(FuzzedDataProvider, ConsumeFloatingPoint) {
+ FuzzedDataProvider DataProv(Data, sizeof(Data));
+ ASSERT_FLOAT_EQ(float(-2.8546307e+38),
+ DataProv.ConsumeFloatingPoint<float>());
+ ASSERT_DOUBLE_EQ(double(8.0940194040236032e+307),
+ DataProv.ConsumeFloatingPoint<double>());
+ ASSERT_FLOAT_EQ(float(271.49084),
+ DataProv.ConsumeFloatingPointInRange<float>(123.0, 777.0));
+ ASSERT_DOUBLE_EQ(double(30.859126145478349),
+ DataProv.ConsumeFloatingPointInRange<double>(13.37, 31.337));
+ ASSERT_FLOAT_EQ(
+ float(-903.47729),
+ DataProv.ConsumeFloatingPointInRange<float>(-999.9999, -777.77));
+ ASSERT_DOUBLE_EQ(
+ double(24.561393182922771),
+ DataProv.ConsumeFloatingPointInRange<double>(-13.37, 31.337));
+ ASSERT_FLOAT_EQ(float(1.0),
+ DataProv.ConsumeFloatingPointInRange<float>(1.0, 1.0));
+ ASSERT_DOUBLE_EQ(double(-1.0),
+ DataProv.ConsumeFloatingPointInRange<double>(-1.0, -1.0));
+
+ // Exhaust the buffer.
+ EXPECT_EQ((std::vector<uint8_t>(Data, Data + sizeof(Data) - 50)).size(),
+ DataProv.ConsumeRemainingBytes<uint8_t>().size());
+ ASSERT_FLOAT_EQ(float(0.0), DataProv.ConsumeProbability<float>());
+ ASSERT_NEAR(std::numeric_limits<double>::lowest(),
+ DataProv.ConsumeFloatingPoint<double>(), 1e-10);
+ ASSERT_FLOAT_EQ(float(123.0),
+ DataProv.ConsumeFloatingPointInRange<float>(123.0, 777.0));
+ ASSERT_DOUBLE_EQ(double(-13.37), DataProv.ConsumeFloatingPointInRange<double>(
+ -13.37, 31.337));
+}
+
int main(int argc, char **argv) {
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
OpenPOWER on IntegriCloud