blob: e3d3d77b865fea4f301a6bad2ece8ba1fc441f1d [file] [log] [blame]
/*
* 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));
}