Exemplo n.º 1
0
        protected static void EvaluateRoll(string diceExpr, RollerConfig conf, RollData data, int expectedRolls, string expectedResult)
        {
            var result = Roller.Roll(diceExpr, conf, data);

            Assert.AreEqual(expectedRolls, result.NumRolls);
            Assert.AreEqual(expectedResult, result.ToString());
        }
Exemplo n.º 2
0
        public void ThrowBadSides_WhenExceedingMaxSides()
        {
            var conf = new RollerConfig()
            {
                MaxSides = 100, GetRandomBytes = GetRNG(0, 2)
            };

            EvaluateRoll("1d1000", conf, DiceErrorCode.BadSides);
        }
Exemplo n.º 3
0
        public void Successfully_RollVariableDice_Normal()
        {
            var conf = new RollerConfig()
            {
                GetRandomBytes = GetRNG(2, 4, 4, 4)
            };

            EvaluateRoll("(1d8)d6", conf, 4, "3d6 => 5 + 5 + 5 => 15");
        }
Exemplo n.º 4
0
        public void ThrowInvalidOperationException_WhenTooFewMaxSides()
        {
            var conf = new RollerConfig()
            {
                MaxSides = 0
            };

            Roller.Roll("1d20", conf);
        }
Exemplo n.º 5
0
        public void Successfully_Max_Successes()
        {
            var conf = new RollerConfig()
            {
                GetRandomBytes = GetRNG(9, 4, 5, 5)
            };

            EvaluateRoll("max(2d10>5, 2d10>5)", conf, 4, "max(2d10.success(>5), 2d10.success(>5)) => max(10* + 5*, $6 + $6) => 2 successes");
        }
Exemplo n.º 6
0
        public void Successfully_Max_BiggerRight()
        {
            var conf = new RollerConfig()
            {
                GetRandomBytes = GetRNG(4, 9)
            };

            EvaluateRoll("max(1d20, 1d20)", conf, 2, "max(1d20, 1d20) => max(5*, 10) => 10");
        }
Exemplo n.º 7
0
        public void Successfully_Min_Successes()
        {
            var conf = new RollerConfig()
            {
                GetRandomBytes = GetRNG(0, 7, 5, 5)
            };

            EvaluateRoll("min(2d10>5f1, 2d10>5f1)", conf, 4, "min(2d10.success(>5).failure(=1), 2d10.success(>5).failure(=1)) => min(#1 + $8, 6* + 6*) => 0 successes");
        }
Exemplo n.º 8
0
        public void Successfully_TerminateTooManyRerolls()
        {
            var conf = new RollerConfig()
            {
                GetRandomBytes = GetRNG(Roll9()), MaxRerolls = 2
            };

            EvaluateRoll("1d20rr!=2", conf, 3, "1d20.reroll(!=2) => 9* + 9* + 9 => 9");
        }
Exemplo n.º 9
0
        public void Successfully_Max_BiggerLeft()
        {
            var conf = new RollerConfig()
            {
                GetRandomBytes = GetRNG(9, 4)
            };

            EvaluateRoll("max(1d20, 1d20)", conf, 2, "max(1d20, 1d20) => max(10, 5*) => 10");
        }
Exemplo n.º 10
0
        public void Successfully_Min_BiggerRight()
        {
            var conf = new RollerConfig()
            {
                GetRandomBytes = GetRNG(4, 9)
            };

            EvaluateRoll("min(1d20, 1d20)", conf, 2, "min(1d20, 1d20) => min(5, 10*) => 5");
        }
Exemplo n.º 11
0
        public void ThrowInvalidOperationException_WhenTooLowMaxRerolls()
        {
            var conf = new RollerConfig()
            {
                MaxRerolls = -1
            };

            Roller.Roll("1d20", conf);
        }
Exemplo n.º 12
0
        public void ThrowRecursionDepthExceeded_WhenExceedingRecursion()
        {
            var conf = new RollerConfig()
            {
                MaxRecursionDepth = 0, GetRandomBytes = GetRNG(0, 2)
            };

            EvaluateRoll("1d20rr1", conf, DiceErrorCode.RecursionDepthExceeded);
        }
