Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] View of /sml/trunk/tests/coresml/doc/testsuit.wp5
ViewVC logotype

View of /sml/trunk/tests/coresml/doc/testsuit.wp5

Parent Directory Parent Directory | Revision Log Revision Log


Revision 548 - (download) (as text) (annotate)
Tue Feb 29 16:38:11 2000 UTC (21 years, 9 months ago) by dbm
File size: 83686 byte(s)
Initial revision
ÿWPCée
ûÿ2`ZB^œnúøhXÛxþ6X@ÉKX@ML-programÂ(G?tÂÏŽo#¿B(÷8§?LRÂK+÷PÂÏ#
§?f—+÷bÃÃÄÄBibliogrphy(G?tÂÏÁBibliography(÷8§?LRÂK+÷PÂÏ#
§?f—+÷bÂÂÁ€°°
Á

Doc InitxÂ(G?tÂÏInitialize Document StyleRÂK+÷PÂÏ#
§?f—+÷b’×

×ÒŒ I. 1. A. a.(1)(a) i) a)DocumentŒÒ²ûÿ2è»’”M–áqwa1Document—+÷bÂÏ#Document StyleÜŽo#¿B(÷8§?L"RÂK+÷PFÙÙ
Áàìì*ÁÃÃÃÃ××Ø€Ø ÙÙÙÙ×׃

ÄÄÄÄa2Document—+÷bÂÏ#Document StyleÜŽo#¿B(÷8§?L"RÂK+÷P*	

ÃÃØØ ÃÃ××××

ÄÄÄÄa3Document—+÷bÂÏ#Document StyleÜŽo#¿B(÷8§?L"RÂK+÷P0
ÁÁÃÃØ‚Ø ××××
ÄÄa4Document—+÷bÂÏ#Document StyleÜŽo#¿B(÷8§?L"RÂK+÷P
ÁÁÃÃÃÃ.ÄÄ  
ÄÄûÿ2Èf	f€
qæqWa5Document—+÷bÂÏ#ÁDocument StyleÜŽo#¿B(÷8§?L"RÂK+÷PÂÂ

a6Document—+÷bÂÏ#ÁDocument StyleÜŽo#¿B(÷8§?L"RÂK+÷P	ÂÂ

a7Document—+÷bÂÏ#ÁDocument StyleÜŽo#¿B(÷8§?L"RÂK+÷P
ÂÂÂ`	`	`	Â

a8Document—+÷bÂÏ#ÁDocument StyleÜŽo#¿B(÷8§?L"RÂK+÷PÂÂÂ`	`	`	Â

ûÿ2Æ	èú
±â“–0	Tech InitxÂ(G?tÂÏInitialize Technical StyleRÂK+÷PÂÏ#
§?f—+÷bÒŒ 1 .1 .1 .1 .1 .1 .1 .1 þTechnicalŒÒa1Technical+÷bÂÏ#Technical Document Style#¿B(÷8§?L$RÂK+÷P
4"
ÃÃÃÃ××Ø€Ø ÙÙÙÙ××
ÄÄÁÁ
ÄÄa2Technical+÷bÂÏ#Technical Document Style#¿B(÷8§?L$RÂK+÷P*
ÃÃØØ ÃÃ××××ÄÄ
ÁÁ
ÄÄa3Technical+÷bÂÏ#Technical Document Style#¿B(÷8§?L$RÂK+÷P'
ÃÃØ‚Ø ××××ÁÁ
ÄÄûÿ2•ø	…
……—a4Technical+÷bÂÏ#Technical Document Style#¿B(÷8§?L$RÂK+÷P& ÃÃØƒØ ××××ÁÁ
ÄÄa5Technical+÷bÂÏ#Technical Document Style#¿B(÷8§?L$RÂK+÷P&!"ÁÁÃÃØ„Ø .  
ÄÄa6Technical+÷bÂÏ#Technical Document Style#¿B(÷8§?L$RÂK+÷P&#$ÁÁÃÃØ…Ø .  
ÄÄa7Technical+÷bÂÏ#Technical Document Style#¿B(÷8§?L$RÂK+÷P&%&ÁÁÃÃØ†Ø .  
ÄÄûÿ2<…N:Ó“
œ a8Technical+÷bÂÏ#Technical Document Style#¿B(÷8§?L$RÂK+÷P&'(ÁÁÃÃØ‡Ø .  
ÄÄPleadingxÂ(G?tÂÏHeader for numbered pleading paperPÂÏ#
§?f—+÷bâ)*ÐÈÐÐ°° èÐÕˆ,Ñ#þ6X@@#ÑÐ°°××ÐÐÈÐÐ××X°ÐÐÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ °ÿÿÐÐÚyø*ü°dddyÚÚyø*°dddyÚ

ÁHHÀÁ1ƒ

ÁHHÀÁ2ƒ

ÁHHÀÁ3ƒ

ÁHHÀÁ4ƒ

ÁHHÀÁ5ƒ

ÁHHÀÁ6ƒ

ÁHHÀÁ7ƒ

ÁHHÀÁ8ƒ

ÁHHÀÁ9ƒ

ÁHÐÀÁ10ƒ

ÁHÐÀÁ11ƒ

ÁHÐÀÁ12ƒ

ÁHÐÀÁ13ƒ

ÁHÐÀÁ14ƒ

ÁHÐÀÁ15ƒ

ÁHÐÀÁ16ƒ

ÁHÐÀÁ17ƒ

ÁHÐÀÁ18ƒ

ÁHÐÀÁ19ƒ

ÁHÐÀÁ20ƒ

ÁHÐÀÁ21ƒ

ÁHÐÀÁ22ƒ

ÁHÐÀÁ23ƒ

ÁHÐÀÁ24ƒ

ÁHÐÀÁ25ƒ

ÁHÐÀÁ26ƒ

ÁHÐÀÁ27ƒ

ÁHÐÀÁ28Ó	 	ÓÂÕa1Right Par+÷bÂÏ#ÁRight-Aligned Paragraph Numbers÷8§?L.RÂK+÷P8+,Á@ÁØØ ƒÁ€°°
ÁÂÂ

a2Right Par+÷bÂÏ#ÁRight-Aligned Paragraph Numbers÷8§?L.RÂK+÷PA-.ÁÁÁ@`	`	ÁØØ ƒÁ€ÁÂ`	`	`	Â

ûÿ28¥n®·ÁÀxa3Right Par+÷bÂÏ#ÁRight-Aligned Paragraph Numbers÷8§?L.RÂK+÷PJ/0ÁÁÁ`	`	ÁÁ@¸¸ÁØØ ƒÁ€`	`	Á¸¸¸Â

a4Right Par+÷bÂÏ#ÁRight-Aligned Paragraph Numbers÷8§?L.RÂK+÷PS12ÁÁÁ`	`	ÁÁ¸¸ÁÁ@ÁØØ ƒÁ€¸¸ÁÂÂ

a5Right Par+÷bÂÏ#ÁRight-Aligned Paragraph Numbers÷8§?L.RÂK+÷P\34ÁÁÁ`	`	ÁÁ¸¸ÁÁÁÁ@hh#ÁØØ ƒÁ€ÁÂhhhÂ

a6Right Par+÷bÂÏ#ÁRight-Aligned Paragraph Numbers÷8§?L.RÂK+÷Pe56ÁÁÁ`	`	ÁÁ¸¸ÁÁÁÁhh#ÁÁ@ÀÀ(ÁØØ ƒÁ€hh#ÁÂÀÀÀÂ

ûÿ2­eÉjÒ3Õ0ÓLÚa7Right Par+÷bÂÏ#ÁRight-Aligned Paragraph Numbers÷8§?L.RÂK+÷Pn78ÁÁÁ`	`	ÁÁ¸¸ÁÁÁÁhh#ÁÁÀÀ(ÁÁ@-ÁØØ ƒÁ€ÀÀ(ÁÂÂ

a8Right Par+÷bÂÏ#ÁRight-Aligned Paragraph Numbers÷8§?L.RÂK+÷Pw9:ÁÁÁ`	`	ÁÁ¸¸ÁÁÁÁhh#ÁÁÀÀ(ÁÁ-ÁÁ@pp2ÁØØ ƒÁ€-ÁÂpppÂ

ÓDKÓÐX°‰‰ÐÐ°°‰‰ÐÐ÷Ð6Â&ÿ÷ÐÐÐÒ ÈX0ÃÍÄÄ     ÃÍÄÄÈX0ÃÍÄÄ     ÃÍÄÄ Ò«Ûxþ6X@ÉKX@<þ6X9€`(CourierXþ6X@@<þ6X9`(Courier%vF) P%P.æF)Z8NewCenturySchlbk Regular%»–F) P»P.æF)Z8NewCenturySchlbk Regular»%vF) P%P.æF)Z8NewCenturySchlbk Regular%»–F) P»P.æF)Z8NewCenturySchlbk Regular»%vF) P%P.æF)Z8NewCenturySchlbk Regular%»–F) P»P.æF)Z8NewCenturySchlbk Regular»%vF) P%P.æF)Z8NewCenturySchlbk Regular%»–F) P	»P.æF)Z8NewCenturySchlbk Regular»%vF) P
%P.æF)Z8NewCenturySchlbk Regular%UF) PP.æF)Z8NewCenturySchlbk Regular»–F) P»P.æF)Z8NewCenturySchlbk Regular»%vF) P
%P.æF)Z8NewCenturySchlbk Regular%UF) PP.æF)Z8NewCenturySchlbk Regular»–F) P»P.æF)Z8NewCenturySchlbk Regular»%vF) P%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@Â@;@÷Ð9Z&Courier RegularÂ%vF) P%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@Â@;@÷Ð9Z&Courier RegularÂ%vF) P%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@Â@;@÷Ð9Z&Courier RegularÂ%vF) P%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@Â@;@÷Ð9Z&Courier RegularÂ%vF) P%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@Â@;@÷Ð9Z&Courier RegularÂ%vF) P%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@Â@;@÷Ð9Z&Courier RegularÂ%vF) P%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@Â@;@÷Ð9Z&Courier RegularÂ%vF) P%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@Â@;@÷Ð9Z&Courier RegularÂ%vF) P %P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@!Â@;@÷Ð9Z&Courier RegularÂ%vF) P"%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@#Â@;@÷Ð9Z&Courier RegularÂ%vF) P$%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@%Â@;@÷Ð9Z&Courier RegularÂ%vF) P&%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@'Â@;@÷Ð9Z&Courier RegularÂ%vF) P(%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@)Â@;@÷Ð9Z&Courier RegularÂ%vF) P*%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@+Â@;@÷Ð9Z&Courier RegularÂ%vF) P,%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@-Â@;@÷Ð9Z&Courier RegularÂ%vF) P.%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@/Â@;@÷Ð9Z&Courier RegularÂ%vF) P0%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@1Â@;@÷Ð9Z&Courier RegularÂ%vF) P2%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@3Â@;@÷Ð9Z&Courier RegularÂ%vF) P4%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@5Â@;@÷Ð9Z&Courier RegularÂ%vF) P6%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@7Â@;@÷Ð9Z&Courier RegularÂ%vF) P8%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@9Â@;@÷Ð9Z&Courier RegularÂ%vF) P:%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@;Â@;@÷Ð9Z&Courier RegularÂ%vF) P<%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@=Â@;@÷Ð9Z&Courier RegularÂ%vF) P>%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@?Â@;@÷Ð9Z&Courier RegularÂ%vF) P@%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@AÂ@;@÷Ð9Z&Courier RegularÂ%vF) PB%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@CÂ@;@÷Ð9Z&Courier RegularÂÂZþ6X@DÂ@;@÷Ð9Z&Courier RegularÂÂZþ6X@EÂ@;@÷Ð9Z&Courier RegularÂ%vF) PF%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@GÂ@;@÷Ð9Z&Courier RegularÂÂZþ6X@HÂ@;@÷Ð9Z&Courier RegularÂÂZþ6X@IÂ@;@÷Ð9Z&Courier RegularÂ%vF) PJ%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@KÂ@;@÷Ð9Z&Courier RegularÂ%vF) PL%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@MÂ@;@÷Ð9Z&Courier RegularÂ%vF) PN%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@OÂ@;@÷Ð9Z&Courier RegularÂ%vF) PP%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@QÂ@;@÷Ð9Z&Courier RegularÂ%vF) PR%P.æF)Z8NewCenturySchlbk Regular%»–F) PS»P.æF)Z8NewCenturySchlbk Regular»%vF) PT%P.æF)Z8NewCenturySchlbk Regular%»–F) PU»P.æF)Z8NewCenturySchlbk Regular»%vF) PV%P.æF)Z8NewCenturySchlbk Regular%»–F) PW»P.æF)Z8NewCenturySchlbk Regular»%vF) PX%P.æF)Z8NewCenturySchlbk Regular%»–F) PY»P.æF)Z8NewCenturySchlbk Regular»%vF) PZ%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@[Â@<ÆðI9Z&Courier RegularÂ%vF) P\%P.æF)Z8NewCenturySchlbk Regular%»–F) P]»P.æF)Z8NewCenturySchlbk Regular»%vF) P^%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@_Â@;@÷Ð9Z&Courier RegularÂ%vF) P`%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@aÂ@;@÷Ð9Z&Courier RegularÂ%vF) Pb%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@cÂ@;@÷Ð9Z&Courier RegularÂ%vF) Pd%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@eÂ@;@÷Ð9Z&Courier RegularÂ%vF) Pf%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@gÂ@;@÷Ð9Z&Courier RegularÂ%vF) Ph%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@iÂ@;@÷Ð9Z&Courier RegularÂ%vF) Pj%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@kÂ@;@÷Ð9Z&Courier RegularÂ%vF) Pl%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@mÂ@;@÷Ð9Z&Courier RegularÂ%vF) Pn%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@oÂ@;@÷Ð9Z&Courier RegularÂ%vF) Pp%P.æF)Z8NewCenturySchlbk Regular%ÂZþ6X@qÂ@;@÷Ð9Z&Courier RegularÂ%vF) Pr%P.æF)Z8NewCenturySchlbk Regular%ûÿ2ßeçe3|xÐ°°‰±ÐÐ‰‰bÌÐÓUSÓÑ#%vF) P%P#ÑÐÐÐÐ



