roll_test.cxx 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. //
  2. // roll_test.cxx
  3. // dice-td
  4. //
  5. // Created by Sam Jaffe on 12/18/18.
  6. // Copyright © 2018 Sam Jaffe. All rights reserved.
  7. //
  8. #include "xcode_gtest_helper.h"
  9. #include "shared_random_generator/random_impl.h"
  10. #include "dice-roll/die.h"
  11. #include "dice-roll/roll.h"
  12. struct MockRandomImpl : public engine::detail::random_impl {
  13. MOCK_METHOD1(exclusive, unsigned int(unsigned int));
  14. double exclusive(double, double) { throw; }
  15. double inclusive(double, double) { throw; }
  16. };
  17. class RollTest : public ::testing::Test {
  18. protected:
  19. void SetUp() override {
  20. pRandom = std::make_shared<MockRandomImpl>();
  21. }
  22. void TearDown() override {
  23. pRandom.reset();
  24. }
  25. protected:
  26. std::shared_ptr<MockRandomImpl> pRandom;
  27. };
  28. using namespace ::testing;
  29. TEST_F(RollTest, CanConstructNoThrow) {
  30. EXPECT_NO_THROW(dice::roller{});
  31. EXPECT_NO_THROW(dice::roller{pRandom});
  32. }
  33. TEST_F(RollTest, RollsOncePerDie) {
  34. dice::dice mydice{1, {{dice::sign::ZERO, 3, 4}}, {{dice::sign::PLUS, 1}}};
  35. EXPECT_CALL(*pRandom, exclusive(4)).WillOnce(Return(2)).WillOnce(Return(1))
  36. .WillOnce(Return(3));
  37. auto roll = dice::roller{pRandom}(mydice);
  38. EXPECT_THAT(roll, SizeIs(1));
  39. EXPECT_THAT(roll[0].sub_rolls, SizeIs(1));
  40. EXPECT_THAT(roll[0].sub_rolls[0].rolled, ElementsAre(3, 2, 4));
  41. }
  42. TEST_F(RollTest, DoesNotRollForConstants) {
  43. dice::dice mydice{1, {}, {{dice::sign::PLUS, 1}}};
  44. EXPECT_CALL(*pRandom, exclusive(_)).Times(0);
  45. auto roll = dice::roller{pRandom}(mydice);
  46. EXPECT_THAT(roll, SizeIs(1));
  47. EXPECT_THAT(roll[0].sub_rolls, SizeIs(0));
  48. EXPECT_THAT(roll[0].modifiers, SizeIs(1));
  49. EXPECT_THAT(roll[0].modifiers[0].value, Eq(1));
  50. }
  51. TEST_F(RollTest, OperatorInSumsElements) {
  52. dice::dice mydice{1, {{dice::sign::ZERO, 3, 4}}, {{dice::sign::PLUS, 1}}};
  53. EXPECT_CALL(*pRandom, exclusive(4)).WillOnce(Return(2)).WillOnce(Return(1))
  54. .WillOnce(Return(3));
  55. auto roll = dice::roller{pRandom}(mydice);
  56. // 3 + 2 + 4 + 1 = 10
  57. EXPECT_THAT(int(roll[0]), Eq(10));
  58. }