You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datasketches.apache.org by al...@apache.org on 2019/08/06 00:40:50 UTC

[incubator-datasketches-cpp] 01/01: added test_allocator, renamed custom type A to test_type

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

alsay pushed a commit to branch kll_test_allocator
in repository https://gitbox.apache.org/repos/asf/incubator-datasketches-cpp.git

commit dae0b6f9a9ee6013ea5f1ac2bc34fb7652d5fcec
Author: AlexanderSaydakov <Al...@users.noreply.github.com>
AuthorDate: Mon Aug 5 17:40:30 2019 -0700

    added test_allocator, renamed custom type A to test_type
---
 common/test/CMakeLists.txt                         |   4 +-
 common/test/test_allocator.cpp                     |  27 ++++++
 common/test/test_allocator.hpp                     | 105 +++++++++++++++++++++
 common/test/{A.hpp => test_type.hpp}               |  42 ++++-----
 fi/test/frequent_items_sketch_custom_type_test.cpp |  10 +-
 kll/test/kll_sketch_custom_type_test.cpp           |  26 +++--
 kll/test/kll_sketch_test.cpp                       |  89 ++++++++++-------
 7 files changed, 233 insertions(+), 70 deletions(-)

diff --git a/common/test/CMakeLists.txt b/common/test/CMakeLists.txt
index 908e57c..9af9e88 100644
--- a/common/test/CMakeLists.txt
+++ b/common/test/CMakeLists.txt
@@ -10,5 +10,7 @@ target_include_directories(common_test
 target_sources(common_test
   PRIVATE
     test_runner.cpp
-    A.hpp
+    test_type.hpp
+    test_allocator.hpp
+    test_allocator.cpp
 )
diff --git a/common/test/test_allocator.cpp b/common/test/test_allocator.cpp
new file mode 100644
index 0000000..02c5654
--- /dev/null
+++ b/common/test/test_allocator.cpp
@@ -0,0 +1,27 @@
+/*
+ * 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.
+ */
+
+#include "test_allocator.hpp"
+
+namespace datasketches {
+
+// global variable to keep track of allocated size
+long long test_allocator_total_bytes = 0;
+
+} /* namespace datasketches */
diff --git a/common/test/test_allocator.hpp b/common/test/test_allocator.hpp
new file mode 100644
index 0000000..41dacfd
--- /dev/null
+++ b/common/test/test_allocator.hpp
@@ -0,0 +1,105 @@
+/*
+ * 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.
+ */
+
+#ifndef TEST_ALLOCATOR_HPP
+#define TEST_ALLOCATOR_HPP
+
+#include <new>
+#include <utility>
+
+// this allocator keeps the total allocated size in a global variable for testing
+
+namespace datasketches {
+
+extern long long test_allocator_total_bytes;
+
+template <class T> class test_allocator {
+public:
+  typedef T                 value_type;
+  typedef value_type*       pointer;
+  typedef const value_type* const_pointer;
+  typedef value_type&       reference;
+  typedef const value_type& const_reference;
+  typedef std::size_t       size_type;
+  typedef std::ptrdiff_t    difference_type;
+
+  template <class U>
+  struct rebind { typedef test_allocator<U> other; };
+
+  test_allocator() {}
+  test_allocator(const test_allocator&) {}
+  template <class U>
+  test_allocator(const test_allocator<U>&) {}
+  ~test_allocator() {}
+
+  pointer address(reference x) const { return &x; }
+  const_pointer address(const_reference x) const {
+    return x;
+  }
+
+  pointer allocate(size_type n, const_pointer = 0) {
+    void* p = new char[n * sizeof(value_type)];
+    if (!p) throw std::bad_alloc();
+    test_allocator_total_bytes += n * sizeof(value_type);
+    return static_cast<pointer>(p);
+  }
+
+  void deallocate(pointer p, size_type n) {
+    if (p) delete[] (char*) p;
+    test_allocator_total_bytes -= n * sizeof(value_type);
+  }
+
+  size_type max_size() const {
+    return static_cast<size_type>(-1) / sizeof(value_type);
+  }
+
+  template<typename... Args>
+  void construct(pointer p, Args&&... args) {
+    new(p) value_type(std::forward<Args>(args)...);
+  }
+  void destroy(pointer p) { p->~value_type(); }
+
+private:
+  void operator=(const test_allocator&);
+};
+
+template<> class test_allocator<void> {
+public:
+  typedef void        value_type;
+  typedef void*       pointer;
+  typedef const void* const_pointer;
+
+  template <class U>
+  struct rebind { typedef test_allocator<U> other; };
+};
+
+
+template <class T>
+inline bool operator==(const test_allocator<T>&, const test_allocator<T>&) {
+  return true;
+}
+
+template <class T>
+inline bool operator!=(const test_allocator<T>&, const test_allocator<T>&) {
+  return false;
+}
+
+} /* namespace datasketches */
+
+#endif
diff --git a/common/test/A.hpp b/common/test/test_type.hpp
similarity index 69%
rename from common/test/A.hpp
rename to common/test/test_type.hpp
index 5c806c0..487da08 100644
--- a/common/test/A.hpp
+++ b/common/test/test_type.hpp
@@ -17,36 +17,36 @@
  * under the License.
  */
 
-#ifndef CLASS_A_HPP_
-#define CLASS_A_HPP_
+#ifndef CLASS_TEST_TYPE_HPP_
+#define CLASS_TEST_TYPE_HPP_
 
 #include <iostream>
 
 namespace datasketches {
 
-class A {
+class test_type {
   static const bool DEBUG = false;
 public:
   // no default constructor should be required
-  A(int value): value(value) {
+  test_type(int value): value(value) {
     if (DEBUG) std::cerr << "A constructor" << std::endl;
   }
-  ~A() {
+  ~test_type() {
     if (DEBUG) std::cerr << "A destructor" << std::endl;
   }
-  A(const A& other): value(other.value) {
+  test_type(const test_type& other): value(other.value) {
     if (DEBUG) std::cerr << "A copy constructor" << std::endl;
   }
   // noexcept is important here so that, for instance, std::vector could move this type
-  A(A&& other) noexcept : value(other.value) {
+  test_type(test_type&& other) noexcept : value(other.value) {
     if (DEBUG) std::cerr << "A move constructor" << std::endl;
   }
-  A& operator=(const A& other) {
+  test_type& operator=(const test_type& other) {
     if (DEBUG) std::cerr << "A copy assignment" << std::endl;
     value = other.value;
     return *this;
   }
-  A& operator=(A&& other) {
+  test_type& operator=(test_type&& other) {
     if (DEBUG) std::cerr << "A move assignment" << std::endl;
     value = other.value;
     return *this;
@@ -56,44 +56,44 @@ private:
   int value;
 };
 
-struct hashA {
-  std::size_t operator()(const A& a) const {
+struct test_type_hash {
+  std::size_t operator()(const test_type& a) const {
     return std::hash<int>()(a.get_value());
   }
 };
 
-struct equalA {
-  bool operator()(const A& a1, const A& a2) const {
+struct test_type_equal {
+  bool operator()(const test_type& a1, const test_type& a2) const {
     return a1.get_value() == a2.get_value();
   }
 };
 
-struct lessA {
-  bool operator()(const A& a1, const A& a2) const {
+struct test_type_less {
+  bool operator()(const test_type& a1, const test_type& a2) const {
     return a1.get_value() < a2.get_value();
   }
 };
 
-struct serdeA {
-  void serialize(std::ostream& os, const A* items, unsigned num) {
+struct test_type_serde {
+  void serialize(std::ostream& os, const test_type* items, unsigned num) {
     for (unsigned i = 0; i < num; i++) {
       const int value = items[i].get_value();
       os.write((char*)&value, sizeof(value));
     }
   }
-  void deserialize(std::istream& is, A* items, unsigned num) {
+  void deserialize(std::istream& is, test_type* items, unsigned num) {
     for (unsigned i = 0; i < num; i++) {
       int value;
       is.read((char*)&value, sizeof(value));
-      new (&items[i]) A(value);
+      new (&items[i]) test_type(value);
     }
   }
-  size_t size_of_item(const A& item) {
+  size_t size_of_item(const test_type& item) {
     return sizeof(int);
   }
 };
 
-std::ostream& operator<<(std::ostream& os, const A& a) {
+std::ostream& operator<<(std::ostream& os, const test_type& a) {
   os << a.get_value();
   return os;
 }
diff --git a/fi/test/frequent_items_sketch_custom_type_test.cpp b/fi/test/frequent_items_sketch_custom_type_test.cpp
index 4e7a794..3b938b8 100644
--- a/fi/test/frequent_items_sketch_custom_type_test.cpp
+++ b/fi/test/frequent_items_sketch_custom_type_test.cpp
@@ -21,11 +21,11 @@
 #include <cppunit/extensions/HelperMacros.h>
 
 #include <frequent_items_sketch.hpp>
-#include <A.hpp>
+#include "../../common/test/test_type.hpp"
 
 namespace datasketches {
 
-typedef frequent_items_sketch<A, hashA, equalA, serdeA> frequent_A_sketch;
+typedef frequent_items_sketch<test_type, test_type_hash, test_type_equal, test_type_serde> frequent_test_type_sketch;
 
 class frequent_items_sketch_custom_type_test: public CppUnit::TestFixture {
 
@@ -35,7 +35,7 @@ class frequent_items_sketch_custom_type_test: public CppUnit::TestFixture {
 
   void custom_type() {
 
-    frequent_A_sketch sketch(3);
+    frequent_test_type_sketch sketch(3);
     sketch.update(1, 10); // should survive the purge
     sketch.update(2);
     sketch.update(3);
@@ -43,7 +43,7 @@ class frequent_items_sketch_custom_type_test: public CppUnit::TestFixture {
     sketch.update(5);
     sketch.update(6);
     sketch.update(7);
-    A a8(8);
+    test_type a8(8);
     sketch.update(a8);
     CPPUNIT_ASSERT(!sketch.is_empty());
     CPPUNIT_ASSERT_EQUAL(17, (int) sketch.get_total_weight());
@@ -60,7 +60,7 @@ class frequent_items_sketch_custom_type_test: public CppUnit::TestFixture {
     std::cerr << "serialize" << std::endl;
     sketch.serialize(s);
     std::cerr << "deserialize" << std::endl;
-    auto sketch2 = frequent_A_sketch::deserialize(s);
+    auto sketch2 = frequent_test_type_sketch::deserialize(s);
     CPPUNIT_ASSERT(!sketch2.is_empty());
     CPPUNIT_ASSERT_EQUAL(17, (int) sketch2.get_total_weight());
     CPPUNIT_ASSERT_EQUAL(10, (int) sketch2.get_estimate(1));
diff --git a/kll/test/kll_sketch_custom_type_test.cpp b/kll/test/kll_sketch_custom_type_test.cpp
index b781714..4e60024 100644
--- a/kll/test/kll_sketch_custom_type_test.cpp
+++ b/kll/test/kll_sketch_custom_type_test.cpp
@@ -21,11 +21,12 @@
 #include <cppunit/extensions/HelperMacros.h>
 
 #include <kll_sketch.hpp>
-#include <A.hpp>
+#include <test_allocator.hpp>
+#include "../../common/test/test_type.hpp"
 
 namespace datasketches {
 
-typedef kll_sketch<A, lessA, serdeA> kll_sketch_a;
+typedef kll_sketch<test_type, test_type_less, test_type_serde, test_allocator<test_type>> kll_test_type_sketch;
 
 class kll_sketch_custom_type_test: public CppUnit::TestFixture {
 
@@ -35,8 +36,19 @@ class kll_sketch_custom_type_test: public CppUnit::TestFixture {
   CPPUNIT_TEST(merge_higher_levels);
   CPPUNIT_TEST_SUITE_END();
 
+public:
+  void setUp() {
+    test_allocator_total_bytes = 0;
+  }
+
+  void tearDown() {
+    if (test_allocator_total_bytes != 0) {
+      CPPUNIT_ASSERT_EQUAL((long long) 0, test_allocator_total_bytes);
+    }
+  }
+
   void compact_level_zero() {
-    kll_sketch_a sketch(8);
+    kll_test_type_sketch sketch(8);
     CPPUNIT_ASSERT_THROW(sketch.get_quantile(0), std::runtime_error);
     CPPUNIT_ASSERT_THROW(sketch.get_min_value(), std::runtime_error);
     CPPUNIT_ASSERT_THROW(sketch.get_max_value(), std::runtime_error);
@@ -61,10 +73,10 @@ class kll_sketch_custom_type_test: public CppUnit::TestFixture {
   }
 
   void merge_small() {
-    kll_sketch_a sketch1(8);
+    kll_test_type_sketch sketch1(8);
     sketch1.update(1);
 
-    kll_sketch_a sketch2(8);
+    kll_test_type_sketch sketch2(8);
     sketch2.update(2);
 
     sketch2.merge(sketch1);
@@ -78,7 +90,7 @@ class kll_sketch_custom_type_test: public CppUnit::TestFixture {
   }
 
   void merge_higher_levels() {
-    kll_sketch_a sketch1(8);
+    kll_test_type_sketch sketch1(8);
     sketch1.update(1);
     sketch1.update(2);
     sketch1.update(3);
@@ -89,7 +101,7 @@ class kll_sketch_custom_type_test: public CppUnit::TestFixture {
     sketch1.update(8);
     sketch1.update(9);
 
-    kll_sketch_a sketch2(8);
+    kll_test_type_sketch sketch2(8);
     sketch2.update(10);
     sketch2.update(11);
     sketch2.update(12);
diff --git a/kll/test/kll_sketch_test.cpp b/kll/test/kll_sketch_test.cpp
index 9c8c005..8e12791 100644
--- a/kll/test/kll_sketch_test.cpp
+++ b/kll/test/kll_sketch_test.cpp
@@ -17,14 +17,14 @@
  * under the License.
  */
 
-#include <kll_sketch.hpp>
-#include <kll_helper.hpp>
-
 #include <cppunit/TestFixture.h>
 #include <cppunit/extensions/HelperMacros.h>
 #include <cmath>
 #include <cstring>
 
+#include <kll_sketch.hpp>
+#include <test_allocator.hpp>
+
 namespace datasketches {
 
 static const double RANK_EPS_FOR_K_200 = 0.0133;
@@ -36,6 +36,11 @@ static std::string testBinaryInputPath = TEST_BINARY_INPUT_PATH;
 static std::string testBinaryInputPath = "test/";
 #endif
 
+// typical usage would be just kll_sketch<float> or kll_sketch<std::string>, but here we use test_allocator
+typedef kll_sketch<float, std::less<float>, serde<float>, test_allocator<float>> kll_float_sketch;
+// let std::string use the default allocator for simplicity, otherwise we need to define "less" and "serde"
+typedef kll_sketch<std::string, std::less<std::string>, serde<std::string>, test_allocator<std::string>> kll_string_sketch;
+
 class kll_sketch_test: public CppUnit::TestFixture {
 
   CPPUNIT_TEST_SUITE(kll_sketch_test);
@@ -66,15 +71,27 @@ class kll_sketch_test: public CppUnit::TestFixture {
   CPPUNIT_TEST(copy);
   CPPUNIT_TEST_SUITE_END();
 
+
+public:
+  void setUp() {
+    test_allocator_total_bytes = 0;
+  }
+
+  void tearDown() {
+    if (test_allocator_total_bytes != 0) {
+      CPPUNIT_ASSERT_EQUAL((long long) 0, test_allocator_total_bytes);
+    }
+  }
+
   void k_limits() {
-    kll_sketch<float> sketch1(kll_sketch<float>::MIN_K); // this should work
-    kll_sketch<float> sketch2(kll_sketch<float>::MAX_K); // this should work
-    CPPUNIT_ASSERT_THROW(new kll_sketch<float>(kll_sketch<float>::MIN_K - 1), std::invalid_argument);
+    kll_float_sketch sketch1(kll_float_sketch::MIN_K); // this should work
+    kll_float_sketch sketch2(kll_float_sketch::MAX_K); // this should work
+    CPPUNIT_ASSERT_THROW(new kll_float_sketch(kll_float_sketch::MIN_K - 1), std::invalid_argument);
     // MAX_K + 1 makes no sense because k is uint16_t
   }
 
   void empty() {
-    kll_sketch<float> sketch;
+    kll_float_sketch sketch;
     CPPUNIT_ASSERT(sketch.is_empty());
     CPPUNIT_ASSERT(!sketch.is_estimation_mode());
     CPPUNIT_ASSERT_EQUAL((uint64_t) 0, sketch.get_n());
@@ -98,13 +115,13 @@ class kll_sketch_test: public CppUnit::TestFixture {
 }
 
   void bad_get_quantile() {
-    kll_sketch<float> sketch;
+    kll_float_sketch sketch;
     sketch.update(0); // has to be non-empty to reach the check
     CPPUNIT_ASSERT_THROW(sketch.get_quantile(-1), std::invalid_argument);
   }
 
   void one_item() {
-    kll_sketch<float> sketch;
+    kll_float_sketch sketch;
     sketch.update(1);
     CPPUNIT_ASSERT(!sketch.is_empty());
     CPPUNIT_ASSERT(!sketch.is_estimation_mode());
@@ -131,7 +148,7 @@ class kll_sketch_test: public CppUnit::TestFixture {
   }
 
   void many_items_exact_mode() {
-    kll_sketch<float> sketch;
+    kll_float_sketch sketch;
     const uint32_t n(200);
     for (uint32_t i = 0; i < n; i++) {
       sketch.update(i);
@@ -159,7 +176,7 @@ class kll_sketch_test: public CppUnit::TestFixture {
   }
 
   void many_items_estimation_mode() {
-    kll_sketch<float> sketch;
+    kll_float_sketch sketch;
     const int n(1000000);
     for (int i = 0; i < n; i++) {
       sketch.update(i);
@@ -201,7 +218,7 @@ class kll_sketch_test: public CppUnit::TestFixture {
   }
 
   void consistency_between_get_rank_and_get_PMF_CDF() {
-    kll_sketch<float> sketch;
+    kll_float_sketch sketch;
     const int n = 1000;
     float values[n];
     for (int i = 0; i < n; i++) {
@@ -224,7 +241,7 @@ class kll_sketch_test: public CppUnit::TestFixture {
     std::ifstream is;
     is.exceptions(std::ios::failbit | std::ios::badbit);
     is.open(testBinaryInputPath + "kll_sketch_from_java.bin", std::ios::binary);
-    auto sketch = kll_sketch<float>::deserialize(is);
+    auto sketch = kll_float_sketch::deserialize(is);
     CPPUNIT_ASSERT(!sketch.is_empty());
     CPPUNIT_ASSERT(sketch.is_estimation_mode());
     CPPUNIT_ASSERT_EQUAL((uint64_t) 1000000, sketch.get_n());
@@ -234,11 +251,11 @@ class kll_sketch_test: public CppUnit::TestFixture {
   }
 
   void serialize_deserialize_empty() {
-    kll_sketch<float> sketch;
+    kll_float_sketch sketch;
     std::stringstream s(std::ios::in | std::ios::out | std::ios::binary);
     sketch.serialize(s);
     CPPUNIT_ASSERT_EQUAL(sketch.get_serialized_size_bytes(), (uint32_t) s.tellp());
-    auto sketch2 = kll_sketch<float>::deserialize(s);
+    auto sketch2 = kll_float_sketch::deserialize(s);
     CPPUNIT_ASSERT_EQUAL(sketch2.get_serialized_size_bytes(), (uint32_t) s.tellg());
     CPPUNIT_ASSERT_EQUAL(sketch.is_empty(), sketch2.is_empty());
     CPPUNIT_ASSERT_EQUAL(sketch.is_estimation_mode(), sketch2.is_estimation_mode());
@@ -251,12 +268,12 @@ class kll_sketch_test: public CppUnit::TestFixture {
   }
 
   void serialize_deserialize_one_item() {
-    kll_sketch<float> sketch;
+    kll_float_sketch sketch;
     sketch.update(1);
     std::stringstream s(std::ios::in | std::ios::out | std::ios::binary);
     sketch.serialize(s);
     CPPUNIT_ASSERT_EQUAL(sketch.get_serialized_size_bytes(), (uint32_t) s.tellp());
-    auto sketch2 = kll_sketch<float>::deserialize(s);
+    auto sketch2 = kll_float_sketch::deserialize(s);
     CPPUNIT_ASSERT_EQUAL(sketch2.get_serialized_size_bytes(), (uint32_t) s.tellg());
     CPPUNIT_ASSERT_EQUAL(s.tellp(), s.tellg());
     CPPUNIT_ASSERT(!sketch2.is_empty());
@@ -274,7 +291,7 @@ class kll_sketch_test: public CppUnit::TestFixture {
     std::ifstream is;
     is.exceptions(std::ios::failbit | std::ios::badbit);
     is.open(testBinaryInputPath + "kll_sketch_float_one_item_v1.bin", std::ios::binary);
-    auto sketch = kll_sketch<float>::deserialize(is);
+    auto sketch = kll_float_sketch::deserialize(is);
     CPPUNIT_ASSERT(!sketch.is_empty());
     CPPUNIT_ASSERT(!sketch.is_estimation_mode());
     CPPUNIT_ASSERT_EQUAL((uint64_t) 1, sketch.get_n());
@@ -284,13 +301,13 @@ class kll_sketch_test: public CppUnit::TestFixture {
   }
 
   void serialize_deserialize_stream() {
-    kll_sketch<float> sketch;
+    kll_float_sketch sketch;
     const int n(1000);
     for (int i = 0; i < n; i++) sketch.update(i);
     std::stringstream s(std::ios::in | std::ios::out | std::ios::binary);
     sketch.serialize(s);
     CPPUNIT_ASSERT_EQUAL(sketch.get_serialized_size_bytes(), (uint32_t) s.tellp());
-    auto sketch2 = kll_sketch<float>::deserialize(s);
+    auto sketch2 = kll_float_sketch::deserialize(s);
     CPPUNIT_ASSERT_EQUAL(sketch2.get_serialized_size_bytes(), (uint32_t) s.tellg());
     CPPUNIT_ASSERT_EQUAL(s.tellp(), s.tellg());
     CPPUNIT_ASSERT_EQUAL(sketch.is_empty(), sketch2.is_empty());
@@ -307,12 +324,12 @@ class kll_sketch_test: public CppUnit::TestFixture {
   }
 
   void serialize_deserialize_bytes() {
-    kll_sketch<float> sketch;
+    kll_float_sketch sketch;
     const int n(1000);
     for (int i = 0; i < n; i++) sketch.update(i);
     auto data = sketch.serialize();
     CPPUNIT_ASSERT_EQUAL(sketch.get_serialized_size_bytes(), (uint32_t) data.second);
-    auto sketch2 = kll_sketch<float>::deserialize(data.first.get(), data.second);
+    auto sketch2 = kll_float_sketch::deserialize(data.first.get(), data.second);
     CPPUNIT_ASSERT_EQUAL(sketch2.get_serialized_size_bytes(), (uint32_t) data.second);
     CPPUNIT_ASSERT_EQUAL(sketch.is_empty(), sketch2.is_empty());
     CPPUNIT_ASSERT_EQUAL(sketch.is_estimation_mode(), sketch2.is_estimation_mode());
@@ -340,7 +357,7 @@ class kll_sketch_test: public CppUnit::TestFixture {
   }
 
   void out_of_order_split_points_float() {
-    kll_sketch<float> sketch;
+    kll_float_sketch sketch;
     sketch.update(0); // has too be non-empty to reach the check
     float split_points[2] = {1, 0};
     CPPUNIT_ASSERT_THROW(sketch.get_CDF(split_points, 2), std::invalid_argument);
@@ -354,15 +371,15 @@ class kll_sketch_test: public CppUnit::TestFixture {
   }
 
   void nan_split_point() {
-    kll_sketch<float> sketch;
+    kll_float_sketch sketch;
     sketch.update(0); // has too be non-empty to reach the check
     float split_points[1] = {std::numeric_limits<float>::quiet_NaN()};
     CPPUNIT_ASSERT_THROW(sketch.get_CDF(split_points, 1), std::invalid_argument);
   }
 
   void merge() {
-    kll_sketch<float> sketch1;
-    kll_sketch<float> sketch2;
+    kll_float_sketch sketch1;
+    kll_float_sketch sketch2;
     const int n = 10000;
     for (int i = 0; i < n; i++) {
       sketch1.update(i);
@@ -384,8 +401,8 @@ class kll_sketch_test: public CppUnit::TestFixture {
   }
 
   void merge_lower_k() {
-    kll_sketch<float> sketch1(256);
-    kll_sketch<float> sketch2(128);
+    kll_float_sketch sketch1(256);
+    kll_float_sketch sketch2(128);
     const int n = 10000;
     for (int i = 0; i < n; i++) {
       sketch1.update(i);
@@ -414,8 +431,8 @@ class kll_sketch_test: public CppUnit::TestFixture {
   }
 
   void merge_exact_mode_lower_k() {
-    kll_sketch<float> sketch1(256);
-    kll_sketch<float> sketch2(128);
+    kll_float_sketch sketch1(256);
+    kll_float_sketch sketch2(128);
     const int n = 10000;
     for (int i = 0; i < n; i++) {
       sketch1.update(i);
@@ -439,8 +456,8 @@ class kll_sketch_test: public CppUnit::TestFixture {
   }
 
   void merge_min_value_from_other() {
-    kll_sketch<float> sketch1;
-    kll_sketch<float> sketch2;
+    kll_float_sketch sketch1;
+    kll_float_sketch sketch2;
     sketch1.update(1);
     sketch2.update(2);
     sketch2.merge(sketch1);
@@ -449,9 +466,9 @@ class kll_sketch_test: public CppUnit::TestFixture {
   }
 
   void merge_min_and_max_from_other() {
-    kll_sketch<float> sketch1;
+    kll_float_sketch sketch1;
     for (int i = 0; i < 1000000; i++) sketch1.update(i);
-    kll_sketch<float> sketch2;
+    kll_float_sketch sketch2;
     sketch2.merge(sketch1);
     CPPUNIT_ASSERT_EQUAL(0.0f, sketch2.get_min_value());
     CPPUNIT_ASSERT_EQUAL(999999.0f, sketch2.get_max_value());
@@ -486,7 +503,7 @@ class kll_sketch_test: public CppUnit::TestFixture {
   }
 
   void sketch_of_strings() {
-    kll_sketch<std::string> sketch;
+    kll_string_sketch sketch;
     CPPUNIT_ASSERT_THROW(sketch.get_quantile(0), std::runtime_error);
     CPPUNIT_ASSERT_THROW(sketch.get_min_value(), std::runtime_error);
     CPPUNIT_ASSERT_THROW(sketch.get_max_value(), std::runtime_error);
@@ -501,7 +518,7 @@ class kll_sketch_test: public CppUnit::TestFixture {
     std::stringstream s(std::ios::in | std::ios::out | std::ios::binary);
     sketch.serialize(s);
     CPPUNIT_ASSERT_EQUAL(sketch.get_serialized_size_bytes(), (uint32_t) s.tellp());
-    auto sketch2 = kll_sketch<std::string>::deserialize(s);
+    auto sketch2 = kll_string_sketch::deserialize(s);
     CPPUNIT_ASSERT_EQUAL(sketch2.get_serialized_size_bytes(), (uint32_t) s.tellg());
     CPPUNIT_ASSERT_EQUAL(s.tellp(), s.tellg());
     CPPUNIT_ASSERT_EQUAL(sketch.is_empty(), sketch2.is_empty());


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org