Пример #1
0
        public async Task AddMultipleNonUnique_GetByQuery_ContainsOnlyUnique(int tasksCount)
        {
            using var index = new StringIndex <string>();
            var inputs = new Dictionary <string, IEnumerable <string> >();

            for (var i = 0; i < tasksCount; i++)
            {
                var nonUnique = Guid.NewGuid().ToString();
                inputs[Guid.NewGuid().ToString()] = new[] { nonUnique, nonUnique, nonUnique, nonUnique };
            }

            var tasks = new List <Task>();

            foreach (var(q, input) in inputs)
            {
                tasks.Add(Task.Run(() => index.Add(q, input.Take(2))));
                tasks.Add(Task.Run(() => index.Add(q, input.Skip(2))));
            }

            await Task.WhenAll(tasks);

            var getTasks = inputs.Keys.Select(q => Task.Run(() => new { Query = q, Result = index.Get(q) })).ToList();

            await Task.WhenAll(getTasks);

            foreach (var task in getTasks)
            {
                var(query, result) = (task.Result.Query, task.Result.Result);
                var input = inputs[query].ToList();
                Assert.All(input, x => Assert.Contains(x, result));
                Assert.Equal(1, result.Count);
                Assert.NotEqual(input.Count, result.Count);
                Assert.Equal(new HashSet <string>(input), result);
            }
        }
Пример #2
0
        public async Task OnAddEmpty_AddEventNotInvoked(int tasksCount)
        {
            using var index = new StringIndex <string>();
            var inputs = new Dictionary <string, IEnumerable <string> >();

            for (var i = 0; i < tasksCount; i++)
            {
                inputs[Guid.NewGuid().ToString()] = new string[0];
            }

            var triggered = 0;

            index.Added += (q, values) =>
            {
                var input = inputs[q];
                Assert.Equal(input, values);
                Interlocked.Increment(ref triggered);
            };

            var tasks = new List <Task>();

            foreach (var(q, input) in inputs)
            {
                tasks.Add(Task.Run(() => index.Add(q, input)));
            }

            await Task.WhenAll(tasks);

            Assert.Equal(0, triggered);
        }
Пример #3
0
        public async Task Flush_GetByQuery_ReturnsEmpty(int tasksCount)
        {
            using var index = new StringIndex <string>();
            var inputs = new Dictionary <string, IEnumerable <string> >();

            for (var i = 0; i < tasksCount; i++)
            {
                inputs[Guid.NewGuid().ToString()] = new []
                {
                    Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(),
                                               Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString()
                }
            }
            ;

            var tasks = new List <Task>();

            foreach (var(q, input) in inputs)
            {
                tasks.Add(Task.Run(() => index.Add(q, input)));
            }

            await Task.WhenAll(tasks);

            await Task.Run(() => index.Flush());

            var getTasks = inputs.Keys.Select(x => Task.Run(() => index.Get(x))).ToList();

            await Task.WhenAll(getTasks);

            foreach (var task in getTasks)
            {
                Assert.Empty(task.Result);
            }
        }
Пример #4
0
        public async Task OnAdd_AddEventInvoked_ReturnedAddedValue(int tasksCount)
        {
            using var index = new StringIndex <string>();
            var inputs = new Dictionary <string, string>();

            for (var i = 0; i < tasksCount; i++)
            {
                inputs[Guid.NewGuid().ToString()] = Guid.NewGuid().ToString();
            }

            var triggered = 0;

            index.Added += (q, values) =>
            {
                var input = inputs[q];
                Assert.Equal(new [] { input }, values);
                Interlocked.Increment(ref triggered);
            };

            var tasks = new List <Task>();

            foreach (var(q, input) in inputs)
            {
                tasks.Add(Task.Run(() => index.Add(q, input)));
            }

            await Task.WhenAll(tasks);

            Assert.Equal(tasksCount, triggered);
        }
Пример #5
0
        public async Task AddMultipleUnique_GetByQuery_EqualsWithInput(int tasksCount)
        {
            using var index = new StringIndex <string>();
            var inputs = new Dictionary <string, IEnumerable <string> >();

            for (var i = 0; i < tasksCount; i++)
            {
                inputs[Guid.NewGuid().ToString()] = new [] { Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString() }
            }
            ;

            var tasks = new List <Task>();

            foreach (var(q, input) in inputs)
            {
                tasks.Add(Task.Run(() => index.Add(q, input)));
            }

            await Task.WhenAll(tasks);

            var getTasks = inputs.Keys.Select(q => Task.Run(() => new { Query = q, Result = index.Get(q) })).ToList();

            await Task.WhenAll(getTasks);

            foreach (var task in getTasks)
            {
                var(query, result) = (task.Result.Query, task.Result.Result);
                var input = inputs[query];
                Assert.All(input, x => Assert.Contains(x, result));
            }
        }
