// 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 Iterable<E> where(bool f(E element))
/// Returns a lazy Iterable with all elements that satisfy the predicate f.
/// @description Checks that this method returns correct collection for various
/// predicates.
/// @author msyabro

library where_A01_t07;
 
import "../../../Utils/expect.dart";

test(Iterable create([Iterable content]), {bool isSet:false}) {
  List list = new List.empty(growable: true);
  
  for(int i = 0; i < 101; i++) {
    list.add(i - 50);
  }
  
  Iterable a = create(list).where((var element) {
    return element > 0;
  });
  Expect.isTrue(a.length == 50);
  Expect.iterableEquals(list.getRange(51, 101), a);
  
  a = create(list).where((var element) {
    return element == 0;
  });
  Expect.isTrue(a.length == 1);
  Expect.isTrue(a.first == 0);
  
  a = create(list).where((var element) {
    return true;
  });
  Expect.isTrue(a.length == 101);
  if (!isSet) {
    Expect.iterableEquals(list, a);
  }
  
  a = create(list).where((var element) {
    return false;
  });
  Expect.isTrue(a.isEmpty);
}
