| <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> |