| // Copyright (c) 2019, 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. |
| |
| /// @assertion Notice that an explicit override introduces a type context for the |
| /// object. Example: |
| /// |
| /// extension SymDiff<T> on Set<T> { |
| /// Set<T> symmetricDifference(Set<T> other) => |
| /// this.difference(other).union(other.difference(this)) |
| /// } |
| /// ... |
| /// SymDiff({}).symmetricDifference(someSet); |
| /// |
| /// Here the inference used to infer type parameters will also affect the |
| /// extension receiver "parameter", and make {} a set literal. |
| /// @description Check that {} is a set literal in the example above. |
| /// @author iarkh@unipro.ru |
| |
| |
| |
| import "../../Utils/expect.dart"; |
| |
| extension SymDiff<T> on Set<T> { |
| Set<T> symmetricDifference(Set<T> other) => |
| this.difference(other).union(other.difference(this)); |
| } |
| |
| main() { |
| Set someSet = {2}; |
| Expect.setEquals(someSet, SymDiff({}).symmetricDifference(someSet)); |
| } |