Ñ#»–F) P»P#ÑÃÃÁà4	¬ÁTest suite for the Core Language of Standard MLƒ
ÄÄÑ#%vF) P%P#Ñ



Áବ#ÁMichael Vium, C 908944ƒ

Áà¬*Áandƒ

Áྫྷ#ÁSten Schmidt, C 908841ƒ


Áà<¬ ÁDepartment of Computer Scienceƒ
Áà<¬ ÁTechnical University of Denmarkƒ

























ÃÃÁಬ%ÁSeptember 1, 1994ƒ
ÄÄ
ÃÃÑ#»–F) P»P#ÑContentsÄÄÑ#%vF) P%P#Ñ
Úyx°°dddyÚ




Áº	º	ÁAcknowledgementÁÂÂ#ÁÁ(ÁÁrr-ÁÁÊÊ2ÁÁ""7ÁÁ`’!ö!GÁ1ƒ

1.0 Áº	º	ÁIntroductionÁjjÁÁÂÂ#ÁÁ(ÁÁrr-ÁÁÊÊ2ÁÁ""7ÁÁzz<ÁÁ`’!ö!GÁ2ƒ

2.0 Áº	º	ÁWhat is testedÁÂÂ#ÁÁ(ÁÁrr-ÁÁÊÊ2ÁÁ""7ÁÁzz<ÁÁÒÒAÁÁ`’!ö!GÁ3ƒ

3.0 Áº	º	ÁApproachÁjjÁÁÂÂ#ÁÁ(ÁÁrr-ÁÁÊÊ2ÁÁ""7ÁÁzz<ÁÁÒÒAÁÁ`’!ö!GÁ4ƒ

