// Copyright (c) 2020, 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 "dart:collection"; import "package:expect/expect.dart"; import 'cast_helper.dart'; void main() { testOrder(); testDowncast(); testUpcast(); testNewSet(); } void testOrder() { var setEls = new Set.from(elements); // Linked HashSet. Expect.listEquals(elements, setEls.toList()); // Preserves order. } void testDowncast() { var setEls = new Set.from(elements); var dSet = Set.castFrom(setEls); // Preserves order. Expect.throws(() => dSet.first); // C is not D. Expect.equals(d, dSet.elementAt(1)); Expect.throws(() => dSet.elementAt(2)); // E is not D. Expect.equals(f, dSet.elementAt(3)); Expect.equals(null, dSet.elementAt(4)); Expect.throws(() => dSet.toList()); // Contains should not be typed. var newC = new C(); Expect.isFalse(dSet.contains(newC)); Expect.throws(() => dSet.add(newC)); Expect.isFalse(dSet.contains(newC)); Expect.isTrue(dSet.contains(c)); // Remove and length should not be typed. Expect.equals(5, dSet.length); dSet.remove(c); // Success, no type checks. Expect.equals(4, dSet.length); } void testUpcast() { var setEls = new Set.from(elements); var objectSet = Set.castFrom(setEls); Expect.listEquals(elements, objectSet.toList()); var newObject = new Object(); Expect.throws(() => objectSet.add(newObject)); Expect.isFalse(objectSet.contains(newObject)); var toSet = objectSet.toSet(); Expect.isTrue(toSet is LinkedHashSet); Expect.isFalse(toSet is LinkedHashSet); } void testNewSet() { // Specified custom newSet as empty HashSet. var setEls = new Set.from(elements); var customNewSet; var objectSet2 = Set.castFrom(setEls, newSet: () => customNewSet = new HashSet()); var customToSet = objectSet2.toSet(); Expect.isTrue(customToSet is HashSet); Expect.isFalse(customToSet is HashSet); Expect.identical(customToSet, customNewSet); }