Merge: doc: fixed some typos and other misc. corrections
[nit.git] / tests / base_formal_subtype.nit
1 # This file is part of NIT ( http://www.nitlanguage.org ).
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 import end
16
17 interface Object end
18
19 enum Bool end
20
21 class A[E: Object]
22 var o: Object
23
24 var e: E
25
26 type VE: E
27 var ve: VE
28
29 type VVE: VE
30 var vve: VVE
31
32 type VGE: G[E]
33 var vge: VGE
34
35 type VVGE: VGE
36 var vvge: VVGE
37
38 type VGVE: G[VE]
39 var vgve: VGVE
40
41 type VGVVE: G[VVE]
42 var vgvve: VGVVE
43
44 fun foo
45 do
46 # In order to check type relations, this test looks for the warnings about useless cast
47 # The following should produce a warning
48 assert o isa Object
49
50 assert e isa E
51 assert e isa Object
52
53 assert ve isa VE
54 assert ve isa E
55 assert ve isa Object
56
57 assert vve isa VVE
58 assert vve isa VE
59 assert vve isa E
60 assert vve isa Object
61
62 assert vge isa VGE
63 assert vge isa G[E]
64 assert vge isa G[Object]
65 assert vge isa Object
66
67 assert vvge isa VVGE
68 assert vvge isa VGE
69 assert vvge isa G[E]
70 assert vvge isa G[Object]
71 assert vvge isa Object
72
73 assert vgve isa VGVE
74 assert vgve isa G[VE]
75 assert vgve isa G[E]
76 assert vgve isa G[Object]
77 assert vgve isa Object
78
79 assert vgvve isa VGVVE
80 assert vgvve isa G[VVE]
81 assert vgvve isa G[VE]
82 assert vgvve isa G[E]
83 assert vgvve isa G[Object]
84 assert vgvve isa Object
85
86 # The following should not
87 assert o isa VGVVE
88 assert o isa G[VVE]
89 assert o isa VVGE
90 assert o isa VGVE
91 assert o isa G[VE]
92 assert o isa VGE
93 assert o isa G[E]
94 assert o isa G[Object]
95 assert o isa VVE
96 assert o isa VE
97 assert o isa E
98
99 assert e isa VGVVE
100 assert e isa G[VVE]
101 assert e isa VVGE
102 assert e isa VGVE
103 assert e isa G[VE]
104 assert e isa VGE
105 assert e isa G[E]
106 assert e isa G[Object]
107 assert e isa VVE
108 assert e isa VE
109
110 assert ve isa VGVVE
111 assert ve isa G[VVE]
112 assert ve isa VVGE
113 assert ve isa VGVE
114 assert ve isa G[VE]
115 assert ve isa VGE
116 assert ve isa G[E]
117 assert ve isa G[Object]
118 assert ve isa VVE
119
120 assert vve isa VGVVE
121 assert vve isa G[VVE]
122 assert vve isa VVGE
123 assert vve isa VGVE
124 assert vve isa G[VE]
125 assert vve isa VGE
126 assert vve isa G[E]
127 assert vve isa G[Object]
128
129 assert vge isa VGVVE
130 assert vge isa G[VVE]
131 assert vge isa VVGE
132 assert vge isa VGVE
133 assert vge isa G[VE]
134 assert vge isa VVE
135 assert vge isa VE
136 assert vge isa E
137
138 assert vvge isa VGVVE
139 assert vvge isa G[VVE]
140 assert vvge isa VGVE
141 assert vvge isa G[VE]
142 assert vvge isa VVE
143 assert vvge isa VE
144 assert vvge isa E
145
146 assert vgve isa VGVVE
147 assert vgve isa G[VVE]
148 assert vgve isa VGE
149 assert vgve isa VVGE
150 assert vgve isa VVE
151 assert vgve isa VE
152 assert vgve isa E
153
154 assert vgvve isa VGE
155 assert vgvve isa VVGE
156 assert vgvve isa VGVE
157 assert vgvve isa VVE
158 assert vgvve isa VE
159 assert vgvve isa E
160 end
161 end
162
163 class G[E]
164 end