/*
 * 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 bool operator <=(Duration other) 
 * @description Checks that duration calculation is correct
 * @author kaigorodov
 */
import "../../../Utils/expect.dart";

int expected(int d, int h, int m, int s, int ms) {
  return d * 24 * 3600000 + h * 3600000 + m * 60000 + s * 1000 + ms;
}

void check(int d1, int h1, int m1, int s1, int ms1, int d2, int h2, int m2,
    int s2, int ms2) {
  Expect.equals(
      expected(d1, h1, m1, s1, ms1) <= expected(d2, h2, m2, s2, ms2),
      new Duration(
              days: d1,
              hours: h1,
              minutes: m1,
              seconds: s1,
              milliseconds: ms1) <=
          new Duration(
              days: d2,
              hours: h2,
              minutes: m2,
              seconds: s2,
              milliseconds: ms2));
}

void checkEq(int d, int h, int m, int s, int ms) {
  check(d, h, m, s, ms, d, h, m, s, ms);
}

int seed = 1234567;
int nextRand() {
  seed = 0x3fffffff & ((seed >> 17) + seed * 199933  + 11);
  return (seed >> 5) & 127;
}

main() {
  for (int k = 0; k < 100; k++) {
    check(nextRand(), nextRand(), nextRand(), nextRand(), nextRand(),
        nextRand(), nextRand(), nextRand(), nextRand(), nextRand());
    checkEq(nextRand(), nextRand(), nextRand(), nextRand(), nextRand());
  }
}
