blob: 787bf0ca43a9cd6c3fd33a4142ca634fe61bc0f7 [file] [log] [blame]
// Copyright (c) 2016, 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 bool remove(Object o)
/// Remove a single instance of [value] from the queue.
/// @description Checks that only single instance of value gets removed from the
/// queue and it does not affect another elements
/// @author iarkh@unipro.ru
import "dart:collection";
import "../../../Utils/expect.dart";
check(List list, Object value, int num) {
DoubleLinkedQueue queue = new DoubleLinkedQueue.from(list);
int l1 = list.length;
int cnt = 0;
while(queue.remove(value)) {
Expect.equals(l1 > 0 ? l1 - 1 : l1, queue.length);
l1--;
cnt++;
int i = 0;
queue.forEach((var element) {
if(list[i] == value && list[i] != element) {
list.removeAt(i);
}
Expect.equals(list[i++], element);
});
}
Expect.equals(cnt, num);
}
main() {
check([], 1, 0);
check([1], 1, 1);
check([1], 3, 0);
check([1, 2, 3, 4, 5], 1, 1);
check(new List.from([2, 2, 1, 2]), 2, 3);
check(new List.from([2, 2, 1, 2]), 1, 1);
check(new List.from([1, 2, 1, 2, 8, 2, 13]), 2, 3);
check(new List.from([1, 2, "1", 2, "2", true, 8, 2, 13]), 2, 3);
check(new List.from(["1", 2, 1, "1", "abcd", 8, 2, false, 13]), "1", 2);
check(new List.from([1, 2, 1, 2, 8, 2, 13]), 13, 1);
check(new List.from([1, 2, 1, 2, 8, 2, 13]), 7, 0);
}