// Copyright (c) 2011-2013, 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.

// @dart = 2.9

/// @assertion  abstract E removeFirst()
/// Removes and returns the first element of this queue.
/// @description Checks that exactly the first element is removed and returned.
/// @author msyabro

library removeFirst_A01_t01;

import "../../../Utils/expect.dart";
import "dart:collection";

test(Queue create([Iterable content])) {
  Queue queue = create();
  
  queue.addLast(1);
  queue.addLast("2");
  queue.addLast(true);

  Expect.isTrue(queue.length == 3);

  Expect.isTrue(queue.removeFirst() == 1);
  Expect.isTrue(queue.length == 2);
  Expect.isTrue(queue.first == "2");

  Expect.isTrue(queue.removeFirst() == "2");
  Expect.isTrue(queue.length == 1);
  Expect.isTrue(queue.first == true);

  Expect.isTrue(queue.removeFirst() == true);
  Expect.isTrue(queue.length == 0);

  queue = create();
  queue.addLast(1);
  queue.addLast(1);
  queue.addLast(1);

  Expect.isTrue(queue.length == 3);

  Expect.isTrue(queue.removeFirst() == 1);
  Expect.isTrue(queue.length == 2);
  Expect.isTrue(queue.first == 1);

  Expect.isTrue(queue.removeFirst() == 1);
  Expect.isTrue(queue.length == 1);
  Expect.isTrue(queue.first == 1);

  Expect.isTrue(queue.removeFirst() == 1);
  Expect.isTrue(queue.length == 0);
}
