Squeak
  links to this page:    
View this PageEdit this PageUploads to this PageHistory of this PageTop of the SwikiRecent ChangesSearch the SwikiHelp Guide
ReadWriteStream
Last updated at 1:08 am UTC on 17 January 2006
Are there bugs in the ReadWriteStream class in Squeak 3.5?

I've been reading the "Squeak: A Quick Trip to ObjectLand" book and have come across some problems with getting the examples using ReadWriteStream to work (on page 174-175). I don't get the same results as the book states as one should expect.

For instance, the following is a series of message sends from the book and what it says are the expected returned values:

s := ReadWriteStream on: #(1 2).
s next. "expected returned value should be 1"
s next. "...should be 1"
s atEnd. "...should be true"
s reset.
s next. "...should be 1"
s position. "...should be 0"

However, this is what I actually got:

s := ReadWriteStream on: #(1 2).
s next. ".result is nil while expected result should be 1 according to the book"
s atEnd. "results in true"
s position. "Answers 0"
s reset.
s next. "result is nil should be 1 according to the book"
s position. "Again, answers 0 while it should be 1"
s atEnd. "true again despite reset message send"
s contents. "#()"

I stepped through the on: message sent to ReadWriteStream and noticed that the read limit is set to 0.

I tried sending the with: message to see what happened.

s := ReadWriteStream with: #(1 2).
s next. "result returned is nil"
s position. "2"
s atEnd. "true"

Again, the next message returned nil instead of 1. Although, this time the position messaged returned 2.

The results are closer to what the book expects if a reset message is sent and the with: creation method is used instead of on:.

s := ReadWriteStream with: #(1 2).
s reset.
s next. "1 as expected"
s next. "2 likewise, as expected"
s atEnd. "true"


I've written an unit test for ReadWriteStream, ReadWriteStream, which exposes these failings. Is it possible if those responsible for ReadWriteStream could please verify the tests assumptions?