import kyupy.logic as lg def test_mvarray(): # instantiation with shape ary = lg.MVArray(4) assert ary.length == 1 assert ary.width == 4 ary = lg.MVArray((3, 2)) assert ary.length == 2 assert ary.width == 3 # instantiation with single vector ary = lg.MVArray([1, 0, 1]) assert ary.length == 1 assert ary.width == 3 ary = lg.MVArray("10X-") assert ary.length == 1 assert ary.width == 4 # instantiation with multiple vectors ary = lg.MVArray([[0, 0], [0, 1], [1, 0], [1, 1]]) assert ary.length == 4 assert ary.width == 2 ary = lg.MVArray(["000", "001", "110", "---"]) assert ary.length == 4 assert ary.width == 3 # casting to 2-valued logic ary = lg.MVArray([0, 1, 2, None], m=2) assert ary.data[0] == lg.ZERO assert ary.data[1] == lg.ONE assert ary.data[2] == lg.ZERO assert ary.data[3] == lg.ZERO ary = lg.MVArray("0-X1PRFN", m=2) assert ary.data[0] == lg.ZERO assert ary.data[1] == lg.ZERO assert ary.data[2] == lg.ZERO assert ary.data[3] == lg.ONE assert ary.data[4] == lg.ZERO assert ary.data[5] == lg.ONE assert ary.data[6] == lg.ZERO assert ary.data[7] == lg.ONE # casting to 4-valued logic ary = lg.MVArray([0, 1, 2, None, 'F']) assert ary.data[0] == lg.ZERO assert ary.data[1] == lg.ONE assert ary.data[2] == lg.UNKNOWN assert ary.data[3] == lg.UNASSIGNED assert ary.data[4] == lg.ZERO ary = lg.MVArray("0-X1PRFN") assert ary.data[0] == lg.ZERO assert ary.data[1] == lg.UNASSIGNED assert ary.data[2] == lg.UNKNOWN assert ary.data[3] == lg.ONE assert ary.data[4] == lg.ZERO assert ary.data[5] == lg.ONE assert ary.data[6] == lg.ZERO assert ary.data[7] == lg.ONE # casting to 8-valued logic ary = lg.MVArray([0, 1, 2, None, 'F'], m=8) assert ary.data[0] == lg.ZERO assert ary.data[1] == lg.ONE assert ary.data[2] == lg.UNKNOWN assert ary.data[3] == lg.UNASSIGNED assert ary.data[4] == lg.FALLING ary = lg.MVArray("0-X1PRFN", m=8) assert ary.data[0] == lg.ZERO assert ary.data[1] == lg.UNASSIGNED assert ary.data[2] == lg.UNKNOWN assert ary.data[3] == lg.ONE assert ary.data[4] == lg.PPULSE assert ary.data[5] == lg.RISING assert ary.data[6] == lg.FALLING assert ary.data[7] == lg.NPULSE # copy constructor and casting ary8 = lg.MVArray(ary, m=8) assert ary8.length == 1 assert ary8.width == 8 assert ary8.data[7] == lg.NPULSE ary4 = lg.MVArray(ary, m=4) assert ary4.data[1] == lg.UNASSIGNED assert ary4.data[7] == lg.ONE ary2 = lg.MVArray(ary, m=2) assert ary2.data[1] == lg.ZERO assert ary2.data[7] == lg.ONE