blob: 86f9c1f62a58988b2a78f66764de808dee1f62ed [file] [log] [blame]
// Copyright (c) 2011, 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 Set.from(Iterable<E> other)
* Creates a [Set] that contains all elements of [other].
* @description Checks that this constructor works correctly with a custom
* Iterable implementation
* @author rodionov
*/
import "dart:collection";
import "../../../Utils/expect.dart";
class CustomIterator<T> implements Iterator<T> {
CustomIterator(List<T> list)
:_array = list, _length = list.length, _pos = -1 { }
bool moveNext() {
if(_pos + 1 < _length) {
_pos++;
return true;
} else {
return false;
}
}
T get current {
if (_pos < 0) {
throw new StateError("No element selected yet, use moveNext()");
}
if(_pos >= _length) {
throw new StateError("Impossible: current position >= length.");
}
return _array[_pos];
}
final List<T> _array;
final int _length;
int _pos;
}
class IterableClass extends IterableBase {
List internalArray = [];
Iterator get iterator {
return new CustomIterator(internalArray);
}
IterableClass() {
internalArray = [1, 2, 3];
}
}
main() {
Set<int> set = new Set.from(new IterableClass());
Expect.setEquals(set, [1, 2, 3]);
}