public void to_list_string()
        {
            Assert.Throws <ArgumentNullException>(() => CollectionsExtensions.ToListString <object>(null));

            Assert.Equal("[]", Enumerable.Empty <object>().ToListString());
            Assert.Equal("[1]", new[] { 1 }.ToListString());
            Assert.Equal("[1, 2, 3]", new [] { 1, 2, 3 }.ToListString());
        }
        public void bytes()
        {
            Assert.Throws <ArgumentNullException>(() => CollectionsExtensions.Bytes(null));

            var text = Guid.NewGuid().ToString();

            Assert.Equal(text.ToCharArray().Bytes(Encoding.Unicode).Length * 2, text.ToCharArray().Bytes(Encoding.UTF32).Length);
            Assert.Equal(text, text.ToCharArray().Bytes(Encoding.Unicode).String(Encoding.Unicode));
        }
        public void base64()
        {
            Assert.Throws <ArgumentNullException>(() => CollectionsExtensions.Base64(null));

            var bytes = Guid.NewGuid().ToByteArray();

            Assert.Equal(string.Empty, Enumerable.Empty <byte>().ToArray().Base64());
            Assert.Equal(System.Convert.ToBase64String(bytes), bytes.Base64());
        }
        public void hex()
        {
            Assert.Throws <ArgumentNullException>(() => CollectionsExtensions.Hex(null));

            var bytes = Guid.NewGuid().ToByteArray();

            Assert.Equal(string.Empty, Enumerable.Empty <byte>().ToArray().Hex());
            Assert.Equal(bytes.Length * 2, bytes.Hex().Length);
            Assert.True(bytes.Hex().IsMatch("[0-9A-Z]"));
        }
        public void to_string()
        {
            Assert.Throws <ArgumentNullException>(() => CollectionsExtensions.String(null));
            Assert.Throws <ArgumentNullException>(() => CollectionsExtensions.String(null, Encoding.Default));

            var text = Guid.NewGuid().ToString();

            Assert.Equal(text, text.ToCharArray().String());
            Assert.Equal(text, Encoding.Default.GetBytes(text).String());
            Assert.Equal(text, Encoding.Unicode.GetBytes(text).String(Encoding.Unicode));
        }
        public void join_enumerable()
        {
            Assert.Throws <ArgumentNullException>(() => CollectionsExtensions.Join(null, Enumerable.Empty <object>().ToArray()));
            Assert.Throws <ArgumentNullException>(() => Enumerable.Empty <object>().ToArray().Join(null));
            Assert.Throws <ArgumentNullException>(() => CollectionsExtensions.Join <object>(null, "separator"));
            Assert.Throws <ArgumentNullException>(() => Enumerable.Empty <object>().Join(null));

            Assert.Equal(string.Empty, Enumerable.Empty <object>().Join("separator"));
            Assert.Equal("1", new[] { 1 }.Join(","));
            Assert.Equal("123", new[] { 1, 2, 3 }.Join(string.Empty));
            Assert.Equal("1,2,3", new [] { 1, 2, 3 }.Join(","));
        }
        public void to_set()
        {
            Assert.Throws <ArgumentNullException>(() => CollectionsExtensions.ToSet <object>(null));

            Assert.False(Enumerable.Empty <object>().ToSet().Any());
            var set = new [] { 1, 1, 2, 3, 4, 5, 5 }.ToSet();

            Assert.Equal(5, set.Count);
            for (var i = 1; i <= 5; i++)
            {
                Assert.Equal(i, set.ElementAt(i - 1));
            }
        }
        public void each()
        {
            Assert.Throws <ArgumentNullException>(() => CollectionsExtensions.Each <object>(null, it => {}));
            Assert.Throws <ArgumentNullException>(() => Enumerable.Empty <object>().Each(null));

            var strings = new [] { "first", "second", "third" };
            var list    = new List <string>();

            Assert.True(ReferenceEquals(strings.Each(list.Add), strings));
            Assert.Equal(3, list.Count);
            Assert.Equal("first", list[0]);
            Assert.Equal("second", list[1]);
            Assert.Equal("third", list[2]);
        }
        public void random()
        {
            Assert.Throws <ArgumentNullException>(() => CollectionsExtensions.Random <object>(null));

            Assert.Null(Enumerable.Empty <object>().Random());

            var element = new object();

            Assert.True(ReferenceEquals(new[] { element }.Random(), element));

            var elements = new[] { "first", "second" };

            Assert.True(elements.Contains(elements.Random()));
        }
        public void remove()
        {
            Assert.Throws <ArgumentNullException>(() => CollectionsExtensions.Remove(null, Enumerable.Empty <object>()));
            Assert.Throws <ArgumentNullException>(() => new object[0].Remove(null));

            var first = new HashSet <string> {
                "1", "2", "3"
            };
            var second = new List <string> {
                "2", "4"
            };

            first.Remove(second);
            Assert.Equal(2, first.Count);
            Assert.Equal("1", first.ElementAt(0));
            Assert.Equal("3", first.ElementAt(1));
        }
        public void add()
        {
            Assert.Throws <ArgumentNullException>(() => CollectionsExtensions.Add(null, Enumerable.Empty <object>()));
            Assert.Throws <ArgumentNullException>(() => new object[0].Add(null));

            ICollection <string> first = new HashSet <string> {
                "first"
            };
            ICollection <string> second = new List <string> {
                "second"
            };

            first.Add(second);
            Assert.Equal(2, first.Count);
            Assert.Equal("first", first.ElementAt(0));
            Assert.Equal("second", first.ElementAt(1));
        }
        public void paginate()
        {
            Assert.Throws <ArgumentNullException>(() => CollectionsExtensions.Paginate <object>(null));

            Assert.False(Enumerable.Empty <object>().Paginate().Any());

            var sequence = new[] { "first", "second", "third" };

            Assert.Equal("first", sequence.Paginate(-1, 1).Single());
            Assert.Equal("first", sequence.Paginate(0, 1).Single());
            Assert.Equal("first", sequence.Paginate(1, 1).Single());
            Assert.True(sequence.Paginate(1, 2).SequenceEqual(new[] { "first", "second" }));
            Assert.True(sequence.Paginate(1, -1).SequenceEqual(sequence));
            Assert.True(sequence.Paginate(1, 0).SequenceEqual(sequence));
            Assert.Equal("second", sequence.Paginate(2, 1).Single());
            Assert.Equal("third", sequence.Paginate(2, 2).Single());
        }