#!/usr/bin/ruby
# Equality checks for user-defined objects
class Example {
method ==(arg) {
say "#{arg.class} == #{self.class}";
true;
}
}
class Example2 < Example {
}
class Example3 {
}
var obj1 = Example();
var obj1a = Example();
var obj2 = Example2();
var obj3 = Example3();
var obj3a = Example3();
assert_eq(obj1, obj2);
assert_eq(obj1, obj1a);
assert_eq(obj2, obj1);
assert_ne(obj3, obj1);
assert_ne(obj3, obj2);
assert_ne(obj3, obj3a);
assert_eq(obj3, obj3);
Example == Example2 && die "error ==: Example == Example2";
Example == Example || die "error ==: Example != Example";
Example != Example2 || die "error !=: Example == Example2";
Example != Example && die "error !=: Example != Example";
Example == 'Example' && die "error ==: Example == 'Example'";
'Example' == Example && die "error ==: 'Example' == Example";
Example == nil && die "error ==: Example == nil";
nil == Example && die "error ==: nil == Example";
say "** Test passed!";