import sys
import std_containers


cube = (((1, 2), (3, 4)), ((5, 6), (7, 8)))

icube = std_containers.cident(cube)
for i in range(0, len(cube)):
    if cube[i] != icube[i]:
        raise RuntimeError("bad cident")


p = (1, 2)
if p != std_containers.pident(p):
    raise RuntimeError("bad pident")

v = (1, 2, 3, 4, 5, 6)
iv = std_containers.vident(v)
for i in range(0, len(v)):
    if v[i] != iv[i]:
        raise RuntimeError("bad vident")


iv = std_containers.videntu(v)
for i in range(0, len(v)):
    if v[i] != iv[i]:
        raise RuntimeError("bad videntu")


vu = std_containers.vector_ui(v)
if vu[2] != std_containers.videntu(vu)[2]:
    raise RuntimeError("bad videntu")


if v[0:3][1] != vu[0:3][1]:
    raise RuntimeError("bad getslice {} {}".format(v[0:3][1], vu[0:3][1]))


m = ((1, 2, 3), (2, 3), (3, 4))
im = std_containers.midenti(m)

for i in range(0, len(m)):
    for j in range(0, len(m[i])):
        if m[i][j] != im[i][j]:
            raise RuntimeError("bad getslice")

m = ((True, False, True), (True, True), (True, True))
im = std_containers.midentb(m)
for i in range(0, len(m)):
    for j in range(0, len(m[i])):
        if m[i][j] != im[i][j]:
            raise RuntimeError("bad getslice")


mi = std_containers.imatrix(m)
mc = std_containers.cmatrix(m)
if mi[0][1] != mc[0][1]:
    raise RuntimeError("bad matrix")


map = {}
map["hello"] = 1
map["hi"] = 2
map["3"] = 2

imap = std_containers.mapident(map)
for k in map:
    if map[k] != imap[k]:
        raise RuntimeError("bad map")

# Test __contains__ (required for 'x in y' to work)
if not imap.__contains__("hello"):
    raise RuntimeError("hello imap.__contains__")
if "hello" not in imap:
    raise RuntimeError("hello not in imap")
if imap.__contains__("oops"):
    raise RuntimeError("oops imap.__contains__")
if "oops" in imap:
    raise RuntimeError("oops in imap")

mapc = {}
c1 = std_containers.C()
c2 = std_containers.C()
mapc[1] = c1.this
mapc[2] = c2

std_containers.mapidentc(mapc)


vi = std_containers.vector_i((2, 2, 3, 4))


v = (1, 2)
v1 = std_containers.v_inout(vi)
vi[1], v1[1]

v1, v2 = ((1, 2), (3, 4))
v1, v2 = std_containers.v_inout2(v1, v2)

a1 = std_containers.A(1)
a2 = std_containers.A(2)

p1 = (1, a1)
p2 = (2, a2)
v = (p1, p2)
v2 = std_containers.pia_vident(v)

v2[0][1].a
v2[1][1].a

v3 = std_containers.vector_piA(v2)

v3[0][1].a
v3[1][1].a

s = std_containers.set_i()
s.append(1)
s.append(2)
s.append(3)
j = 1
for i in s:
    if i != j:
        raise RuntimeError
    j = j + 1

# Test __contains__ (required for 'x in y' to work)
if not s.__contains__(3):
    raise RuntimeError("3 s.__contains__")
if 3 not in s:
    raise RuntimeError("3 not in s")
if s.__contains__(-1):
    raise RuntimeError("-1 s.__contains__")
if -1 in s:
    raise RuntimeError("-1 in s")

