Skip to content

Commit

Permalink
fix ConcatenatedStream for real and add testcase
Browse files Browse the repository at this point in the history
2012-10-09  Paolo Bonzini  <bonzini@gnu.org>
            Holger Freyther  <holger@freyther.de>

	* kernel/StreamOps.st: Fix previous changeset.
	* tests/streams.st: New.
	* tests/streams.ok: New.
  • Loading branch information
bonzini committed Oct 10, 2012
1 parent 3d8d4a8 commit c9ceece
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 3 deletions.
7 changes: 7 additions & 0 deletions ChangeLog
@@ -1,3 +1,10 @@
2012-10-09 Paolo Bonzini <bonzini@gnu.org>
Holger Freyther <holger@freyther.de>

* kernel/StreamOps.st: Fix previous changeset.
* tests/streams.st: New.
* tests/streams.ok: New.

2012-10-08 Paolo Bonzini <bonzini@gnu.org>

* kernel/StreamOps.st: Ensure "last" is up to date when a
Expand Down
7 changes: 4 additions & 3 deletions kernel/StreamOps.st
Expand Up @@ -81,9 +81,10 @@ Stream subclass: ConcatenatedStream [
"This is somewhat performance-sensitive, so avoid testing for an
empty collection."
[(s := streams at: 1) atEnd] whileTrue:
[lastStart := startPos.
startPos := startPos + curPos.
curPos := 0.
[curPos > 0 ifTrue: [
lastStart := startPos.
startPos := startPos + curPos.
curPos := 0].
streams size = 1 ifTrue: [last := streams first. ^nil].
last := streams removeFirst].
^s
Expand Down
14 changes: 14 additions & 0 deletions tests/streams.ok
@@ -0,0 +1,14 @@

Execution begins...
$1
$2
$3
'123'
$4
$5
'456'
$6
true
'456'
nil
returned value is nil
55 changes: 55 additions & 0 deletions tests/streams.st
@@ -0,0 +1,55 @@

"======================================================================
|
| Regression tests for Streams
|
|
======================================================================"


"======================================================================
|
| Copyright (C) 2012 Free Software Foundation.
| Written by Holger Hans Peter Freyther.
|
| This file is part of GNU Smalltalk.
|
| GNU Smalltalk is free software; you can redistribute it and/or modify it
| under the terms of the GNU General Public License as published by the Free
| Software Foundation; either version 2, or (at your option) any later version.
|
| GNU Smalltalk is distributed in the hope that it will be useful, but WITHOUT
| ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
| FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
| details.
|
| You should have received a copy of the GNU General Public License along with
| GNU Smalltalk; see the file COPYING. If not, write to the Free Software
| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
======================================================================"

Eval [
| concat streamA streamB |
streamA := '123' readStream.
streamB := '456' readStream.
concat := streamA, streamB.

"Should print 123"
concat next printNl.
concat next printNl.
concat next printNl.
(concat copyFrom: 0 to: 2) printNl.

"Should print 45"
concat next printNl.
concat next printNl.
(concat copyFrom: 3 to: 5) printNl.

"Should print 6"
concat next printNl.
concat atEnd printNl.
(concat copyFrom: 3 to: 5) printNl.

concat stream printNl.
]
1 change: 1 addition & 0 deletions tests/testsuite.at
Expand Up @@ -52,6 +52,7 @@ AT_DIFF_TEST([getopt.st])
AT_DIFF_TEST([quit.st])
AT_DIFF_TEST([pools.st])
AT_DIFF_TEST([shape.st])
AT_DIFF_TEST([streams.st])

AT_BANNER([Other simple tests.])
AT_DIFF_TEST([ackermann.st])
Expand Down

0 comments on commit c9ceece

Please sign in to comment.