Example #1
0
    public void Add7ItemsDuplicates_Remove3Items_Max2Items()
    {
        // Arrange
        var items = FirstLastListFactory.Create <Product>();

        items.Add(new Product(0.50m, "coffee"));
        items.Add(new Product(1.20m, "mint drops"));
        items.Add(new Product(1.20m, "beer"));
        items.Add(new Product(2.22m, "chocolate"));
        items.Add(new Product(0.50m, "candy"));
        items.Add(new Product(0.01m, "cent"));
        items.Add(new Product(1.20m, "cola"));

        // Act
        var countRemoved  = items.RemoveAll(new Product(1.20m, null));
        var returnedItems = items.Max(3).Select(p => p.Title).ToList();

        // Assert
        Assert.AreEqual(3, countRemoved);
        var expectedItems = new string[] { "chocolate", "coffee", "candy" };

        CollectionAssert.AreEqual(expectedItems, returnedItems);
    }
    public void ComplexTest_AllOperationsProducts()
    {
        var items = FirstLastListFactory.Create <Product>();

        Assert.AreEqual(0, items.Count);

        items.Add(new Product(0.50m, "coffee"));
        Assert.AreEqual(1, items.Count);
        var first = items.First(1).FirstOrDefault();
        var last  = items.Last(1).FirstOrDefault();
        var min   = items.Min(1).FirstOrDefault();
        var max   = items.Max(1).FirstOrDefault();

        Assert.AreEqual("coffee", first.Title);
        Assert.AreEqual("coffee", last.Title);
        Assert.AreEqual("coffee", min.Title);
        Assert.AreEqual("coffee", max.Title);

        items.Add(new Product(0.50m, "candy"));
        Assert.AreEqual(2, items.Count);
        first = items.First(1).FirstOrDefault();
        last  = items.Last(1).FirstOrDefault();
        min   = items.Min(1).FirstOrDefault();
        max   = items.Max(1).FirstOrDefault();
        Assert.AreEqual("coffee", first.Title);
        Assert.AreEqual("candy", last.Title);
        Assert.AreEqual("coffee", min.Title);
        Assert.AreEqual("coffee", max.Title);

        items.Add(new Product(2.99m, "chocolate"));
        Assert.AreEqual(3, items.Count);
        first = items.First(1).FirstOrDefault();
        last  = items.Last(1).FirstOrDefault();
        min   = items.Min(1).FirstOrDefault();
        max   = items.Max(1).FirstOrDefault();
        Assert.AreEqual("coffee", first.Title);
        Assert.AreEqual("chocolate", last.Title);
        Assert.AreEqual("coffee", min.Title);
        Assert.AreEqual("chocolate", max.Title);

        items.Add(new Product(0.50m, "candy"));
        Assert.AreEqual(4, items.Count);
        first = items.First(1).FirstOrDefault();
        last  = items.Last(1).FirstOrDefault();
        min   = items.Min(1).FirstOrDefault();
        max   = items.Max(1).FirstOrDefault();
        Assert.AreEqual("coffee", first.Title);
        Assert.AreEqual("candy", last.Title);
        Assert.AreEqual("coffee", min.Title);
        Assert.AreEqual("chocolate", max.Title);

        var countRemoved =
            items.RemoveAll(new Product(0.50m, "some product"));

        Assert.AreEqual(3, countRemoved);
        Assert.AreEqual(1, items.Count);
        first = items.First(1).FirstOrDefault();
        last  = items.Last(1).FirstOrDefault();
        min   = items.Min(1).FirstOrDefault();
        max   = items.Max(1).FirstOrDefault();
        Assert.AreEqual("chocolate", first.Title);
        Assert.AreEqual("chocolate", last.Title);
        Assert.AreEqual("chocolate", min.Title);
        Assert.AreEqual("chocolate", max.Title);

        items.Add(new Product(0.50m, "candy"));
        Assert.AreEqual(2, items.Count);
        first = items.First(1).FirstOrDefault();
        last  = items.Last(1).FirstOrDefault();
        min   = items.Min(1).FirstOrDefault();
        max   = items.Max(1).FirstOrDefault();
        Assert.AreEqual("chocolate", first.Title);
        Assert.AreEqual("candy", last.Title);
        Assert.AreEqual("candy", min.Title);
        Assert.AreEqual("chocolate", max.Title);

        items.Clear();
        Assert.AreEqual(0, items.Count);

        items.Add(new Product(2.50m, "beer"));
        items.Add(new Product(7.35m, "vodka"));
        items.Add(new Product(0.50m, "coffee"));
        items.Add(new Product(0.50m, "candy"));
        Assert.AreEqual(4, items.Count);
        var first2 = items.First(2).Select(p => p.Title).ToList();
        var last2  = items.Last(2).Select(p => p.Title).ToList();
        var min2   = items.Min(2).Select(p => p.Title).ToList();
        var max2   = items.Max(2).Select(p => p.Title).ToList();

        CollectionAssert.AreEqual(new string[] { "beer", "vodka" }, first2);
        CollectionAssert.AreEqual(new string[] { "candy", "coffee" }, last2);
        CollectionAssert.AreEqual(new string[] { "coffee", "candy" }, min2);
        CollectionAssert.AreEqual(new string[] { "vodka", "beer" }, max2);

        var removedCount = items.RemoveAll(new Product(12345, null));

        Assert.AreEqual(0, removedCount);

        removedCount = items.RemoveAll(new Product(7.35m, null));
        Assert.AreEqual(1, removedCount);

        removedCount = items.RemoveAll(new Product(2.50m, null));
        Assert.AreEqual(1, removedCount);

        Assert.AreEqual(2, items.Count);
        first2 = items.First(2).Select(p => p.Title).ToList();
        last2  = items.Last(2).Select(p => p.Title).ToList();
        min2   = items.Min(2).Select(p => p.Title).ToList();
        max2   = items.Max(2).Select(p => p.Title).ToList();
        CollectionAssert.AreEqual(new string[] { "coffee", "candy" }, first2);
        CollectionAssert.AreEqual(new string[] { "candy", "coffee" }, last2);
        CollectionAssert.AreEqual(new string[] { "coffee", "candy" }, min2);
        CollectionAssert.AreEqual(new string[] { "coffee", "candy" }, max2);

        removedCount = items.RemoveAll(new Product(0.50m, null));
        Assert.AreEqual(2, removedCount);
        Assert.AreEqual(0, items.Count);

        items.Add(new Product(0.50m, "milk"));
        items.Add(new Product(1.20m, "amstel"));
        items.Add(new Product(1.20m, "xxx"));
        Assert.AreEqual(3, items.Count);
        first2 = items.First(2).Select(p => p.Title).ToList();
        last2  = items.Last(2).Select(p => p.Title).ToList();
        min2   = items.Min(2).Select(p => p.Title).ToList();
        max2   = items.Max(2).Select(p => p.Title).ToList();
        CollectionAssert.AreEqual(new string[] { "milk", "amstel" }, first2);
        CollectionAssert.AreEqual(new string[] { "xxx", "amstel" }, last2);
        CollectionAssert.AreEqual(new string[] { "milk", "amstel" }, min2);
        CollectionAssert.AreEqual(new string[] { "amstel", "xxx" }, max2);

        removedCount = items.RemoveAll(new Product(0.50m, null));
        Assert.AreEqual(1, removedCount);
        Assert.AreEqual(2, items.Count);

        removedCount = items.RemoveAll(new Product(1.20m, null));
        Assert.AreEqual(2, removedCount);
        Assert.AreEqual(0, items.Count);

        items.Add(new Product(0.50m, "coffee"));
        Assert.AreEqual(1, items.Count);
        first = items.First(1).FirstOrDefault();
        last  = items.Last(1).FirstOrDefault();
        min   = items.Min(1).FirstOrDefault();
        max   = items.Max(1).FirstOrDefault();
        Assert.AreEqual("coffee", first.Title);
        Assert.AreEqual("coffee", last.Title);
        Assert.AreEqual("coffee", min.Title);
        Assert.AreEqual("coffee", max.Title);
    }