public bool MoveNext()
            {
                if (_position >= _uniqueKeys.Length)
                {
                    return(false);
                }

                var currentKey = _uniqueKeys.Get(_position);

                var groupLocalList = new LocalList <T>();

                for (var i = 0; i < _values.Length; i++)
                {
                    var value = _values.Get(i);
                    if (_comparer.Equals(currentKey, value.Key))
                    {
                        groupLocalList.Add(value.Value);
                    }
                }

                _current = new LocalGroup(currentKey, groupLocalList);
                _position++;

                return(true);
            }
Ejemplo n.º 2
0
        public void Contains_WithComparer <T>(T item)
        {
            var localList = new LocalList <T>();

            localList.Add(item);

            Assert.True(localList.Contains(item, EqualityComparer <T> .Default));
        }
Ejemplo n.º 3
0
        public void Contains <T>(T item)
        {
            var localList = new LocalList <T>();

            localList.Add(item);

            Assert.True(localList.Contains(item));
        }
Ejemplo n.º 4
0
        public void Any_AvoidClosure(int[] items)
        {
            var localList = new LocalList <int>();

            foreach (var item in items)
            {
                localList.Add(item);
                Assert.True(localList.Any((e, i) => e == i, item));
            }
        }
Ejemplo n.º 5
0
        public void First_AvoidClosure(int[] items)
        {
            var localList = new LocalList <int>();

            foreach (var item in items)
            {
                localList.Add(item);
                Assert.Equal(item, localList.First((e, i) => e == i, item));
            }
        }
Ejemplo n.º 6
0
            public TResult[] ToArray()
            {
                var localList = new LocalList <TResult>();

                while (MoveNext())
                {
                    localList.Add(_current);
                }

                return(localList.ToArray());
            }
Ejemplo n.º 7
0
        public void Any(int[] items)
        {
            var localList = new LocalList <int>();

            foreach (var item in items)
            {
                localList.Add(item);
                // ReSharper disable once HeapView.CanAvoidClosure
                Assert.True(localList.Any(e => e == item));
            }
        }
Ejemplo n.º 8
0
            public LocalList <TValue> Select <TValue>(Func <TResult, TValue> selector)
            {
                var localList = new LocalList <TValue>();

                while (MoveNext())
                {
                    localList.Add(selector(_current));
                }

                return(localList);
            }
Ejemplo n.º 9
0
        public void First(int[] items)
        {
            var localList = new LocalList <int>();

            foreach (var item in items)
            {
                localList.Add(item);
                // ReSharper disable once HeapView.CanAvoidClosure
                Assert.Equal(item, localList.First(e => e == item));
            }
        }
Ejemplo n.º 10
0
            public LocalList <TResult> Select <TResult>(Selector <TResult> selector)
            {
                var result = new LocalList <TResult>(_uniqueKeys._length);

                while (MoveNext())
                {
                    var element = selector(_current);
                    result.Add(element);
                }

                return(result);
            }
Ejemplo n.º 11
0
            public LocalList <TValue> OrderBy <TProperty>(Func <TValue, TProperty> path,
                                                          Comparer <TProperty> comparer = null)
            {
                var localList = new LocalList <TValue>();

                while (_enumerator.MoveNext())
                {
                    localList.Add(_selector(_enumerator.Current));
                }

                localList.Sort(path, comparer);
                return(localList);
            }
Ejemplo n.º 12
0
            public LocalList <TResult> OrderBy <TProperty>(Func <TResult, TProperty> path,
                                                           Comparer <TProperty> comparer = null)
            {
                var localList = new LocalList <TResult>();

                while (MoveNext())
                {
                    localList.Add(_current);
                }

                localList.Sort(path, comparer);
                return(localList);
            }
Ejemplo n.º 13
0
        public void Length(int[] items)
        {
            var localList = new LocalList <int>();

            Assert.Equal(0, localList.Length);

            for (var i = 0; i < items.Length; i++)
            {
                localList.Add(items[i]);
                Assert.Equal(i + 1, localList.Length);
            }

            Assert.Equal(items.Length, localList.Length);
        }
Ejemplo n.º 14
0
            public LocalList <TResult> Where <TArg>(Func <TResult, TArg, bool> predicate, TArg arg)
            {
                var localList = new LocalList <TResult>();

                while (MoveNext())
                {
                    if (predicate(_current, arg))
                    {
                        localList.Add(_current);
                    }
                }

                return(localList);
            }
Ejemplo n.º 15
0
            public LocalList <TResult> Where(Predicate <TResult> predicate)
            {
                var localList = new LocalList <TResult>();

                while (MoveNext())
                {
                    if (predicate(_current))
                    {
                        localList.Add(_current);
                    }
                }

                return(localList);
            }
Ejemplo n.º 16
0
        public void GetEnumerator(int[] items)
        {
            var localList = new LocalList <int>();

            foreach (var item in items)
            {
                localList.Add(item);
            }

            foreach (var element in localList)
            {
                Assert.Contains(element, items);
            }
        }
Ejemplo n.º 17
0
        public void Clear(int[] items)
        {
            var localList = new LocalList <int>();

            foreach (var item in items)
            {
                localList.Add(item);
            }

            localList.Clear();

            Assert.True(localList.Length == 0);
            Assert.Equal(0, localList.Length);
        }
Ejemplo n.º 18
0
            public LocalList <TValue> Where(Predicate <TValue> predicate)
            {
                var localList = new LocalList <TValue>();

                while (_enumerator.MoveNext())
                {
                    var current = _selector(_enumerator.Current);
                    if (predicate(current))
                    {
                        localList.Add(current);
                    }
                }

                return(localList);
            }
