|
@@ -19,104 +19,69 @@
|
|
|
using testing::ElementsAre;
|
|
using testing::ElementsAre;
|
|
|
using testing::FieldsAre;
|
|
using testing::FieldsAre;
|
|
|
|
|
|
|
|
-MATCHER_P(BytesAre, value, "") {
|
|
|
|
|
- *result_listener << "whose bytes are " << std::hex << arg;
|
|
|
|
|
- return reinterpret_cast<double const &>(arg) == value;
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-TEST(TapeTest, CanRecordIntData) {
|
|
|
|
|
- engine::random::Tape tape;
|
|
|
|
|
|
|
+class StubDistribution : public engine::random::Distribution<int> {
|
|
|
|
|
+public:
|
|
|
|
|
+ StubDistribution(int value) : value_(value) {}
|
|
|
|
|
+ result_type operator()(engine::random::Device &) const { return value_; }
|
|
|
|
|
|
|
|
- tape.inclusive(0u, 100u, 50u);
|
|
|
|
|
- EXPECT_EQ(tape.inclusive(0u, 100u), 50);
|
|
|
|
|
-}
|
|
|
|
|
|
|
+private:
|
|
|
|
|
+ int value_;
|
|
|
|
|
+};
|
|
|
|
|
|
|
|
-TEST(TapeTest, CanRecordDoubleData) {
|
|
|
|
|
|
|
+TEST(TapeTest, CanRecord) {
|
|
|
engine::random::Tape tape;
|
|
engine::random::Tape tape;
|
|
|
|
|
|
|
|
- tape.exclusive(0.0, 100.0, 50.0);
|
|
|
|
|
- EXPECT_EQ(tape.exclusive(0.0, 100.0), 50.0);
|
|
|
|
|
-
|
|
|
|
|
- tape.exclusive(0.0, 100.0, 50.0);
|
|
|
|
|
- EXPECT_EQ(tape.exclusive(0.0, 100.0), 50.0);
|
|
|
|
|
|
|
+ tape(50u);
|
|
|
|
|
+ EXPECT_EQ(tape(), 50);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(TapeTest, ThrowsOnOverFetch) {
|
|
TEST(TapeTest, ThrowsOnOverFetch) {
|
|
|
engine::random::Tape tape;
|
|
engine::random::Tape tape;
|
|
|
- tape.inclusive(0, 100, 50);
|
|
|
|
|
- EXPECT_EQ(tape.inclusive(0, 100), 50);
|
|
|
|
|
- EXPECT_THROW(tape.inclusive(0, 100), std::out_of_range);
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-TEST(TapeTest, BadRequestIsNoOp) {
|
|
|
|
|
- engine::random::Tape tape;
|
|
|
|
|
- tape.inclusive(0, 100, 50);
|
|
|
|
|
- EXPECT_ANY_THROW(tape.inclusive(0, 1));
|
|
|
|
|
- EXPECT_EQ(tape.inclusive(0, 100), 50);
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-TEST(TapeTest, ThrowsOnTypeMismatch) {
|
|
|
|
|
- engine::random::Tape tape;
|
|
|
|
|
- tape.inclusive(0u, 100u, 50u);
|
|
|
|
|
- EXPECT_THROW(tape.exclusive(0.0, 100.0), std::domain_error);
|
|
|
|
|
- EXPECT_THROW(tape.inclusive(0, 100), std::domain_error);
|
|
|
|
|
- EXPECT_NO_THROW(tape.inclusive(0u, 100u));
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-TEST(TapeTest, ThrowsOnBoundsMismatch) {
|
|
|
|
|
- engine::random::Tape tape;
|
|
|
|
|
- tape.exclusive(0.0, 100.0, 50.0);
|
|
|
|
|
- EXPECT_THROW(tape.exclusive(0.0, 1.0), std::logic_error);
|
|
|
|
|
|
|
+ tape(50);
|
|
|
|
|
+ EXPECT_EQ(tape(), 50);
|
|
|
|
|
+ EXPECT_THROW(tape(), std::out_of_range);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(TapeTest, IsOrdered) {
|
|
TEST(TapeTest, IsOrdered) {
|
|
|
engine::random::Tape tape;
|
|
engine::random::Tape tape;
|
|
|
- tape.exclusive(0.0, 100.0, 50.0);
|
|
|
|
|
- tape.exclusive(10.0, 90.0, 50.0);
|
|
|
|
|
-
|
|
|
|
|
- EXPECT_THROW(tape.exclusive(10.0, 90.0), std::logic_error);
|
|
|
|
|
|
|
+ tape(1);
|
|
|
|
|
+ tape(2);
|
|
|
|
|
|
|
|
- EXPECT_EQ(tape.exclusive(0.0, 100.0), 50.0);
|
|
|
|
|
- EXPECT_EQ(tape.exclusive(10.0, 90.0), 50.0);
|
|
|
|
|
|
|
+ EXPECT_EQ(tape(), 1);
|
|
|
|
|
+ EXPECT_EQ(tape(), 2);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(TapeTest, IsSerializable) {
|
|
TEST(TapeTest, IsSerializable) {
|
|
|
engine::random::Tape tape;
|
|
engine::random::Tape tape;
|
|
|
- tape.inclusive(0, 100, 50);
|
|
|
|
|
- tape.inclusive(0u, 100u, 50u);
|
|
|
|
|
- tape.exclusive(0.0, 100.0, 50.0);
|
|
|
|
|
|
|
+ tape(1);
|
|
|
|
|
+ tape(2);
|
|
|
|
|
+ tape(3);
|
|
|
|
|
|
|
|
auto serial = engine::random::Tape::serial_type(tape);
|
|
auto serial = engine::random::Tape::serial_type(tape);
|
|
|
- EXPECT_THAT(
|
|
|
|
|
- serial,
|
|
|
|
|
- ElementsAre(FieldsAre("i", 0, 100, 50), FieldsAre("j", 0, 100, 50),
|
|
|
|
|
- FieldsAre("d", BytesAre(0), BytesAre(100), BytesAre(50))));
|
|
|
|
|
|
|
+ EXPECT_THAT(serial, ElementsAre(1, 2, 3));
|
|
|
|
|
|
|
|
tape = engine::random::Tape(serial);
|
|
tape = engine::random::Tape(serial);
|
|
|
- EXPECT_EQ(tape.inclusive(0, 100), 50);
|
|
|
|
|
- EXPECT_EQ(tape.inclusive(0u, 100u), 50u);
|
|
|
|
|
- EXPECT_EQ(tape.exclusive(0.0, 100.0), 50.0);
|
|
|
|
|
|
|
+ EXPECT_EQ(tape(), 1);
|
|
|
|
|
+ EXPECT_EQ(tape(), 2);
|
|
|
|
|
+ EXPECT_EQ(tape(), 3);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(TapeTest, IndexNotIncludedInSerialization) {
|
|
TEST(TapeTest, IndexNotIncludedInSerialization) {
|
|
|
engine::random::Tape tape;
|
|
engine::random::Tape tape;
|
|
|
- tape.inclusive(0, 100, 50);
|
|
|
|
|
- tape.inclusive(0u, 100u, 50u);
|
|
|
|
|
- tape.exclusive(0.0, 100.0, 50.0);
|
|
|
|
|
|
|
+ tape(1);
|
|
|
|
|
+ tape(2);
|
|
|
|
|
+ tape(3);
|
|
|
|
|
|
|
|
- EXPECT_EQ(tape.inclusive(0, 100), 50);
|
|
|
|
|
- EXPECT_EQ(tape.inclusive(0u, 100u), 50u);
|
|
|
|
|
|
|
+ EXPECT_EQ(tape(), 1);
|
|
|
|
|
+ EXPECT_EQ(tape(), 2);
|
|
|
|
|
|
|
|
auto serial = engine::random::Tape::serial_type(tape);
|
|
auto serial = engine::random::Tape::serial_type(tape);
|
|
|
- EXPECT_THAT(
|
|
|
|
|
- serial,
|
|
|
|
|
- ElementsAre(FieldsAre("i", 0, 100, 50), FieldsAre("j", 0, 100, 50),
|
|
|
|
|
- FieldsAre("d", BytesAre(0), BytesAre(100), BytesAre(50))));
|
|
|
|
|
|
|
+ EXPECT_THAT(serial, ElementsAre(1, 2, 3));
|
|
|
|
|
|
|
|
tape = engine::random::Tape(serial);
|
|
tape = engine::random::Tape(serial);
|
|
|
- EXPECT_EQ(tape.inclusive(0, 100), 50);
|
|
|
|
|
- EXPECT_EQ(tape.inclusive(0u, 100u), 50u);
|
|
|
|
|
- EXPECT_EQ(tape.exclusive(0.0, 100.0), 50.0);
|
|
|
|
|
|
|
+ EXPECT_EQ(tape(), 1);
|
|
|
|
|
+ EXPECT_EQ(tape(), 2);
|
|
|
|
|
+ EXPECT_EQ(tape(), 3);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(TapeTest, CanAttachToRandom) {
|
|
TEST(TapeTest, CanAttachToRandom) {
|
|
@@ -125,8 +90,9 @@ TEST(TapeTest, CanAttachToRandom) {
|
|
|
|
|
|
|
|
auto scope = random.record(tape);
|
|
auto scope = random.record(tape);
|
|
|
|
|
|
|
|
- auto result = random.inclusive(0, 100);
|
|
|
|
|
- EXPECT_EQ(tape->inclusive(0, 100), result);
|
|
|
|
|
|
|
+ auto result = random(StubDistribution(5));
|
|
|
|
|
+ EXPECT_EQ(result, 5);
|
|
|
|
|
+ EXPECT_EQ((*tape)(), 5);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(TapeTest, StopsRecordingOnScopeExit) {
|
|
TEST(TapeTest, StopsRecordingOnScopeExit) {
|
|
@@ -135,10 +101,10 @@ TEST(TapeTest, StopsRecordingOnScopeExit) {
|
|
|
|
|
|
|
|
{
|
|
{
|
|
|
auto scope = random.record(tape);
|
|
auto scope = random.record(tape);
|
|
|
- random.inclusive(0, 100);
|
|
|
|
|
|
|
+ random(StubDistribution(2));
|
|
|
}
|
|
}
|
|
|
- random.inclusive(0, 100);
|
|
|
|
|
|
|
+ random(StubDistribution(1));
|
|
|
|
|
|
|
|
- EXPECT_NO_THROW(tape->inclusive(0, 100));
|
|
|
|
|
- EXPECT_THROW(tape->inclusive(0, 100), std::out_of_range);
|
|
|
|
|
|
|
+ EXPECT_NO_THROW((*tape)());
|
|
|
|
|
+ EXPECT_THROW((*tape)(), std::out_of_range);
|
|
|
}
|
|
}
|