예제 #1
0
    def normalize(self: Z) -> Z:
        if (self == Z.cons(pos=var.x, neg=var.y)):
            # if self.x == 0 or self.y == 0
            if var.x == Nat.zero() or var.y == Nat.zero():
                return self

            # else we reduce
            elif var.x == Nat.suc(var.xx) and var.y == Nat.suc(var.yy):
                return Z.cons(pos=var.xx, neg=var.yy).normalize()
예제 #2
0
    def __init__(self, *args, **kwargs):
        if (len(args) == 1) and isinstance(args[0], str):
            letter = args[0]

            Sort.__init__(self)
            self._generator = Char.char
            self._generator_args = {'value': Nat(ord(letter))}
        else:
            Sort.__init__(self, **kwargs)
예제 #3
0
def test_remove():
    context1 = Context.cons(c=Context.empty(),
                            k=String('b'),
                            v=Literal.lit_nat(Nat(0)))
    context2 = Context.add(c=Context.empty(),
                           k=String('b'),
                           v=Literal.lit_nat(Nat(0)))
    context3 = Context.add(c=context2,
                           k=String('b'),
                           v=Literal.lit_nat(Nat(4)))
    context4 = Context.add(c=context2,
                           k=String('c'),
                           v=Literal.lit_nat(Nat(4)))
    context5 = Context.cons(c=Context.empty(),
                            k=String('c'),
                            v=Literal.lit_nat(Nat(4)))
    assert Context.remove(c=context1, k=String('b')) == Context.empty()
    assert Context.remove(c=context2, k=String('b')) == Context.empty()
    assert Context.remove(c=context4, k=String('b')) == context5
    assert Context.remove(c=context4, k=String('c')) == context2
예제 #4
0
def test_add():
    context1 = Context.cons(c=Context.empty(),
                            k=String('b'),
                            v=Literal.lit_nat(Nat(0)))
    context12 = Context.cons(c=Context.empty(),
                             k=String('b'),
                             v=Literal.lit_nat(Nat(4)))
    context2 = Context.add(c=Context.empty(),
                           k=String('b'),
                           v=Literal.lit_nat(Nat(0)))
    context3 = Context.add(c=context2,
                           k=String('b'),
                           v=Literal.lit_nat(Nat(4)))
    context4 = Context.add(c=context2,
                           k=String('c'),
                           v=Literal.lit_nat(Nat(4)))
    assert context2 == context1
    assert context3 == context12
    assert context3 != context1
    assert context4 != context1
    assert context4 != context3
예제 #5
0
def test_normalize():
    # this should be 0
    z = Z.cons(pos=Nat(1), neg=Nat(1))
    # we normalize it
    assert z.normalize() == Z(0)

    z = Z.cons(pos=Nat(1), neg=Nat(0))
    assert z.normalize() == Z(1)

    z = Z.cons(pos=Nat(0), neg=Nat(1))
    assert z.normalize() == Z(-1)
예제 #6
0
    def __init__(self, *args, **kwargs):
        if (len(args) == 1) and isinstance(args[0], Sequence):
            list_args = args[0]

            Sort.__init__(self)
            if len(list_args) == 0:
                self._generator = State.cons
                self._generator_args = {
                    "program": Expr_list.empty(),
                    "choice": Nat.zero(),
                    "stack": Expr_list.empty()
                }
            else:
                self._generator = State.cons
                self._generator_args = {
                    "program": list_args[0],
                    "choice": list_args[1],
                    "stack": list_args[2]
                }
        else:
            Sort.__init__(self, **kwargs)
예제 #7
0
def test_get_value():
    context1 = Context.cons(c=Context.empty(),
                            k=String('b'),
                            v=Literal.lit_nat(Nat(0)))
    context2 = Context.add(c=Context.empty(),
                           k=String('b'),
                           v=Literal.lit_nat(Nat(0)))
    context3 = Context.add(c=context2,
                           k=String('b'),
                           v=Literal.lit_nat(Nat(4)))
    context4 = Context.add(c=context2,
                           k=String('c'),
                           v=Literal.lit_nat(Nat(4)))
    assert Context.get_value(c=context1,
                             k=String('b')) == Literal.lit_nat(Nat(0))
    assert Context.get_value(c=context1, k=String('b')) != Literal.lit_nat(
        Nat(1))
    assert Context.get_value(c=context3,
                             k=String('b')) == Literal.lit_nat(Nat(4))
예제 #8
0
    def __init__(self, *args, **kwargs):
        if (len(args) == 1) and isinstance(args[0], int):
            number = args[0]

            Sort.__init__(self)
            if number == 0:
                self._generator = Z.cons
                self._generator_args = {'pos': Nat.zero(), 'neg': Nat.zero()}
            elif number > 0:
                self._generator = Z.cons
                self._generator_args = {'pos': Nat(number), 'neg': Nat.zero()}
            else:
                self._generator = Z.cons
                self._generator_args = {'pos': Nat.zero(), 'neg': Nat(-number)}

        else:
            Sort.__init__(self, **kwargs)
예제 #9
0
 def zero() -> Z:
     return Z.cons(pos=Nat(0), neg=Nat(0))
예제 #10
0
def test_generator():
    # because the Z.zero == Z.cons(pos=Nat(0), neg=Nat(0))
    assert Z.zero()._generator == Z.cons
    assert Z.cons(pos=Nat(0), neg=Nat(0))._generator == Z.cons
예제 #11
0
def test_constructor():
    assert Z(0) == Z.cons(pos=Nat(0), neg=Nat(0))
    assert Z(1) == Z.cons(pos=Nat(1), neg=Nat(0))
    assert Z(-1) == Z.cons(pos=Nat(0), neg=Nat(1))
예제 #12
0
 def empty() -> State:
     return State.cons(program=Expr_list.empty(),
                       choice=Nat.zero(),
                       stack=Expr_list.empty())
예제 #13
0
from adt.util.expr_list import Expr_list
from adt.util.expr import Expr
from adt.util.literal import Literal

from adt.types.nat import Nat
from adt.types.string import String

expr1 = Expr.expr_lit(Literal.lit_nat(Nat(2)))
expr2 = Expr.expr_variable(String("test"))
u_expr_list = Expr_list.cons(tail=Expr_list.empty(), head=expr2)
expr_list = Expr_list.cons(tail=u_expr_list, head=expr1)


def test_car():
    assert Expr_list.car(expr_list) == expr1


def test_cdr():
    assert Expr_list.cdr(expr_list) == u_expr_list
    assert Expr_list.car(Expr_list.cdr(expr_list)) == expr2
예제 #14
0
def test_constructor():
    assert Char('a') == Char.char(Nat(97))
예제 #15
0
def test_generator():
    assert Char.char(Nat(10))._generator == Char.char