--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2009 Jean Privat <jean@pryen.org>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import end
+
+class Object
+ meth ==(o: nullable Object): Bool do return self is o
+ meth !=(o: nullable Object): Bool do return not (self == o)
+ meth output is intern
+end
+
+class Bool
+ redef meth output is intern
+end
+
+class A
+end
+
+var a = new A
+var b: nullable A = new A
+
+(a == a).output
+(not a == b).output
+(not a == null).output
+(not b == a).output
+(b == b).output
+(not b == null).output
+
+(not a != a).output
+(a != b).output
+(a != null).output
+(b != a).output
+(not b != b).output
+(b != null).output
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2009 Jean Privat <jean@pryen.org>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import kernel
+
+class A
+ attr _i: Int
+ init (i: Int) do _i = i
+ redef meth output do _i.output
+end
+
+var a: A
+var na: nullable A
+var o: Object
+var no: nullable Object
+
+var a: A = new A(1)
+var na: nullable A = new A(2)
+var o: Object = new A(3)
+var no: nullable Object = new A(4)
+
+var a1: A = a
+#alt1#var a2: A = na
+#alt2#var a3: A = o
+#alt3#var a4: A = no
+var na1: nullable A = na
+var na2: nullable A = a
+#alt4#var na3: nullable A = o
+#alt5#var na4: nullable A = no
+var o1: Object = a
+#alt6#var o2: Object = na
+var o3: Object = o
+#alt7#var o4: Object = no
+var no1: nullable Object = a
+var no2: nullable Object = na
+var no3: nullable Object = o
+var no4: nullable Object = no
+#alt8# var na5: nullable A = new nullable A(4)
+
+#alt9#var a6: A = null
+var na6: nullable A = null
+#alt10#var o6: Object = null
+var no6: nullable Object = null
+