import io:*; import mem:*; import vector:*; obj AbleToBeDestroyed (Object) { var data:int fun construct(dat:int):void { data = dat print("Constructed: ") println(data) } fun copy_construct(other:AbleToBeDestroyed*):void { data = other->data+1 print("Copied: ") print(other->data) print(" to ") println(data) } fun operator=(other:AbleToBeDestroyed):void { print("Assigned: ") print(other.data) print(" to ") print(data) print(" is now ") data = other.data+1 println(data) } fun destruct(): void { print("Destroyed: ") println(data) } }; fun main(): int { var intVec.construct(): vector; intVec.addEnd(1); intVec.addEnd(3); intVec.addEnd(3); intVec.addEnd(7); println(intVec.size); for (var i: int = 0; i < intVec.size; i++;) print(intVec.at(i)); println(); for (var i: int = 0; i < intVec.size; i++;) print(intVec[i]); println(); // in place lambda map intVec.in_place(fun(it:int):int { return it*2; }) for (var i: int = 0; i < intVec.size; i++;) print(intVec.at(i)); println(); intVec.do(fun(it:int):void print(it+7);) println(); var subd = intVec.map(fun(it:int):int { return it-1; }) for (var i: int = 0; i < subd.size; i++;) print(subd.at(i)); println(); var newType = intVec.map(fun(it:int):double { return it+1.7; }) for (var i: int = 0; i < newType.size; i++;) print(newType.at(i)); println(); var desVec: vector* = new>()->construct(); var testDestruct.construct(0): AbleToBeDestroyed; desVec->addEnd(testDestruct); println("delete vector") delete(desVec); var newOne = vector("hayyy") println(newOne[0]) var noParam = vector() noParam.add(4.7) println(noParam[0]) var assignTest = vector("first") println(assignTest[0]) var toAssign = vector("first") toAssign.add("second") assignTest = toAssign println(assignTest[0]) println(assignTest[1]) var sliceTest = vector(1) sliceTest.add(2) sliceTest.add(3) sliceTest.add(4) print("full: ") sliceTest.do(fun(it:int):void print(it);) println() print("middle: ") sliceTest.slice(1,-2).do(fun(it:int):void print(it);) println() print("all but first: ") sliceTest.slice(1,-1).do(fun(it:int):void print(it);) println() print("all but last: ") sliceTest.slice(0,-2).do(fun(it:int):void print(it);) println() print("just some: ") sliceTest.slice(1,2).do(fun(it:int):void print(it);) println() println("find test") var multipleFindTest = vector(1,2,3) println(multipleFindTest.find_index(1)) println(multipleFindTest.find_index(2)) println(multipleFindTest.find_index(3)) println("set and []= test") var setTest = vector(4,5,6) setTest.add(7) setTest.set(1,8) setTest[2] = 9 setTest.do(fun(it: int) println(it);) println("done") return 0; }