Exemplo n.º 1
0
 private static void TstDecodeAllPrev(long[] values, EliasFanoDecoder efd)
 {
     efd.ToAfterSequence();
     for (int i = values.Length - 1; i >= 0; i--)
     {
         long previousValue = efd.PreviousValue();
         Assert.IsFalse(EliasFanoDecoder.NO_MORE_VALUES == previousValue, "previousValue at end too early");
         Assert.AreEqual(values[i], previousValue);
     }
     Assert.AreEqual(EliasFanoDecoder.NO_MORE_VALUES, efd.PreviousValue());
 }
Exemplo n.º 2
0
        private static void TstDecodeBackToMultiples(long[] values, EliasFanoDecoder efd, long m)
        {
            // test backing to multiples of m
            Debug.Assert(m > 0);
            efd.ToAfterSequence();
            int index = values.Length - 1;

            if (index < 0)
            {
                long advanceValue = efd.BackToValue(0);
                Assert.AreEqual(EliasFanoDecoder.NO_MORE_VALUES, advanceValue);
                return; // empty values, nothing to go back to/from
            }
            long expValue      = values[index];
            long previousValue = expValue + 1;
            long mm            = (expValue / m) * m;

            while (index >= 0)
            {
                expValue = values[index];
                Debug.Assert(mm < previousValue);
                if (expValue <= mm)
                {
                    long backValue_ = efd.BackToValue(mm);
                    Assert.IsFalse(EliasFanoDecoder.NO_MORE_VALUES == backValue_, "backToValue at end too early");
                    Assert.AreEqual(expValue, backValue_);
                    Assert.AreEqual(index, efd.CurrentIndex());
                    previousValue = expValue;
                    do
                    {
                        mm -= m;
                    } while (mm >= previousValue);
                }
                index--;
            }
            long backValue = efd.BackToValue(mm);

            Assert.AreEqual(EliasFanoDecoder.NO_MORE_VALUES, backValue);
        }
Exemplo n.º 3
0
 private static void TstDecodeBackToMultiples(long[] values, EliasFanoDecoder efd, long m)
 {
     // test backing to multiples of m
     Debug.Assert(m > 0);
     efd.ToAfterSequence();
     int index = values.Length - 1;
     if (index < 0)
     {
         long advanceValue = efd.BackToValue(0);
         Assert.AreEqual(EliasFanoDecoder.NO_MORE_VALUES, advanceValue);
         return; // empty values, nothing to go back to/from
     }
     long expValue = values[index];
     long previousValue = expValue + 1;
     long mm = (expValue / m) * m;
     while (index >= 0)
     {
         expValue = values[index];
         Debug.Assert(mm < previousValue);
         if (expValue <= mm)
         {
             long backValue_ = efd.BackToValue(mm);
             Assert.IsFalse(EliasFanoDecoder.NO_MORE_VALUES == backValue_, "backToValue at end too early");
             Assert.AreEqual(expValue, backValue_);
             Assert.AreEqual(index, efd.CurrentIndex());
             previousValue = expValue;
             do
             {
                 mm -= m;
             } while (mm >= previousValue);
         }
         index--;
     }
     long backValue = efd.BackToValue(mm);
     Assert.AreEqual(EliasFanoDecoder.NO_MORE_VALUES, backValue);
 }