def test_eq(a, b): circ = common.eq_gate(4, left='a', right='b', output='out') val = circ({ 'a': common.encode_int(4, a), 'b': common.encode_int(4, b), })[0]['out'] assert val[0] == (a == b)
def test_bitwise_or(a, b): circ = common.bitwise_or(4, left='a', right='b', output='out') val = circ({ 'a': common.encode_int(4, a), 'b': common.encode_int(4, b), })[0]['out'] assert common.decode_int(val) == a | b
def test_unsigned_ge(a, b): circ = common.unsigned_ge_gate(2, left='a', right='b', output='out') val = circ({ 'a': common.encode_int(2, a, signed=False), 'b': common.encode_int(2, b, signed=False), })[0]['out'][0] assert val == (a >= b)
def test_signed_le(a, b): circ = common.signed_le_gate(3, left='a', right='b', output='out') val = circ({ 'a': common.encode_int(3, a, signed=True), 'b': common.encode_int(3, b, signed=True), })[0]['out'][0] assert val == (a <= b)
def test_subtraction(a, b): circ = common.subtract_gate(4, left='a', right='b', output='out') val = circ({ 'a': common.encode_int(4, a), 'b': common.encode_int(4, b), })[0]['out'] assert common.decode_int(val) == a - b
def test_split_gate(a, b): circ = common.split_gate('input', 4, 'a', 4, 'b') val = circ({ 'input': common.encode_int(4, a) + common.encode_int(4, b), })[0] assert common.decode_int(val['a']) == a assert common.decode_int(val['b']) == b
def test_combine_gate(a, b): circ = common.combine_gate(4, 'a', 4, 'b', output='out') val = circ({ 'a': common.encode_int(4, a), 'b': common.encode_int(4, b) })[0]['out'] assert common.decode_int(val[:4]) == a assert common.decode_int(val[4:]) == b
def test_dec(a): circ = common.dec_gate(4, input='a', output='out') assert circ.inputs == {'a'} assert len(circ.aig.inputs) == 4 assert circ.outputs == {'out'} assert len(circ.aig.outputs) == 4 val = circ({'a': common.encode_int(4, a)})[0]['out'] assert common.decode_int(val) == a - 1
def _test_kmodels(k): circ = common.kmodels(4, k, input='x', output='x') models = 0 for i in range(2**4): val = circ({'x': common.encode_int(4, i, signed=False)})[0]['x'][0] if val: models += 1 assert models == k
def test_logical_right_shift(a, b): circ = common.logical_right_shift_gate(8, b, 'a', output='out') val = circ({ 'a': common.encode_int(8, a, signed=True), })[0]['out'] val2 = common.decode_int(val) assert (val2 & (0xff >> b)) == ((a >> b) & (0xff >> b)) if b != 0: assert val[-1] is False
def test_seqcomp(a): circ1 = common.identity_gate(4, input='a', output='tmp') circ2 = common.identity_gate(4, input='tmp', output='out') circ3 = circ1 >> circ2 assert circ3.inputs == circ1.inputs assert circ3.outputs == circ2.outputs val = circ3({ 'a': common.encode_int(4, a), })[0]['out'] assert common.decode_int(val) == a
def _encoded_inputs(expr, inputs): if inputs is None: inputs = {} signed = isinstance(expr, SignedBVExpr) imap = expr.aigbv.imap for key, val in inputs.items(): if isinstance(val, int) and (key in expr.inputs): size = imap[key].size val = cmn.encode_int(size, val, signed=signed) yield key, val
def test_lookup(a): lookup = {0: 0, 1: 1, 2: 0, 3: -1} circ = common.lookup(mapping=lookup, input='x', output='out', inlen=2, outlen=4, in_signed=False) val = circ({ 'x': common.encode_int(2, a, signed=False), })[0]['out'] assert common.decode_int(val) == lookup[a]
def test_arithmetic_right_shift(a, b): circ = common.arithmetic_right_shift_gate(8, b, 'a', output='out') val = circ({ 'a': common.encode_int(8, a, signed=True), })[0]['out'] assert common.decode_int(val) == a >> b
def test_is_zero(a): circ = common.is_zero_gate(4, input='a', output='out') val = circ({'a': common.encode_int(4, a)})[0]['out'] assert val[0] == (a == 0)
def test_bitwise_negate(a): circ = common.bitwise_negate(4, input='a', output='out') val = circ({'a': common.encode_int(4, a)})[0]['out'] assert common.decode_int(val) == ~a
def test_identity(a): circ = common.identity_gate(4, input='a', output='out') val = circ({'a': common.encode_int(4, a)})[0]['out'] assert common.decode_int(val) == a
def test_reverse(a): circ = common.reverse_gate(4, input='a', output='out') val = circ({'a': common.encode_int(4, a)})[0]['out'] assert common.decode_int(val[::-1]) == a
def test_abs(a): circ = common.abs_gate(8, 'a', output='out') val = circ({ 'a': common.encode_int(8, a, signed=True), })[0]['out'] assert common.decode_int(val) == abs(a)