Пример #6
0
        public void AddNull_DoNothing()
        {
            using var index = new StringIndex <string>();
            index.Add(null, new string[0]);

            var result = index.Get(null);

            Assert.Empty(result);
        }
Пример #7
0
        public void Contains_ReturnIfContain()
        {
            var existed    = "existed";
            var notExisted = "notExisted";

            using var index = new StringIndex <string>();
            index.Add(existed, Guid.NewGuid().ToString());

            Assert.True(index.Contains(existed));
            Assert.False(index.Contains(notExisted));
        }
Пример #8
0
        public async Task RemoveMultiple_GetByQuery_NotContainsRemoved(int tasksCount)
        {
            var skipTake = 3;

            using var index = new StringIndex <string>();
            var inputs = new Dictionary <string, IEnumerable <string> >();

            for (var i = 0; i < tasksCount; i++)
            {
                inputs[Guid.NewGuid().ToString()] = new []
                {
                    Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(),
                                               Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString()
                }
            }
            ;

            var tasks = new List <Task>();

            foreach (var(q, input) in inputs)
            {
                tasks.Add(Task.Run(() => index.Add(q, input)));
            }

            await Task.WhenAll(tasks);

            var removeTasks = new List <Task>();

            foreach (var(q, input) in inputs)
            {
                removeTasks.Add(Task.Run(() => index.Remove(q, input.Take(skipTake))));
            }

            await Task.WhenAll(removeTasks);

            var getTasks = inputs.Keys.Select(q => Task.Run(() => new { Query = q, Result = index.Get(q) })).ToList();

            await Task.WhenAll(getTasks);

            foreach (var task in getTasks)
            {
                var(query, result) = (task.Result.Query, task.Result.Result);
                var input = inputs[query].ToList();
                Assert.All(input.Skip(skipTake), x => Assert.Contains(x, result));
                Assert.All(input.Take(skipTake), x => Assert.DoesNotContain(x, result));
                Assert.Equal(input.Count - skipTake, result.Count);
            }
        }
    public void AddAndSearchValues()
    {
        var si = new StringIndex();

        si.Add("abcdef", "1");
        si.Add("abcdeff", "2");
        si.Add("abcdeffg", "3");
        si.Add("bcdef", "4");
        si.Add("bcdefg", "5");
        si.Add("cdefg", "6");
        si.Add("cdefgh", "7");
        var output = si.GetValuesByPrefixFlattened("abc");

        Assert.IsTrue(output.Contains("1") && output.Contains("2") && output.Contains("3"));
    }
    public void Clear()
    {
        var si = new StringIndex();

        si.Add("abcdef", "1");
        si.Add("abcdeff", "2");
        si.Add("abcdeffg", "3");
        si.Add("bcdef", "4");
        si.Add("bcdefg", "5");
        si.Add("cdefg", "6");
        si.Add("cdefgh", "7");
        si.Clear();
        var output = si.GetValuesByPrefix("abc");

        Assert.IsTrue(output.Count == 0);
    }
    public void AddAndSearchValuesCount()
    {
        var si = new StringIndex();

        si.Add("abcdef", "1");
        si.Add("abcdeff", "2");
        si.Add("abcdeffg", "3");
        si.Add("bcdef", "4");
        si.Add("bcdefg", "5");
        si.Add("cdefg", "6");
        si.Add("cdefgh", "7");
        si.Remove("cdefgh", "7");
        var output1 = si.GetValuesByPrefixCount("abc");
        var output2 = si.GetValuesByPrefixCount("b");
        var output3 = si.GetValuesByPrefixCount("bc");
        var output4 = si.GetValuesByPrefixCount("ca");

        Assert.IsTrue(output1 == 3 && output2 == 2 && output3 == 2 && output4 == 0);
    }
Пример #12
0
        public async Task OnRemoveAll_RemoveEventInvoked_ReturnedRemovedValues(int tasksCount)
        {
            using var index = new StringIndex <string>();
            var inputs = new Dictionary <string, IEnumerable <string> >();

            for (var i = 0; i < tasksCount; i++)
            {
                inputs[Guid.NewGuid().ToString()] = new [] { Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString() }
            }
            ;

            foreach (var(q, input) in inputs)
            {
                index.Add(q, input);
            }

            var triggered = 0;

            index.Removed += (q, values) =>
            {
                var input = inputs[q];
                Assert.All(input, x => Assert.Contains(x, values));
                Interlocked.Increment(ref triggered);
            };

            var tasks = new List <Task>();

            foreach (var(q, _) in inputs)
            {
                tasks.Add(Task.Run(() => index.RemoveAll(q, out _)));
            }

            await Task.WhenAll(tasks);

            Assert.Equal(tasksCount, triggered);
        }
    }