root/trunk/ProjectFortress/tests/asifTest.fss

Revision 4130, 4.2 KB (checked in by sukyoungryu, 3 months ago)

[disambiguator] Fixed handling getters and setters in ExprDisambiguator?. Fixed libraries and tests using getters.

Line 
1(*******************************************************************************
2    Copyright 2009 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 asifTest
19import List.{...}
20export Executable
21
22(* For still-not-working cases involving self parameters, see
23   commented-out code below, and non-commented version in
24   not_passing_yet/asifSelf.fss; also see bug #63. *)
25
26propAsif[\T extends Foo\](x:T, y:T): Boolean =
27    (x = (y asif T))
28
29trait Quux
30    passQuux(): Boolean = true
31end
32
33trait Foo extends { Quux, Equality[\Foo\] }
34    passFoo(): Boolean = true
35    passBar(): Boolean = false
36    opr =(self, x:Foo): Boolean = false
37end
38
39object Bar extends Foo
40    getter asString(): String = "Bar"
41    passFoo(): Boolean = false
42    passBar(): Boolean = true
43    passQuux(): Boolean = false
44    opr =(self, x:Bar): Boolean = true
45end
46
47object Baz extends Foo
48    getter asString(): String = "Baz"
49    passFoo(): Boolean = false
50    passQuux(): Boolean = false
51    opr =(self, x:Baz): Boolean = true
52end
53
54opr EEK(x:Foo, y:Foo): Boolean = false
55opr EEK(x:Bar, y:Bar): Boolean = true
56opr EEK(x:Baz, y:Baz): Boolean = true
57opr NEEK(x:Foo, y:Foo): Boolean = NOT (x EEK y)
58
59run():() = do
60    (* Generic non-overloaded function *)
61    x : List[\Foo\] = <| Bar asif Foo, Bar, Bar |>
62    y : List[\Foo\] = <| Baz asif Foo, Baz |>
63    (* Now appending the two ought to work. *)
64    println(x || y)
65
66    (* Top-level overloading *)
67    a : List[\RR64\] = <| 1.0 asif RR64, 2.0, 3.0, 4.0 |>
68    assert(a,<|1 asif RR64,2,3,4|>," lists ought to compare at RR64")
69
70    assert(Bar EEK Bar, true, " Bar unequal")
71    assert(Baz EEK Baz, true, " Baz unequal")
72    assert(Bar EEK Baz, false, " Bar EEK Baz")
73    assert(Baz EEK Bar, false, " Baz EEK Bar")
74    assert((Bar asif Foo) EEK Bar, false, " Foo EEK Bar")
75    assert(Bar EEK (Bar asif Foo), false, " Bar EEK Foo")
76    assert((Bar asif Foo) EEK (Bar asif Foo), false, " Foo EEK Foo")
77    assert((Bar asif Foo) NEEK (Bar asif Foo), false,
78           " Bar NEEK Bar failed to strip an asif!")
79
80    (* Functional method *)
81    assert(Bar = Bar, true, " Bar unequal")
82    assert(Baz = Baz, true, " Baz unequal")
83    assert(Bar = Baz, false, " Bar=Baz")
84    assert(Baz = Bar, false, " Baz=Bar")
85    assert(Bar = (Bar asif Foo), false, " Bar = Foo")
86    assert(Bar =/= (Bar asif Foo), false, " Bar =/= Bar failed to strip asif!")
87    assert((Bar asif Foo) = (Baz asif Foo), false, " Foo = Foo")
88    assert((Bar asif Foo) =/= Bar, false,
89           " Foo=/=Foo failed to strip an asif!")
90    assert((Bar asif Foo) = Bar, false, " Foo = Bar")
91
92    (* Dotted method *)
93    assert(Bar.passBar(), true, "NOT Bar.passBar()")
94    assert(Baz.passBar(), false, "Baz.passBar()")
95    assert(Bar.passFoo(), false, "Bar.passFoo()")
96    assert(Bar.passQuux(), false, "Bar.passQuux()")
97    assert((Bar asif Foo).passFoo(), true, "NOT Foo.passFoo()")
98    assert((Bar asif Foo).passBar(), false, "NOT Foo.passFoo()")
99    assert((Bar asif Foo).passQuux(), true, "NOT Bar.passQuux()")
100
101    (* Propagation *)
102    assert(propAsif(Bar, Bar), true, "NOT propAsif(Bar,Bar)")
103    assert(propAsif(Baz, Bar), false, "propAsif(Baz,Bar)")
104    assert(propAsif(Bar asif Foo, Bar), false, "propAsif(Foo,Bar)")
105    assert(propAsif(Bar, Bar asif Foo), false, "propAsif(Bar,Foo)")
106
107    (* Mixed generic and overloaded method, at supertype. *)
108    typecase z = (3 asif RR64) + 17 of
109        ZZ64 => println("FAIL, got ZZ64 " z)
110        RR64 => println("PASS, got RR64 " z)
111        else => println("Got unknown typed " z)
112    end
113
114    (* Comprehension
115    b : List[\Foo\] = <| Bar asif Foo | _ <- 0#3 |>
116    println(b)
117    assert(b,x," ought to compare at Foo")
118    *)
119  end
120
121end
Note: See TracBrowser for help on using the browser.