Commit 3cfa07da authored by Taddeus Kroes's avatar Taddeus Kroes

Added unit tests for earliers added logarithmic rules.

parent 68ce57a9
...@@ -34,9 +34,11 @@ def match_constant_logarithm(node): ...@@ -34,9 +34,11 @@ def match_constant_logarithm(node):
p = [] p = []
if raised == 1: if raised == 1:
# log(1) -> 0
p.append(P(node, logarithm_of_one)) p.append(P(node, logarithm_of_one))
if raised == base: if raised == base:
# log(a, a) -> log(a) / log(a) # -> 1
p.append(P(node, divide_same_base)) p.append(P(node, divide_same_base))
return p return p
...@@ -48,7 +50,7 @@ def logarithm_of_one(root, args): ...@@ -48,7 +50,7 @@ def logarithm_of_one(root, args):
""" """
raised, base = root raised, base = root
return log(raised) / log(base) return L(0)
MESSAGES[logarithm_of_one] = _('Logarithm of one reduces to zero.') MESSAGES[logarithm_of_one] = _('Logarithm of one reduces to zero.')
...@@ -63,7 +65,7 @@ def divide_same_base(root, args): ...@@ -63,7 +65,7 @@ def divide_same_base(root, args):
return log(raised) / log(base) return log(raised) / log(base)
MESSAGES[divide_same_base] = _('Apply log_b(a) -> log(a) / log(b).') MESSAGES[divide_same_base] = _('Apply log_b(a) -> log(a) / log(b) on {0}.')
def match_add_logarithms(node): def match_add_logarithms(node):
......
...@@ -23,7 +23,18 @@ class TestRulesLogarithmic(RulesTestCase): ...@@ -23,7 +23,18 @@ class TestRulesLogarithmic(RulesTestCase):
self.assertEqualPos(match_constant_logarithm(root), self.assertEqualPos(match_constant_logarithm(root),
[P(root, divide_same_base)]) [P(root, divide_same_base)])
def test_logarithm_of_one(self):
root = tree('log 1')
self.assertEqual(logarithm_of_one(root, ()), 0)
def test_divide_same_base(self):
root, l5, l6 = tree('log(5, 6), 5, 6')
self.assertEqual(divide_same_base(root, ()), log(l5) / log(l6))
def test_match_add_logarithms(self): def test_match_add_logarithms(self):
root = tree('log a + ln b')
self.assertEqualPos(match_add_logarithms(root), [])
log_a, log_b = root = tree('log a + log b') log_a, log_b = root = tree('log a + log b')
self.assertEqualPos(match_add_logarithms(root), self.assertEqualPos(match_add_logarithms(root),
[P(root, add_logarithms, (Scope(root), log_a, log_b))]) [P(root, add_logarithms, (Scope(root), log_a, log_b))])
...@@ -41,7 +52,24 @@ class TestRulesLogarithmic(RulesTestCase): ...@@ -41,7 +52,24 @@ class TestRulesLogarithmic(RulesTestCase):
[P(root, subtract_logarithms, (Scope(root), log_b, log_a))]) [P(root, subtract_logarithms, (Scope(root), log_b, log_a))])
def test_add_logarithms(self): def test_add_logarithms(self):
root, a, b = tree('log a + log b, a, b') root, expect = tree('log a + log b, log(ab)')
log_a, log_b = root log_a, log_b = root
self.assertEqual(add_logarithms(root, (Scope(root), log_a, log_b)), self.assertEqual(add_logarithms(root, (Scope(root), log_a, log_b)),
log(a * b)) expect)
def test_expand_negations(self):
root, expect = tree('-log(a) - log(b), -(log(a) + log(b))')
log_a, log_b = root
self.assertEqual(expand_negations(root, (Scope(root), log_a, log_b)),
expect)
def test_subtract_logarithms(self):
root, expect = tree('log(a) - log(b), log(a / b)')
loga, logb = root
self.assertEqual(subtract_logarithms(root, (Scope(root), loga, logb)),
expect)
root, expect = tree('-log(a) + log(b), log(b / a)')
loga, logb = root
self.assertEqual(subtract_logarithms(root, (Scope(root), logb, loga)),
expect)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment