<!DOCTYPE html>
<!--
Copyright (c) 2014 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->

<link rel="import" href="/tracing/base/range.html">

<script>
'use strict';

tr.b.unittest.testSuite(function() {
  var Range = tr.b.Range;

  test('addValue', function() {
    var range = new Range();
    assert.isTrue(range.isEmpty);
    range.addValue(1);
    assert.isFalse(range.isEmpty);
    assert.equal(1, range.min);
    assert.equal(1, range.max);

    range.addValue(2);
    assert.isFalse(range.isEmpty);
    assert.equal(1, range.min);
    assert.equal(2, range.max);
  });

  test('addNonEmptyRange', function() {
    var r1 = new Range();
    r1.addValue(1);
    r1.addValue(2);

    var r = new Range();
    r.addRange(r1);
    assert.equal(1, r.min);
    assert.equal(2, r.max);

    var r2 = Range.fromDict(r.toJSON());
    assert.equal(r2.isEmpty, r.isEmpty);
    assert.equal(r2.max, r.max);
    assert.equal(r2.min, r.min);
  });

  test('addEmptyRange', function() {
    var r1 = new Range();

    var r = new Range();
    r.addRange(r1);
    assert.isTrue(r.isEmpty);
    assert.isUndefined(r.min);
    assert.isUndefined(r.max);

    var r2 = Range.fromDict(r.toJSON());
    assert.equal(r2.isEmpty, r.isEmpty);
    assert.isUndefined(r2.max);
    assert.isUndefined(r2.min);
  });

  test('addRangeToRange', function() {
    var r1 = new Range();
    r1.addValue(1);
    r1.addValue(2);

    var r = new Range();
    r.addValue(3);
    r.addRange(r1);

    assert.isFalse(r.isEmpty);
    assert.equal(1, r.min);
    assert.equal(3, r.max);
  });

  test('containsRange', function() {
    var r1 = Range.fromExplicitRange(0, 3);
    var r2 = Range.fromExplicitRange(1, 2);

    assert.isTrue(r1.containsRange(r2));
    assert.isFalse(r2.containsRange(r1));
  });

  test('containsRange_emptyRange', function() {
    var r1 = Range.fromExplicitRange(0, 3);
    var r2 = new Range();

    assert.isFalse(r1.containsRange(r2));
    assert.isFalse(r2.containsRange(r1));
  });

  test('containsRange_overlapping', function() {
    var r1 = Range.fromExplicitRange(0, 3);
    var r2 = Range.fromExplicitRange(2, 4);

    assert.isFalse(r1.containsRange(r2));
    assert.isFalse(r2.containsRange(r1));
  });

  test('containsRange_disjoint', function() {
    var r1 = Range.fromExplicitRange(0, 2);
    var r2 = Range.fromExplicitRange(3, 5);

    assert.isFalse(r1.containsRange(r2));
    assert.isFalse(r2.containsRange(r1));
  });

  test('containsRange_singlePointRange', function() {
    var r1 = Range.fromExplicitRange(0, 2);
    var r2 = Range.fromExplicitRange(1, 1);

    assert.isTrue(r1.containsRange(r2));
    assert.isFalse(r2.containsRange(r1));
  });

  test('containsRange_singlePointRangeAtBorder', function() {
    var r1 = Range.fromExplicitRange(0, 2);
    var r2 = Range.fromExplicitRange(2, 2);

    assert.isTrue(r1.containsRange(r2));
    assert.isFalse(r2.containsRange(r1));
  });

  test('containsExplicitRange', function() {
    var r1 = Range.fromExplicitRange(0, 3);
    var r2 = Range.fromExplicitRange(1, 2);

    assert.isTrue(r1.containsExplicitRange(1, 2));
    assert.isFalse(r2.containsExplicitRange(0, 3));
  });

  test('containsExplicitRange_overlapping', function() {
    var r1 = Range.fromExplicitRange(0, 3);
    var r2 = Range.fromExplicitRange(2, 4);

    assert.isFalse(r1.containsExplicitRange(2, 4));
    assert.isFalse(r2.containsExplicitRange(0, 3));
  });

  test('containsExplicitRange_disjoint', function() {
    var r1 = Range.fromExplicitRange(0, 2);
    var r2 = Range.fromExplicitRange(3, 5);

    assert.isFalse(r1.containsExplicitRange(3, 5));
    assert.isFalse(r2.containsExplicitRange(0, 2));
  });

  test('containsExplicitRange_singlePointRange', function() {
    var r1 = Range.fromExplicitRange(0, 2);
    var r2 = Range.fromExplicitRange(1, 1);

    assert.isTrue(r1.containsExplicitRange(1, 1));
    assert.isFalse(r2.containsExplicitRange(0, 2));
  });

  test('containsExplicitRange_singlePointRangeAtBorder', function() {
    var r1 = Range.fromExplicitRange(0, 2);
    var r2 = Range.fromExplicitRange(2, 2);

    assert.isTrue(r1.containsExplicitRange(2, 2));
    assert.isFalse(r2.containsExplicitRange(0, 2));
  });

  test('intersectsRange', function() {
    var r1 = Range.fromExplicitRange(0, 3);
    var r2 = Range.fromExplicitRange(1, 2);

    assert.isTrue(r1.intersectsRange(r2));
    assert.isTrue(r2.intersectsRange(r1));
  });

  test('intersectsRange_emptyRange', function() {
    var r1 = Range.fromExplicitRange(0, 3);
    var r2 = new Range();

    assert.isFalse(r1.intersectsRange(r2));
    assert.isFalse(r2.intersectsRange(r1));
  });

  test('intersectsRange_overlapping', function() {
    var r1 = Range.fromExplicitRange(0, 3);
    var r2 = Range.fromExplicitRange(2, 4);

    assert.isTrue(r1.intersectsRange(r2));
    assert.isTrue(r2.intersectsRange(r1));
  });

  test('intersectsRange_disjoint', function() {
    var r1 = Range.fromExplicitRange(0, 2);
    var r2 = Range.fromExplicitRange(3, 5);

    assert.isFalse(r1.intersectsRange(r2));
    assert.isFalse(r2.intersectsRange(r1));
  });

  test('intersectsRange_singlePointRange', function() {
    var r1 = Range.fromExplicitRange(0, 2);
    var r2 = Range.fromExplicitRange(1, 1);

    assert.isTrue(r1.intersectsRange(r2));
    assert.isTrue(r2.intersectsRange(r1));
  });

  test('intersectsRange_singlePointRangeAtBorder', function() {
    var r1 = Range.fromExplicitRange(0, 2);
    var r2 = Range.fromExplicitRange(2, 2);

    assert.isTrue(r1.intersectsRange(r2));
    assert.isTrue(r2.intersectsRange(r1));
  });

  test('intersectsExplicitRange', function() {
    var r1 = Range.fromExplicitRange(0, 3);
    var r2 = Range.fromExplicitRange(1, 2);

    assert.isTrue(r1.intersectsExplicitRange(1, 2));
    assert.isTrue(r2.intersectsExplicitRange(0, 3));
  });

  test('intersectsExplicitRange_overlapping', function() {
    var r1 = Range.fromExplicitRange(0, 3);
    var r2 = Range.fromExplicitRange(2, 4);

    assert.isTrue(r1.intersectsExplicitRange(2, 4));
    assert.isTrue(r2.intersectsExplicitRange(0, 3));
  });

  test('intersectsExplicitRange_disjoint', function() {
    var r1 = Range.fromExplicitRange(0, 2);
    var r2 = Range.fromExplicitRange(3, 5);

    assert.isFalse(r1.intersectsExplicitRange(3, 5));
    assert.isFalse(r2.intersectsExplicitRange(0, 2));
  });

  test('intersectsExplicitRange_singlePointRange', function() {
    var r1 = Range.fromExplicitRange(0, 2);
    var r2 = Range.fromExplicitRange(1, 1);

    assert.isTrue(r1.intersectsExplicitRange(1, 1));
    assert.isTrue(r2.intersectsExplicitRange(0, 2));
  });

  test('intersectsExplicitRange_singlePointRangeAtBorder', function() {
    var r1 = Range.fromExplicitRange(0, 2);
    var r2 = Range.fromExplicitRange(2, 2);

    assert.isTrue(r1.intersectsExplicitRange(2, 2));
    assert.isTrue(r2.intersectsExplicitRange(0, 2));
  });

  test('duration', function() {
    assert.equal(Range.fromExplicitRange(2, 4).duration, 2);
  });

  test('duration_singlePointRange', function() {
    assert.equal(Range.fromExplicitRange(2, 2).duration, 0);
  });

  test('duration_emptyRange', function() {
    assert.equal(new Range().duration, 0);
  });

  test('findIntersection_overlapping', function() {
    var r1 = Range.fromExplicitRange(0, 2);
    var r2 = Range.fromExplicitRange(1, 3);

    var result = Range.fromExplicitRange(1, 2);
    assert.deepEqual(r1.findIntersection(r2), result);
    assert.deepEqual(r2.findIntersection(r1), result);
  });

  test('findIntersection_bordering', function() {
    var r1 = Range.fromExplicitRange(0, 2);
    var r2 = Range.fromExplicitRange(2, 4);

    var result = Range.fromExplicitRange(2, 2);
    assert.deepEqual(r1.findIntersection(r2), result);
    assert.deepEqual(r2.findIntersection(r1), result);
  });

  test('findIntersection_singlePointRange', function() {
    var r1 = Range.fromExplicitRange(0, 2);
    var r2 = Range.fromExplicitRange(2, 2);

    var result = Range.fromExplicitRange(2, 2);
    assert.deepEqual(r1.findIntersection(r2), result);
    assert.deepEqual(r2.findIntersection(r1), result);
  });

  test('findIntersection_disjoint', function() {
    var r1 = Range.fromExplicitRange(0, 2);
    var r2 = Range.fromExplicitRange(3, 5);

    assert.isTrue(r1.findIntersection(r2).isEmpty);
    assert.isTrue(r2.findIntersection(r1).isEmpty);
  });

  test('findIntersection_emptyRange', function() {
    var r1 = Range.fromExplicitRange(0, 2);
    var r2 = new Range();

    assert.isTrue(r1.findIntersection(r2).isEmpty);
    assert.isTrue(r2.findIntersection(r1).isEmpty);
  });
});
</script>
