Example #1
0
        public void TestTopk()
        {
            var topK = new TopK(0.001, 0.99, 5);

            topK.Add(BOB_BYTES).Add(BOB_BYTES).Add(BOB_BYTES);
            topK.Add(TYLER_BYTES).Add(TYLER_BYTES).Add(TYLER_BYTES).Add(TYLER_BYTES).Add(TYLER_BYTES);
            topK.Add(FRED_BYTES);
            topK.Add(ALICE_BYTES).Add(ALICE_BYTES).Add(ALICE_BYTES).Add(ALICE_BYTES);
            topK.Add(JAMES_BYTES);
            topK.Add(FRED_BYTES);
            topK.Add(SARA_BYTES).Add(SARA_BYTES);

            var addedK = topK.Add(BILL_BYTES);

            Assert.AreSame(topK, addedK);
            // latest one also
            var expected = new ProbabilisticDataStructures.Element[] {
                new ProbabilisticDataStructures.Element {
                    Data = BILL_BYTES, Freq = 1
                },
                new ProbabilisticDataStructures.Element {
                    Data = SARA_BYTES, Freq = 2
                },
                new ProbabilisticDataStructures.Element {
                    Data = BOB_BYTES, Freq = 3
                },
                new ProbabilisticDataStructures.Element {
                    Data = ALICE_BYTES, Freq = 4
                },
                new ProbabilisticDataStructures.Element {
                    Data = TYLER_BYTES, Freq = 5
                },
            };

            var actual = topK.Elements();

            Assert.AreEqual(5, actual.Length);

            for (int i = 0; i < actual.Length; i++)
            {
                var element = actual[i];
                Assert.IsTrue(Enumerable.SequenceEqual(element.Data, expected[i].Data));
                // freq check
                Assert.AreEqual(expected[i].Freq, element.Freq);
            }

            var resetK = topK.Reset();

            Assert.AreSame(topK, resetK);

            Assert.AreEqual(0, topK.Elements().Length);
            Assert.AreEqual(0u, topK.N);
        }
Example #2
0
        public void BenchmarkTopKAdd()
        {
            var n    = 100000;
            var topK = new TopK(0.001, 0.99, 5);
            var data = new byte[n][];

            for (int i = 0; i < n; i++)
            {
                data[i] = Encoding.ASCII.GetBytes(i.ToString());
            }

            for (int i = 0; i < n; i++)
            {
                topK.Add(data[i]);
            }
        }