Пример #1
0
        public void deleting_a_value_from_a_path()
        {
            var subject = new ReverseTrie <SerialGuid>();

            var val1 = SerialGuid.Wrap(Guid.NewGuid());
            var val2 = SerialGuid.Wrap(Guid.NewGuid());

            subject.Add("Deleted: no", val1);
            subject.Add("Deleted: yes", val2);

            subject.Delete("Deleted: yes");
            subject.Delete("Not present"); // ok to try non-paths

            // Get
            Assert.That(subject.Get("Deleted: no"), Is.EqualTo(val1), "Failed to find data to a known path");
            Assert.That(subject.Get("Deleted: yes"), Is.Null, "Should have been removed, but it's still there");

            // Search
            var all = string.Join(",", subject.Search("Deleted"));

            Assert.That(all, Is.EqualTo("Deleted: no"));

            // Look-up
            Assert.That(subject.GetPathsForEntry(val2), Is.Empty, "Value cache was not updated");
            Assert.That(subject.GetPathsForEntry(val1), Is.Not.Empty, "Value cache was destroyed?");
        }
Пример #2
0
        public void query_exact_path()
        {
            var subject = new ReverseTrie <SerialGuid>();

            var val1 = SerialGuid.Wrap(Guid.NewGuid());
            var val2 = SerialGuid.Wrap(Guid.NewGuid());
            var val3 = SerialGuid.Wrap(Guid.NewGuid());
            var val4 = SerialGuid.Wrap(Guid.NewGuid());

            subject.Add("Hello world", val1);
            subject.Add("Hello Dave", val2);
            subject.Add("Jello world", val3);
            subject.Add("Hello worldly goods", val4);

            var result1 = subject.Get("Hello Dave");
            var result2 = subject.Get("Hello Sam");

            Assert.That(result1, Is.EqualTo(val2), "Failed to find data to a known path");
            Assert.That(result2, Is.Null, "Was given a result to a path that was not added");
        }
Пример #3
0
        public void serialisation_and_restoring()
        {
            var subject   = new ReverseTrie <ByteString>();
            var rawLength = 0;

            // Fill it up
            for (int i = 0; i < 100; i++)
            {
                var key   = $"Path number {i}";
                var value = $"{i}";

                rawLength += key.Length + value.Length;

                subject.Add(key, ByteString.Wrap(value));
            }

            var frozen = subject.Freeze();

            frozen.Seek(0, SeekOrigin.Begin);

            Console.WriteLine($"Encoding 100 paths in {frozen.Length} bytes. Raw input was {rawLength} bytes");
            Console.WriteLine(frozen.ToHexString());
            subject = null;

            var result = new ReverseTrie <ByteString>();

            frozen.Seek(0, SeekOrigin.Begin);
            result.Defrost(frozen);

            // Check every result
            for (int i = 0; i < 100; i++)
            {
                var key      = $"Path number {i}";
                var expected = $"{i}";
                Assert.That(result.Get(key)?.ToString(), Is.EqualTo(expected), $"Lost data at path '{key}'");
            }
        }