// 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.

// @dart = 2.9

/// @assertion SplayTreeMap([int compare(K key1, K key2),
/// bool isValidKey(potentialKey)])
/// A [Map] of objects that can be ordered relative to each other.
/// @description Checks that map created is a [Map] of objects that can be
/// ordered relative to each other.
/// @author sgrekhov@unipro.ru

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

main() {
  SplayTreeMap map = new SplayTreeMap();
  map[2] = 2;
  map[4] = 4;
  map[1] = 1;
  map[3] = 3;

  Expect.equals(1, map.keys.elementAt(0));
  Expect.equals(2, map.keys.elementAt(1));
  Expect.equals(3, map.keys.elementAt(2));
  Expect.equals(4, map.keys.elementAt(3));
}
