This is an automated email from the ASF dual-hosted git repository.

leerho pushed a commit to branch parameterLeakage
in repository https://gitbox.apache.org/repos/asf/datasketches-java.git

commit 69ea4828dea4a88588aa5adc13a968e0071bf74f
Author: Lee Rhodes <[email protected]>
AuthorDate: Mon Nov 8 14:16:29 2021 -0800

    Add one test
---
 .../tuple/aninteger/ParameterLeakageTest.java      | 178 +++++++++++++++++++++
 1 file changed, 178 insertions(+)

diff --git 
a/src/test/java/org/apache/datasketches/tuple/aninteger/ParameterLeakageTest.java
 
b/src/test/java/org/apache/datasketches/tuple/aninteger/ParameterLeakageTest.java
new file mode 100644
index 0000000..8fee827
--- /dev/null
+++ 
b/src/test/java/org/apache/datasketches/tuple/aninteger/ParameterLeakageTest.java
@@ -0,0 +1,178 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.datasketches.tuple.aninteger;
+
+import static org.apache.datasketches.tuple.aninteger.IntegerSummary.Mode.Min;
+import static org.apache.datasketches.tuple.aninteger.IntegerSummary.Mode.Sum;
+
+import org.apache.datasketches.tuple.AnotB;
+import org.apache.datasketches.tuple.CompactSketch;
+import org.apache.datasketches.tuple.Intersection;
+//import org.apache.datasketches.tuple.UpdatableSketch;
+import org.apache.datasketches.tuple.Sketch;
+import org.apache.datasketches.tuple.SketchIterator;
+import org.apache.datasketches.tuple.Union;
+import org.testng.annotations.Test;
+
+/**
+ * These tests check to make sure that no summary objects, which are mutable, 
and created
+ * as needed internally within a tuple sketch never leak into the result 
sketch.
+ *
+ * @author Lee Rhodes
+ *
+ */
+public class ParameterLeakageTest {
+  IntegerSummarySetOperations setOps = new IntegerSummarySetOperations(Sum, 
Min);
+
+  @Test
+  public void checkUnion() {
+    IntegerSketch sk1 = new IntegerSketch(4, Sum);
+    sk1.update(1, 1);
+    IntegerSummary sk1sum = captureSummaries(sk1)[0];
+
+    IntegerSketch sk2 = new IntegerSketch(4, Sum);
+    sk2.update(2, 1);
+    IntegerSummary sk2sum = captureSummaries(sk2)[0];
+
+
+    Union<IntegerSummary> union = new Union<>(setOps);
+
+    CompactSketch<IntegerSummary> csk = union.union(sk1, sk2);
+    IntegerSummary[] summaries = captureSummaries(csk);
+    println("Union Count: " + summaries.length);
+
+    for (IntegerSummary isum : summaries) {
+      if ((isum == sk1sum) || (isum == sk2sum)) {
+        throw new IllegalArgumentException("Parameter Leakage");
+      }
+    }
+  }
+
+  @Test
+  public void checkIntersectStateless() {
+    IntegerSketch sk1 = new IntegerSketch(4, Sum);
+    sk1.update(1, 1);
+    IntegerSummary sk1sum = captureSummaries(sk1)[0];
+
+    IntegerSketch sk2 = new IntegerSketch(4, Sum);
+    sk2.update(1, 1);
+    IntegerSummary sk2sum = captureSummaries(sk2)[0];
+
+    Intersection<IntegerSummary> intersect = new Intersection<>(setOps);
+
+    CompactSketch<IntegerSummary> csk = intersect.intersect(sk1, sk2);
+    IntegerSummary[] summaries = captureSummaries(csk);
+    println("Intersect Stateless Count: " + summaries.length);
+
+    for (IntegerSummary isum : summaries) {
+      if ((isum == sk1sum) || (isum == sk2sum)) {
+        throw new IllegalArgumentException("Parameter Leakage");
+      }
+    }
+  }
+
+  @Test
+  public void checkIntersectStateful() {
+    IntegerSketch sk1 = new IntegerSketch(4, Sum);
+    sk1.update(1, 1);
+    IntegerSummary sk1sum = captureSummaries(sk1)[0];
+
+    IntegerSketch sk2 = new IntegerSketch(4, Sum);
+    sk2.update(1, 1);
+    IntegerSummary sk2sum = captureSummaries(sk2)[0];
+
+    Intersection<IntegerSummary> intersect = new Intersection<>(setOps);
+
+    intersect.intersect(sk1);
+    intersect.intersect(sk2);
+    CompactSketch<IntegerSummary> csk = intersect.getResult();
+
+    IntegerSummary[] summaries = captureSummaries(csk);
+    println("Intersect Stateful Count: " + summaries.length);
+
+    for (IntegerSummary isum : summaries) {
+      if ((isum == sk1sum) || (isum == sk2sum)) {
+        throw new IllegalArgumentException("Parameter Leakage");
+      }
+    }
+  }
+
+  @Test
+  public void checkAnotbStateless() {
+    IntegerSketch sk1 = new IntegerSketch(4, Sum);
+    sk1.update(1, 1);
+    IntegerSummary sk1sum = captureSummaries(sk1)[0];
+
+    IntegerSketch sk2 = new IntegerSketch(4, Sum);
+    sk2.update(2, 1);
+    IntegerSummary sk2sum = captureSummaries(sk2)[0];
+
+    CompactSketch<IntegerSummary> csk = AnotB.aNotB(sk1, sk2);
+    IntegerSummary[] summaries = captureSummaries(csk);
+    println("AnotB Stateless Count: " + summaries.length);
+
+    for (IntegerSummary isum : summaries) {
+      if ((isum == sk1sum) || (isum == sk2sum)) {
+        throw new IllegalArgumentException("Parameter Leakage");
+      }
+    }
+  }
+
+  @Test
+  public void checkAnotbStateful() {
+    IntegerSketch sk1 = new IntegerSketch(4, Sum);
+    sk1.update(1, 1);
+    IntegerSummary sk1sum = captureSummaries(sk1)[0];
+
+    IntegerSketch sk2 = new IntegerSketch(4, Sum);
+    sk2.update(2, 1);
+    IntegerSummary sk2sum = captureSummaries(sk2)[0];
+
+    AnotB<IntegerSummary> anotb = new AnotB<>();
+
+    anotb.setA(sk1);
+    anotb.notB(sk2);
+
+    CompactSketch<IntegerSummary> csk = anotb.getResult(true);
+    IntegerSummary[] summaries = captureSummaries(csk);
+    println("AnotB Stateful Count: " + summaries.length);
+
+    for (IntegerSummary isum : summaries) {
+      if ((isum == sk1sum) || (isum == sk2sum)) {
+        throw new IllegalArgumentException("Parameter Leakage");
+      }
+    }
+  }
+
+  private static IntegerSummary[] captureSummaries(Sketch<IntegerSummary> sk) {
+    int entries = sk.getRetainedEntries();
+    IntegerSummary[] intSumArr = new IntegerSummary[entries];
+    int cnt = 0;
+    SketchIterator<IntegerSummary> it = sk.iterator();
+    while (it.next()) {
+      intSumArr[cnt] = it.getSummary();
+      cnt++;
+    }
+    return intSumArr;
+  }
+
+
+  static void println(Object o) { System.out.println(o.toString()); }
+}

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to