blob: 50bf4db8cd477b08b7ead0f5ee7cd91efe421ab7 [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 A [set] literal [<E>{elem_1 ... elem_n}] is evaluated as follows:
* 2. For each element in the [set] literal:
* i. Evaluate the element's expression to a value value.
* ii. If element is a spread element:
* a. If element is null-aware and value is [null], continue to the
* next element in the literal.
* b. Evaluate [value.iterator] to a [value] iterator.
* c. Loop:
* a. If [iterator.moveNext()] returns [false], exit the loop.
* b. Evaluate set.add(iterator.current).
* iii. Else:
* a. Evaluate [set.add(value)].
* @description Checks that elements in the null-aware spread element are added
* to the result set in correct order if this spread element is not [null].
* @author iarkh@unipro.ru
*/
import "dart:collection";
import "../../Utils/expect.dart";
class MyIterable extends IterableBase {
late MyIterator iterator;
MyIterable(Set set) { iterator = new MyIterator(set); }
Iterator getIterator() { return iterator; }
}
class MyIterator extends Iterator {
int i = -1;
late List list;
MyIterator(Set set) { list = set.toList(); }
@override
bool moveNext() { return ++i < list.length; }
@override
dynamic get current { return list[i]; }
}
List mySets = [{1, 2, 3, 4, 5},
{"a", "14", 1, 2, null, 143, [11]},
{1, 2, {}, [123,4], 14},
{[], [113], 12345},
{1, 2, 3, 4, 5, 6, 7, 8, 9}];
main() {
mySets.forEach((var set) {
var it = new MyIterable(set) as MyIterable?;
Expect.setEquals(set, {...?it});
Expect.isFalse((it as MyIterable).getIterator().moveNext());
});
}