makes tests green

This commit is contained in:
Andreas Rumpf 2016-01-15 14:44:54 +01:00
commit 0d4e52c648
10 changed files with 36 additions and 32 deletions

View file

@ -57,7 +57,7 @@ proc addHandler*(handler: var EventHandler, fn: proc(e: EventArgs) {.closure.})
proc removeHandler*(handler: var EventHandler, fn: proc(e: EventArgs) {.closure.}) = proc removeHandler*(handler: var EventHandler, fn: proc(e: EventArgs) {.closure.}) =
## Removes the callback from the specified event handler. ## Removes the callback from the specified event handler.
for i in countup(0, len(handler.handlers) -1): for i in countup(0, len(handler.handlers)-1):
if fn == handler.handlers[i]: if fn == handler.handlers[i]:
handler.handlers.del(i) handler.handlers.del(i)
break break

View file

@ -143,7 +143,7 @@ proc main() =
# Create long-lived array, filling half of it # Create long-lived array, filling half of it
echo(" Creating a long-lived array of " & $kArraySize & " doubles") echo(" Creating a long-lived array of " & $kArraySize & " doubles")
newSeq(myarray, kArraySize) newSeq(myarray, kArraySize)
for i in 0..kArraySize div 2 -1: for i in 0..kArraySize div 2 - 1:
myarray[i] = 1.0 / toFloat(i) myarray[i] = 1.0 / toFloat(i)
PrintDiagnostics() PrintDiagnostics()

View file