3.1 Áº	º	ÁTesting systematicallyÁ(ÁÁrr-ÁÁÊÊ2ÁÁ""7ÁÁzz<ÁÁÒÒAÁÁ`’!ö!GÁ4ƒ

3.2 Áº	º	ÁNaming files systematicallyÁ(ÁÁrr-ÁÁÊÊ2ÁÁ""7ÁÁzz<ÁÁ`’!ö!GÁ4ƒ

3.3 Áº	º	ÁTest suite programsÁÂÂ#ÁÁ(ÁÁrr-ÁÁÊÊ2ÁÁ""7ÁÁzz<ÁÁ`’!ö!GÁ5ƒ

3.4 Áº	º	ÁTesting rule 17ÁÂÂ#ÁÁ(ÁÁrr-ÁÁÊÊ2ÁÁ""7ÁÁzz<ÁÁÒÒAÁÁ`’!ö!GÁ6ƒ

3.4.1 Áº	º	ÁTest of the valbindingÁ(ÁÁrr-ÁÁÊÊ2ÁÁ""7ÁÁzz<ÁÁÒÒAÁÁ`’!ö!GÁ7ƒ

3.4.2 Áº	º	ÁTest of Closure of the variable environment VEÁ""7ÁÁzz<ÁÁ`’!ö!GÁ7ƒ

4.0 Áº	º	ÁUsing the test suiteÁÂÂ#ÁÁ(ÁÁrr-ÁÁÊÊ2ÁÁ""7ÁÁzz<ÁÁ`.!ö!FÁ12ƒ

5.0 Áº	º	ÁConclusionÁjjÁÁÂÂ#ÁÁ(ÁÁrr-ÁÁÊÊ2ÁÁ""7ÁÁzz<ÁÁ`.!ö!FÁ13ƒ

Áº	º	ÁBibliographyÁjjÁÁÂÂ#ÁÁ(ÁÁrr-ÁÁÊÊ2ÁÁ""7ÁÁzz<ÁÁÒÒAÁÁ`.!ö!FÁ15ƒ

A  Áº	º	ÁAppendix: Which rules are used in which filesÁ""7ÁÁzz<ÁÁÒÒAÁÁ`.!ö!FÁ16ƒ

B  Áº	º	ÁAppendix: Test results from four SML implementationsÁzz<ÁÁ`.!ö!FÁ22ƒ

Ó

ÓÃÃÑ#»–F) P»P#ÑÐ
È
ÐAcknowledgementÄÄÑ#%vF) P%P#Ñ
Úyx°°dddyÚ




We would like to thank Peter Sestoft at the Department of Computer Science,
Technical University of Denmark for giving us the opportunity to work on this
project. Also, we would like to thank him for his assistance in the development of
this test suite.
ÃÃÐ
È
ÐÑ#»–F) P	»P#Ñ1.0 IntroductionÄÄÑ#%vF) P
%P#Ñ
Úyx°°dddyÚ




This document describes the development of a test suite that can be used to test
Standard ML implementations. A precise and formal definition of Standard ML
is given in ÃÃThe Definition of Standard MLÄÄÖæÿÿÓDKÓÐb̉‰ÐÐЍÑ#UF) PP#Ñ  The Definition of Standard ML will henceforth be referred to as À Àthe DefinitionÀÀ, distinguished by an initial
capital letter.æÖ written by Milner, Tofte, and Harper
available from MIT Press. The idea with this project was systematically to
develop a test suite based on the definitions present in the Definition. The
definition of the Standard ML programming language is different from the
definitions of most other programming languages À"À it mathematically describes
not only the grammar but also the meaning of the language. This is why it
seemed reasonable to try to construct a test suite based on the definitions
available, rule by rule. Because of the time limitations imposed on the project,
this test suite is limited to testing the static semantics for the Core Language of
Standard ML. The dynamic semantics for the Core Language and the Module
Language is not covered by this work.

The test suite is formed by a collection of small Standard ML programs. Each
program is constructed to test a rule or a part of a rule, e.g. a side condition. Also
each program is accompanied by a description of how the compiler is expected to
react to it. For example, the program might fail because of a type error. On the
other hand, the program might succeed in which case its expected behaviour
must be documented.

An exhaustive test is impossible, so care is needed in selecting cases that are
most likely to reveal errors. Some program constructions are more complicated
than others, and in general more complicated constructions are somewhat more
likely to fool a compiler than simple ones. Nevertheless, the use of this test suite
on four different Standard ML implementations showed us, that even simple
illegal constructs were accepted by some implementations (for example, two
implementations accepted free imperative type variables at top level).

Section 2 of this document describes exactly which parts of the Definition are
tested by this test suite and which are not. Section 3 describes the approach used
in the development. It contains information regarding testing systematically,
naming files systematically and the test suite programs in general. Also the
testing of rule 17 is outlined as an example of how rules are tested
systematically. Section 4 describes how to use the test suite. Finally, section 5 is
dedicated to the conclusion. Note, that it is not the intention with this document
to describe the development of each program in this test suite in detail. Neither
does it try to explain definitions nor rules in the Definition. Anyone interested in
the definitions of Standard ML is advised to take a look at the Definition or [2].ÃÃÑ#»–F) P»P#Ñ2.0 What is testedÄÄÑ#%vF) P
%P#Ñ
Úyx°°dddyÚ




As stated in the introduction this test suite is limited to testing the static
semantics for the Core Language of Standard ML. The dynamic semantics for
the Core Language and the Module Language are not covered by this work.


This test suite tests

ÀÀº	º	º	Ârule 100 and the static semantics for the Core Language (the rules from 1
to 52, rule 23 excluded) [chapter 4].

ÀÀº	º	º	Âthe syntactic restrictions [page 9]ÖÿÿÓDKÓÐ‰‰‰‰ÐÐЍÑ#UF) PP#Ñ  When we refer to the Definition we shall do so using square brackets, e.g. [page 9] for the Definition, page
9 or [Appendix B] for the Definition, Appendix B.Ö.

ÀÀº	º	º	Âthe derived forms [page 67©68].

ÀÀº	º	º	Âthe first point in the further restrictions [page 30].


This test suite does not test

ÀÀº	º	º	Âthe Module Language.

ÀÀº	º	º	Âthe dynamic semantics for the Core Language [chapter 6]

ÀÀº	º	º	Âthe initial static basis [Appendix C].

ÀÀº	º	º	Âthe initial dynamic basis [Appendix D] thoroughly.

ÀÀº	º	º	Âthe grammar of the Core Language [page 8©9] and [Appendix B]
systematically or thoroughly.

ÀÀº	º	º	Âwhether the compiler warns regarding match exhaustiveness and
redundant patterns as demanded in the second point in the further
restrictions [page 30].

ÀÀº	º	º	Âthe scoping of explicit type variables in valbindings completely (the test
programs R017A©AC.ML and R017K©FL.ML may however indicate
whether the compiler treats the scoping correctly).

ÃÃÑ#»–F) P»P#Ñ3.0 ApproachÄÄÑ#%vF) P%P#Ñ
Úyx°°dddyÚ




ÃÃ3.1 Testing systematicallyÄÄ

The rules in the Definition are tested one by one and the test programs are kept
as simple as possible. This makes it easier to ensure that the rules are tested in
all possible instances. It also minimizes the chance of problems in one
declaration affecting on the testing of another.

ÀÀº	º	º	Âfor each rule all the side conditions are tested separately in different test
programs.

ÀÀº	º	º	Âfor each side condition there is a program testing that the compiler will
fail to elaborate when the side condition does not hold.

ÀÀº	º	º	Âall instances where a side condition does not hold are tested separately.

ÀÀº	º	º	Âthe test programs in the present test suite are generally kept very simple
except for the test programs for the more essential rules in ML.

For each rule there is also one or more programs that test the rule in general.
These are the programs that requires intuition to construct. The better
knowledge of SML implementations and problems herein, the better test
programs one can conceive. They should be designed so they are most likely to
fool a compiler, although they must remain correct according to the Definition.

Naturally, the biggest problem testing compilers systematically is that not all
side conditions can be tested that easily. For instance, some of the side
conditions make demands on how the compiler should react internally. This can
not be tested directly in a program. However, if the compiler does not comply
with these conditions it could have unpredictable consequences in the
elaboration of the following declarations. Normally, if the compiler treats
complicated examples correctly, chances are that it will treat all programs
correctly with respect to this specific side condition. This is the philosophy
behind this test suite when testing internal behavior of the compiler.


ÃÃ3.2 Naming files systematicallyÄÄ

For convenience the test programs are named the following way:

{1 char category} + {3 char rule/restriction/derived form number} + {1 char serial
number A©Z} + "©" + {2 char compiler reaction} + ".ML"
ŒThe test programs are divided into four categories:

Rº	º	º	ÂÃÃRulesÄÄ. These are the main programs in the test suite. They test the rules
as given in the Definition. The number in the filename equals the rule
number.

Sº	º	º	ÂÃÃSyntactic restrictionsÄÄ. These programs test that the compiler respects
these extra restrictions. The number in the filename equals the point
number [page 9].

Dº	º	º	ÂÃÃDerived FormsÄÄ. These programs test that the compiler implements all the
derived forms as mentioned in [Appendix A]. 

Mº	º	º	ÂÃÃMiscellaneousÄÄ. These files test various details in SML. Se notes in files for
further information.

The reactions indicated in the filenames can be either AC or FL meaning that
the compiler should accept or fail respectively.

Examples:

R017B©FL.ML: this program is the second program that tests rule 17 and the
compiler should refuse to elaborate it.

S002A©AC.ML: this program is the first program that tests the second point in
the syntactic restrictions and the compiler should succeed in elaborating it.


ÃÃ3.3 Test suite programsÄÄ

Some considerations have been made in order to make it as easy as possible to
test compilers with this test suite. All programs in this test suite are made the
same way:

ÀÀº	º	º	ÂThey are all as small as possible.

ÀÀº	º	º	ÂThe programs that are meant to fail will fail in the last declaration of the
program. This ensures that a deliberate error does not influence the
elaboration of other tests.

ÀÀº	º	º	ÂIn all value declarations resulting in boolean variables, the variables are
named test, test1, test2 and so forth. The programs are all constructed so
the boolean variables should elaborate to true. This way, it will be
obvious, that if a variable evaluates to false there is an error in the
compiler.

ÀÀº	º	º	ÂThe programs in the rules category list the rules in Ñ#ÂZþ6X@Â@#Ñ(* *)Ñ#%vF) P%P#Ñ that are used in
each line. This makes the programs somewhat harder to read. However,
it enables the reader to ensure for himself that the program really tests
what it is meant to test. It also makes it possible to see which programs
uses which rules.

ÀÀº	º	º	ÂAll the programs in the test suite contain a comment at the end showing
the expected output from the SML compiler. Note however, that different
SML implementations print output in different ways. This is why the
expected output is only advisory. It cannot be exact for all SML
implementations.

The test programs for the derived forms are constructed in a somewhat different
way. More than one derived form are tested in the same program. This means
that most of these programs are quite long compared to the programs in the
other three categories. In these programs all declarations resulting in non©boolean variables are hidden in local declarations. This is done to cut down on
the material needed to be examined in order to see if the compiler does it right.
As usual all the boolean variables should evaluate to true. Furthermore, in the
last declaration of the programs in this category a variable named alltrue should
evaluate to true if all the other boolean variables are true. This way, only the
variable alltrue has to be inspected to see if the compiler elaborates and
evaluates the derived forms correctly.


ÃÃ3.4 Testing rule 17ÄÄ

In this section we will describe the test programs used to test rule 17. This
description is also an example of how one can systematically construct programs
to test a given rule. These programs have not been chosen at random of course.
Rule 17 is interesting because it concerns the value binding which is
fundamental to SML. The fact that it is the most difficult rule to test also makes
it the obvious choice of rule to describe thoroughly. It is beyond the scope of this
document to describe the development of all the programs in this test suite in
such detail.

Rule 17 concerns value declarations such as:

ÃÃval pat = expÄÄ

The rule has two side conditions:

1.Áº	º	ÁVE'=ClosÃÃC,valbindÄÄVE
2.Áº	º	ÁU ÀÀ tyvars VE' = ÀPÀ

Each one of these side conditions is tested separately. The first test program
R017A©AC.ML tests valbindings in general. The next programs from ŒR017B©FL.ML to R17I©FL.ML test the closure of the variable environment VE.
The program R017J©FL.ML tests the second side condition. Finally, the program
R017K©FL.ML tests the scoping of explicit type variables. Note that in the
valbindings in the programs R017A©AC.ML and R017K©FL.ML the explicit type
variables scoped here have been listed in brackets {}.


ÃÃ3.4.1 Test of the valbindingÄÄ

R0017A©AC.ML:

Ñ#ÂZþ6X@Â@#ÑvalÃÃ{}ÄÄ x = (let valÃÃ{'a}ÄÄ Id1 : 'a -> 'a = fn z => z in Id1 Id1 end,
          Ó	ã
	Ólet valÃÃ{'a}ÄÄ Id2 : 'a -> 'a = fn z => z in Id2 Id2 end);
Ñ#%vF) P%P#Ñ
The first test program is taken directly from [page 20]. It tests the scoping of
explicit type variables. Since 'a is scoped locally at the second value declaration,
Ñ#ÂZþ6X@Â@#Ñlet val Id1: 'a ©> 'a = fn z => zÑ#%vF) P%P#Ñ, it should result in the variable environment
VE' = {Id À“À ÀzÀ'a.'a ÀÀ 'a}. For the same reason the third value declaration, Ñ#ÂZþ6X@Â@#Ñlet val
Id2 : 'a -> 'a = fn z => zÑ#%vF) P%P#Ñ, should result in the variable environment VE' = {Id
À“À ÀzÀ'b.'b ÀÀ 'b}. Hence the applications Ñ#ÂZþ6X@Â@#ÑId1 Id1Ñ#%vF) P%P#Ñ and Ñ#ÂZþ6X@Â@#ÑId2 Id2Ñ#%vF) P%P#Ñ should elaborate.


ÃÃ3.4.2 Test of closure of the variable environment VEÄÄ

The next programs test the different alternatives the SML compiler has to
contemplate when closing the variable environment in rule 17. As stated [page
21], the compiler should determine whether the expression ÃÃexpÄÄ is expansive or
non©expansive and do the closure operation accordingly. The type variables can
be either applicative or imperative and either free or not free in the context C.
This results in the following eight possibilities and test programs.


Òh
b””ˆûZÌZÔ     
b””ˆûZÌZÔ     hÒÜ"0Š					0Š					"ÜÜÜÑ#ÂZþ6X@Â@#Ñtest
programÜÜexpÜÜtype
variableÜÜtype variable
in CÜÜquantificationÜ"Š					Š					"ÜÜÜR017B©FL.MLÜÜnon©expansiveÜÜapplicativeÜÜfreeÜÜnoÜ"Š					Š					"ÜÜÜR017C©AC.MLÜÜnon©expansiveÜÜapplicativeÜÜnot freeÜÜyesÜ"Š					Š					"ÜÜÜR017D©AC.MLÜÜnon©expansiveÜÜimperativeÜÜnot freeÜÜyesÜ"Š					Š					"ÜÜÜR017E©FL.MLÜÜnon©expansiveÜÜimperativeÜÜfreeÜÜnoÜ"Š					Š					"ÜÜÜR017F©FL.MLÜÜexpansiveÜÜapplicativeÜÜfreeÜÜnoÜ"Š					Š					"ÜÜÜR017G©AC.MLÜÜexpansiveÜÜapplicativeÜÜnot freeÜÜyesÜ"Š					Š					"ÜÜÜR017H©FL.MLÜÜexpansiveÜÜimperativeÜÜnot freeÜÜnoÜ"HŠ						HŠ						"ÜÜÜR017I©FL.MLÜÜexpansiveÜÜimperativeÜÜfreeÜÜnoÑ#%vF) P%P#ÑÜÜ
R017B©FL.ML:

Ñ#ÂZþ6X@Â@#Ñval f = fn x => let
                   val y = x
                in
                   not y andalso y = 5
                end;
Ñ#%vF) P %P#Ñ
ÛML-programÛÃÃÛÛÄÄThe valbinding, Ñ#ÂZþ6X@!Â@#Ñval y = xÑ#%vF) P"%P#Ñ, is elaborated in the context C = CÃÃ0ÄÄ + {x À“À 'a} where CÃÃ0ÄÄ
is the initial context. But since 'a is free in the context it should not be quantified
in this value declaration. Therefore this value declaration should result in the
variable environment VE' = {y À“À 'a ÀÀ 'a}. Now 'a can be unified with bool in the
expression ÃÃnot y ÄÄbut not with int in the same expression as well. Thus the
compiler should fail to elaborate this program.


R017C©AC.ML:
Û!ML-program!ÛÛÛ
Ñ#ÂZþ6X@#Â@#Ñval test = let
              val f = fn z => z
           in
              (f 3 = 3) andalso f true
           end;
Ñ#%vF) P$%P#Ñ
The valbinding, Ñ#ÂZþ6X@%Â@#Ñval f = fn z => zÑ#%vF) P&%P#Ñ, is elaborated in the context CÃÃ0ÄÄ. But since no
type variables are free in the context and ÃÃexpÄÄ is non©expansive, 'a should be
quantified in this value declaration. Therefore this value declaration should
result in the variable environment VE' = {f À“À ÀzÀ'a.'a ÀÀ 'a}. Now 'a can be unified
with int in the expression ÃÃf 3 = 3 ÄÄand with bool in the expression ÃÃf trueÄÄ. 


R017D©AC.ML:

Ñ#ÂZþ6X@'Â@#Ñlet                                
   val f = fn x => ref x       
in
   f 3 ; f true
end;
Ñ#%vF) P(%P#Ñ
The valbinding, Ñ#ÂZþ6X@)Â@#Ñval f = fn x => ref xÑ#%vF) P*%P#Ñ, is elaborated in the context CÃÃ0ÄÄ. But since
no type variables are free in the context and the expression in the valbinding, Ñ#ÂZþ6X@+Â@#Ñfn
x => ref xÑ#%vF) P,%P#Ñ, is non©expansive, 'a should be quantified. Therefore the value
declaration should result in the variable environment VE' = {f À“À ÀzÀ'a.'a ÀÀ 'a ref}.
Now 'a can be unified with int in the expression ÃÃf 3 ÄÄand with bool in the
expression ÃÃf trueÄÄ. 


