Browse Source

Add test cases for difficulty_class parsing.

Sam Jaffe 4 years ago
parent
commit
c4124c7936
1 changed files with 37 additions and 7 deletions
  1. 37 7
      test/parser_test.cxx

+ 37 - 7
test/parser_test.cxx

@@ -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}");