// 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 removeLast()
/// Removes and returns the last element of this queue.
/// @description Checks that exactly the last element is removed and returned.
/// @author msyabro

library removeLast_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.removeLast() == true);
  Expect.isTrue(queue.length == 2);
  Expect.isTrue(queue.last == "2");

  Expect.isTrue(queue.removeLast() == "2");
  Expect.isTrue(queue.length == 1);
  Expect.isTrue(queue.last == 1);

  Expect.isTrue(queue.removeLast() == 1);
  Expect.isTrue(queue.length == 0);

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

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

  Expect.isTrue(queue.removeLast() == 1);
  Expect.isTrue(queue.length == 2);
  Expect.isTrue(queue.last == 1);

  Expect.isTrue(queue.removeLast() == 1);
  Expect.isTrue(queue.length == 1);
  Expect.isTrue(queue.last == 1);

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