Simon Strandgaard wrote:
I am testing the ‘stream’ module…
http://raa.ruby-lang.org/list.rhtml?name=streamQ1: I have to overload the implicitstream.at_beginning_proc
with a offbyone value… Why ?
Because the stream is at beginning if the next forward should give the first
element in the stream which is 1 in the test case below. Thats why the
initial value of the variable x should be zero and the at_beginning_proc
should test this.
Here ist my version of the stream:
a stream which is aquivalent (1…5).create_stream
def new_implicit_stream
s = Stream::ImplicitStream.new { |s|
x = 0
s.at_beginning_proc = proc {x < 1}
s.at_end_proc = proc {x == 5}
s.forward_proc = proc {x += 1 }
s.backward_proc = proc {|y| y = x; x -= 1; y }
}
end
This version passes all tests that the collection stream passes. See tests
TestStream.rb
Q2: Is this me which is thinking wrong, or is it a design flaw
in the ‘stream’ library?
When designing the library I also had to think more about this. Have you
read the stream-doku contained in the RGL-Library which also includes the
stream module? I regret that it is not included in tarball of the stream
module. See http://rgl.sourceforge.net/files/stream_rb.html
Cheers
Horst
···
I have made two methods which should return virtually the
same stream; [1, 2, 3, 4, 5, 6]expand -t2 test_misc.rb
require 'test/unit’
require ‘stream’class TestMisc < Test::Unit::TestCase
def mk_str16
(1…6).create_stream
end
def mk_str16x
Stream::ImplicitStream.new{|s|
x = 1
s.at_end_proc = proc {x == 6}
s.forward_proc = proc {x += 1}
s.at_beginning_proc = proc {x == 0} # todo: why is’nt it {x == 1}
s.backward_proc = proc {x -= 1}
}
end
def setup
@data = mk_str16.filtered{|x| x % 2 == 0}
@data += mk_str16x.filtered{|x| x % 2 != 0}
end
def test_toa
assert_equal([2, 4, 6, 1, 3, 5], @data.to_a)
end
def test_revtoa
assert_equal([5, 3, 1, 6, 4, 2], @data.reverse.to_a)
end
endif $0 == FILE
require 'test/unit/ui/console/testrunner’
Test::Unit::UI::Console::TestRunner.run(TestMisc)
endruby test_misc.rb
Loaded suite TestMisc
Started
…
Finished in 0.008114 seconds.2 tests, 2 assertions, 0 failures, 0 errors
If I change the ‘at_beginning_proc’ to stop at ‘1’ which I believe
is where it should stop, then I get this error:ruby test_misc.rb
Loaded suite TestMisc
Started
FF
Finished in 0.009856 seconds.
Failure!!!
test_revtoa(TestMisc) [test_misc.rb:25]:
<[5, 3, 1, 6, 4, 2]> expected but was
<[5, 3, 6, 4, 2]>Failure!!!
test_toa(TestMisc) [test_misc.rb:22]:
<[2, 4, 6, 1, 3, 5]> expected but was
<[2, 4, 6, 3, 5]>2 tests, 2 assertions, 2 failures, 0 errors
–
Simon Strandgaard