@ -69,7 +69,7 @@ proc cmp[T:int8|int16|int32|int64|int] (a,b: T): T {.inline.} =
template binSearchImpl *(docmp: expr) {.immediate.} = template binSearchImpl *(docmp: expr) {.immediate.} =
var bFound = false var bFound = false
result = 0 result = 0
var H = haystack.len -1 var H = haystack.len - 1
while result <= H : while result <= H :
var I {.inject.} = (result + H) shr 1 var I {.inject.} = (result + H) shr 1
var SW = docmp var SW = docmp
@ -90,7 +90,7 @@ proc DeleteItem[T,D] (n: PNode[T,D], x: int): PNode[T,D] {.inline.} =
return n return n
dec(n.count) dec(n.count)
if n.count > 0 : if n.count > 0 :
for i in countup(x, n.count -1) : n.slots[i] = n.slots[i + 1] for i in countup(x, n.count - 1) : n.slots[i] = n.slots[i + 1]
n.slots[n.count] = nil n.slots[n.count] = nil
case n.count case n.count
of cLen1 : setLen(n.slots, cLen1) of cLen1 : setLen(n.slots, cLen1)
@ -121,7 +121,7 @@ proc internalDelete[T,D] (ANode: PNode[T,D], key: T, Avalue: var D): PNode[T,D]
if x == 0 : if x == 0 :
n = n.left n = n.left
else : else :
x = (-x) -1 x = (-x) - 1
if x < n.count : if x < n.count :
n = n.slots[x].node n = n.slots[x].node
else : else :
@ -132,10 +132,10 @@ proc internalDelete[T,D] (ANode: PNode[T,D], key: T, Avalue: var D): PNode[T,D]
Avalue = n.slots[x].value Avalue = n.slots[x].value
var n2 = DeleteItem(n, x) var n2 = DeleteItem(n, x)
dec(h) dec(h)
while (n2 != n) and (h >=0) : while (n2 != n) and (h >= 0) :
n = n2 n = n2
var w = addr Path[h] var w = addr Path[h]
x = w.Xi -1 x = w.Xi - 1
if x >= 0 : if x >= 0 :
if (n == nil) and isClean(w.Nd, x) : if (n == nil) and isClean(w.Nd, x) :
n = w.Nd n = w.Nd
@ -160,7 +160,7 @@ proc internalFind[T,D] (n: PNode[T,D], key: T): ref TItem[T,D] {.inline.} =
if x == 0 : if x == 0 :
wn = wn.left wn = wn.left
else : else :
x = (-x) -1 x = (-x) - 1
if x < wn.count : if x < wn.count :
wn = wn.slots[x].node wn = wn.slots[x].node
else : else :
@ -199,7 +199,7 @@ proc traceTree[T,D](root: PNode[T,D]) =
if n.left != nil: if n.left != nil:
traceln(space) traceln(space)
write stdout, "left: " write stdout, "left: "
doTrace(n.left, level +1) doTrace(n.left, level+1)
for i, el in n.slots : for i, el in n.slots :
if el != nil and not isClean(el): if el != nil and not isClean(el):
traceln(space) traceln(space)
@ -208,7 +208,7 @@ proc traceTree[T,D](root: PNode[T,D]) =
write stdout, "error " write stdout, "error "
else: else:
traceEl(el) traceEl(el)
if el.node != nil: doTrace(el.node, level +1) if el.node != nil: doTrace(el.node, level+1)
else : write stdout, " empty " else : write stdout, " empty "
elif i < n.count : elif i < n.count :
traceln(space) traceln(space)
@ -217,7 +217,7 @@ proc traceTree[T,D](root: PNode[T,D]) =
when T is string : when T is string :
if el.key != nil: write stdout, el.key if el.key != nil: write stdout, el.key
else : write stdout, el.key else : write stdout, el.key
if el.node != nil: doTrace(el.node, level +1) if el.node != nil: doTrace(el.node, level+1)
else : write stdout, " empty " else : write stdout, " empty "
writeLine stdout,"" writeLine stdout,""
@ -245,25 +245,25 @@ proc SplitPage[T,D](n, left: PNode[T,D], xi: int, Akey:var T, Avalue:var D): PNo
result.slots.newSeq(cLenCenter) result.slots.newSeq(cLenCenter)
result.count = cCenter result.count = cCenter
if x == cCenter: if x == cCenter:
for i in 0..cCenter -1: shallowCopy(it1[i], left.slots[i]) for i in 0..cCenter-1: shallowCopy(it1[i], left.slots[i])
for i in 0..cCenter -1: shallowCopy(result.slots[i], left.slots[cCenter + i]) for i in 0..cCenter-1: shallowCopy(result.slots[i], left.slots[cCenter + i])
result.left = n result.left = n
else : else :
if x < cCenter : if x < cCenter :
for i in 0..x-1: shallowCopy(it1[i], left.slots[i]) for i in 0..x-1: shallowCopy(it1[i], left.slots[i])
it1[x] = setItem(Akey, Avalue, n) it1[x] = setItem(Akey, Avalue, n)
for i in x+1 .. cCenter -1: shallowCopy(it1[i], left.slots[i-1]) for i in x+1 .. cCenter-1: shallowCopy(it1[i], left.slots[i-1])
var w = left.slots[cCenter -1] var w = left.slots[cCenter-1]
Akey = w.key Akey = w.key
Avalue = w.value Avalue = w.value
result.left = w.node result.left = w.node
for i in 0..cCenter -1: shallowCopy(result.slots[i], left.slots[cCenter + i]) for i in 0..cCenter-1: shallowCopy(result.slots[i], left.slots[cCenter + i])
else : else :
for i in 0..cCenter -1: shallowCopy(it1[i], left.slots[i]) for i in 0..cCenter-1: shallowCopy(it1[i], left.slots[i])
x = x - (cCenter + 1) x = x - (cCenter + 1)
for i in 0..x-1: shallowCopy(result.slots[i], left.slots[cCenter + i + 1]) for i in 0..x-1: shallowCopy(result.slots[i], left.slots[cCenter + i + 1])
result.slots[x] = setItem(Akey, Avalue, n) result.slots[x] = setItem(Akey, Avalue, n)
for i in x+1 .. cCenter -1: shallowCopy(result.slots[i], left.slots[cCenter + i]) for i in x+1 .. cCenter-1: shallowCopy(result.slots[i], left.slots[cCenter + i])
var w = left.slots[cCenter] var w = left.slots[cCenter]
Akey = w.key Akey = w.key
Avalue = w.value Avalue = w.value
@ -290,7 +290,7 @@ proc internalPut[T,D](ANode: ref TNode[T,D], Akey: T, Avalue: D, Oldvalue: var D
if x == 0 : if x == 0 :
n = n.left n = n.left
else : else :
x = (-x) -1 x = (-x)-1
if x < n.count : if x < n.count :
n = n.slots[x].node n = n.slots[x].node
else : else :

View file

@ -277,7 +277,7 @@ when isMainModule:
s.flush s.flush
defPacket(Y, tuple[z: int8]) defPacket(Y, tuple[z: int8])
proc `$`(z: Y): string = result = "Y("& $z.z &")" proc `$`(z: Y): string = result = "Y(" & $z.z & ")"
defPacket(TestPkt, tuple[x: seq[Y]]) defPacket(TestPkt, tuple[x: seq[Y]])
var test = newTestPkt() var test = newTestPkt()
test.x.add([newY(5), newY(4), newY(3), newY(2), newY(1)]) test.x.add([newY(5), newY(4), newY(3), newY(2), newY(1)])

View file

@ -66,7 +66,7 @@ proc handlePackets*(server: PServer; buf: PBuffer) =
proc updateFileProgress*() = proc updateFileProgress*() =
let progress = currentFileTransfer.pos / currentFileTransfer.fullLen let progress = currentFileTransfer.pos / currentFileTransfer.fullLen
downloadProgress.bg.setSize(vec2f(progress * 100, 20)) downloadProgress.bg.setSize(vec2f(progress * 100, 20))
downloadProgress.setString($currentFileTransfer.pos &'/'& $currentFileTransfer.fullLen) downloadProgress.setString($currentFileTransfer.pos & '/' & $currentFileTransfer.fullLen)
## HFileTransfer ## HFileTransfer
proc handleFilePartRecv*(serv: PServer; buffer: PBuffer) {.procvar.} = proc handleFilePartRecv*(serv: PServer; buffer: PBuffer) {.procvar.} =

View file

@ -573,13 +573,13 @@ proc importItem(data: PJsonNode; errors: var seq[string]): PItemRecord =
elif data[2]["bullet"].kind == JObject: elif data[2]["bullet"].kind == JObject:
result.bullet = importBullet(data[2]["bullet"], errors) result.bullet = importBullet(data[2]["bullet"], errors)
else: else:
errors.add "UNKNOWN BULLET TYPE for item "& result.name errors.add "UNKNOWN BULLET TYPE for item " & result.name
of "ammo": of "ammo":
result.kind = Ammo result.kind = Ammo
of "utility": of "utility":
nil nil
else: else:
errors.add "Invalid item type \""& data[1].str &"\" for item "& result.name errors.add "Invalid item type \""&data[1].str&"\" for item "&result.name
proc importBullet(data: PJsonNode; errors: var seq[string]): PBulletRecord = proc importBullet(data: PJsonNode; errors: var seq[string]): PBulletRecord =
new(result) new(result)

View file

@ -146,7 +146,7 @@ task "download", "download game assets":
task "zip-lib", "zip up the libs dir": task "zip-lib", "zip up the libs dir":
var z: TZipArchive var z: TZipArchive
if not z.open("libs-"& getDateStr() &".zip", fmReadWrite): if not z.open("libs-" & getDateStr() & ".zip", fmReadWrite):
quit "Could not open zip" quit "Could not open zip"
for file in walkDirRec("libs", {pcFile, pcDir}): for file in walkDirRec("libs", {pcFile, pcDir}):
echo "adding file ", file echo "adding file ", file

View file

@ -764,7 +764,7 @@ proc match*(s: string, pattern: TPeg, matches: var openarray[string],
## returned. ## returned.
var c: TCaptures var c: TCaptures
c.origStart = start c.origStart = start
result = rawMatch(s, pattern, start, c) == len(s) -start result = rawMatch(s, pattern, start, c) == len(s)-start
if result: if result:
for i in 0..c.ml-1: for i in 0..c.ml-1:
matches[i] = substr(s, c.matches[i][0], c.matches[i][1]) matches[i] = substr(s, c.matches[i][0], c.matches[i][1])

View file

@ -10,14 +10,14 @@ import strutils
import os import os
type type
TMessageReceivedEventArgs = object of TEventArgs TMessageReceivedEventArgs = object of EventArgs
Nick*: string Nick*: string
Message*: string Message*: string
TIRC = object TIRC = object
EventEmitter: TEventEmitter EventEmitter: EventEmitter
MessageReceivedHandler*: TEventHandler MessageReceivedHandler*: EventHandler
Socket: TSocket Socket: Socket
Thread: TThread[TIRC] Thread: Thread[TIRC]
proc initIRC*(): TIRC = proc initIRC*(): TIRC =
result.Socket = socket() result.Socket = socket()
@ -49,8 +49,8 @@ proc handleData(irc: TIRC) {.thread.} =
return return
proc Connect*(irc: var TIRC, nick: string, host: string, port: int = 6667) = proc Connect*(irc: var TIRC, nick: string, host: string, port: int = 6667) =
connect(irc.Socket ,host ,TPort(port),TDomain.AF_INET) connect(irc.Socket, host, TPort(port), TDomain.AF_INET)
send(irc.Socket,"USER " & nick & " " & nick & " " & nick & " " & nick &"\r\L") send(irc.Socket,"USER " & nick & " " & nick & " " & nick & " " & nick & "\r\L")
send(irc.Socket,"NICK " & nick & "\r\L") send(irc.Socket,"NICK " & nick & "\r\L")
var thread: TThread[TIRC] var thread: TThread[TIRC]
createThread(thread, handleData, irc) createThread(thread, handleData, irc)

View file

@ -33,6 +33,10 @@ News
``echo $ foo`` continues to be parsed as ``(echo) $ (foo)``. ``echo $ foo`` continues to be parsed as ``(echo) $ (foo)``.
This also means that ``-1`` is always parsed as prefix operator so
code like ``0..kArraySize div 2 -1`` needs to be changed to
``0..kArraySize div 2 - 1``.
Iterator changes Iterator changes
~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~