Exemplo n.º 13
0
        public void Successfully_Min_BiggerLeft()
        {
            var conf = new RollerConfig()
            {
                GetRandomBytes = GetRNG(9, 4)
            };

            EvaluateRoll("min(1d20, 1d20)", conf, 2, "min(1d20, 1d20) => min(10*, 5) => 5");
        }
Exemplo n.º 14
0
        public void ThrowTooManyDice_WhenTooManyDice()
        {
            var conf = new RollerConfig()
            {
                GetRandomBytes = GetRNG(Roll9()), MaxDice = 2
            };

            EvaluateRoll("1d20rr<>2", conf, DiceErrorCode.TooManyDice);
        }
Exemplo n.º 15
0
        public void Successfully_HandleNestedRerolls()
        {
            var conf = new RollerConfig()
            {
                GetRandomBytes = GetRNG(0, 0, 1, 1, 0, 2, 3)
            };

            EvaluateRoll("{2d20rr1}rr<5", conf, 7, "{2d20.reroll(=1)}.reroll(<5) => (4* + 7) => 7");
        }
Exemplo n.º 16
0
        public void Successfully_MinMax_BiggerLeft()
        {
            var conf = new RollerConfig()
            {
                GetRandomBytes = GetRNG(17)
            };

            EvaluateRoll("min(max(1d20, 10), 9)", conf, 1, "min(max(1d20, 10), 9) => min(max(18*, 10*), 9) => 9");
        }
Exemplo n.º 17
0
        public void Successfully_PerformVariableComparison_Normal()
        {
            var conf = new RollerConfig()
            {
                GetRandomBytes = GetRNG(0, 0, 1)
            };

            EvaluateRoll("1d10rr(1d10)", conf, 3, "1d10.reroll(=1) => 1!* + 2 => 2");
        }
Exemplo n.º 18
0
        public void Successfully_RegisterMacro()
        {
            var registry = new MacroRegistry();

            registry.RegisterMacro("c", MacroContainer.A);
            var conf = new RollerConfig()
            {
                MacroRegistry = registry, GetRandomBytes = GetRNG(Roll9())
            };

            EvaluateRoll("[c]d20", conf, 1, "1d20 => 9 => 9");
        }
Exemplo n.º 19
0
        public void Successfully_EvaluateTwice()
        {
            var conf = new RollerConfig()
            {
                GetRandomBytes = GetRNG(2, 3, 4, 5, 6, 7)
            };
            var node = new GroupNode(Two, new List <DiceAST> {
                _2d20
            });

            EvaluateNode(node, Data(conf), 4, "2{2d20} => (7) + (11) => 18");
        }
Exemplo n.º 20
0
        public void Successfully_RegisterStaticFunctions()
        {
            var registry = new FunctionRegistry();

            registry.RegisterType(typeof(FunctionContainer));
            var conf = new RollerConfig()
            {
                FunctionRegistry = registry, GetRandomBytes = GetRNG(Roll9())
            };

            EvaluateRoll("1d20.a()", conf, 1, "1d20.a() => 9 => 10");
        }
Exemplo n.º 21
0
        public void Successfully_RegisterStaticMacros()
        {
            var registry = new MacroRegistry();

            registry.RegisterType(typeof(MacroContainer));
            var conf = new RollerConfig()
            {
                MacroRegistry = registry, GetRandomBytes = GetRNG(Roll9())
            };

            EvaluateRoll("1d20+[a]", conf, 1, "1d20 + [a] => 9 + 1 => 10");
        }
Exemplo n.º 22
0
        public void Successfully_RegisterFunction()
        {
            var registry = new FunctionRegistry();

            registry.RegisterFunction("c", FunctionContainer.A, FunctionScope.Basic);
            var conf = new RollerConfig()
            {
                FunctionRegistry = registry, GetRandomBytes = GetRNG(Roll9())
            };

            EvaluateRoll("1d20.c()", conf, 1, "1d20.c() => 9 => 10");
        }
