| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- //
- // roll_test.cxx
- // dice-td
- //
- // Created by Sam Jaffe on 12/18/18.
- // Copyright © 2018 Sam Jaffe. All rights reserved.
- //
- #include <gmock/gmock.h>
- #include <gtest/gtest.h>
- #include "shared_random_generator/random_impl.h"
- #include "die.h"
- #include "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::ZERO, 3, 4}}, {{dice::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::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::ZERO, 3, 4}}, {{dice::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::ZERO, {3}}}};
- std::stringstream ss;
- ss << roll;
- EXPECT_THAT(ss.str(), Eq("3"));
- }
- TEST(RollSerialTest, PrintsNdMAsList) {
- dice::dice_roll roll{{{dice::ZERO, {3, 2, 4}}}};
- std::stringstream ss;
- ss << roll;
- EXPECT_THAT(ss.str(), Eq("[ 3, 2, 4 ]"));
- }
|