Skip to content

Commit 73202fb

Browse files
SnoopJdgw
andcommitted
test: add basic tests for tools.calculation module
Co-authored-by: dgw <[email protected]>
1 parent 2829487 commit 73202fb

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
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

0 commit comments

Comments
 (0)