root/trunk/ProjectFortress/tests/RangeTest.fss @ 2739

Revision 2739, 4.7 KB (checked in by black, 15 months ago)

Next iteration of CordedStrings?, with substring nodes. Comparison of Strings with substring nodes is a work in progress. This commit fixes bugs in the Range comparison code that were impeding that progress

Line 
1(*******************************************************************************
2    Copyright 2008 Sun Microsystems, Inc.,
3    4150 Network Circle, Santa Clara, California 95054, U.S.A.
4    All rights reserved.
5
6    U.S. Government Rights - Commercial software.
7    Government users are subject to the Sun Microsystems, Inc. standard
8    license agreement and applicable provisions of the FAR and its supplements.
9
10    Use is subject to license terms.
11
12    This distribution may include materials developed by third parties.
13
14    Sun, Sun Microsystems, the Sun logo and Java are trademarks or registered
15    trademarks of Sun Microsystems, Inc. in the U.S. and other countries.
16 ******************************************************************************)
17
18component RangeTest
19import List.{...}
20export Executable
21
22chkOrder[\T\](a:Range[\T\], b:Range[\T\], expect: Comparison): () = do
23    assert(a CMP b, expect, "Comparing ", a, " and ", b)
24    assert(b CMP a, INVERSE expect, "InvComp ", a, " and ", b)
25    typecase expect of
26        LessThan =>
27            assert(a < b, "Not <")
28            assert(a <= b, "Not <=")
29            assert(NOT (a > b), ">")
30            assert(NOT (a >= b), ">=")
31            assert(NOT (a = b), "< =")
32            assert(b > a, "< Not >")
33            assert(b >= a, "< Not >=")
34            assert(NOT (b < a), "< <")
35            assert(NOT (b <= a), "< <=")
36            assert(NOT (b = a), "< ='")
37            assert(b[a],a,"< indexing")
38        EqualTo =>
39            assert(a = b, "Not =")
40            assert(a <= b, "= Not <=")
41            assert(a >= b, "= Not >=")
42            assert(NOT (a < b), "= <")
43            assert(NOT (a > b), "= >")
44            assert(b = a, "Not ='")
45            assert(b >= a, "= Not >=")
46            assert(b <= a, "= Not <=")
47            assert(NOT (b > a), "= >'")
48            assert(NOT (b < a), "= <'")
49            assert(b[a],a,"= indexing")
50        GreaterThan =>
51            assert(a > b, "Not >")
52            assert(a >= b, "Not >=")
53            assert(NOT (a < b), "<")
54            assert(NOT (a = b), "> =")
55            assert(b < a, "> Not <")
56            assert(b <= a, "> Not <=")
57            assert(NOT (b > a), "> >")
58            assert(NOT (b = a), "> ='")
59            assert(a[b],b,"> indexing")
60        Unordered =>
61            assert(NOT (a = b), "U =")
62            assert(NOT (a < b), "U <")
63            assert(NOT (a <= b), "U <=")
64            assert(NOT (a > b), "U >")
65            assert(NOT (a >= b), "U >=")
66            assert(NOT (b = a), "U ='")
67            assert(NOT (b < a), "U <'")
68            assert(NOT (b <= a), "U <='")
69            assert(NOT (b > a), "U >'")
70            assert(NOT (b >= a), "U >='")
71      end
72  end
73
74run(args:String...):() = do
75    mt : Range[\ZZ32\] = OpenRange[\ZZ32\]
76    llo : Range[\ZZ32\] = 0:
77    hlo : Range[\ZZ32\] = 5#
78    lsz : Range[\ZZ32\] = #3
79    hsz : Range[\ZZ32\] = #7
80    lhi : Range[\ZZ32\] = :4
81    hhi : Range[\ZZ32\] = :8
82    ll  : Range[\ZZ32\] = 0#4
83    lm  : Range[\ZZ32\] = 0:7
84    lh  : Range[\ZZ32\] = 0#10
85    lh' : Range[\ZZ32\] = 0:9
86    mm  : Range[\ZZ32\] = 6:7
87    mh  : Range[\ZZ32\] = 6:10
88    hh  : Range[\ZZ32\] = 8:10
89    chkOrder(mt,mt,EqualTo)
90    for i <- <|llo, hlo, lsz, hsz, lhi, hhi, ll, lm, lh', lh, mm, mh, hh|> do
91        chkOrder(mt,i,GreaterThan)
92        chkOrder(i,i,EqualTo)
93    end
94    chkOrder(llo,hlo,GreaterThan)
95    for i <- <|lsz,hsz,lhi,hhi|> do
96        chkOrder(llo,i,Unordered)
97        chkOrder(hlo,i,Unordered)
98    end
99    for i <- <|ll,lm,lh',lh|> do
100        chkOrder(llo,i,GreaterThan)
101        chkOrder(hlo,i,Unordered)
102    end
103    for i <- <|mm,mh,hh|> do
104        chkOrder(llo,i,GreaterThan)
105        chkOrder(hlo,i,GreaterThan)
106    end
107    chkOrder(lsz,hsz,LessThan)
108    for i <- <|lhi,hhi,ll,lm,lh',lh,mm,mh,hh|> do
109        chkOrder(lsz,i,Unordered)
110        chkOrder(hsz,i,Unordered)
111    end
112    chkOrder(lhi,hhi,LessThan)
113    chkOrder(lhi,ll,GreaterThan)
114    chkOrder(hhi,ll,GreaterThan)
115    for i <- <|lm,mm|> do
116        chkOrder(lhi,i,Unordered)
117        chkOrder(hhi,i,GreaterThan)
118    end
119    for i <- <|lh,mh,hh|> do
120        chkOrder(lhi,i,Unordered)
121        chkOrder(hhi,i,Unordered)
122    end
123    chkOrder(ll,lm,LessThan)
124    chkOrder(ll,lh',LessThan)
125    chkOrder(ll,lh,LessThan)
126    chkOrder(ll,i,Unordered), i <- <|mm,mh,hh|>
127    chkOrder(lm,lh',LessThan)
128    chkOrder(lm,lh,LessThan)
129    chkOrder(lm,i,Unordered), i <- <|mh,hh|>
130    chkOrder(lh,i,Unordered), i <- <|mh,hh|>
131    chkOrder(mm,i,LessThan), i <- <|lm,lh',lh,mh|>
132    chkOrder(mm,hh,Unordered)
133    chkOrder(lh,lh',EqualTo)        (* APB 2008.08.20 Changed this from Unordered.  Also changed the code *)
134    chkOrder(lh',lh,EqualTo)        (* APB 2008.08.20 Changed this from Unordered.  Also changed the code *)
135  end
136
137end
Note: See TracBrowser for help on using the browser.