Some loop debugging help.

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Some loop debugging help.

R. Clayton-2
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


Reply | Threaded
Open this post in threaded view
|

Re: Some loop debugging help.

Bob Arning-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 






Reply | Threaded
Open this post in threaded view
|

Re: Some loop debugging help.

R. Clayton-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.