| // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import "package:expect/expect.dart"; |
| |
| check(value, expectComparable, expectPattern) { |
| Expect.equals(expectComparable, value is Comparable); |
| Expect.equals(expectPattern, value is Pattern); |
| } |
| |
| int inscrutable(int x) => x == 0 ? 0 : x | inscrutable(x & (x - 1)); |
| |
| class A implements Comparable { |
| int compareTo(o) => 0; |
| } |
| |
| class B { |
| } |
| |
| class C implements Pattern { |
| matchAsPrefix(String s, [int start = 0]) => null; |
| allMatches(String s, [int start = 0]) => null; |
| } |
| |
| class D implements Pattern, Comparable { |
| int compareTo(o) => 0; |
| matchAsPrefix(String s, [int start = 0]) => null; |
| allMatches(String s, [int start = 0]) => null; |
| } |
| |
| main() { |
| var things = [[], 4, 4.2, 'foo', new Object(), new A(), new B(), |
| new C(), new D()]; |
| |
| check(things[inscrutable(0)], false, false); // List |
| check(things[inscrutable(1)], true, false); // int |
| check(things[inscrutable(2)], true, false); // num |
| check(things[inscrutable(3)], true, true); // string |
| check(things[inscrutable(4)], false, false); // Object |
| check(things[inscrutable(5)], true, false); // A |
| check(things[inscrutable(6)], false, false); // B |
| check(things[inscrutable(7)], false, true); // C |
| check(things[inscrutable(8)], true, true); // D |
| } |