def f1(x, z):
  b1 = z3.And(concolic.get('x') >= 0, concolic.get('z') <= 0)
  if (x >= 0 and z <= 0):
      concolic.guard(b1)
      y = 100
      concolic.set('y', 100)
  else:
      concolic.guard(z3.Not(b1))
      b2 = z3.And(concolic.get('x') >= 0, concolic.get('z') > concolic.get('x'))
      if (x >= 0 and z > x):
          concolic.guard(b2)
          t = x * z
          concolic.set('t', concolic.get('x') * concolic.get('z'))
          y = t + 30
          concolic.set('y', concolic.get('t'))
      else:
          concolic.guard(z3.Not(b2))
          y = -x
          concolic.set('y', -concolic.get('x'))

  # y must be nonnegative
  assert y >= 0
  concolic.guard(True) # Filled out by instructors

 # you can print your constraint in short-hand or SMT-LIB format:
 # concolic.dump_path()
 # concolic.dump_smt()
  return y
Example #2
0
def signed(x):

    condition = concolic.get('x') < 0
    if (x < 0):
        concolic.guard(condition)
        y = -x
        concolic.set('y', -concolic.get('x'))
    else:
        concolic.guard(z3.Not(condition))
        y = x
        concolic.set('y', concolic.get('x'))

    # y must be nonnegative
    assert y >= 0
    concolic.guard(concolic.get('y') >= 0)

    # concolic: you can print your constraint in short-hand or SMT-LIB format:
    # concolic.dump_path()
    # concolic.dump_smt()

    return y
Example #3
0
def f2(a, b, c):
    x = 0
    y = 0
    z = 0

    concolic.set('x', 0)
    concolic.set('y', 0)
    concolic.set('z', 0)

    if (a != 0):
        concolic.guard(concolic.get('a') != 0)
        x = -2
        concolic.set('x', -2)
    else:
        concolic.guard(concolic.get('a') == 0)
    if (b < 5):
        concolic.guard(concolic.get('b') < 5)
        if (a == 0 and c != 0):
            concolic.guard(
                z3.And(concolic.get('a') == 0,
                       concolic.get('c') != 0))
            y = 1
            concolic.set('y', 1)
        else:
            concolic.guard(
                z3.Not(z3.And(concolic.get('a') == 0,
                              concolic.get('c') != 0)))
        z = 2
        concolic.set('z', 2)
    else:
        concolic.guard(concolic.get('b') >= 5)
    assert (x + y + z != 3)
    concolic.guard(
        concolic.get('x') + concolic.get('y') + concolic.get('z') != 3)
    return x + y + z
Example #4
0
def sum(x):
    i = 0
    concolic.set('i', 0)
    r = 0
    concolic.set('r', 0)
    if x > 0 and x <= 5:
        concolic.guard(z3.And(concolic.get('x') > 0, concolic.get('x') <= 5))
        while i < x:
            concolic.guard(concolic.get('i') < concolic.get('x'))
            i = i + 1
            concolic.set('i', concolic.get('i') + 1)
            r = r + i
            concolic.set('r', concolic.get('r') + concolic.get('i'))
        else:
            concolic.guard(z3.Not(concolic.get('i') < concolic.get('x')))
        assert r == x * (x + 1) / 2
        concolic.guard(concolic.get('r') == concolic.get('x') * (concolic.
            get('x') + 1) / 2)
    else:
        concolic.guard(z3.Not(z3.And(concolic.get('x') > 0, concolic.get(
            'x') <= 5)))
    return r
Example #5
0
def f1(x, z):
    if x >= 0 and z <= 0:
        concolic.guard(z3.And(concolic.get('x') >= 0, concolic.get('z') <= 0))
        y = 100
        concolic.set('y', 100)
    else:
        concolic.guard(z3.Not(z3.And(concolic.get('x') >= 0, concolic.get(
            'z') <= 0)))
        if x >= 0 and z > x:
            concolic.guard(z3.And(concolic.get('x') >= 0, concolic.get('z') >
                concolic.get('x')))
            t = x * z
            concolic.set('t', concolic.get('x') * concolic.get('z'))
            y = t + 30
            concolic.set('y', concolic.get('t') + 30)
        else:
            concolic.guard(z3.Not(z3.And(concolic.get('x') >= 0, concolic.
                get('z') > concolic.get('x'))))
            y = -x
            concolic.set('y', -concolic.get('x'))
    assert y >= 0
    concolic.guard(concolic.get('y') >= 0)
    return y
Example #6
0
def f2(a, b, c):
    x = 0
    concolic.set('x', 0)
    y = 0
    concolic.set('y', 0)
    z = 0
    concolic.set('z', 0)
    if a != 0:
        concolic.guard(concolic.get('a') != 0)
        x = -2
        concolic.set('x', -2)
    else:
        concolic.guard(z3.Not(concolic.get('a') != 0))
    if b < 5:
        concolic.guard(concolic.get('b') < 5)
        if a == 0 and c != 0:
            concolic.guard(
                z3.And(concolic.get('a') == 0,
                       concolic.get('c') != 0))
            y = 1
            concolic.set('y', 1)
        else:
            concolic.guard(
                z3.Not(z3.And(concolic.get('a') == 0,
                              concolic.get('c') != 0)))
        z = 2
        concolic.set('z', 2)
    else:
        concolic.guard(z3.Not(concolic.get('b') < 5))
    assert x + y + z != 3
    concolic.guard(
        concolic.get('x') + concolic.get('y') + concolic.get('z') != 3)
    return x + y + z