R017E-FL.ML:

Ñ#ÂZþ6X@-Â@#Ñval f = fn x => let
                   val y = ref x
                in
                   not(!y) andalso !y = 5 
                end;
Ñ#%vF) P.%P#Ñ
The valbinding, Ñ#ÂZþ6X@/Â@#Ñval y = ref xÑ#%vF) P0%P#Ñ, is elaborated in the context CÃÃ0ÄÄ + {x À“À 'a}. But since
the type variable for x, 'a, is free in the context 'a should not be quantified in this
value declaration. Therefore this value declaration should result in the variable
environment VE' = {y À“À 'a ref}. Now 'a can be unified with bool in the expression
ÃÃnot(!y)ÄÄ but not with int in the expression ÃÃ!y = 5ÄÄ. Thus the compiler should fail to
elaborate this program.


R017F-FL.ML:

Ñ#ÂZþ6X@1Â@#Ñfn x => let          
           val g = (fn y => x) 5 
        in
           (g = 5.5) andalso g
        end;
Ñ#%vF) P2%P#Ñ
The valbinding, Ñ#ÂZþ6X@3Â@#Ñval g = (fn y => x) 5Ñ#%vF) P4%P#Ñ, is elaborated in the context CÃÃ0ÄÄ + {x À“À 'a}.
But since the type variable for x, 'a, is free in the context C, 'a should not be
quantified in this value declaration. Therefore the value declaration should
result in the variable environment VE' = {g À“À 'a}. Now 'a can be unified with real
in the expression ÃÃg = 5.5ÄÄ but not with bool in the expression ÃÃgÄÄ. Thus the compiler
should fail to elaborate this program.


R017G-AC.ML:

Ñ#ÂZþ6X@5Â@#Ñval test = let
              val r = (fn x => (x, ref [])) (fn y => y)
           in
              let
                 val (f,y) = r
              in
                 f 3 = 3 andalso f true andalso ( y := [1]; [1] = !y)
              end
           end;
Ñ#%vF) P6%P#Ñ
The valbinding, Ñ#ÂZþ6X@7Â@#Ñval r = (fn x => (x, ref [])) (fn y => y)Ñ#%vF) P8%P#Ñ, is elaborated in the
context CÃÃ0ÄÄ. But since no type variables are free in the context C, the applicative
type variable 'a should be quantified. Therefore this value declaration should
give the variable environment VE' = {r À“À ÀzÀ'a.('a ÀÀ 'a) * 'b list ref }. Now 'a can be
unified with int in the expression ÃÃf 3 = 3ÄÄ and also with bool in the expression ÃÃf
trueÄÄ. 


R017H-FL.ML:

Ñ#ÂZþ6X@9Â@#Ñval test = let
              val r = (fn x => (x, ref [])) (fn y => y)
           in
              let
                 val (f,y) = r
              in
                 f 3 = 3
                 andalso f true
                 andalso (y := [1]; [1] = !y)
                 andalso (y := [true]; [true] = !y)
              end
           end;
Ñ#%vF) P:%P#Ñ
The valbinding, Ñ#ÂZþ6X@;Â@#Ñval r = (fn x => (x, ref [])) (fn y => y)Ñ#%vF) P<%P#Ñ, is elaborated in the
context CÃÃ0ÄÄ. But since the type of Ñ#ÂZþ6X@=Â@#Ñref []Ñ#%vF) P>%P#Ñ contains an imperative type variable 'b
and the expression is expansive 'b should not be quantified in this value
declaration. Therefore this value declaration should result in the variable
environment VE' = {r À“À ÀzÀ'a.('a ÀÀ 'a) * 'b list ref }. The program should not
elaborate since 'b can not be unified with int list in the expression ÃÃy := [1]ÄÄ and
also with bool list in the expression ÃÃy := [true]ÄÄ. Thus the compiler should fail to
elaborate this program.


R017I-FL.ML:

Ñ#ÂZþ6X@?Â@#Ñval f = fn x => let
                   val y = ref x
                in
                   y := 1 ; y := true
                end;