Exemplo n.º 23
0
        public void ThrowTooManyDice_WhenRerollingMoreThanMaxDice()
        {
            var conf = new RollerConfig()
            {
                MaxDice = 10, GetRandomBytes = GetRNG(Roll1())
            };
            var node = new RerollNode(0, equal1)
            {
                Expression = _1d20
            };

            EvaluateNode(node, Data(conf), DiceErrorCode.TooManyDice);
        }
Exemplo n.º 24
0
        public void Successfully_AbortRerollWhenMaxRerollsReached()
        {
            var conf = new RollerConfig()
            {
                MaxRerolls = 2, GetRandomBytes = GetRNG(Roll1())
            };
            var node = new RerollNode(0, equal1)
            {
                Expression = _1d20
            };

            EvaluateNode(node, Data(conf), 3, "1d20.reroll(=1) => 1!* + 1!* + 1! => 1");
        }
Exemplo n.º 25
0
        public void Successfully_DontRerollNestedRolls()
        {
            var conf = new RollerConfig()
            {
                GetRandomBytes = GetRNG(2, 2, 2, 2, 3, 3, 3, 3, 3)
            };
            var roll = new RollNode(RollType.Normal, _1d8, Six);
            var node = new GroupNode(Two, new List <DiceAST> {
                roll
            });

            EvaluateNode(node, Data(conf), 7, "2{3d6} => (9) + (12) => 21");
        }
Exemplo n.º 26
0
        public void Successfully_RegisterGlobalMacro_Config()
        {
            var registry = new MacroRegistry();

            registry.RegisterType(new MacroContainer(3));
            registry.RegisterGlobalMacro(MacroContainer.A);

            var config = new RollerConfig()
            {
                MacroRegistry = registry
            };

            EvaluateRoll("[b]", config, 0, "[b] => 3 => 3");
            EvaluateRoll("[bb]", config, 0, "[bb] => 1 => 1");
        }
Exemplo n.º 27
0
        public void Successfully_EvaluateTwice_Expand()
        {
            var conf = new RollerConfig()
            {
                GetRandomBytes = GetRNG(2, 3, 4, 5, 6, 7)
            };
            var data  = Data(conf);
            var group = new GroupNode(Two, new List <DiceAST> {
                _2d20
            });
            var node = new FunctionNode(FunctionScope.Group, "expand", new DiceAST[0], data);

            node.Context.Expression = group;
            EvaluateNode(node, data, 4, "2{2d20}.expand() => (3 + 4) + (5 + 6) => 18");
        }
Exemplo n.º 28
0
 protected static void EvaluateRoll(string diceExpr, RollerConfig conf, DiceErrorCode error)
 {
     try
     {
         Roller.Roll(diceExpr, conf);
         Assert.Fail("Expected DiceException with error code {0}, but did not receive an exception.", error.ToString());
     }
     catch (DiceException e)
     {
         if (e.ErrorCode != error)
         {
             Assert.Fail("Expected DiceException with error code {0}, but got error code {1}.", error.ToString(), e.ErrorCode.ToString());
         }
     }
 }
Exemplo n.º 29
0
        public void Successfully_ListAllValuesForMultipleExprs_Expand()
        {
            var conf = new RollerConfig()
            {
                GetRandomBytes = GetRNG(2, 3, 4, 5, 6, 7, 8)
            };
            var data  = Data(conf);
            var group = new GroupNode(null, new List <DiceAST> {
                _1d20, _2d20, _4d20
            });
            var node = new FunctionNode(FunctionScope.Group, "expand", new DiceAST[0], data);

            node.Context.Expression = group;
            EvaluateNode(node, data, 7, "{1d20, 2d20, 4d20}.expand() => ((3) + (4 + 5) + (6 + 7 + 8 + 9)) => 42");
        }
Exemplo n.º 30
0
        public void ThrowTooManyDice_Min_Reroll1s()
        {
            try
            {
                var conf = new RollerConfig()
                {
                    MaxDice    = 20,
                    MaxRerolls = 100
                };

                var res = Roller.Min("4d6rr1", conf);
                Assert.Fail("Expected an exception and none was thrown");
            }
            catch (DiceException e)
            {
                Assert.AreEqual(DiceErrorCode.TooManyDice, e.ErrorCode);
            }
        }