|
|
@@ -15,13 +15,13 @@
|
|
|
|
|
|
using unsigned_die = std::pair<int, int>;
|
|
|
namespace dice {
|
|
|
- bool operator==(die const & lhs, die const & rhs) {
|
|
|
- return lhs.sgn == rhs.sgn && lhs.num == rhs.num && lhs.sides == rhs.sides;
|
|
|
- }
|
|
|
-
|
|
|
- bool operator==(die const & lhs, unsigned_die const & rhs) {
|
|
|
- return lhs.num == rhs.first && lhs.sides == rhs.second;
|
|
|
- }
|
|
|
+bool operator==(die const & lhs, die const & rhs) {
|
|
|
+ return lhs.sgn == rhs.sgn && lhs.num == rhs.num && lhs.sides == rhs.sides;
|
|
|
+}
|
|
|
+
|
|
|
+bool operator==(die const & lhs, unsigned_die const & rhs) {
|
|
|
+ return lhs.num == rhs.first && lhs.sides == rhs.second;
|
|
|
+}
|
|
|
}
|
|
|
|
|
|
using namespace ::testing;
|
|
|
@@ -104,6 +104,36 @@ TEST(Parser, IgnoresWhitespace) {
|
|
|
EXPECT_THAT(capture.modifier, SizeIs(1));
|
|
|
}
|
|
|
|
|
|
+TEST(Parser, CanParseDC) {
|
|
|
+ EXPECT_NO_THROW(dice::from_string("1d20<10"));
|
|
|
+ EXPECT_NO_THROW(dice::from_string("1d20<=10"));
|
|
|
+ EXPECT_NO_THROW(dice::from_string("1d20>10"));
|
|
|
+ EXPECT_NO_THROW(dice::from_string("1d20>=10"));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(Parser, CanParseDCForMultiroll) {
|
|
|
+ EXPECT_NO_THROW(dice::from_string("2{1d20<10}"));
|
|
|
+ EXPECT_NO_THROW(dice::from_string("2{1d20<=10}"));
|
|
|
+ EXPECT_NO_THROW(dice::from_string("2{1d20>10}"));
|
|
|
+ EXPECT_NO_THROW(dice::from_string("2{1d20>=10}"));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(Parser, MultirollDCMustAppearInsideBrackets) {
|
|
|
+ EXPECT_NO_THROW(dice::from_string("2{1d20}<10"));
|
|
|
+ EXPECT_NO_THROW(dice::from_string("2{1d20}<=10"));
|
|
|
+ EXPECT_NO_THROW(dice::from_string("2{1d20}>10"));
|
|
|
+ EXPECT_NO_THROW(dice::from_string("2{1d20}>=10"));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(Parser, DCIsCaptured) {
|
|
|
+ using test = dice::difficulty_class::test;
|
|
|
+ EXPECT_THAT(dice::from_string("1d20<10").dc.against, 10);
|
|
|
+ EXPECT_THAT(dice::from_string("1d20<10").dc.comp, test::Less);
|
|
|
+ EXPECT_THAT(dice::from_string("1d20<=10").dc.comp, test::LessOrEqual);
|
|
|
+ EXPECT_THAT(dice::from_string("1d20>10").dc.comp, test::Greater);
|
|
|
+ EXPECT_THAT(dice::from_string("1d20>=10").dc.comp, test::GreaterOrEqual);
|
|
|
+}
|
|
|
+
|
|
|
TEST(DiceIO, StringFormIsExplicit) {
|
|
|
std::stringstream ss;
|
|
|
ss << dice::from_string("2{2d6-d4+5}");
|