| 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 | |
|---|
| 18 | component RangeTest |
|---|
| 19 | import List.{...} |
|---|
| 20 | export Executable |
|---|
| 21 | |
|---|
| 22 | chkOrder[\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 | |
|---|
| 74 | run(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 | |
|---|
| 137 | end |
|---|