<!DOCTYPE html>
<meta charset="utf-8">

<link href="../src/nv.d3.css" rel="stylesheet" type="text/css">
<link href="teststyle.css" rel="stylesheet" type='text/css'>

<body>
  <h3>Unit tests for nv.interactiveBisect - this function is important for rendering tooltips and the guideline on charts.</h3>
  <div class='navigation'>
      Tests:
      <a href="lineChartTest.html">Line Chart</a>
      <a href="stackedAreaChartTest.html">Stacked Area</a>
      <a href="../examples/cumulativeLineChart.html">Cumulative Line</a>
  </div>

<script src="../lib/d3.v3.js"></script>
<script src="../nv.d3.js"></script>
<script src="../src/interactiveLayer.js"></script>

<script>
function runTest(description, dataArray, searchVal, expectedResult, xAccessor) {
    var result = nv.interactiveBisect(dataArray, searchVal, xAccessor);
    var content = "";
    if (result === expectedResult) {
        content = "PASSED: " + description;
    }
    else {
        content = "FAILED: " + description;
    }

    var node = document.createElement("div");
    node.innerHTML = content;
    document.getElementsByTagName("body")[0].appendChild(node);
}

var x = function(d) {return d;};

runTest("Basic test",
      [0,1,2,3,4,5],
      3,
      3,
      x
  );

runTest("Basic test - zero bound",
      [0,1,2,3,4,5],
      0,
      0,
      x
  );

runTest("Basic test - length bound",
      [0,1,2,3,4,5],
      5,
      5,
      x
  );

runTest("Basic test - negative number",
      [0,1,2,3,4,5],
      -4,
      0,
      x
  );

runTest("Basic test - past the end",
      [0,1,2,3,4,5],
      10,
      5,
      x
  );

runTest("Floating point number",
      [0,1,2,3,4,5],
      0.34,
      0,
      x
  );

runTest("Floating point number part 2",
      [0,1,2,3,4,5],
      1.50001,
      2,
      x
  );

runTest("Fibonacci - existing item search",
      [0,1,1,2,3,5,8,13,21,34],
      8,
      6,
      x
  );

runTest("Fibonacci - inbetween item (left)",
      [0,1,1,2,3,5,8,13,21,34],
      15,
      7,
      x
  );

runTest("Fibonacci - inbetween item (right)",
      [0,1,1,2,3,5,8,13,21,34],
      20,
      8,
      x
  );

x = function(d,i) { return i};

runTest("xAccessor is index mode - existing item",
      [0,1,1,2,3,5,8,13,21,34],
      7,
      7,
      x
  );

runTest("xAccessor is index mode - inbetween item",
      [0,1,1,2,3,5,8,13,21,34],
      7.3,
      7,
      x
  );

runTest("xAccessor is index mode - inbetween item part 2",
      [0,1,1,2,3,5,8,13,21,34],
      7.500001,
      8,
      x
  );

runTest("Empty array",
      [],
      4,
      0,
      x
  );

runTest("Single element array",
      [0],
      0,
      0,
      x
  );

runTest("Single element array - negative bound",
      [0],
      -10,
      0,
      x
  );

runTest("Single element array - past the end",
      [0],
      1,
      0,
      x
  );
</script>