|
|
@@ -0,0 +1,72 @@
|
|
|
+//
|
|
|
+// io_test.cxx
|
|
|
+// dice-td
|
|
|
+//
|
|
|
+// Created by Sam Jaffe on 1/16/21.
|
|
|
+// Copyright © 2021 Sam Jaffe. All rights reserved.
|
|
|
+//
|
|
|
+
|
|
|
+#include <sstream>
|
|
|
+
|
|
|
+#include "xcode_gtest_helper.h"
|
|
|
+
|
|
|
+#include "dice-roll/die.h"
|
|
|
+#include "dice-roll/roll.h"
|
|
|
+
|
|
|
+using testing::Eq;
|
|
|
+
|
|
|
+TEST(DiceIOTest, StringFormIsExplicit) {
|
|
|
+ std::stringstream ss;
|
|
|
+ ss << dice::from_string("2{2d6-d4+5}");
|
|
|
+ EXPECT_THAT(ss.str(), Eq("2{2d6-1d4+5}"));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(DiceIOTest, AllModifiersComeAtTheEnd) {
|
|
|
+ std::stringstream ss;
|
|
|
+ ss << dice::from_string("2d6-4-1d6+5");
|
|
|
+ EXPECT_THAT(ss.str(), Eq("2d6-1d6-4+5"));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(DiceIOTest, StringFormDoesNotPreserveWhitespace) {
|
|
|
+ std::stringstream ss;
|
|
|
+ ss << dice::from_string("2 { d 4 + 5 }");
|
|
|
+ EXPECT_THAT(ss.str(), Eq("2{1d4+5}"));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(DiceIOTest, CanReadDirectlyFromStream) {
|
|
|
+ std::stringstream in("2d6-4-1d6+5"), out;
|
|
|
+ dice::dice d;
|
|
|
+ in >> d;
|
|
|
+ out << d;
|
|
|
+ EXPECT_THAT(out.str(), Eq("2d6-1d6-4+5"));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(DiceIOTest, PrintsOutDCMarker) {
|
|
|
+ std::string const tokens[] = { "<", "<=", ">", ">=" };
|
|
|
+ for (auto &tok : tokens) {
|
|
|
+ std::stringstream ss;
|
|
|
+ ss << dice::from_string("1d20" + tok + "10");
|
|
|
+ EXPECT_THAT(ss.str(), "1d20" + tok + "10");
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+TEST(RollIOTest, CanPrint0dN) {
|
|
|
+ dice::dice_roll roll{{{}}};
|
|
|
+ std::stringstream ss;
|
|
|
+ ss << roll;
|
|
|
+ EXPECT_THAT(ss.str(), Eq("0"));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(RollIOTest, Prints1dNAsRollNumber) {
|
|
|
+ dice::dice_roll roll{{{dice::sign::ZERO, {3}}}};
|
|
|
+ std::stringstream ss;
|
|
|
+ ss << roll;
|
|
|
+ EXPECT_THAT(ss.str(), Eq("3"));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(RollIOTest, PrintsNdMAsList) {
|
|
|
+ dice::dice_roll roll{{{dice::sign::ZERO, {3, 2, 4}}}};
|
|
|
+ std::stringstream ss;
|
|
|
+ ss << roll;
|
|
|
+ EXPECT_THAT(ss.str(), Eq("[ 3, 2, 4 ]"));
|
|
|
+}
|