File tree Expand file tree Collapse file tree 1 file changed +38
-0
lines changed
Expand file tree Collapse file tree 1 file changed +38
-0
lines changed Original file line number Diff line number Diff line change 1+ """Tests Sopel's calculation tools"""
2+ from __future__ import annotations
3+
4+ import ast
5+ import operator
6+
7+ import pytest
8+
9+ from sopel .tools .calculation import EquationEvaluator , ExpressionEvaluator
10+
11+
12+ def test_expression_eval ():
13+ """Ensure ExpressionEvaluator respects limited operator set."""
14+ OPS = {
15+ ast .Add : operator .add ,
16+ ast .Sub : operator .sub ,
17+ }
18+ evaluator = ExpressionEvaluator (bin_ops = OPS )
19+
20+ assert evaluator ("1 + 1" ) == 2
21+ assert evaluator ("43 - 1" ) == 42
22+ assert evaluator ("1 + 1 - 2" ) == 0
23+
24+ with pytest .raises (ExpressionEvaluator .Error ):
25+ evaluator ("2 * 2" )
26+
27+
28+ def test_equation_eval ():
29+ """Test that EquationEvaluator correctly parses input and calculates results."""
30+ evaluator = EquationEvaluator ()
31+
32+ assert evaluator ("1 + 1" ) == 2
33+ assert evaluator ("43 - 1" ) == 42
34+ assert evaluator ("(((1 + 1 + 2) * 3 / 5) ** 8 - 13) // 21 % 35" ) == 16.0
35+ assert evaluator ("-42" ) == - 42
36+ assert evaluator ("-(-42)" ) == 42
37+ assert evaluator ("+42" ) == 42
38+ assert evaluator ("3 ^ 2" ) == 9
You can’t perform that action at this time.
0 commit comments