// 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 abstract void sort([int compare(E a, E b)])
 * Sorts the list according to the order specified by the compare function.
 * The compare function must act as a Comparator.
 * The default List implementations use Comparable.compare if compare is omitted.
 * @description Checks sorting of short integer arrays with repeated elements.
 * @author iefremov
 */
library sort_A01_t03;

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

void check(Iterable<int> a, List<E> create<E>([int length, E fill])) {
  int c(var x, var y) {
    return x < y ? -1 : (x == y ? 0 : 1);
  }

  var a_copy = create(a.length, 0);
  a_copy.setRange(0, a.length, a);
  a_copy.sort(c);

  for(int i = 1; i < a.length; ++i) {
    Expect.isTrue(a_copy[i] >= a_copy[i-1]);
  }
}

test(List<E> create<E>([int length, E fill])) {

  int maxlen = 5;
  var a = new List.filled(maxlen, 0);
  int maxdigit = 3;
  int mindigit = -2;

  void iterate(int n) {
    if(n == 0) {
      check(a, create);
      return;
    }
    for(int i = mindigit; i < maxdigit; ++i) {
      a[n-1] = i;
      iterate(n-1);
    }
  }
  iterate(maxlen);
}
