def test_gene_bool(self): # Ensure we can handle values in syms which are True / False syms = {'foo:baz': True, 'bar:duck': False} self.eq(s_gene.eval('foo:baz == 1', syms=syms), 1) self.eq(s_gene.eval('bar:duck == 0', syms=syms), 1) self.eq(s_gene.eval('foo:baz != 0', syms=syms), 1) self.eq(s_gene.eval('bar:duck != 1', syms=syms), 1)
def test_gene_call(self): def foo(x, y, z): return x + y + z syms = {'foo': foo} self.eq(s_gene.eval('foo(1,2,3)', syms=syms), 6) self.eq(s_gene.eval('foo(foo(1,2,3),9+9,3>2)', syms=syms), 25)
def test_gene_null(self): # Ensure that if we compare values against None/null objects, we don't match syms = {'foo:baz': None, 'spam:eggs': 10} self.eq(s_gene.eval('foo:baz == 1', syms=syms), 0) self.eq(s_gene.eval('foo:baz == 0', syms=syms), 0) self.eq(s_gene.eval('foo:baz != 0', syms=syms), 1) self.eq(s_gene.eval('foo:baz != 1', syms=syms), 1) self.eq(s_gene.eval('foo:baz == "asdf"', syms=syms), 0)
def test_gene_callcall(self): def foo(): return 20 def bar(): return foo syms = {'bar': bar} self.eq(s_gene.eval('bar()()', syms=syms), 20)
def test_gene_call_noargs(self): def foo(): return 20 syms = {'foo': foo} self.eq(s_gene.eval('foo()', syms=syms), 20)
def test_gene_empty_value(self): self.eq(s_gene.eval('empty', syms={'empty': None}), None)
def test_gene_shift(self): self.eq(s_gene.eval(' 1 << 2 + 1'), 8) self.eq(s_gene.eval(' 0x80 >> 0x00000004'), 8)
def test_gene_eval(self): def baz(x): return x + 20 syms = {'foo:bar': 10, 'foo:baz': baz, 'foo:faz': 'woot'} self.eq(s_gene.eval('foo:bar & 1', syms=syms), 0) self.eq(s_gene.eval('foo:bar ^ 2', syms=syms), 8) self.eq(s_gene.eval('foo:bar | 1', syms=syms), 11) self.eq(s_gene.eval('foo:bar', syms=syms), 10) self.eq(s_gene.eval('foo:bar + 0x0a', syms=syms), 20) self.eq(s_gene.eval('foo:baz(0x0a)', syms=syms), 30) self.eq(s_gene.eval('20 == foo:bar + 0x0a', syms=syms), 1) self.eq(s_gene.eval('foo:faz == "woot"', syms=syms), 1) self.eq(s_gene.eval("foo:faz == 'woot'", syms=syms), 1) self.eq(s_gene.eval('foo:baz(10) + 10', syms=syms), 40) self.eq(s_gene.eval('foo:baz(10) < 100', syms=syms), 1) self.eq(s_gene.eval('foo:baz(10) <= 100', syms=syms), 1) self.eq(s_gene.eval('foo:baz(10) > 1', syms=syms), 1) self.eq(s_gene.eval('foo:baz(10) >= 1', syms=syms), 1) self.eq(s_gene.eval('foo:bar + 0x0a == 20', syms=syms), 1)
def test_gene_landlor(self): self.eq(s_gene.eval(' 10 > 3 && 10 + 10 > 19 '), 1) self.eq(s_gene.eval(' 10 < 3 || 10 + 10 > 19 '), 1) self.eq(s_gene.eval(' 10 < 3 && 10 + 10 > 19 '), 0) self.eq(s_gene.eval(' 10 < 3 || 10 + 10 < 19 '), 0)
def test_gene_pow(self): self.eq(s_gene.eval(' 5 + 2**3 '), 13)
def test_gene_comp(self): self.eq(s_gene.eval('5 < 4 + 4'), 1) self.eq(s_gene.eval('5 <= 4 + 4'), 1) self.eq(s_gene.eval('5 > 8 - 4 - 2'), 1) self.eq(s_gene.eval('5 >= 8 - 4 - 2'), 1)
def test_gene_prec(self): self.eq(s_gene.eval('5 + 3 * 2'), 11) self.eq(s_gene.eval('(5 + 3) * 2'), 16) self.eq(s_gene.eval('9 / 3 <= 1 + 2'), 1)