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 ([hidden email]) (gcc version 4.6.3 (Debian 4.6.3-14) ) #1 SMP Debian 3.2.35-2 |
Are you looking at the right "i" in the
debugger? Since you reused the block argument name, there are two
i's showing in the debugger. The first is 6 because that's how the
first loop ended - when i was > 5. The second i will be the one
for the second loop.
Cheers, Bob On 3/4/13 9:28 PM, R. Clayton wrote:
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 ([hidden email]) (gcc version 4.6.3 (Debian 4.6.3-14) ) #1 SMP Debian 3.2.35-2 |
Are you looking at the right "i" in the debugger?
Oh my. I scrolled the variable pane and found both of them. Thanks for your help. |
Free forum by Nabble | Edit this page |