blob: 6441f0ccaf251c39d033b4716a51089507b25c3b [file] [log] [blame]
<html>
<head>
<script src="../../http/tests/inspector/inspector-test.js"></script>
<script src="datagrid-test.js"></script>
<script>
function test()
{
function testCase(testName, data, merge, expectSameBackwards)
{
InspectorTest.addResult("Test case: " + testName);
InspectorTest.addResult("Input Segments: " + JSON.stringify(data));
var forwardRange = new Common.SegmentedRange(merge);
data.map(entry => new Common.Segment(entry[0], entry[1], entry[2])).forEach(forwardRange.append, forwardRange);
var forward = forwardRange.segments();
var backwardRange = new Common.SegmentedRange(merge);
data.reverse().map(entry => new Common.Segment(entry[0], entry[1], entry[2])).forEach(backwardRange.append, backwardRange);
var backward = backwardRange.segments();
// Only do reverse if we merge, otherwise result is order-dependent.
if (expectSameBackwards && forward.length !== backward.length) {
InspectorTest.addResult(`FAIL: mismatch between forward and backward results, ${forward.length} vs. ${backward.length}`);
expectSameBackwards = false;
}
InspectorTest.addResult("Result:");
for (var i = 0; i < forward.length; ++i) {
var f = forward[i], b = backward[i];
InspectorTest.addResult(`${f.begin} - ${f.end}: ${f.data}`);
if (expectSameBackwards && b && (f.begin !== b.begin || f.end !== b.end || f.data !== b.data))
InspectorTest.addResult(`FAIL: Forward/backward mismatch, reverse segment is ${b.begin} - ${b.end}: ${b.data}`);
}
if (!expectSameBackwards) {
InspectorTest.addResult("Result backwards:");
for (var b of backward)
InspectorTest.addResult(`${b.begin} - ${b.end}: ${b.data}`);
}
}
function merge(first, second)
{
if (first.begin > second.begin)
InspectorTest.addResult(`FAIL: merge() callback called with arguments in wrong order, ${first.begin} vs. ${second.begin}`);
return first.end >= second.begin && first.data === second.data ? first : null;
}
testCase("one", [[0, 1, "a"]], merge, true);
testCase("two adjacent", [[0, 1, "a"], [1, 2, "a"]], merge, true);
testCase("two apart", [[0, 1, "a"], [2, 3, "a"]], merge, true);
testCase("two overlapping", [[0, 2, "a"], [2, 3, "a"]], merge, true);
testCase("two overlapping no merge ", [[0, 2, "a"], [2, 3, "b"]], null, true);
testCase("one inside another", [[0, 3, "a"], [1, 2, "a"]], merge, true);
testCase("one inside another, no merge", [[0, 3, "a"], [1, 2, "b"]]);
testCase("one between two others", [[0, 2, "a"], [3, 5, "a"], [2, 3, "a"]], merge, true);
testCase("one between two others, no merge", [[0, 2, "a"], [3, 5, "b"], [2, 3, "a"]], null, true);
testCase("one overlapping two others", [[0, 2, "a"], [3, 5, "a"], [1, 4, "a"]], merge, true);
testCase("one overlapping two others, no merge", [[0, 2, "a"], [3, 5, "b"], [1, 4, "a"]]);
testCase("one consuming many:", [[0, 1, "a"], [2, 3, "a"], [4, 5, "a"], [6, 7, "a"], [2, 6, "a"]], merge, true);
testCase("one consuming many, no merge:", [[0, 1, "a"], [2, 3, "a"], [4, 5, "a"], [6, 7, "a"], [2, 6, "a"]]);
InspectorTest.completeTest();
}
</script>
</head>
<body onload="runTest()">
<p>Tests SegmentedRange</p>
</body>
</html>