Add Object.same(_,_) to access built-in equality even for classes that may override ==.
Had to add a new metaclass for Object since it now has its own static method so we can't just use Class as its metaclass. (We don't want *every* class to have a same(_,_) static method.)
This commit is contained in:
@@ -5,5 +5,9 @@ IO.print(Foo.type.name) // expect: Foo metaclass
|
||||
|
||||
// Make sure the built-in classes have proper names too.
|
||||
IO.print(Object.name) // expect: Object
|
||||
IO.print(Class.name) // expect: Class
|
||||
IO.print(Bool.name) // expect: Bool
|
||||
IO.print(Class.name) // expect: Class
|
||||
|
||||
// And metaclass names.
|
||||
IO.print(Object.type.name) // expect: Object metaclass
|
||||
IO.print(Bool.type.name) // expect: Bool metaclass
|
||||
|
||||
@@ -3,7 +3,7 @@ class Foo {}
|
||||
// A class is a class.
|
||||
IO.print(Foo is Class) // expect: true
|
||||
|
||||
// It's metatype is also a class.
|
||||
// Its metatype is also a class.
|
||||
IO.print(Foo.type is Class) // expect: true
|
||||
|
||||
// The metatype's metatype is Class.
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
// Value types compare by value.
|
||||
IO.print(Object.same(true, true)) // expect: true
|
||||
IO.print(Object.same(true, false)) // expect: false
|
||||
|
||||
IO.print(Object.same(null, null)) // expect: true
|
||||
|
||||
IO.print(Object.same(1 + 2, 2 + 1)) // expect: true
|
||||
IO.print(Object.same(1 + 2, 2 + 2)) // expect: false
|
||||
|
||||
IO.print(Object.same(1..2, 1..2)) // expect: true
|
||||
IO.print(Object.same(1..2, 1..3)) // expect: false
|
||||
|
||||
IO.print(Object.same("ab", "a" + "b")) // expect: true
|
||||
IO.print(Object.same("ab", "a" + "c")) // expect: false
|
||||
|
||||
// Different types are never the same.
|
||||
IO.print(Object.same(null, false)) // expect: false
|
||||
IO.print(Object.same(true, 2)) // expect: false
|
||||
IO.print(Object.same(1..2, 2)) // expect: false
|
||||
IO.print(Object.same("1", 1)) // expect: false
|
||||
|
||||
// Classes compare by identity.
|
||||
IO.print(Object.same(Bool, Num)) // expect: false
|
||||
IO.print(Object.same(Bool, Bool)) // expect: true
|
||||
|
||||
// Other types compare by identity.
|
||||
class Foo {}
|
||||
|
||||
var foo = new Foo
|
||||
IO.print(Object.same(foo, foo)) // expect: true
|
||||
IO.print(Object.same(foo, new Foo)) // expect: false
|
||||
|
||||
// Ignores == operators.
|
||||
class Bar {
|
||||
==(other) { true }
|
||||
}
|
||||
|
||||
var bar = new Bar
|
||||
IO.print(Object.same(bar, bar)) // expect: true
|
||||
IO.print(Object.same(bar, new Bar)) // expect: false
|
||||
@@ -0,0 +1,13 @@
|
||||
class Foo {}
|
||||
|
||||
// Object's class is a class.
|
||||
IO.print(Object is Class) // expect: true
|
||||
|
||||
// Its metatype is also a class.
|
||||
IO.print(Object.type is Class) // expect: true
|
||||
|
||||
// The metatype's metatype is Class.
|
||||
IO.print(Object.type.type == Class) // expect: true
|
||||
|
||||
// Object has a distinct metaclass.
|
||||
IO.print(Object.type.name) // expect: Object metaclass
|
||||
Reference in New Issue
Block a user