]> granicus.if.org Git - re2c/commitdiff
Updated range test.
authorUlya Trofimovich <skvadrik@gmail.com>
Sun, 6 Jan 2019 16:44:45 +0000 (16:44 +0000)
committerUlya Trofimovich <skvadrik@gmail.com>
Sun, 6 Jan 2019 16:44:45 +0000 (16:44 +0000)
re2c/src/test/range/test-impl.h
re2c/src/test/range/test.cc
re2c/src/test/range/test.h
re2c/src/util/fixed_allocator.h
re2c/src/util/range.h

index 0a16f0b5351ad729c3da320b901d3ba1c94c97b4..c592ee8cda8899d2cb82fe3ff6b3ea5cb7ad70be 100644 (file)
@@ -5,6 +5,7 @@
 #include "src/util/range.h"
 #include "src/util/static_assert.h"
 
+
 namespace re2c_test {
 
 static inline bool bit_set (uint32_t n, uint32_t bit)
@@ -13,7 +14,7 @@ static inline bool bit_set (uint32_t n, uint32_t bit)
 }
 
 template <uint8_t BITS>
-re2c::Range * range (uint32_t n)
+re2c::Range *range(re2c::RangeMgr &rm, uint32_t n)
 {
     RE2C_STATIC_ASSERT (BITS <= 31);
 
@@ -28,21 +29,21 @@ re2c::Range * range (uint32_t n)
         }
         const uint32_t lb = i;
         for (; i < BITS && bit_set (n, i); ++i);
-        re2c::Range::append (p, lb, i);
+        rm.append(p, lb, i);
     }
     return r;
 }
 
 template <uint8_t BITS>
-re2c::Range * add (uint32_t n1, uint32_t n2)
+re2c::Range * add (re2c::RangeMgr &rm, uint32_t n1, uint32_t n2)
 {
-    return range<BITS> (n1 | n2);
+    return range<BITS> (rm, n1 | n2);
 }
 
 template <uint8_t BITS>
-re2c::Range * sub (uint32_t n1, uint32_t n2)
+re2c::Range * sub (re2c::RangeMgr &rm, uint32_t n1, uint32_t n2)
 {
-    return range<BITS> (n1 & ~n2);
+    return range<BITS> (rm, n1 & ~n2);
 }
 
 } // namespace re2c_test
index 18181b7a4ce971ad7dfa3a4d46deb8ce33477636..d5821dc4371632608628a56919f8d8d1bc6185e4 100644 (file)
@@ -68,18 +68,17 @@ static int32_t diff
 static int32_t test ()
 {
     int32_t ok = 0;
+    re2c::RangeMgr rm;
 
     static const uint32_t BITS = 8;
     static const uint32_t N = 1u << BITS;
-    for (uint32_t i = 0; i <= N; ++i)
-    {
-        for (uint32_t j = 0; j <= N; ++j)
-        {
-            re2c::Range * r1 = range<BITS> (i);
-            re2c::Range * r2 = range<BITS> (j);
-            ok |= diff (r1, r2, add<BITS> (i, j), re2c::Range::add (r1, r2), "U");
-            ok |= diff (r1, r2, sub<BITS> (i, j), re2c::Range::sub (r1, r2), "D");
-            re2c::Range::vFreeList.clear ();
+    for (uint32_t i = 0; i <= N; ++i) {
+        for (uint32_t j = 0; j <= N; ++j) {
+            re2c::Range * r1 = range<BITS>(rm, i);
+            re2c::Range * r2 = range<BITS>(rm, j);
+            ok |= diff (r1, r2, add<BITS>(rm, i, j), rm.add(r1, r2), "U");
+            ok |= diff (r1, r2, sub<BITS>(rm, i, j), rm.sub(r1, r2), "D");
+            rm.clear();
         }
     }
 
index 18aa1aca73bbf0946ca76f8315b5d13b942e82c9..a6391a8c75c12cb55fb70dfbf7e64c3dc7a18568 100644 (file)
@@ -3,7 +3,13 @@
 
 #include "src/util/c99_stdint.h"
 
-namespace re2c { class Range; }
+
+namespace re2c {
+
+class Range;
+class RangeMgr;
+
+}
 
 namespace re2c_test {
 
@@ -17,9 +23,9 @@ namespace re2c_test {
  * bitwise OR of two classes, subtraction is bitwise AND of the first
  * class and negated second class.
  */
-template <uint8_t BITS> re2c::Range * range (uint32_t n);
-template <uint8_t BITS> re2c::Range * add (uint32_t n1, uint32_t n2);
-template <uint8_t BITS> re2c::Range * sub (uint32_t n1, uint32_t n2);
+template <uint8_t BITS> re2c::Range *range(re2c::RangeMgr &rm, uint32_t n);
+template <uint8_t BITS> re2c::Range *add(re2c::RangeMgr &rm, uint32_t n1, uint32_t n2);
+template <uint8_t BITS> re2c::Range *sub(re2c::RangeMgr &rm, uint32_t n1, uint32_t n2);
 
 } // namespace re2c_test
 
index 81a667e9d3b461b1f193716f67009ba27a738d15..e03583461a2c3eada5b8cdeff800964e742cb328 100644 (file)
@@ -16,10 +16,7 @@ class fixed_allocator_t
     size_t index;
 
 public:
-    fixed_allocator_t(): slabs(), index(0)
-    {
-        slabs.push_back(new_slab());
-    }
+    fixed_allocator_t(): slabs(), index(SLAB_SIZE) {}
 
     ~fixed_allocator_t() { clear(); }
 
@@ -31,7 +28,7 @@ public:
             operator delete(*i);
         }
         slabs.clear();
-        index = 0;
+        index = SLAB_SIZE;
     }
 
     T *alloc()
index 82177070c8cfdf8f55cbfed4b8a7a7478980eca4..2d86440e3fc60d09c833644589305243df2b3c6b 100644 (file)
@@ -27,7 +27,6 @@ public:
 
 private:
     friend class RangeMgr;
-    template<uint8_t> friend Range *re2c_test::range(uint32_t n);
 
     // not default- or copy-constructible
     Range();
@@ -51,6 +50,8 @@ private:
     Range *make(Range *n, uint32_t l, uint32_t u);
     void append_overlapping(Range *&head, Range *&tail, const Range *r);
     void append(Range **&ptail, uint32_t l, uint32_t u);
+
+    template<uint8_t> friend Range *re2c_test::range(RangeMgr &rm, uint32_t n);
 };
 
 inline Range *RangeMgr::make(Range *n, uint32_t l, uint32_t u)