| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- //
- // roll_test.cxx
- // dice-td
- //
- // Created by Sam Jaffe on 12/18/18.
- // Copyright © 2018 Sam Jaffe. All rights reserved.
- //
- #include "xcode_gtest_helper.h"
- #include "shared_random_generator/random_impl.h"
- #include "dice-roll/die.h"
- #include "dice-roll/roll.h"
- struct MockRandomImpl : public engine::detail::random_impl {
- MOCK_METHOD1(exclusive, unsigned int(unsigned int));
- double exclusive(double, double) { throw; }
- double inclusive(double, double) { throw; }
- };
- class RollTest : public ::testing::Test {
- protected:
- void SetUp() override {
- pRandom = std::make_shared<MockRandomImpl>();
- }
-
- void TearDown() override {
- pRandom.reset();
- }
-
- protected:
- std::shared_ptr<MockRandomImpl> pRandom;
- };
- using namespace ::testing;
- TEST_F(RollTest, CanConstructNoThrow) {
- EXPECT_NO_THROW(dice::roller{});
- EXPECT_NO_THROW(dice::roller{pRandom});
- }
- TEST_F(RollTest, RollsOncePerDie) {
- dice::dice mydice{1, {{dice::sign::ZERO, 3, 4}}, {{dice::sign::PLUS, 1}}};
- EXPECT_CALL(*pRandom, exclusive(4)).WillOnce(Return(2)).WillOnce(Return(1))
- .WillOnce(Return(3));
-
- auto roll = dice::roller{pRandom}(mydice);
- EXPECT_THAT(roll, SizeIs(1));
- EXPECT_THAT(roll[0].sub_rolls, SizeIs(1));
- EXPECT_THAT(roll[0].sub_rolls[0].rolled, ElementsAre(3, 2, 4));
- }
- TEST_F(RollTest, DoesNotRollForConstants) {
- dice::dice mydice{1, {}, {{dice::sign::PLUS, 1}}};
- EXPECT_CALL(*pRandom, exclusive(_)).Times(0);
-
- auto roll = dice::roller{pRandom}(mydice);
- EXPECT_THAT(roll, SizeIs(1));
- EXPECT_THAT(roll[0].sub_rolls, SizeIs(0));
- EXPECT_THAT(roll[0].modifiers, SizeIs(1));
- EXPECT_THAT(roll[0].modifiers[0].value, Eq(1));
- }
- TEST_F(RollTest, OperatorInSumsElements) {
- dice::dice mydice{1, {{dice::sign::ZERO, 3, 4}}, {{dice::sign::PLUS, 1}}};
- EXPECT_CALL(*pRandom, exclusive(4)).WillOnce(Return(2)).WillOnce(Return(1))
- .WillOnce(Return(3));
-
- auto roll = dice::roller{pRandom}(mydice);
- // 3 + 2 + 4 + 1 = 10
- EXPECT_THAT(int(roll[0]), Eq(10));
- }
- TEST(RollSerialTest, CanPrint0dN) {
- dice::dice_roll roll{{{}}};
- std::stringstream ss;
- ss << roll;
- EXPECT_THAT(ss.str(), Eq("0"));
- }
- TEST(RollSerialTest, Prints1dNAsRollNumber) {
- dice::dice_roll roll{{{dice::sign::ZERO, {3}}}};
- std::stringstream ss;
- ss << roll;
- EXPECT_THAT(ss.str(), Eq("3"));
- }
- TEST(RollSerialTest, PrintsNdMAsList) {
- dice::dice_roll roll{{{dice::sign::ZERO, {3, 2, 4}}}};
- std::stringstream ss;
- ss << roll;
- EXPECT_THAT(ss.str(), Eq("[ 3, 2, 4 ]"));
- }
|