Ñ#%vF) P@%P#Ñ
The valbinding, Ñ#ÂZþ6X@AÂ@#Ñval y = ref xÑ#%vF) PB%P#Ñ, is elaborated in the context CÃÃ0ÄÄ + {x À“À 'a}. But since
'a is free in this context 'a should not be quantified in this value declaration.
Therefore the value declaration should result in the variable environment VE' =
{y À“À 'a ref}. The program should not elaborate since 'a cannot be unified with int
in the expression ÃÃy := 1ÄÄ and also with bool in the expression ÃÃy := trueÄÄ. Thus the
compiler should fail to elaborate this program.


R017J-FL.ML:

Ñ#ÂZþ6X@CÂ@#Ñfn x => let
           valÃÃÑ#ÂZþ6X@DÂ@#Ñ{'a}Ñ#ÂZþ6X@EÂ@#ÑÄÄ y : 'a = x
        in
           y
        end;
Ñ#%vF) PF%P#Ñ
In this program 'a is scoped at the val declaration, Ñ#ÂZþ6X@GÂ@#ÑvalÑ#ÂZþ6X@HÂ@#ÑÃÃ{'a}ÄÄÑ#ÂZþ6X@IÂ@#Ñ y : 'a = xÑ#%vF) PJ%P#Ñ. The
declaration is elaborated in the context CÃÃ0ÄÄ + {x À“À 'b}. But since the value
declaration sets y equal to x the two type variables, 'a and 'b, must also be the
same. This breaks the second side condition of rule 17 (U ÀÀ tyvars VE' = ÀPÀ). Thus
the program should not elaborate.ΪR017K-FL.ML:

Ñ#ÂZþ6X@KÂ@#ÑvalÃÃ{'a} ÄÄx = (let valÃÃ{}ÄÄ Id : 'a -> 'a = fn z => z in Id Id end,
           Ó	%	Ófn z => z : 'a);
Ñ#%vF) PL%P#Ñ
This program is taken from [page 20]. It tests the scoping of explicit type
variables. The type variable 'a is scoped at the outer value declaration. This
means that the valbinding, Ñ#ÂZþ6X@MÂ@#ÑvalÃÃ{}ÄÄ Id : 'a ©> 'a = fn z => zÑ#%vF) PN%P#Ñ, elaborates into VE =
{Id À“À 'a ÀÀ 'a}. This way Ñ#ÂZþ6X@OÂ@#ÑIdÑ#%vF) PP%P#Ñ can not occur in two different instantiations in the
expression Ñ#ÂZþ6X@QÂ@#ÑId IdÑ#%vF) PR%P#Ñ. Thus the program should not elaborate.


ÃÃÑ#»–F) PS»P#Ñ4.0 Using the test suiteÄÄÑ#%vF) PT%P#Ñ
Úyx°°dddyÚ




The testing of a compiler with this test suite can not be made automatically.
However, the work is made somewhat easier by the accessory files provided with
it. For testing compilers running under MS©DOS the following batch files are
provided:

TEST_ALL.BATÂjjjÂRuns all the test programs on the compiler and directs the
output into a subdirectory called LOGFILES.

TEST_ONE.BATÂjjjÂRuns one test program on a compiler. The user should
change the contents of this file with the name of the
compiler to be tested. Used by TEST_ALL.BAT.

SHOW_ALL.BATÂjjjÂShows all the test programs one by one with the result
from the compiler. This makes it possible to compare the
actual results with the expected results to see if the
compiler has elaborated and evaluated the programs
correctly.

SHOW_ONE.BATÂjjjÂUsed by SHOW_ALL.BAT to show one test program along
with the output from the compiler.

For testing compilers running under UNIX the script TEST_ALL.S is provided.
The command:

sh TEST_ALL.S > compiler.log

runs the compiler with all the test programs and stores all the output into the
file compiler.log. 

Please note that ÃÃit is very important that the output from the compiler is carefully
examinedÄÄ. It should be checked that the output from the compiler matches the
expected results. This does not mean that the compiler should give the same
results syntactically but semantically. The test results from the failing programs
should be examined closely to see if an error message really is a result of a
deliberate error in a program.

ÃÃÑ#»–F) PU»P#Ñ5.0 ConclusionÄÄÑ#%vF) PV%P#Ñ
Úyx°°dddyÚ




As stated in the introduction it is not possible to prove that a Standard ML
implementation, or any other program for that matter, works as intended to do
by using it on test data. For example, one cannot ensure that a every new
datatype in a SML program is really assigned a new internal type in the SML
implementation (rule 29). Also, one cannot test the internal interpretation of a
SML program. This is why, for example, it is not possible to ensure that derived
forms are interpreted correctly. One can create a number of test programs
containing derived forms and examine if they behave as expected. But one
cannot really check that the derived forms are interpreted correctly internally in
the SML implementation. Even though the compiler handles the examples
correctly one will never know if the compiler will handle all other instances of
the derived forms correctly as well.

So is the approach used in this project appropriate, e.g. is systematical testing
based on the rules from the Definition the best way to test a SML
implementation? We think so for the following reasons: 

ÀÀº	º	º	ÂSML is very precisely mathematically defined which in itself makes it
possible to use a systematic approach.

ÀÀº	º	º	Âby systematically testing rule by rule chances are that one gets to test
things that might otherwise not be thought of.

ÀÀº	º	º	Âby testing one thing at a time in separate programs one ensures that a
failure to elaborate or evaluate a declaration is not a side effect of a
previous declaration.

ÀÀº	º	º	Âwe have found a number of errors in different SML implementations.

The question then is if we have found more errors than we would by testing at
random. We are convinced that we actually have. The arguments are the same
as above plus the fact that this test suite makes it very easy to compare expected
results with actual results. Also by constructing test programs at random
chances are that different programs might actually test the same thing. One
would have to check the Definition to see what a program actually tested. This
approach could lead to much more work.

Having said this about the systematical approach we should add, as stated
before, that intuition was also a part of the development of the programs in this
test suite, e.g. the rules in the Definition cannot be translated directly into
programs. The construction of a program for a specific rule or a side condition
sometimes required a lot of effort.ΪFinally, we would like to reemphasize that an exhaustive test is impossible using
test data. If a SML implementation elaborates (and evaluates) all programs in
this test suite correctly it may of course still contain errors.

ÃÃÑ#»–F) PW»P#ÑBibliographyÄÄÑ#%vF) PX%P#Ñ
Úyx°°dddyÚ




[1]º	º	º	ÂRobin Milner, Mads Tofte, and Robin Harper. The Definition of Standard
ML. MIT Press, 1990.

[2]º	º	º	ÂRobin Milner and Mads Tofte. Commentary on Standard ML. MIT Press,
1991.

[3]º	º	º	ÂChris Reade. Elements of functional programming. Addison©Wesley
Publishers Ltd, 1989.

[4]º	º	º	ÂRobert Harper. Introduction to Standard ML. School of Computer
Science, Carnegie Mellon University, 1990.


ÃÃÑ#»–F) PY»P#ÑA. Which rules are used in which filesÄÄÑ#%vF) PZ%P#Ñ
Úyx°°dddyÚ




The following list shows which rules are used in which files. Each of the rules 1©22, 24©52 is followed by a list of the files in which a rule is used at least once. As
it can be seen from the list, all the rules 1©22, 24©52 are used in the test suite.


ÃÃÑ#ÂZþ6X@[Â@#ÑRule   1:ÄÄ
R005A-AC.ML, R005B-FL.ML, R005C-FL.ML, R006A-AC.ML, R007A-AC.ML, R008A-AC.ML, 
R010A-AC.ML, R010B-FL.ML, R011A-AC.ML, R011B-FL.ML, R011D-FL.ML, R012A-AC.ML, 
R012B-FL.ML, R012C-FL.ML, R013A-AC.ML, R014A-AC.ML, R015A-AC.ML, R015B-FL.ML, 
R015C-FL.ML, R016A-AC.ML, R016B-AC.ML, R017B-FL.ML, R017C-AC.ML, R017E-FL.ML, 
R017F-FL.ML, R017G-AC.ML, R017I-FL.ML, R018A-AC.ML, R020A-AC.ML, R020B-FL.ML, 
R020C-FL.ML, R021A-AC.ML, R021B-FL.ML, R022A-AC.ML, R022B-AC.ML, R022C-FL.ML, 
R024A-AC.ML, R025A-AC.ML, R026A-FL.ML, R026B-FL.ML, R027A-AC.ML, R027B-AC.ML, 
R027C-FL.ML, R028A-AC.ML, R029A-AC.ML, R029B-AC.ML, R030A-AC.ML, R031A-AC.ML, 
R031B-FL.ML, R031C-FL.ML, R034A-AC.ML, R034B-AC.ML, R035A-AC.ML, R038A-AC.ML, 
R039A-AC.ML, R041A-AC.ML, R043A-AC.ML, R043B-FL.ML, R044A-AC.ML, R044B-FL.ML, 
R045A-AC.ML, R045B-FL.ML, R046A-AC.ML, R046B-FL.ML, R048A-AC.ML, R049A-AC.ML, 
R049B-FL.ML, 

ÃÃRule   2:ÄÄ
R002A-FL.ML, R005A-AC.ML, R005B-FL.ML, R005C-FL.ML, R006A-AC.ML, R006B-FL.ML, 
R006C-FL.ML, R007A-AC.ML, R008A-AC.ML, R010A-AC.ML, R010B-FL.ML, R011A-AC.ML, 
R011E-FL.ML, R013A-AC.ML, R014A-AC.ML, R015A-AC.ML, R015B-FL.ML, R015C-FL.ML, 
R016B-AC.ML, R017A-AC.ML, R017B-FL.ML, R017C-AC.ML, R017D-AC.ML, R017E-FL.ML, 
R017F-FL.ML, R017G-AC.ML, R017H-FL.ML, R017I-FL.ML, R017J-FL.ML, R017K-FL.ML, 
R018A-AC.ML, R019A-AC.ML, R019B-AC.ML, R019C-FL.ML, R019D-AC.ML, R020A-AC.ML, 
R020B-FL.ML, R020C-FL.ML, R020D-AC.ML, R022A-AC.ML, R022B-AC.ML, R022C-FL.ML, 
R024A-AC.ML, R025A-AC.ML, R026B-FL.ML, R027A-AC.ML, R027B-AC.ML, R027C-FL.ML, 
R027D-FL.ML, R028A-AC.ML, R028B-AC.ML, R028C-AC.ML, R029C-FL.ML, R031A-AC.ML, 
R034A-AC.ML, R034B-AC.ML, R034C-AC.ML, R036A-AC.ML, R038A-AC.ML, R039A-AC.ML, 
R041A-AC.ML, R043A-AC.ML, R043B-FL.ML, R044A-AC.ML, R044B-FL.ML, R045A-AC.ML, 
R045B-FL.ML, R046A-AC.ML, R046B-FL.ML, R050A-AC.ML, R050B-FL.ML, R052A-AC.ML, 

ÃÃRule   3:ÄÄ
R003A-FL.ML, R005A-AC.ML, R005B-FL.ML, R006A-AC.ML, R006B-FL.ML, R006C-FL.ML, 
R008A-AC.ML, R010A-AC.ML, R011A-AC.ML, R011B-FL.ML, R011C-FL.ML, R013A-AC.ML, 
R017C-AC.ML, R017D-AC.ML, R017E-FL.ML, R017G-AC.ML, R017H-FL.ML, R017I-FL.ML, 
R019A-AC.ML, R019B-AC.ML, R019C-FL.ML, R019D-AC.ML, R020A-AC.ML, R020B-FL.ML, 
R020C-FL.ML, R020D-AC.ML, R022A-AC.ML, R022B-AC.ML, R025B-FL.ML, R027D-FL.ML, 
R028B-AC.ML, R029A-AC.ML, R029B-AC.ML, R029C-FL.ML, R029D-FL.ML, R030A-AC.ML, 
R031A-AC.ML, R031B-FL.ML, R031C-FL.ML, R034A-AC.ML, R034C-AC.ML, R035A-AC.ML, 
R036A-AC.ML, R038A-AC.ML, R041A-AC.ML, R043A-AC.ML, R043B-FL.ML, R044A-AC.ML, 
R044B-FL.ML, R045A-AC.ML, R045B-FL.ML, R046A-AC.ML, R046B-FL.ML, R048A-AC.ML, 
R049A-AC.ML, R049B-FL.ML, R050A-AC.ML, R052A-AC.ML, R100A-FL.ML, 

ÃÃRule   4:ÄÄ
R013A-AC.ML, R013B-FL.ML, R021A-AC.ML, R044A-AC.ML, 

ÃÃRule   5:ÄÄ
R005A-AC.ML, R005B-FL.ML, R005C-FL.ML, R006B-FL.ML, R006C-FL.ML, R007A-AC.ML, 
R008A-AC.ML, R010A-AC.ML, R010B-FL.ML, R011A-AC.ML, R011B-FL.ML, R013A-AC.ML, 
R015B-FL.ML, R017A-AC.ML, R017B-FL.ML, R017C-AC.ML, R017E-FL.ML, R017F-FL.ML, 
R017G-AC.ML, R017H-FL.ML, R017I-FL.ML, R017K-FL.ML, R018A-AC.ML, R019A-AC.ML, 
R019B-AC.ML, R019C-FL.ML, R019D-AC.ML, R020A-AC.ML, R020B-FL.ML, R020C-FL.ML, 
R020D-AC.ML, R022A-AC.ML, R022B-AC.ML, R022C-FL.ML, R025A-AC.ML, R027A-AC.ML, 
R027B-AC.ML, R027C-FL.ML, R027D-FL.ML, R028A-AC.ML, R029A-AC.ML, R029B-AC.ML, 
R029C-FL.ML, R030A-AC.ML, R034A-AC.ML, R034B-AC.ML, R034C-AC.ML, R035A-AC.ML, 
R038A-AC.ML, R039A-AC.ML, R041A-AC.ML, R043A-AC.ML, R043B-FL.ML, R044A-AC.ML, 
R044B-FL.ML, R045A-AC.ML, R045B-FL.ML, R046A-AC.ML, R046B-FL.ML, R048A-AC.ML, 
R049A-AC.ML, R049B-FL.ML, R050A-AC.ML, R050B-FL.ML, R052A-AC.ML, 

ÃÃRule   6:ÄÄ
R006A-AC.ML, R006B-FL.ML, R006C-FL.ML, R010B-FL.ML, R017A-AC.ML, R017B-FL.ML, 
R017C-AC.ML, R017D-AC.ML, R017E-FL.ML, R017F-FL.ML, R017G-AC.ML, R017H-FL.ML, 
R017I-FL.ML, R017J-FL.ML, R019B-AC.ML, R019C-FL.ML, R019D-AC.ML, R024A-AC.ML, 
R025B-FL.ML, R029B-AC.ML, R031B-FL.ML, R031C-FL.ML, 

ÃÃRule   7:ÄÄ
R005A-AC.ML, R005B-FL.ML, R005C-FL.ML, R007A-AC.ML, R008A-AC.ML, R010B-FL.ML, 
R011A-AC.ML, R011E-FL.ML, R013A-AC.ML, R014A-AC.ML, R017C-AC.ML, R017F-FL.ML, 
R017G-AC.ML, R017H-FL.ML, R019A-AC.ML, R020A-AC.ML, R020B-FL.ML, R020C-FL.ML, 
R025A-AC.ML, R027A-AC.ML, R027B-AC.ML, R027C-FL.ML, R031A-AC.ML, R031B-FL.ML, 

ÃÃRule   8:ÄÄ
R005A-AC.ML, R005B-FL.ML, R005C-FL.ML, R006B-FL.ML, R006C-FL.ML, R007A-AC.ML, 
R008A-AC.ML, R010A-AC.ML, R010B-FL.ML, R011A-AC.ML, R011B-FL.ML, R013A-AC.ML, 
R015B-FL.ML, R017A-AC.ML, R017B-FL.ML, R017C-AC.ML, R017E-FL.ML, R017F-FL.ML, 
R017G-AC.ML, R017H-FL.ML, R017I-FL.ML, R017K-FL.ML, R018A-AC.ML, R019A-AC.ML, 
R019B-AC.ML, R019C-FL.ML, R019D-AC.ML, R020A-AC.ML, R020B-FL.ML, R020C-FL.ML, 
R020D-AC.ML, R022A-AC.ML, R022B-AC.ML, R022C-FL.ML, R025A-AC.ML, R027A-AC.ML, 
R027B-AC.ML, R027C-FL.ML, R027D-FL.ML, R028A-AC.ML, R029A-AC.ML, R029B-AC.ML, 
R029C-FL.ML, R030A-AC.ML, R034A-AC.ML, R034B-AC.ML, R034C-AC.ML, R035A-AC.ML, 
R038A-AC.ML, R039A-AC.ML, R041A-AC.ML, R043A-AC.ML, R043B-FL.ML, R044A-AC.ML, 
R044B-FL.ML, R045A-AC.ML, R045B-FL.ML, R046A-AC.ML, R046B-FL.ML, R048A-AC.ML, 
R049A-AC.ML, R049B-FL.ML, R050A-AC.ML, R050B-FL.ML, R052A-AC.ML, 

ÃÃRule   9:ÄÄ
R002A-FL.ML, R003A-FL.ML, R005A-AC.ML, R005B-FL.ML, R005C-FL.ML, R006A-AC.ML, 
R006B-FL.ML, R006C-FL.ML, R007A-AC.ML, R008A-AC.ML, R010A-AC.ML, R010B-FL.ML, 
R011A-AC.ML, R011B-FL.ML, R011C-FL.ML, R011D-FL.ML, R011E-FL.ML, R012A-AC.ML, 
R012B-FL.ML, R012C-FL.ML, R013A-AC.ML, R013B-FL.ML, R014A-AC.ML, R015A-AC.ML, 
R015B-FL.ML, R015C-FL.ML, R016A-AC.ML, R016B-AC.ML, R017A-AC.ML, R017B-FL.ML, 
R017C-AC.ML, R017D-AC.ML, R017E-FL.ML, R017F-FL.ML, R017G-AC.ML, R017H-FL.ML, 
R017I-FL.ML, R017J-FL.ML, R017K-FL.ML, R018A-AC.ML, R019A-AC.ML, R019B-AC.ML, 
R019C-FL.ML, R019D-AC.ML, R020A-AC.ML, R020B-FL.ML, R020C-FL.ML, R020D-AC.ML, 
R021A-AC.ML, R021B-FL.ML, R022A-AC.ML, R022B-AC.ML, R022C-FL.ML, R024A-AC.ML, 
R025A-AC.ML, R025B-FL.ML, R026A-FL.ML, R026B-FL.ML, R027A-AC.ML, R027B-AC.ML, 
R027C-FL.ML, R027D-FL.ML, R028A-AC.ML, R028B-AC.ML, R028C-AC.ML, R029A-AC.ML, 
R029B-AC.ML, R029C-FL.ML, R029D-FL.ML, R030A-AC.ML, R031A-AC.ML, R031B-FL.ML, 
R031C-FL.ML, R034A-AC.ML, R034B-AC.ML, R034C-AC.ML, R035A-AC.ML, R036A-AC.ML, 
R038A-AC.ML, R039A-AC.ML, R041A-AC.ML, R043A-AC.ML, R043B-FL.ML, R044A-AC.ML, 
R044B-FL.ML, R045A-AC.ML, R045B-FL.ML, R046A-AC.ML, R046B-FL.ML, R048A-AC.ML, 
R049A-AC.ML, R049B-FL.ML, R050A-AC.ML, R050B-FL.ML, R052A-AC.ML, R100A-FL.ML, 

ÃÃRule  10:ÄÄ
R005A-AC.ML, R005B-FL.ML, R005C-FL.ML, R006B-FL.ML, R006C-FL.ML, R007A-AC.ML, 
R008A-AC.ML, R010A-AC.ML, R010B-FL.ML, R011A-AC.ML, R013A-AC.ML, R014A-AC.ML, 
R015B-FL.ML, R016B-AC.ML, R017A-AC.ML, R017B-FL.ML, R017C-AC.ML, R017D-AC.ML, 
R017E-FL.ML, R017F-FL.ML, R017G-AC.ML, R017H-FL.ML, R017I-FL.ML, R017K-FL.ML, 
R018A-AC.ML, R019A-AC.ML, R019B-AC.ML, R019C-FL.ML, R019D-AC.ML, R020A-AC.ML, 
R020B-FL.ML, R020C-FL.ML, R020D-AC.ML, R021A-AC.ML, R022A-AC.ML, R022B-AC.ML, 
R022C-FL.ML, R025A-AC.ML, R027A-AC.ML, R027B-AC.ML, R027C-FL.ML, R027D-FL.ML, 
R028A-AC.ML, R028B-AC.ML, R029A-AC.ML, R029B-AC.ML, R029C-FL.ML, R030A-AC.ML, 
R031A-AC.ML, R031B-FL.ML, R031C-FL.ML, R039A-AC.ML, R041A-AC.ML, R043A-AC.ML, 
R043B-FL.ML, R044A-AC.ML, R044B-FL.ML, R100A-FL.ML, 

ÃÃRule  11:ÄÄ
R011A-AC.ML, R011B-FL.ML, R011D-FL.ML, R011E-FL.ML, R014A-AC.ML, R016B-AC.ML, 
R017K-FL.ML, R020A-AC.ML, R025B-FL.ML, R048A-AC.ML, R049A-AC.ML, R049B-FL.ML, 

ÃÃRule  12:ÄÄ
R012A-AC.ML, R012B-FL.ML, R012C-FL.ML, R013A-AC.ML, R031A-AC.ML, R031B-FL.ML, 

ÃÃRule  13:ÄÄ
R013A-AC.ML, R013B-FL.ML, R031A-AC.ML, R031B-FL.ML, 

ÃÃRule  14:ÄÄ
R008A-AC.ML, R011E-FL.ML, R014A-AC.ML, R015A-AC.ML, R015B-FL.ML, R015C-FL.ML, 
R016A-AC.ML, R016B-AC.ML, R017A-AC.ML, R017B-FL.ML, R017C-AC.ML, R017D-AC.ML, 
R017E-FL.ML, R017F-FL.ML, R017G-AC.ML, R017H-FL.ML, R017I-FL.ML, R017J-FL.ML, 
R017K-FL.ML, R020A-AC.ML, R020B-FL.ML, R020C-FL.ML, R022A-AC.ML, R022B-AC.ML, 
R022C-FL.ML, R027A-AC.ML, R027B-AC.ML, R027C-FL.ML, R027D-FL.ML, R028B-AC.ML, 
R034C-AC.ML, R036A-AC.ML, R050A-AC.ML, R050B-FL.ML, R052A-AC.ML, 

ÃÃRule  15:ÄÄ
R008A-AC.ML, R011E-FL.ML, R012A-AC.ML, R012B-FL.ML, R012C-FL.ML, R013A-AC.ML, 
R014A-AC.ML, R015A-AC.ML, R015B-FL.ML, R015C-FL.ML, R016A-AC.ML, R016B-AC.ML, 
R017A-AC.ML, R017B-FL.ML, R017C-AC.ML, R017D-AC.ML, R017E-FL.ML, R017F-FL.ML, 
R017G-AC.ML, R017H-FL.ML, R017I-FL.ML, R017J-FL.ML, R017K-FL.ML, R020A-AC.ML, 
R020B-FL.ML, R020C-FL.ML, R022A-AC.ML, R022B-AC.ML, R022C-FL.ML, R027A-AC.ML, 
R027B-AC.ML, R027C-FL.ML, R027D-FL.ML, R028B-AC.ML, R031A-AC.ML, R031B-FL.ML, 
R034C-AC.ML, R036A-AC.ML, R050A-AC.ML, R050B-FL.ML, R052A-AC.ML, 

ÃÃRule  16:ÄÄ
R008A-AC.ML, R011E-FL.ML, R012A-AC.ML, R012B-FL.ML, R012C-FL.ML, R013A-AC.ML, 
R014A-AC.ML, R015A-AC.ML, R015B-FL.ML, R015C-FL.ML, R016A-AC.ML, R016B-AC.ML, 
R017A-AC.ML, R017B-FL.ML, R017C-AC.ML, R017D-AC.ML, R017E-FL.ML, R017F-FL.ML, 
R017G-AC.ML, R017H-FL.ML, R017I-FL.ML, R017J-FL.ML, R017K-FL.ML, R020A-AC.ML, 
R020B-FL.ML, R020C-FL.ML, R022A-AC.ML, R022B-AC.ML, R022C-FL.ML, R027A-AC.ML, 
R027B-AC.ML, R027C-FL.ML, R027D-FL.ML, R028B-AC.ML, R031A-AC.ML, R031B-FL.ML, 
R034C-AC.ML, R036A-AC.ML, R050A-AC.ML, R050B-FL.ML, R052A-AC.ML, 

ÃÃRule  17:ÄÄ
R002A-FL.ML, R003A-FL.ML, R005A-AC.ML, R005B-FL.ML, R005C-FL.ML, R006A-AC.ML, 
R006B-FL.ML, R006C-FL.ML, R007A-AC.ML, R008A-AC.ML, R010A-AC.ML, R010B-FL.ML, 
R011A-AC.ML, R011B-FL.ML, R011C-FL.ML, R011D-FL.ML, R011E-FL.ML, R012A-AC.ML, 
R012B-FL.ML, R012C-FL.ML, R013A-AC.ML, R013B-FL.ML, R014A-AC.ML, R015A-AC.ML, 
R015B-FL.ML, R015C-FL.ML, R016A-AC.ML, R016B-AC.ML, R017A-AC.ML, R017B-FL.ML, 
R017C-AC.ML, R017D-AC.ML, R017E-FL.ML, R017F-FL.ML, R017G-AC.ML, R017H-FL.ML, 
R017I-FL.ML, R017J-FL.ML, R017K-FL.ML, R018A-AC.ML, R019A-AC.ML, R019B-AC.ML, 
R019C-FL.ML, R019D-AC.ML, R020A-AC.ML, R020B-FL.ML, R020C-FL.ML, R020D-AC.ML, 
R021A-AC.ML, R021B-FL.ML, R022A-AC.ML, R022B-AC.ML, R022C-FL.ML, R024A-AC.ML, 
R025A-AC.ML, R025B-FL.ML, R026A-FL.ML, R026B-FL.ML, R027A-AC.ML, R027B-AC.ML, 
R027C-FL.ML, R027D-FL.ML, R028A-AC.ML, R028B-AC.ML, R028C-AC.ML, R029A-AC.ML, 
R029B-AC.ML, R029C-FL.ML, R029D-FL.ML, R030A-AC.ML, R031A-AC.ML, R031B-FL.ML, 
R031C-FL.ML, R034A-AC.ML, R034B-AC.ML, R034C-AC.ML, R035A-AC.ML, R036A-AC.ML, 
R038A-AC.ML, R039A-AC.ML, R041A-AC.ML, R043A-AC.ML, R043B-FL.ML, R044A-AC.ML, 
R044B-FL.ML, R045A-AC.ML, R045B-FL.ML, R046A-AC.ML, R046B-FL.ML, R048A-AC.ML, 
R049A-AC.ML, R049B-FL.ML, R050A-AC.ML, R050B-FL.ML, R052A-AC.ML, R100A-FL.ML, 

ÃÃRule  18:ÄÄ
R018A-AC.ML, R028A-AC.ML, R028B-AC.ML, R028C-AC.ML, R028D-FL.ML, R029A-AC.ML, 
R048A-AC.ML, R049A-AC.ML, R049B-FL.ML, R050A-AC.ML, R050B-FL.ML, R052A-AC.ML, 

ÃÃRule  19:ÄÄ
R006C-FL.ML, R012C-FL.ML, R013B-FL.ML, R019A-AC.ML, R019B-AC.ML, R019C-FL.ML, 
R019D-AC.ML, R025B-FL.ML, R029A-AC.ML, R029B-AC.ML, R029C-FL.ML, R029D-FL.ML, 
R029E-AC.ML, R030A-AC.ML, R041A-AC.ML, R043A-AC.ML, R043B-FL.ML, 

ÃÃRule  20:ÄÄ
R020A-AC.ML, R020B-FL.ML, R020C-FL.ML, R020D-AC.ML, 

ÃÃRule  21:ÄÄ
R012A-AC.ML, R012B-FL.ML, R013A-AC.ML, R021A-AC.ML, R021B-FL.ML, R031A-AC.ML, 
R031B-FL.ML, R031C-FL.ML, R032A-AC.ML, R041A-AC.ML, R044A-AC.ML, R044B-FL.ML, 
R052A-AC.ML, 

ÃÃRule  22:ÄÄ
R022A-AC.ML, R022B-AC.ML, R022C-FL.ML, R024A-AC.ML, 

ÃÃRule  24:ÄÄ
R017D-AC.ML, R017I-FL.ML, R024A-AC.ML, 

ÃÃRule  25:ÄÄ
R017D-AC.ML, R017G-AC.ML, R017I-FL.ML, R024A-AC.ML, R025B-FL.ML, Œ™ÃÃRule  26:ÄÄ
R002A-FL.ML, R003A-FL.ML, R005A-AC.ML, R005B-FL.ML, R005C-FL.ML, R006A-AC.ML, 
R006B-FL.ML, R006C-FL.ML, R007A-AC.ML, R008A-AC.ML, R010A-AC.ML, R010B-FL.ML, 
R011A-AC.ML, R011B-FL.ML, R011C-FL.ML, R011D-FL.ML, R011E-FL.ML, R012A-AC.ML, 
R012B-FL.ML, R012C-FL.ML, R013A-AC.ML, R013B-FL.ML, R014A-AC.ML, R015A-AC.ML, 
R015B-FL.ML, R015C-FL.ML, R016A-AC.ML, R016B-AC.ML, R017A-AC.ML, R017B-FL.ML, 
R017C-AC.ML, R017D-AC.ML, R017E-FL.ML, R017F-FL.ML, R017G-AC.ML, R017H-FL.ML, 
R017I-FL.ML, R017J-FL.ML, R017K-FL.ML, R018A-AC.ML, R019A-AC.ML, R019B-AC.ML, 
R019C-FL.ML, R019D-AC.ML, R020A-AC.ML, R020B-FL.ML, R020C-FL.ML, R020D-AC.ML, 
R021A-AC.ML, R021B-FL.ML, R022A-AC.ML, R022B-AC.ML, R022C-FL.ML, R024A-AC.ML, 
R025A-AC.ML, R025B-FL.ML, R026A-FL.ML, R026B-FL.ML, R027A-AC.ML, R027B-AC.ML, 
R027C-FL.ML, R028A-AC.ML, R028B-AC.ML, R028C-AC.ML, R029A-AC.ML, R029B-AC.ML, 
R029C-FL.ML, R029D-FL.ML, R030A-AC.ML, R031A-AC.ML, R031B-FL.ML, R031C-FL.ML, 
R034A-AC.ML, R034B-AC.ML, R034C-AC.ML, R035A-AC.ML, R036A-AC.ML, R038A-AC.ML, 
R039A-AC.ML, R041A-AC.ML, R043A-AC.ML, R043B-FL.ML, R044A-AC.ML, R044B-FL.ML, 
R045A-AC.ML, R045B-FL.ML, R046A-AC.ML, R046B-FL.ML, R048A-AC.ML, R049A-AC.ML, 
R049B-FL.ML, R050A-AC.ML, R050B-FL.ML, R052A-AC.ML, R100A-FL.ML, 

ÃÃRule  27:ÄÄ
R020A-AC.ML, R020B-FL.ML, R020C-FL.ML, R027A-AC.ML, R027D-FL.ML, 

ÃÃRule  28:ÄÄ
R018A-AC.ML, R028A-AC.ML, R028B-AC.ML, R028C-AC.ML, R028D-FL.ML, R029A-AC.ML, 
R048A-AC.ML, R049A-AC.ML, R049B-FL.ML, R050B-FL.ML, R052A-AC.ML, 

ÃÃRule  29:ÄÄ
R006C-FL.ML, R012C-FL.ML, R013B-FL.ML, R019A-AC.ML, R019B-AC.ML, R019C-FL.ML, 
R019D-AC.ML, R020A-AC.ML, R020B-FL.ML, R020C-FL.ML, R020D-AC.ML, R025B-FL.ML, 
R029A-AC.ML, R029B-AC.ML, R029C-FL.ML, R029D-FL.ML, R029E-AC.ML, R030A-AC.ML, 
R041A-AC.ML, R043A-AC.ML, R043B-FL.ML, 

ÃÃRule  30:ÄÄ
R006C-FL.ML, R012C-FL.ML, R013B-FL.ML, R019A-AC.ML, R019B-AC.ML, R019C-FL.ML, 
R019D-AC.ML, R020A-AC.ML, R020B-FL.ML, R020C-FL.ML, R020D-AC.ML, R029A-AC.ML, 
R029B-AC.ML, R029C-FL.ML, R029D-FL.ML, R029E-AC.ML, R030A-AC.ML, R041A-AC.ML, 
R043A-AC.ML, R043B-FL.ML, 

ÃÃRule  31:ÄÄ
R012A-AC.ML, R012B-FL.ML, R013A-AC.ML, R021A-AC.ML, R021B-FL.ML, R031A-AC.ML, 
R031B-FL.ML, R031C-FL.ML, R032A-AC.ML, R041A-AC.ML, R044A-AC.ML, R044B-FL.ML, 
R052A-AC.ML, 

ÃÃRule  32:ÄÄ
R032A-AC.ML, 

ÃÃRule  33:ÄÄ
R036A-AC.ML, R043A-AC.ML, R043B-FL.ML, 

ÃÃRule  34:ÄÄ
R027A-AC.ML, R027B-AC.ML, R027C-FL.ML, R031A-AC.ML, R031B-FL.ML, R034B-AC.ML, 

ÃÃRule  35:ÄÄ
R002A-FL.ML, R003A-FL.ML, R005A-AC.ML, R005B-FL.ML, R005C-FL.ML, R006A-AC.ML, 
R006B-FL.ML, R006C-FL.ML, R007A-AC.ML, R008A-AC.ML, R010A-AC.ML, R010B-FL.ML, 
R011A-AC.ML, R011B-FL.ML, R011C-FL.ML, R011D-FL.ML, R011E-FL.ML, R012A-AC.ML, 
R012B-FL.ML, R012C-FL.ML, R013A-AC.ML, R013B-FL.ML, R014A-AC.ML, R015A-AC.ML, 
R015B-FL.ML, R015C-FL.ML, R016A-AC.ML, R016B-AC.ML, R017A-AC.ML, R017B-FL.ML, 
R017C-AC.ML, R017D-AC.ML, R017E-FL.ML, R017F-FL.ML, R017G-AC.ML, R017H-FL.ML, 
R017I-FL.ML, R017J-FL.ML, R017K-FL.ML, R018A-AC.ML, R019A-AC.ML, R019B-AC.ML, 
R019C-FL.ML, R019D-AC.ML, R020A-AC.ML, R020B-FL.ML, R020C-FL.ML, R020D-AC.ML, 
R021A-AC.ML, R022A-AC.ML, R022B-AC.ML, R022C-FL.ML, R024A-AC.ML, R025A-AC.ML, 
R025B-FL.ML, R026B-FL.ML, R027A-AC.ML, R027B-AC.ML, R027C-FL.ML, R027D-FL.ML, 
R028A-AC.ML, R028B-AC.ML, R028C-AC.ML, R028D-FL.ML, R029A-AC.ML, R029B-AC.ML, 
R029C-FL.ML, R029D-FL.ML, R030A-AC.ML, R031A-AC.ML, R031B-FL.ML, R031C-FL.ML, 
R034A-AC.ML, R034B-AC.ML, R034C-AC.ML, R035A-AC.ML, R036A-AC.ML, R038A-AC.ML, 
R039A-AC.ML, R041A-AC.ML, R043A-AC.ML, R043B-FL.ML, R044A-AC.ML, R044B-FL.ML, 
R045A-AC.ML, R045B-FL.ML, R046A-AC.ML, R046B-FL.ML, R048A-AC.ML, R049A-AC.ML, 
R049B-FL.ML, R050A-AC.ML, R050B-FL.ML, R052A-AC.ML, R100A-FL.ML, 
ŒÃÃRule  36:ÄÄ
R015A-AC.ML, R015C-FL.ML, R016A-AC.ML, R027D-FL.ML, R031A-AC.ML, R034A-AC.ML, 
R034C-AC.ML, R036A-AC.ML, R044B-FL.ML, 

ÃÃRule  37:ÄÄ
R012A-AC.ML, R012B-FL.ML, R012C-FL.ML, R013A-AC.ML, R021B-FL.ML, 

ÃÃRule  38:ÄÄ
R008A-AC.ML, R017G-AC.ML, R017H-FL.ML, R020A-AC.ML, R020B-FL.ML, R020C-FL.ML, 
R027D-FL.ML, R031A-AC.ML, R034A-AC.ML, R034B-AC.ML, R034C-AC.ML, R036A-AC.ML, 
R038A-AC.ML, R041A-AC.ML, R043A-AC.ML, R043B-FL.ML, R044A-AC.ML, R044B-FL.ML, 
R045A-AC.ML, R045B-FL.ML, R046A-AC.ML, R046B-FL.ML, 

ÃÃRule  39:ÄÄ
R020A-AC.ML, R020B-FL.ML, R020C-FL.ML, R027D-FL.ML, R039A-AC.ML, 

ÃÃRule  40:ÄÄ
R008A-AC.ML, R038A-AC.ML, R041A-AC.ML, R044B-FL.ML, R045A-AC.ML, R045B-FL.ML, 

ÃÃRule  41:ÄÄ
R008A-AC.ML, R017G-AC.ML, R017H-FL.ML, R020A-AC.ML, R020B-FL.ML, R020C-FL.ML, 
R027D-FL.ML, R031A-AC.ML, R034A-AC.ML, R034B-AC.ML, R034C-AC.ML, R036A-AC.ML, 
R038A-AC.ML, R041A-AC.ML, R043A-AC.ML, R043B-FL.ML, R044A-AC.ML, R044B-FL.ML, 
R045A-AC.ML, R045B-FL.ML, R046A-AC.ML, R046B-FL.ML, 

ÃÃRule  42:ÄÄ
R002A-FL.ML, R003A-FL.ML, R005A-AC.ML, R005B-FL.ML, R005C-FL.ML, R006A-AC.ML, 
R006B-FL.ML, R006C-FL.ML, R007A-AC.ML, R008A-AC.ML, R010A-AC.ML, R010B-FL.ML, 
R011A-AC.ML, R011B-FL.ML, R011C-FL.ML, R011D-FL.ML, R011E-FL.ML, R012A-AC.ML, 
R012B-FL.ML, R012C-FL.ML, R013A-AC.ML, R013B-FL.ML, R014A-AC.ML, R015A-AC.ML, 
R015B-FL.ML, R015C-FL.ML, R016A-AC.ML, R016B-AC.ML, R017A-AC.ML, R017B-FL.ML, 
R017C-AC.ML, R017D-AC.ML, R017E-FL.ML, R017F-FL.ML, R017G-AC.ML, R017H-FL.ML, 
R017I-FL.ML, R017J-FL.ML, R017K-FL.ML, R018A-AC.ML, R019A-AC.ML, R019B-AC.ML, 
R019C-FL.ML, R019D-AC.ML, R020A-AC.ML, R020B-FL.ML, R020C-FL.ML, R020D-AC.ML, 
R021A-AC.ML, R022A-AC.ML, R022B-AC.ML, R022C-FL.ML, R024A-AC.ML, R025A-AC.ML, 
R025B-FL.ML, R026B-FL.ML, R027A-AC.ML, R027B-AC.ML, R027C-FL.ML, R027D-FL.ML, 
R028A-AC.ML, R028B-AC.ML, R028C-AC.ML, R028D-FL.ML, R029A-AC.ML, R029B-AC.ML, 
R029C-FL.ML, R029D-FL.ML, R030A-AC.ML, R031A-AC.ML, R031B-FL.ML, R031C-FL.ML, 
R034A-AC.ML, R034B-AC.ML, R034C-AC.ML, R035A-AC.ML, R036A-AC.ML, R038A-AC.ML, 
R039A-AC.ML, R041A-AC.ML, R043A-AC.ML, R043B-FL.ML, R044A-AC.ML, R044B-FL.ML, 
R045A-AC.ML, R045B-FL.ML, R046A-AC.ML, R046B-FL.ML, R048A-AC.ML, R049A-AC.ML, 
R049B-FL.ML, R050A-AC.ML, R050B-FL.ML, R052A-AC.ML, R100A-FL.ML, 

ÃÃRule  43:ÄÄ
R020A-AC.ML, R020B-FL.ML, R020C-FL.ML, R027D-FL.ML, R031A-AC.ML, R031B-FL.ML, 
R036A-AC.ML, R041A-AC.ML, R043A-AC.ML, R043B-FL.ML, 

ÃÃRule  44:ÄÄ
R021B-FL.ML, R044A-AC.ML, R044B-FL.ML, 

ÃÃRule  45:ÄÄ
R002A-FL.ML, R003A-FL.ML, R011C-FL.ML, R017A-AC.ML, R017J-FL.ML, R017K-FL.ML, 
R018A-AC.ML, R026A-FL.ML, R028A-AC.ML, R028B-AC.ML, R028C-AC.ML, R029A-AC.ML, 
R029D-FL.ML, R030A-AC.ML, R031A-AC.ML, R043B-FL.ML, R045A-AC.ML, R045B-FL.ML, 
R046B-FL.ML, R050A-AC.ML, R050B-FL.ML, R052A-AC.ML, 

ÃÃRule  46:ÄÄ
R039A-AC.ML, R046A-AC.ML, R046B-FL.ML, 

ÃÃRule  47:ÄÄ
R002A-FL.ML, R003A-FL.ML, R011D-FL.ML, R011E-FL.ML, R016B-AC.ML, R017A-AC.ML, 
R017J-FL.ML, R017K-FL.ML, R028A-AC.ML, R028B-AC.ML, R029A-AC.ML, R029B-AC.ML, 
R031B-FL.ML, R031C-FL.ML, R049A-AC.ML, R049B-FL.ML, R050A-AC.ML, R050B-FL.ML, 
R052A-AC.ML, 

ÃÃRule  48:ÄÄ
R002A-FL.ML, R003A-FL.ML, R011A-AC.ML, R011B-FL.ML, R019A-AC.ML, R028A-AC.ML, 
R028B-AC.ML, R029A-AC.ML, R030A-AC.ML, R031A-AC.ML, R032A-AC.ML, R041A-AC.ML, 
R043A-AC.ML, R043B-FL.ML, R048A-AC.ML, R049A-AC.ML, R049B-FL.ML, R050A-AC.ML, 
R050B-FL.ML, 

ÃÃRule  49:ÄÄ
R002A-FL.ML, R003A-FL.ML, R011A-AC.ML, R011B-FL.ML, R011C-FL.ML, R014A-AC.ML, 
R018A-AC.ML, R019A-AC.ML, R019B-AC.ML, R019C-FL.ML, R019D-AC.ML, R020A-AC.ML, 
R020B-FL.ML, R020C-FL.ML, R020D-AC.ML, R021A-AC.ML, R021B-FL.ML, R025B-FL.ML, 
R026A-FL.ML, R028A-AC.ML, R028B-AC.ML, R028C-AC.ML, R028D-FL.ML, R029A-AC.ML, 
R029B-AC.ML, R029D-FL.ML, R029E-AC.ML, R030A-AC.ML, R031A-AC.ML, R032A-AC.ML, 
R041A-AC.ML, R043A-AC.ML, R043B-FL.ML, R044A-AC.ML, R044B-FL.ML, R045A-AC.ML, 
R045B-FL.ML, R046B-FL.ML, R048A-AC.ML, R049A-AC.ML, R049B-FL.ML, R050A-AC.ML, 
R050B-FL.ML, R052A-AC.ML, 

ÃÃRule  50:ÄÄ
R002A-FL.ML, R003A-FL.ML, R011A-AC.ML, R011E-FL.ML, R017A-AC.ML, R017K-FL.ML, 
R019C-FL.ML, R028B-AC.ML, R050A-AC.ML, R050B-FL.ML, R052A-AC.ML, 

ÃÃRule  51:ÄÄ
R011A-AC.ML, R020A-AC.ML, R020B-FL.ML, R020C-FL.ML, R050A-AC.ML, R050B-FL.ML, 

ÃÃRule  52:ÄÄ
R002A-FL.ML, R003A-FL.ML, R011A-AC.ML, R011B-FL.ML, R019A-AC.ML, R028A-AC.ML, 
R028B-AC.ML, R029A-AC.ML, R030A-AC.ML, R031A-AC.ML, R032A-AC.ML, R041A-AC.ML, 
R043A-AC.ML, R043B-FL.ML, R048A-AC.ML, R049A-AC.ML, R049B-FL.ML, 

Ñ#%vF) P\%P#Ñ
ÃÃÑ#»–F) P]»P#ÑB. Test results from four SML implementationsÄÄÑ#%vF) P^%P#Ñ
Úyx°°dddyÚ




The test suite was used on the following SML implementations

º	º	º	ÂEdinburgh Standard ML, Version 4.1.0, December 13, 1991 using
EDML3864 V044

º	º	º	ÂMicro ML of Umea, Version 0.1, September 24, 1991

º	º	º	ÂMoscow SML by Sergei Romanenko, Version 0.04b, August 1994

º	º	º	ÂMoscow SML by Sergei Romanenko, Version 1.00, August 1994

º	º	º	ÂStandard ML of New Jersey, Version 0.93, February 15, 1993

º	º	º	ÂStandard ML of New Jersey, Version 0.93, port no. 2 of May 1994, for
OS/2. 

The results of the testing of these SML implementations can be seen below. The
list of programs that were elaborated (and evaluated) with results different than
those expected contains both AC and FL programs. AC programs appear in the
list if they did not elaborate correctly. FL programs appear in the list if they did
indeed elaborate even though they should not. The same is true for the list of
programs that elaborated differently than expected causing cryptic error
messages. However, the test suite programs listed in this category elaborated
differently than expected causing a cryptic error message. An example of a
cryptic error message is:

Ñ#ÂZþ6X@_Â@#ÑCan't unify: int*bool
With:        int*bool*real

In expression: val z = (12,(true,3.3)) : int*bool*real;
Ñ#%vF) P`%P#Ñ
Implying that Ñ#ÂZþ6X@aÂ@#Ñ(true,3.3)Ñ#%vF) Pb%P#Ñ has type bool.


ÃÃEdinburgh Standard ML, Version 4.1.0, December 13, 1991ÄÄ

The following programs were elaborated differently than expected:

ÒÆbE€Ø»ö!Æ҇Ñ#ÂZþ6X@cÂ@#ÑD005A©AC.ML
D005B©FL.ML
D005C©FL.ML

M001A©AC.ML
R002A©FL.ML
R003A©FL.ML
R011C©FL.ML
R011D©FL.ML
R011E©FL.ML
R017J©FL.ML
R017K©FL.ML
R021b©FL.ML
R031C©FL.ML
R038A©AC.ML
R100A©FL.ML

S002A©FL.ML
S002B©FL.ML
S002C©FL.ML
S002F©FL.ML
Ñ#%vF) Pd%P#шÃÃMicro ML of Umea, Version 0.1, September 24, 1991ÄÄ

Note that Micro ML of Umea does not support records. All programs listed below
as failing because of the use of records are marked with an asterisk (*). When
compiling the test programs, constructors were shown in another order than
they appeared in the files. An example of a file, where the order was changed is
R029A©AC.ML.

The following programs were elaborated differently than expected:

ÒÆbE€Ø»ö!Æ҇Ñ#ÂZþ6X@eÂ@#ÑD001A©AC.ML
D002A©AC.ML
D004A©AC.ML
D005A©AC.ML
D005B©FL.ML
D005C©FL.ML

M001A©AC.ML *M001B©FL.ML *
M003A©FL.ML

R011C©FL.ML
R011D©FL.ML
R011E©FL.ML
R017D©AC.ML
R017G©AC.MLR017H©FL.ML
R017J©FL.ML
R017K©FL.ML
R019C©FL.ML
R020B©FL.ML
R024A©AC.ML
R032A©AC.ML
R034B©AC.MLR038A©AC.ML *

S002F©FL.ML
S002G©FL.ML
Ñ#%vF) Pf%P#шThe following programs were elaborated differently than expected causing
cryptic error messages:

ÒÆbE€Ø»ö!Æ҇Ñ#ÂZþ6X@gÂ@#ÑD006C©FL.ML
D006D©FL.ML
D006E©FL.ML

R002A©FL.ML
R003A©FL.ML
R005A©AC.ML *
R005B©FL.ML *R005C©FL.ML *
R008A©AC.ML *
R010B©FL.ML *
R031B©FL.ML
R031C©FL.ML
R041A©AC.ML *
R043A©AC.ML *
R043B©FL.ML *R044A©AC.ML *
R044B©FL.ML *
R045A©AC.ML *
R045B©FL.ML *
R046A©AC.ML *
R046B©FL.ML *
R048A©AC.ML *
R049A©AC.ML *R049B©FL.ML *
R052A©AC.ML *
R100A©FL.ML

S001B©FL.ML *
S001C©FL.ML *
S001D©FL.ML *
Ñ#%vF) Ph%P#ш
ÃÃMoscow SML by Sergei Romanenko, Version 0.04b, August 1994ÄÄ

The following programs failed:

Ñ#ÂZþ6X@iÂ@#ÑR027B©AC.MLÑ#%vF) Pj%P#Ñ

The following programs caused a cryptic error messages:

Ñ#ÂZþ6X@kÂ@#ÑR005C©FL.ML
R011B©FL.ML
Ñ#%vF) Pl%P#Ñ

ÃÃMoscow SML by Sergei Romanenko, Version 1.00, August 1994ÄÄ

The following program caused a cryptic error message:

Ñ#ÂZþ6X@mÂ@#ÑR011B©FL.MLÑ#%vF) Pn%P#Ñ

ÃÃStandard ML of New Jersey, Version 0.93, February 15, 1993ÄÄ

The following program was not evaluated correctly:

Ñ#ÂZþ6X@oÂ@#ÑD001A©AC.ML
Ñ#%vF) Pp%P#Ñ
In the following declaration

Ñ#ÂZþ6X@qÂ@#Ñlocal
  exception A;
  exception B = A;
in
  val test5 = 1 = (case B of A => 1 | B => 2 | _ => 3);
end;
Ñ#%vF) Pr%P#Ñ
test5 was evaluated to false. The reason is that the compiler did not match the
exception B with the exception A. This does not comply with rule 139 [page 54].
However, this rule is part of the dynamic semantics for the Core and it is not
tested thoroughly in this test suite.


ÃÃStandard ML of New Jersey, Version 0.93, port no. 2 of May 1994, OS/2ÄÄ

This compiler behaved exactly like the UNIX version of SML of New Jersey.


root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0