[TEST] Tests for Text, RunArray and TextStream
Daniel Vainsencher
danielv at netvision.net.il
Fri Jun 13 09:24:58 UTC 2003
I won't have time to look at it for the next few days (appointments I
have to prepare for), but I did want to reply now - this is cool.
I think you're on the right track now with the matter of copying. I
check senders-of replace..., and it was only about 20 instances, so
there's a limit to how many place need to be checked.
I will be much relieved when this cleanup is done, because I'll know I
won't have to explain that code to someone I'm helping into Squeak...
Daniel
Boris Gaertner <Boris.Gaertner at gmx.net> wrote:
> This is a multi-part message in MIME format.
>
> --Boundary_(ID_69KHuM0bxk918m3CC0B14w)
> Content-type: multipart/alternative;
> boundary="Boundary_(ID_L4VrrlDS6PSk2R5hV5/kRA)"
>
>
> --Boundary_(ID_L4VrrlDS6PSk2R5hV5/kRA)
> Content-type: text/plain; charset=iso-8859-1
> Content-transfer-encoding: 7BIT
>
> Hello Daniel,
>
> Daniel Vainsencher <danielv at netvision.net.il> wrote:
>
> > [might write some tests]
> > That would be cool. Especially since it's starting to look like we'll
> > have a test-server soon. We could make it run the tests every week/every
> > batch of updates and send the list a report, letting us know what's
> > broken immidiately.
>
> This is a wonderful idea!
>
> As promised, I send you a change set with tests for Text, TextStream
> and RunArray. Also attached to this mail, you find a change set that
> fixes the problems that the tests reveal. The third attachment is a
> short html-Document with some annotations to classes RunArray
> and Text. Please review this document for future inclusion into
> the Squeak documentation.
>
> I do not think that this is already the much desired cleanup for
> Text and TextStream, but it is the beginning of such a cleanup.
>
>
> Daniel Vainsencher <danielv at netvision.net.il> wrote (at May 05, 2003):
>
> > I think you're fixing the wrong thing - you're working
> > around the real culprit, which is that Text>>replaceFrom:to:with: does
> > copying, which is quite contrary to other implementations of the same
> > selector.
>
> This is now about cleanup. Ideally, we should be able to drop
> Text>>replaceFrom:to:with: and to rely on the noncopying definition
> in SequencableCollection. Before we can do that, we have to
> modify some methods that need copying and use replaceFrom:to:with:
> Currently I do not have a reasonably good change set for doing that
> cleanup, but here are some (hopefully interesting) observations:
>
> There are some methods in the instance protocol of Text that call
> Text>>replaceFrom:to:with: and that need copying. Here are
> two examples.
>
> 1. example:
> prepend: stringOrText
>
> self replaceFrom: 1 to: 0 with: stringOrText
>
>
> This is the same as:
>
> prepend: stringOrText
> ^stringOrText asText , self
>
> 2. example:
> append: stringOrText
>
> self replaceFrom: string size + 1
> to: string size with: stringOrText
>
> This should be defined as:
>
> append: stringOrText
> ^self , stringOrText " asText is sent elsewhere and therefore not
> needed here "
>
>
> When we look at #, - a method that is inherited from
> SequenceableCollection - we see:
>
> , otherCollection
> "Concatenate two Strings or Collections."
>
> ^ self copyReplaceFrom: self size + 1
> to: self size
> with: otherCollection
>
>
> and copyReplaceFrom:to:with: is defined in Text:
>
> copyReplaceFrom: start to: stop with: aText
>
> ^self shallowCopy replaceFrom: start to: stop with: aText
>
> Here we create a shallow copy, and replaceFrom:to:with:
> copies again. I think, copyReplaceFrom:to:with:
> should be defined as:
>
>
> copyReplaceFrom: start to: stop with: aTextOrString
>
> | txt |
> txt := aTextOrString asText. "might be a string"
> ^self class
> string: (string copyReplaceFrom: start to: stop with: txt
> string)
> runs: (runs copyReplaceFrom: start to: stop with: txt runs)
>
>
> The question is: 'Are there other methods that have to be changed
> before we can drop Text>>replaceFrom:to:with:'? I will try to
> find out.
>
> (File TextProtocolCleanUp.1.cs contains these proposed changes.)
>
> Andreas Raab <andreas.raab at gmx.de> wrote (on June 08, 2003)
>
> > > > Text has also an in-place replacement method. It is
> > > > replaceFrom: start to: stop with: replacement startingAt: repStart
> > > I know. Since #replaceFrom:to:with: is supposed to be destructive, I'm
> > > saying that instead of working around it, by using the lower level
> > > #replaceFrom:to:with:startingAt: it might be better to fix
> > > #replaceFrom:to:with: to be destructive,
>
> > Uh, ah. Been there, tried that. Didn't work (last time I tried ;-)
>
> > The problem is that there are various places in the system where Text
> > instances are shared (most notably between
> models/morphs/paragraphs/editors)
> > and if any of those use the destructive version your system's going to do
> > really badly.
>
> > If you want to fix #replaceFrom:to:with: then you first need to fix those
> > places.
>
> Text>>append: and Text>>prepend: are used in EToyVocabulary,
> in Morph class and in TextFieldMorph. These methods certainly have the
> potential to cause serious damage to the system. Are there others?
>
> Contents of the archive:
> TextTest-bg.7.cs
> CollectedTextFixes.2.cs
> TextProtocolCleanUp.1.cs
> text.HTM
>
> For best results, file in the change files in this sequence and run the
> tests before and after you filed in ColletedTextFixes.cs
>
>
>
> Greetings, Boris
>
>
>
>
>
> --Boundary_(ID_L4VrrlDS6PSk2R5hV5/kRA)
> Content-type: text/html; charset=iso-8859-1
> Content-transfer-encoding: 7BIT
>
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
> <HTML><HEAD>
> <META content="text/html; charset=iso-8859-1" http-equiv=Content-Type>
> <META content="MSHTML 5.00.2614.3500" name=GENERATOR>
> <STYLE></STYLE>
> </HEAD>
> <BODY bgColor=#ffffff>
> <DIV>Hello Daniel,<BR><BR>Daniel Vainsencher <danielv at netvision.net.il>
> wrote:<BR><BR>> [might write some tests]<BR>> That would be cool.
> Especially since it's starting to look like we'll<BR>> have a test-server
> soon. We could make it run the tests every week/every<BR>> batch of updates
> and send the list a report, letting us know what's<BR>> broken
> immidiately.<BR><BR>This is a wonderful idea!<BR><BR>As promised, I send you a
> change set with tests for Text, TextStream<BR>and RunArray. Also attached to
> this mail, you find a change set that<BR>fixes the problems that the tests
> reveal. The third attachment is a<BR>short html-Document with some annotations
> to classes RunArray<BR>and Text. Please review this document for future
> inclusion into<BR>the Squeak documentation.<BR><BR>I do not think that this is
> already the much desired cleanup for<BR>Text and TextStream, but it is the
> beginning of such a cleanup.<BR><BR><BR>Daniel Vainsencher
> <danielv at netvision.net.il> wrote (at May 05, 2003):<BR><BR>> I think
> you're fixing the wrong thing - you're working<BR>> around the real culprit,
> which is that Text>>replaceFrom:to:with: does<BR>> copying, which is
> quite contrary to other implementations of the same<BR>>
> selector.<BR><BR>This is now about cleanup. Ideally, we should be able to
> drop<BR>Text>>replaceFrom:to:with: and to rely on the noncopying
> definition<BR>in SequencableCollection. Before we can do that, we have
> to<BR>modify some methods that need copying and use
> replaceFrom:to:with:<BR>Currently I do not have a reasonably good change set for
> doing that<BR>cleanup, but here are some (hopefully interesting)
> observations:<BR><BR>There are some methods in the instance protocol of Text
> that call<BR>Text>>replaceFrom:to:with: and that need copying. Here
> are<BR>two examples.<BR><BR>1. example:<BR>prepend: stringOrText<BR><BR>
> self replaceFrom: 1 to: 0 with: stringOrText<BR><BR><BR>This is the same
> as:<BR><BR>prepend: stringOrText<BR> ^stringOrText asText ,
> self<BR><BR>2. example:<BR>append: stringOrText<BR><BR> self replaceFrom:
> string size + 1<BR> to: string size with:
> stringOrText<BR><BR>This should be defined as:<BR><BR>append:
> stringOrText<BR> ^self , stringOrText " asText is sent
> elsewhere and therefore not<BR>needed here "<BR><BR><BR>When we look at #, - a
> method that is inherited from<BR>SequenceableCollection - we see:<BR><BR>,
> otherCollection<BR> "Concatenate two Strings or
> Collections."<BR><BR> ^ self copyReplaceFrom: self size +
> 1<BR> to: self size<BR> with:
> otherCollection<BR><BR><BR>and copyReplaceFrom:to:with: is defined in
> Text:<BR><BR>copyReplaceFrom: start to: stop with: aText<BR><BR> ^self
> shallowCopy replaceFrom: start to: stop with: aText<BR><BR>Here we create a
> shallow copy, and replaceFrom:to:with:<BR>copies again. I think,
> copyReplaceFrom:to:with:<BR>should be defined as:<BR><BR><BR>copyReplaceFrom:
> start to: stop with: aTextOrString<BR><BR> | txt |<BR> txt :=
> aTextOrString asText. "might be a string"<BR> ^self
> class<BR>
> string: (string copyReplaceFrom: start to: stop with:
> txt<BR>string)<BR>
> runs: (runs copyReplaceFrom: start to: stop with: txt runs)<BR><BR><BR>The
> question is: 'Are there other methods that have to be changed<BR>before we can
> drop Text>>replaceFrom:to:with:'? I will try to<BR>find out.<BR><BR>(File
> TextProtocolCleanUp.1.cs contains these proposed changes.)<BR><BR>Andreas Raab
> <andreas.raab at gmx.de> wrote (on June 08, 2003)<BR><BR>> > > Text
> has also an in-place replacement method. It is<BR>> > > replaceFrom:
> start to: stop with: replacement startingAt: repStart<BR>> > I know. Since
> #replaceFrom:to:with: is supposed to be destructive, I'm<BR>> > saying
> that instead of working around it, by using the lower level<BR>> >
> #replaceFrom:to:with:startingAt: it might be better to fix<BR>> >
> #replaceFrom:to:with: to be destructive,<BR><BR>> Uh, ah. Been there, tried
> that. Didn't work (last time I tried ;-)<BR><BR>> The problem is that there
> are various places in the system where Text<BR>> instances are shared (most
> notably between<BR>models/morphs/paragraphs/editors)<BR>> and if any of those
> use the destructive version your system's going to do<BR>> really
> badly.<BR><BR>> If you want to fix #replaceFrom:to:with: then you first need
> to fix those<BR>> places.<BR><BR>Text>>append: and Text>>prepend:
> are used in EToyVocabulary,<BR>in Morph class and in TextFieldMorph. These
> methods certainly have the<BR>potential to cause serious damage to the system.
> Are there others?<BR></DIV>
> <DIV>Contents of the archive:</DIV>
> <DIV>TextTest-bg.7.cs</DIV>
> <DIV>CollectedTextFixes.2.cs</DIV>
> <DIV>TextProtocolCleanUp.1.cs</DIV>
> <DIV>text.HTM</DIV>
> <DIV> </DIV>
> <DIV>For best results, file in the change files in this sequence and run
> the</DIV>
> <DIV>tests before and after you filed in ColletedTextFixes.cs</DIV>
> <DIV> </DIV>
> <DIV><BR><BR>Greetings, Boris<BR><BR><BR><BR></DIV></BODY></HTML>
>
> --Boundary_(ID_L4VrrlDS6PSk2R5hV5/kRA)--
>
> --Boundary_(ID_69KHuM0bxk918m3CC0B14w)
> Content-type: application/octet-stream; name=TextFixes.zip
> Content-transfer-encoding: base64
> Content-disposition: attachment; filename=TextFixes.zip
>
> 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
>
> --Boundary_(ID_69KHuM0bxk918m3CC0B14w)
> MIME-version: 1.0
> Content-type: text/plain; charset=us-ascii
> Content-transfer-encoding: 7BIT
>
>
>
> --Boundary_(ID_69KHuM0bxk918m3CC0B14w)--
More information about the Squeak-dev
mailing list
|