def test_is_fail(self): tree = EvalTree('2d20l1') tree.evaluate() self.assertTrue(tree.is_fail()) self.assertFalse(tree.is_critical()) tree = EvalTree('1d20 + 1d20') tree.evaluate() self.assertTrue(tree.is_fail()) self.assertTrue(tree.is_critical())
def populate(self, tree: EvalTree): """Display the result of a roll represented by the tree.""" try: tree.evaluate() text = tree.verbose_result() color = 'black' if tree.is_critical(): color = 'green' elif tree.is_fail(): color = 'red' self.setText(text) self.setFont(self.defaultFont) self.setStyleSheet('color: {}'.format(color)) except EvaluationError as e: self.show_error(e)
def test_copy(self): root = EvalTreeNode( OPERATORS['d'], EvalTreeNode(1), EvalTreeNode(OPERATORS['d'], EvalTreeNode(4), EvalTreeNode(20))) tree = EvalTree(None) tree.root = root tree.evaluate() copy = tree.copy() self.assertEqual(tree, copy) self.assertIsNot(tree, copy) for origNode, copyNode in zip(tree.pre_order(), copy.pre_order()): self.assertIsNot(origNode, copyNode) # Avoid false positives from int interning if not isinstance(origNode.value, int): self.assertIsNot(origNode.value, copyNode.value) if not isinstance(origNode.payload, int): self.assertIsNot(origNode.payload, copyNode.payload)
"(1d4-1)|(1d3-2>0)", "1dc8+1dc4+3", "1dm6+1d6", "2d4c2", "2da6", "3da6", "2d10%2", "1d4=4|1d4=3", "1d8>=6", "10d8r>4", "10d8R>4", "10d[3,3,3,5]", "10d[3, 3, 3, 5]", "15d6t5", "15d6T1", ] for expr in testCases: tree = EvalTree(expr) print('EVALUATING ' + expr) print('EVALUATING USING TREE DIRECTLY') print(tree.evaluate()) print('EVALUATING USING ROLL FUNCTION') print(basic(expr)) print('EVALUATING USING ROLL FUNCTION IN VERBOSE MODE') print(verbose(expr)) print('EVALUATING USING ROLL FUNCTION AND MODIFIER') print(basic(expr, modifiers=3)) print('EVALUATING USING ROLL FUNCTION IN VERBOSE MODE AND MODIFIER') print(verbose(expr, modifiers=3)) print()