[squeak-dev] Some loop debugging help.
R. Clayton
rclayton at monmouth.edu
Tue Mar 5 02:28:22 UTC 2013
I have an SUnit test:
testTriangle
| b n t |
b := Bag new
. n := 5
. 1 to: n do: [ :i |
i timesRepeat: [
b add: (IntervalTreeInterval from: i to: i + 1)
]
]
. t := IntervalTree withIntervals: b
. Transcript show: 'Start testing' ; cr
. 0 to: n do: [ :i |
b := t intervalsContaining: i + 0.5
. Transcript show: i ; cr ; flush
. self assert: b size = i
]
If I run this method with the last statement commented out (that is, without
the assertion), the transcript shows
Start testing
0
1
2
3
4
5
If I run the test with the last statement enabled (that is, with the
assertion), the transcript shows
Start testing
0
1
2
and testTriangle fails. However, in the debugger I find that i is 6 and the
bag b is empty, which is correct because there are no intervals containing 6.5
(which makes the assertion fail the correct thing to do). My question is: why
is i = 6? I would have expected the loop to stop after i = 5, as it did when
there was no assertion.
As a secondary question, why did the transcript stop at 2 for the failing test?
I'm assuming it's a buffering problem, but I would have expected flush to push
the buffer contents along.
I'm running
Image
-----
/home/rclayton/projects/squeak/interval-tree/Squeak4.3.image
Squeak4.3
latest update: #11864
Current Change Set: Unnamed1
Virtual Machine
---------------
/home/squeak-4.3/Contents/Linux-i686/lib/squeak/4.4.7-2357/squeakvm
Squeak4.1 of 17 April 2010 [latest update: #9957]
Unix built on Jan 23 2011 18:17:32 Compiler: 4.3.2
platform sources revision 2357
VMMaker versionString 4.4.7
Operating System/Hardware
-------------------------
unix linux i686
Operating System Details
------------------------
Debian GNU/Linux 7.0 \n \l
FileDoesNotExistException: '/etc/lsb-release'Linux version 3.2.0-4-686-pae
(debian-kernel at lists.debian.org) (gcc version 4.6.3 (Debian 4.6.3-14) ) #1
SMP Debian 3.2.35-2
More information about the Squeak-dev
mailing list
|