from cpp11_std_array import * import sys def failed(a, b, msg): raise RuntimeError, msg + " " + str(list(a)) + " " + str(list(b)) def compare_sequences(a, b): if len(a) != len(b): failed(a, b, "different sizes") for i in range(len(a)): if a[i] != b[i]: failed(a, b, "elements are different") def compare_containers(pythonlist, swigarray): compare_sequences(pythonlist, swigarray) def steps_exception(swigarray, i, j, step): try: if i == None and j == None: a = swigarray[::step] elif i == None: a = swigarray[:j:step] elif j == None: a = swigarray[i::step] else: a = swigarray[i:j:step] raise RuntimeError, "swigarray[" + str(i) + ":" + str(j) + ":" + str(step) + "] missed steps exception for " + str(list(swigarray)) except ValueError, e: # print("exception: {}".format(e)) pass def del_exception(swigarray, i, j, step): try: if i == None and j == None: del swigarray[::step] elif j == None and step == None: del swigarray[i] elif i == None: del swigarray[:j:step] elif j == None: del swigarray[i::step] else: del swigarray[i:j:step] raise RuntimeError, "swigarray[" + str(i) + ":" + str(j) + ":" + str(step) + "] missed del exception for " + str(list(swigarray)) except ValueError, e: # print("exception: {}".format(e)) pass def setslice_exception(swigarray, newval): try: swigarray[::] = newval raise RuntimeError, "swigarray[::] = " + str(newval) + " missed set exception for swigarray:" + str(list(swigarray)) except TypeError, e: # print("exception: {}".format(e)) pass # Check std::array has similar behaviour to a Python list # except it is not resizable ps = [0, 1, 2, 3, 4, 5] ai = ArrayInt6(ps) compare_containers(ps, ai) # slices compare_containers(ps[0:6], ai[0:6]) compare_containers(ps[0:10], ai[0:10]) compare_containers(ps[-10:6], ai[-10:6]) compare_containers(ps[-10:10], ai[-10:10]) compare_containers(ps[0:6:1], ai[0:6:1]) compare_containers(ps[::], ai[::]) compare_containers(ps[::1], ai[::1]) compare_containers([x for x in ps], [x for x in ai]) # Reverse compare_containers(ps[::-1], ai[::-1]) compare_containers(ps[5::-1], ai[5::-1]) compare_containers(ps[10::-1], ai[10::-1]) # Steps other than +1 and -1 not supported steps_exception(ai, 0, 6, 3) steps_exception(ai, None, None, 0) steps_exception(ai, None, None, 2) steps_exception(ai, None, None, -2) steps_exception(ai, 1, 3, 1) steps_exception(ai, 3, 1, -1) # Modify content for i in range(len(ps)): ps[i] = (ps[i] + 1) * 10 ai[i] = (ai[i] + 1) * 10 compare_containers(ps, ai) # Delete del_exception(ai, 0, 6, 3) del_exception(ai, None, None, 0) del_exception(ai, None, None, 2) del_exception(ai, None, None, -2) del_exception(ai, 1, 3, 1) del_exception(ai, 3, 1, -1) del_exception(ai, 0, None, None) del_exception(ai, 5, None, None) # Empty ai = ArrayInt6() compare_containers([0, 0, 0, 0, 0, 0], ai) # Set slice newvals = [10, 20, 30, 40, 50, 60] ai[::] = newvals compare_containers(ai, newvals) newvals = [100, 200, 300, 400, 500, 600] ai[0:6:1] = newvals compare_containers(ai, newvals) newvals = [1000, 2000, 3000, 4000, 5000, 6000] ai[::-1] = newvals compare_containers(ai, newvals[::-1]) newvals = [10000, 20000, 30000, 40000, 50000, 60000] ai[-10:100:1] = newvals compare_containers(ai, newvals[-10:100:1]) setslice_exception(ai, [1, 2, 3, 4, 5, 6, 7]) setslice_exception(ai, [1, 2, 3, 4, 5]) setslice_exception(ai, [1, 2, 3, 4]) setslice_exception(ai, [1, 2, 3]) setslice_exception(ai, [1, 2]) setslice_exception(ai, [1]) setslice_exception(ai, []) # Check return compare_containers(arrayOutVal(), [-2, -1, 0, 0, 1, 2]) compare_containers(arrayOutConstRef(), [-2, -1, 0, 0, 1, 2]) compare_containers(arrayOutRef(), [-2, -1, 0, 0, 1, 2]) compare_containers(arrayOutPtr(), [-2, -1, 0, 0, 1, 2]) # Check passing arguments ai = arrayInVal([9, 8, 7, 6, 5, 4]) compare_containers(ai, [90, 80, 70, 60, 50, 40]) ai = arrayInConstRef([9, 8, 7, 6, 5, 4]) compare_containers(ai, [90, 80, 70, 60, 50, 40]) ai = ArrayInt6([9, 8, 7, 6, 5, 4]) arrayInRef(ai) compare_containers(ai, [90, 80, 70, 60, 50, 40]) ai = ArrayInt6([9, 8, 7, 6, 5, 4]) arrayInPtr(ai) compare_containers(ai, [90, 80, 70, 60, 50, 40]) # fill ai.fill(111) compare_containers(ai, [111, 111, 111, 111, 111, 111])