Ejemplo n.º 19
0
            public LocalList <TValue> Where <TArg>(Func <TValue, TArg, bool> predicate, TArg arg)
            {
                var localList = new LocalList <TValue>();

                while (_enumerator.MoveNext())
                {
                    var current = _selector(_enumerator.Current);
                    if (predicate(current, arg))
                    {
                        localList.Add(current);
                    }
                }

                return(localList);
            }
Ejemplo n.º 20
0
            public LocalList <TValue> Select <TValue>(Func <T, TValue> selector)
            {
                var localList = new LocalList <TValue>();

                while (_enumerator.MoveNext())
                {
                    var current = _enumerator.Current;
                    if (_predicate(current))
                    {
                        localList.Add(selector(current));
                    }
                }

                return(localList);
            }
Ejemplo n.º 21
0
            public                T[] ToArray()
            {
                var localList = new LocalList <T>(_enumerator.Length);

                while (_enumerator.MoveNext())
                {
                    var current = _enumerator.Current;
                    if (_predicate(current))
                    {
                        localList.Add(current);
                    }
                }

                return(localList.ToArray());
            }
Ejemplo n.º 22
0
        public void Add_Many(int count)
        {
            count = FixCount(count);

            var localList = new LocalList <int>();
            var items     = Enumerable.Range(0, count).ToArray();

            foreach (var item in items)
            {
                localList.Add(item);
                Assert.True(localList.Contains(item));
            }

            Assert.Equal(items.Length, localList.Length);
        }
Ejemplo n.º 23
0
            public LocalList <T> OrderBy <TProperty>(Func <T, TProperty> path, Comparer <TProperty> comparer = null)
            {
                var localList = new LocalList <T>();

                while (_enumerator.MoveNext())
                {
                    var current = _enumerator.Current;
                    if (_predicate(current))
                    {
                        localList.Add(current);
                    }
                }

                localList.Sort(path, comparer);
                return(localList);
            }
Ejemplo n.º 24
0
            public LocalList <TValue> .JoinEnumerator <TResult, TInner, TKey> Join <TResult, TInner, TKey>(
                LocalList <TInner> inner,
                Func <TValue, TKey> outerKeySelector,
                Func <TInner, TKey> innerKeySelector,
                Func <TValue, TInner, TResult> resultBuilder,
                EqualityComparer <TKey> keyComparer = null)
            {
                var outer = new LocalList <TValue>();

                while (_enumerator.MoveNext())
                {
                    outer.Add(_selector(_enumerator.Current));
                }

                return(outer.Join(inner, outerKeySelector, innerKeySelector, resultBuilder, keyComparer));
            }
Ejemplo n.º 25
0
            public LocalList <TResult> .GroupEnumerator <TGroupKey> GroupBy <TGroupKey>(
                Func <TResult, TGroupKey> keySelector,
                EqualityComparer <TGroupKey> keyComparer = null)
            {
                var localList = new LocalList <TResult>();

                while (MoveNext())
                {
                    localList.Add(_current);
                }

                if (keyComparer == null)
                {
                    keyComparer = EqualityComparer <TGroupKey> .Default;
                }
                return(new LocalList <TResult> .GroupEnumerator <TGroupKey>(localList, keySelector, keyComparer));
            }
Ejemplo n.º 26
0
        public void Mix()
        {
            var items = new LocalList <int>();

            for (var i = 0; i < 100; i++)
            {
                items.Add(i);
                Assert.True(items.Contains(i));

                if (i % 2 != 0)
                {
                    continue;
                }

                Assert.True(items.Remove(i));
                Assert.False(items.Contains(i));
            }
        }
Ejemplo n.º 27
0
            public JoinEnumerator <TResult, TInner, TKey> Join <TResult, TInner, TKey>(
                LocalList <TInner> inner,
                Func <T, TKey> outerKeySelector,
                Func <TInner, TKey> innerKeySelector,
                Func <T, TInner, TResult> resultBuilder,
                EqualityComparer <TKey> keyComparer = null)
            {
                var outer = new LocalList <T>();

                while (_enumerator.MoveNext())
                {
                    var current = _enumerator.Current;
                    if (_predicate(current))
                    {
                        outer.Add(current);
                    }
                }

                return(outer.Join(inner, outerKeySelector, innerKeySelector, resultBuilder, keyComparer));
            }
Ejemplo n.º 28
0
        public void Mix_Many(int count)
        {
            count = FixCount(count);

            var localList = new LocalList <int>();

            for (var i = 0; i < count; i++)
            {
                localList.Add(i);
                Assert.True(localList.Contains(i));

                if (i % 2 != 0)
                {
                    continue;
                }

                Assert.True(localList.Remove(i));
                Assert.False(localList.Contains(i));
            }
        }
Ejemplo n.º 29
0
            internal GroupEnumerator(LocalList <T> list, Func <T, TKey> keySelector, EqualityComparer <TKey> comparer)
            {
                var values     = new LocalList <Row <TKey, T> >(list.Length);
                var uniqueKeys = new LocalList <TKey>();

                for (var i = 0; i < list.Length; i++)
                {
                    var element = list.Get(i);
                    var key     = keySelector(element);

                    values.Add(new Row <TKey, T>(key, element));

                    if (!uniqueKeys.Contains(key, comparer))
                    {
                        uniqueKeys.Add(key);
                    }
                }

                _comparer   = comparer;
                _current    = default;
                _position   = 0;
                _values     = values;
                _uniqueKeys = uniqueKeys;
            }