[kaffe] Testing for 1.1.0 release

Stuart Ballard stuart.ballard@corp.fast.net
Tue May 20 09:41:01 2003


This is a multi-part message in MIME format.
--------------040201010701000209060004
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Dalibor Topic wrote:
> Hi Stuart,
> 
> I've started to merge Classpath's collection classes into kaffe, so I'd be glad
> for more test cases ;) While it may not get ready for 1.1, it should allow
> kaffe to run japitools soon ...

Okay, well, the test is attached.

The purpose of the test is to verify that the implementations of all 
concrete methods in Abstract* are implemented the same way in terms of 
which virtual methods they call on their subclasses. This ensures 
(hopefully) that when client code subclasses Abstract* directly and 
overrides certain methods, the behavior will be the same between Sun's 
implementation and ours. I have no idea how close any free 
implementation comes to passing this test, because I've never tried!

This may be a fairly controversial test: the exact behavior of the 
Abstract* methods may not be fully documented, so it may not be 
"correct" for client code to rely on the subtleties of it. In defense of 
the test, I'd point out that getting correct behavior by inheriting from 
a black-box superclass is almost impossible to achieve without 
"guessing" the behavior and confirming it by experimentation. I have 
real-world code which was written this way and it never occurred to me 
that I was making it non-portable by doing so - and I probably think 
about portability issues more than most people! This code seems to fail 
on at least some free VMs due to these issues.

To run the test, unzip it into a directory and run "./abbash java" and 
"./abbash kaffe". (You may have to modify the abbash script if you don't 
want to use jikes or if kaffe doesn't implement the "-cp" flag; it also 
requires perl). This will generate various *.java.out and *.kaffe.out 
files which can be compared to find differences in the implementations. 
Much of the java source code it uses will also only be there *after* 
running it, as it's generated by the perl script from util.japi (a very 
stripped down japi file from jdk1.4 which only contains the parts I'm 
interested in).

I suspect that some thought may be needed in deciding exactly how 
perfectly we *need* to pass these tests. The output includes every 
method that is called (to the greatest extent that I could figure it 
out), and some of these may legitimately be implementation dependent, 
especially once you get to deeper levels of nesting.

Oh, one more thing: The test runs modified versions of ListBash, SetBash 
and MapBash from javacollections.org. They're modified to be 
deterministic by seeding the random value at zero every time. ListBash 
is further modified to make it behave correctly when asked to test an 
list with an odd number of elements, which it didn't originally.

Stuart.

-- 
Stuart Ballard, Senior Web Developer
FASTNET - Web Solutions
(215) 283-2300, ext. 126
www.fast.net

--------------040201010701000209060004
Content-Type: application/x-tar;
 name="abbash.tar.gz"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="abbash.tar.gz"

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
--------------040201010701000209060004--