io_test.cxx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. //
  2. // io_test.cxx
  3. // dice-td
  4. //
  5. // Created by Sam Jaffe on 1/16/21.
  6. // Copyright © 2021 Sam Jaffe. All rights reserved.
  7. //
  8. #include <sstream>
  9. #include "xcode_gtest_helper.h"
  10. #include "dice-roll/die.h"
  11. #include "dice-roll/roll.h"
  12. using testing::Eq;
  13. TEST(DiceIOTest, StringFormIsExplicit) {
  14. std::stringstream ss;
  15. ss << dice::from_string("2{2d6-d4+5}");
  16. EXPECT_THAT(ss.str(), Eq("2{2d6-1d4+5}"));
  17. }
  18. TEST(DiceIOTest, AllModifiersComeAtTheEnd) {
  19. std::stringstream ss;
  20. ss << dice::from_string("2d6-4-1d6+5");
  21. EXPECT_THAT(ss.str(), Eq("2d6-1d6-4+5"));
  22. }
  23. TEST(DiceIOTest, StringFormDoesNotPreserveWhitespace) {
  24. std::stringstream ss;
  25. ss << dice::from_string("2 { d 4 + 5 }");
  26. EXPECT_THAT(ss.str(), Eq("2{1d4+5}"));
  27. }
  28. TEST(DiceIOTest, CanReadDirectlyFromStream) {
  29. std::stringstream in("2d6-4-1d6+5"), out;
  30. dice::dice d;
  31. in >> d;
  32. out << d;
  33. EXPECT_THAT(out.str(), Eq("2d6-1d6-4+5"));
  34. }
  35. TEST(DiceIOTest, PrintsOutDCMarker) {
  36. std::string const tokens[] = {"<", "<=", ">", ">="};
  37. for (auto & tok : tokens) {
  38. std::stringstream ss;
  39. ss << dice::from_string("1d20" + tok + "10");
  40. EXPECT_THAT(ss.str(), "1d20" + tok + "10");
  41. }
  42. }
  43. TEST(RollIOTest, CanPrint0dN) {
  44. dice::dice_roll roll{{{}}};
  45. std::stringstream ss;
  46. ss << roll;
  47. EXPECT_THAT(ss.str(), Eq("0"));
  48. }
  49. TEST(RollIOTest, Prints1dNAsRollNumber) {
  50. dice::dice_roll roll{{{dice::sign::ZERO, {3}}}};
  51. std::stringstream ss;
  52. ss << roll;
  53. EXPECT_THAT(ss.str(), Eq("3"));
  54. }
  55. TEST(RollIOTest, PrintsNdMAsList) {
  56. dice::dice_roll roll{{{dice::sign::ZERO, {3, 2, 4}}}};
  57. std::stringstream ss;
  58. ss << roll;
  59. EXPECT_THAT(ss.str(), Eq("[ 3, 2, 4 ]"));
  60. }
  61. TEST(RollIOTest, PrintsModifiersAfterList) {
  62. dice::dice_roll roll{{{dice::sign::ZERO, {3, 2, 4}}},
  63. {{dice::sign::PLUS, 2}}};
  64. std::stringstream ss;
  65. ss << roll;
  66. EXPECT_THAT(ss.str(), Eq("[ 3, 2, 4 ]+2"));
  67. }