from li_std_vector_extra import *

iv = IntVector(4)
for i in range(0, 4):
    iv[i] = i

x = average(iv)
y = average([1, 2, 3, 4])

a = half([10, 10.5, 11, 11.5])

dv = DoubleVector(10)
for i in range(0, 10):
    dv[i] = i / 2.0

halve_in_place(dv)


bv = BoolVector(4)
bv[0] = bool(1)
bv[1] = bool(0)
bv[2] = bool(4)
bv[3] = bool(0)

if bv[0] != bv[2]:
    raise RuntimeError, "bad std::vector<bool> mapping"

b = B(5)
va = VecA([b, None, b, b])

if va[0].f(1) != 6:
    raise RuntimeError, "bad std::vector<A*> mapping"

if vecAptr(va) != 6:
    raise RuntimeError, "bad std::vector<A*> mapping"

b.val = 7
if va[3].f(1) != 8:
    raise RuntimeError, "bad std::vector<A*> mapping"


ip = PtrInt()
ap = new_ArrInt(10)

ArrInt_setitem(ip, 0, 123)
ArrInt_setitem(ap, 2, 123)

vi = IntPtrVector((ip, ap, None))
if ArrInt_getitem(vi[0], 0) != ArrInt_getitem(vi[1], 2):
    raise RuntimeError, "bad std::vector<int*> mapping"

delete_ArrInt(ap)


a = halfs([10, 8, 4, 3])

v = IntVector()
v[0:2] = [1, 2]
if v[0] != 1 or v[1] != 2:
    raise RuntimeError, "bad setslice"

if v[0:-1][0] != 1:
    raise RuntimeError, "bad getslice"

if v[0:-2].size() != 0:
    raise RuntimeError, "bad getslice"

v[0:1] = [2]
if v[0] != 2:
    raise RuntimeError, "bad setslice"

v[1:] = [3]
if v[1] != 3:
    raise RuntimeError, "bad setslice"

v[2:] = [3]
if v[2] != 3:
    raise RuntimeError, "bad setslice"

if v[0:][0] != v[0]:
    raise RuntimeError, "bad getslice"


del v[:]
if v.size() != 0:
    raise RuntimeError, "bad getslice"

del v[:]
if v.size() != 0:
    raise RuntimeError, "bad getslice"


v = vecStr(["hello ", "world"])
if v[0] != "hello world":
    raise RuntimeError, "bad std::string+std::vector"


pv = pyvector([1, "hello", (1, 2)])

if pv[1] != "hello":
    raise RuntimeError


iv = IntVector(5)
for i in range(0, 5):
    iv[i] = i

iv[1:3] = []
if iv[1] != 3:
    raise RuntimeError

# Overloading checks
if overloaded1(iv) != "vector<int>":
    raise RuntimeError

if overloaded1(dv) != "vector<double>":
    raise RuntimeError

if overloaded2(iv) != "vector<int>":
    raise RuntimeError

if overloaded2(dv) != "vector<double>":
    raise RuntimeError

if overloaded3(iv) != "vector<int> *":
    raise RuntimeError

if overloaded3(None) != "vector<int> *":
    raise RuntimeError

if overloaded3(100) != "int":
    raise RuntimeError


# vector pointer checks
ip = makeIntPtr(11)
dp = makeDoublePtr(33.3)
error = 0
try:
    # check vector<int *> does not accept double * element
    vi = IntPtrVector((ip, dp))
    error = 1
except:
    pass

if error:
    raise RuntimeError

vi = IntPtrVector((ip, makeIntPtr(22)))
if extractInt(vi[0]) != 11:
    raise RuntimeError

if extractInt(vi[1]) != 22:
    raise RuntimeError

# vector const pointer checks
csp = makeConstShortPtr(111)

error = 0
try:
    # check vector<const unsigned short *> does not accept double * element
    vcs = ConstShortPtrVector((csp, dp))
    error = 1
except:
    pass

if error:
    raise RuntimeError

vcs = ConstShortPtrVector((csp, makeConstShortPtr(222)))
if extractConstShort(vcs[0]) != 111:
    raise RuntimeError

if extractConstShort(vcs[1]) != 222:
    raise RuntimeError

for p in vcs[0:1]:
    if extractConstShort2(p) != 111:
        raise RuntimeError

for p in vcs[1:2]:
    if extractConstShort2(p) != 222:
        raise RuntimeError
