Web Inspector: Add tests for Array Utilities like lowerBound/upperBound
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 16 Jan 2016 20:53:55 +0000 (20:53 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 16 Jan 2016 20:53:55 +0000 (20:53 +0000)
https://bugs.webkit.org/show_bug.cgi?id=153177

Patch by Joseph Pecoraro <pecoraro@apple.com> on 2016-01-16
Reviewed by Timothy Hatcher.

* inspector/unit-tests/array-utilities-expected.txt: Added.
* inspector/unit-tests/array-utilities.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195175 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/inspector/unit-tests/array-utilities-expected.txt [new file with mode: 0644]
LayoutTests/inspector/unit-tests/array-utilities.html [new file with mode: 0644]

index 7d49cfc..0663e29 100644 (file)
@@ -1,3 +1,13 @@
+2016-01-16  Joseph Pecoraro  <pecoraro@apple.com>
+
+        Web Inspector: Add tests for Array Utilities like lowerBound/upperBound
+        https://bugs.webkit.org/show_bug.cgi?id=153177
+
+        Reviewed by Timothy Hatcher.
+
+        * inspector/unit-tests/array-utilities-expected.txt: Added.
+        * inspector/unit-tests/array-utilities.html: Added.
+
 2016-01-16  Simon Fraser  <simon.fraser@apple.com>
 
         This test needs to force layout before calling setElementUsesDisplayListDrawing(),
diff --git a/LayoutTests/inspector/unit-tests/array-utilities-expected.txt b/LayoutTests/inspector/unit-tests/array-utilities-expected.txt
new file mode 100644 (file)
index 0000000..fa2aea3
--- /dev/null
@@ -0,0 +1,35 @@
+
+== Running test suite: ArrayUtilities
+-- Running test case: Array.prototype.lowerBound
+PASS: lowerBound of a value before the first value should produce the first index.
+PASS: lowerBound of a value in the list should return the value's index.
+PASS: lowerBound of a value in the list should return the value's index.
+PASS: lowerBound of a value in the list should return the value's index.
+PASS: lowerBound of a duplicate value in the list should return the value's first index.
+PASS: lowerBound of a value in a gap in the list should return the index where the value would be.
+PASS: lowerBound of a value after the last value should produce the index after the last index (length).
+PASS: lowerBound with a comparator should invoke the comparator with the search value and a value in the list.
+
+-- Running test case: Array.prototype.upperBound
+PASS: upperBound of a value before the first value should produce the first index.
+PASS: upperBound of a value in the list should return the next index after the value.
+PASS: upperBound of a value in the list should return the next index after the value.
+PASS: upperBound of a value in the list should return the next index after the value.
+PASS: upperBound of a duplicate value in the list should return the next index after the value's last index.
+PASS: upperBound of a value in a gap in the list should return the index where the value would be.
+PASS: upperBound of a value after the last value should produce the index after the last index (length).
+PASS: upperBound with a comparator should invoke the comparator with the search value and a value in the list.
+
+-- Running test case: Array.prototype.binaryIndexOf
+PASS: binaryIndexOf of a value not in the list should be -1.
+PASS: binaryIndexOf of a value not in the list should be -1.
+PASS: binaryIndexOf of a value in the list should return the index of the value.
+PASS: binaryIndexOf of a duplicate value in the list should return the first index of the value.
+
+-- Running test case: Array.prototype.partition
+PASS: partition should not lose any elements.
+PASS: partition should keep the order of elements in the sublists.
+PASS: partition should handle duplicates.
+PASS: partition should produce an empty list for the negative side.
+PASS: partition should produce an empty list for the positive side.
+
diff --git a/LayoutTests/inspector/unit-tests/array-utilities.html b/LayoutTests/inspector/unit-tests/array-utilities.html
new file mode 100644 (file)
index 0000000..e08469b
--- /dev/null
@@ -0,0 +1,96 @@
+<!doctype html>
+<html>
+<head>
+<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
+<script>
+function test()
+{
+    let suite = InspectorTest.createSyncSuite("ArrayUtilities");
+
+    suite.addTestCase({
+        name: "Array.prototype.lowerBound",
+        test: () => {
+            // Index:  0  1  2  3  4  5  6  7  8  9
+            let arr = [0, 1, 2, 2, 2, 2, 2, 2, 6, 7];
+            InspectorTest.expectThat(arr.lowerBound(-100) === 0, "lowerBound of a value before the first value should produce the first index.");
+            InspectorTest.expectThat(arr.lowerBound(0) === 0, "lowerBound of a value in the list should return the value's index.");
+            InspectorTest.expectThat(arr.lowerBound(1) === 1, "lowerBound of a value in the list should return the value's index.");
+            InspectorTest.expectThat(arr.lowerBound(7) === 9, "lowerBound of a value in the list should return the value's index.");
+            InspectorTest.expectThat(arr.lowerBound(2) === 2, "lowerBound of a duplicate value in the list should return the value's first index.");
+            InspectorTest.expectThat(arr.lowerBound(5) === 8, "lowerBound of a value in a gap in the list should return the index where the value would be.");
+            InspectorTest.expectThat(arr.lowerBound(100) === arr.length, "lowerBound of a value after the last value should produce the index after the last index (length).");
+
+            let objs = [{size: 100}, {size: 200}, {size: 300}];
+            let comparator = (value, object) => value - object.size;
+            InspectorTest.expectThat(objs.lowerBound(150, comparator) === 1, "lowerBound with a comparator should invoke the comparator with the search value and a value in the list.");
+
+            return true;
+        }
+    });
+
+    suite.addTestCase({
+        name: "Array.prototype.upperBound",
+        test: () => {
+            // Index:  0  1  2  3  4  5  6  7  8  9
+            let arr = [0, 1, 2, 2, 2, 2, 2, 2, 6, 7];
+            InspectorTest.expectThat(arr.upperBound(-100) === 0, "upperBound of a value before the first value should produce the first index.");
+            InspectorTest.expectThat(arr.upperBound(0) === 1, "upperBound of a value in the list should return the next index after the value.");
+            InspectorTest.expectThat(arr.upperBound(1) === 2, "upperBound of a value in the list should return the next index after the value.");
+            InspectorTest.expectThat(arr.upperBound(7) === 10, "upperBound of a value in the list should return the next index after the value.");
+            InspectorTest.expectThat(arr.upperBound(2) === 8, "upperBound of a duplicate value in the list should return the next index after the value's last index.");
+            InspectorTest.expectThat(arr.upperBound(5) === 8, "upperBound of a value in a gap in the list should return the index where the value would be.");
+            InspectorTest.expectThat(arr.upperBound(100) === arr.length, "upperBound of a value after the last value should produce the index after the last index (length).");
+
+            let objs = [{size: 100}, {size: 200}, {size: 300}];
+            let comparator = (value, object) => value - object.size;
+            InspectorTest.expectThat(objs.upperBound(150, comparator) === 1, "upperBound with a comparator should invoke the comparator with the search value and a value in the list.");
+
+            return true;
+        }
+    });
+
+    suite.addTestCase({
+        name: "Array.prototype.binaryIndexOf",
+        test: () => {
+            // Index:  0  1  2  3  4  5  6  7  8  9
+            let arr = [0, 1, 2, 2, 2, 2, 2, 2, 6, 7];
+            let defaultComparator = (a, b) => a - b;
+            InspectorTest.expectThat(arr.binaryIndexOf(-100, defaultComparator) === -1, "binaryIndexOf of a value not in the list should be -1.");
+            InspectorTest.expectThat(arr.binaryIndexOf(100, defaultComparator) === -1, "binaryIndexOf of a value not in the list should be -1.");
+            InspectorTest.expectThat(arr.binaryIndexOf(0, defaultComparator) === arr.lowerBound(0), "binaryIndexOf of a value in the list should return the index of the value.");
+            InspectorTest.expectThat(arr.binaryIndexOf(2, defaultComparator) === arr.lowerBound(2), "binaryIndexOf of a duplicate value in the list should return the first index of the value.");            
+            return true;
+        }
+    });
+
+    suite.addTestCase({
+        name: "Array.prototype.partition",
+        test: () => {
+            let quickEqual = (a, b) => JSON.stringify(a) === JSON.stringify(b);
+
+            let arr1 = [1, 2, 3, 4];
+            let [even, odd] = arr1.partition((x) => x % 2 === 0);
+            InspectorTest.expectThat(even.length + odd.length === arr1.length, "partition should not lose any elements.");
+            InspectorTest.expectThat(quickEqual(even, [2, 4]) && quickEqual(odd, [1, 3]), "partition should keep the order of elements in the sublists.");
+
+            let arr2 = [1, 1, -1, -2, 5, -2, -6, 0];
+            let [positive, negative] = arr2.partition((x) => x >= 0);
+            InspectorTest.expectThat(quickEqual(positive, [1, 1, 5, 0]) && quickEqual(negative, [-1, -2, -2, -6]), "partition should handle duplicates.");
+
+            let arr3 = [1, 2];
+            let [full, empty] = arr3.partition((x) => true);
+            InspectorTest.expectThat(quickEqual(full, [1, 2]) && !empty.length, "partition should produce an empty list for the negative side.");
+            [empty, full] = arr3.partition((x) => false);
+            InspectorTest.expectThat(quickEqual(full, [1, 2]) && !empty.length, "partition should produce an empty list for the positive side.");
+
+            return true;
+        }
+    });
+
+    suite.runTestCasesAndFinish();
+}
+</script>
+</head>
+<body onLoad="runTest()">
+</body>
+</html>