using System; using System.Collections.Generic; using System.Linq; using System.Text; using NUnit.Framework; using System.Collections; namespace EPS.Common.Tests { [TestFixture] public class ObjectDumperTests { private class Customer : IComparable { public string LastName { get; set; } public string FirstName { get; set; } public DateTime Birthdate { get; set; } public int Age { get; set; } public override bool Equals(object obj) { if (obj == null) return false; Customer c = obj as Customer; if (c == null) return false; return this.FirstName.Equals(c.FirstName) && this.LastName.Equals(c.LastName) && this.Birthdate.Equals(c.Birthdate) && this.Age.Equals(c.Age); } public override int GetHashCode() { return (this.FirstName + this.LastName + this.Birthdate.ToString() + this.Age).GetHashCode(); } public int CompareTo(object obj) { if (obj == null) return -1; Customer c = obj as Customer; if (c == null) return -1; if (this.Age > c.Age) return 1; if (this.Age < c.Age) return -1; return 0; } } private List _customers = null; [TestFixtureSetUp] public void TextFixtureSetup() { _customers = new List { new Customer { LastName = "Carter", FirstName = "Chris", Birthdate = new DateTime(1970, 6, 18), Age = 38 }, new Customer { LastName = "Smith", FirstName = "Bob", Birthdate = new DateTime(1981, 4, 11), Age = 27 } }; } [Test] public void AggregateTests() { //string[] words = "the quick brown fox".Split(' '); //string reversed = words.Aggregate((workingSentence, next) => next + " " + workingSentence); //Console.WriteLine(reversed); int[] nums = new []{ 1, 2, 3 }; int total = nums.Aggregate(5, (current, next) => current + next, ac => ac * 2); Assert.AreEqual(22, total); } [Test] public void TestAll() { bool result = _customers.All(c => c.FirstName.StartsWith("B")); Assert.IsFalse(result); } [Test] public void TestAny() { Assert.IsTrue(_customers.Any(c => c.Birthdate.Year< 1990)); int[] empty = new int[0]; Assert.IsFalse(empty.Any()); } [Test] public void TestCast() { string[] stringNums = new[] { "1", "2", "3" }; var intNums = stringNums.Cast(); } [Test] public void TestConcat() { string[] s1 = new[] { "hello" }; string[] s2 = new[] { "world" }; var result = s1.Concat(s2); foreach (string item in result) { Console.WriteLine(item); } } [Test] public void TestCopyTo() { Customer[] arr = new Customer[2]; _customers.CopyTo(arr); foreach (var item in arr) { Console.WriteLine(item.FirstName); } } [Test] public void TestDistinct() { List customers = new List(_customers); customers.Add(new Customer { LastName = "Carter", FirstName = "Chris", Birthdate = new DateTime(1970, 6, 18), Age = 38 }); var distinct = customers.Distinct(new CustomerComparer()); Assert.AreEqual(2, distinct.Count()); } [Test] public void TestGroupBy() { List customers = new List(); customers.Add(new Customer { LastName = "Carter", FirstName = "Anja", Birthdate = new DateTime(1970, 6, 18), Age = 38 }); customers.Add(new Customer { LastName = "Carter", FirstName = "Chris", Birthdate = new DateTime(1970, 6, 18), Age = 38 }); customers.Add(new Customer { LastName = "Smith", FirstName = "Bob", Birthdate = new DateTime(1981, 4, 11), Age = 27 }); var ages = customers.GroupBy(c => c.Age); ObjectDumper.Write(ages, 3); } [Test] public void TestOfType() { object[] values = new object[] { "Chris", 666 }; var results = values.OfType(); ObjectDumper.Write(results); } [Test] public void TestToLookup() { List customers = new List(); customers.Add(new Customer { LastName = "Carter", FirstName = "Anja", Birthdate = new DateTime(1970, 6, 18), Age = 38 }); customers.Add(new Customer { LastName = "Carter", FirstName = "Chris", Birthdate = new DateTime(1970, 6, 18), Age = 38 }); customers.Add(new Customer { LastName = "Smith", FirstName = "Bob", Birthdate = new DateTime(1981, 4, 11), Age = 27 }); var results = customers.ToLookup(c => c.FirstName); foreach (var result in results) { ObjectDumper.Write(result); } } [Test] public void TestToDictionary() { var results1 = _customers.ToDictionary(c => c.FirstName); ObjectDumper.Write(results1["Chris"]); var results2 = _customers.ToDictionary(c => c.FirstName, c => c.Age); ObjectDumper.Write(results2); } [Test] public void TestSortUsingComparison() { Assert.AreEqual("Chris", _customers[0].FirstName); _customers.Sort( (c1, c2) => { if (c1.Age > c2.Age) return 1; if (c1.Age < c2.Age) return -1; return 0; }); Assert.AreEqual("Bob", _customers[0].FirstName); } [Test] public void TestSortWithComparer() { ObjectDumper.Write(_customers); _customers.Sort(new CustomerComparer()); ObjectDumper.Write(_customers); } [Test] public void TestSortDefault() { Console.WriteLine("*** Before ***"); ObjectDumper.Write(_customers); Console.WriteLine(); _customers.Sort(); ObjectDumper.Write(_customers); } [Test] public void TestMax() { int[] nums = new[] { 1, 2, 3 }; int max = nums.Max(); Assert.AreEqual(3, max); } private class CustomerComparer : IEqualityComparer, IComparer { public bool Equals(Customer x, Customer y) { return x.Equals(y); } public int GetHashCode(Customer obj) { return obj.GetHashCode(); } public int Compare(Customer x, Customer y) { if (x == null) return -1; if (y == null) return -1; if (x.Age > y.Age) return 1; if (x.Age < y.Age) return -1; return 0; } } } }