<!DOCTYPE html>
<!--
Copyright (c) 2013 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="/model/model.html">
<link rel="import" href="/model/kernel.html">

<script>
'use strict';

tr.b.unittest.testSuite(function() {
  test('bestGuessAtCpuCountWithNoData', function() {
    var m = new tr.Model();
    m.importTraces([], false, false, function() {
    });
    assert.isUndefined(m.kernel.bestGuessAtCpuCount);
  });

  test('bestGuessAtCpuCountWithCpuData', function() {
    var m = new tr.Model();
    m.importTraces([], false, false, function() {
      var c1 = m.kernel.getOrCreateCpu(1);
      var c2 = m.kernel.getOrCreateCpu(2);
    });
    assert.equal(m.kernel.bestGuessAtCpuCount, 2);
  });

  test('bestGuessAtCpuCountWithSoftwareCpuCount', function() {
    var m = new tr.Model();
    m.importTraces([], false, false, function() {
      m.kernel.softwareMeasuredCpuCount = 2;
    });
    assert.equal(m.kernel.bestGuessAtCpuCount, 2);
  });

  test('kernelStableId', function() {
    var model = new tr.Model();

    assert.equal(model.kernel.stableId, 'Kernel');
  });

  test('kernelTimeShifting', function() {
    var importOptions = new tr.ImportOptions();
    importOptions.shiftWorldToZero = true;
    importOptions.pruneEmptyContainers = false;
    importOptions.customizeModelCallback = function(m) {
      var ctr = m.kernel.getOrCreateCounter('cat', 'ctr');
      var c0 = new tr.model.CounterSeries('a', 0);
      ctr.addSeries(c0);
      c0.addCounterSample(100, 5);
      c0.addCounterSample(200, 5);
    };
    var m = new tr.Model([], importOptions);
    var ctr = m.kernel.counters['cat.ctr'];
    assert.equal(ctr.series[0].samples[0].timestamp, 0);
    ctr.series[0].samples[0].ts == 100;
  });
});
</script>

