public void GroupConsecutiveElementsWhileWorks() { var groups = new Group[] { new NumGroup() { Value = 1 }, new StringGroup() { Value = "ha" }, new NumGroup() { Value = 3 }, new StringGroup() { Value = "ha" }, new StringGroup() { Value = "ha" } }; var result = GroupGroup.GroupConsecutiveElementsWhile(groups, (a, b) => a.GetType() == b.GetType()); result.Should().BeEquivalentTo(new Group[] { new NumGroup() { Value = 1 }, new StringGroup() { Value = "ha" }, new NumGroup() { Value = 3 }, new GroupGroup() { Groups = new Group[] { new StringGroup() { Value = "ha" }, new StringGroup() { Value = "ha" } } } }, opts => opts.RespectingRuntimeTypes().WithStrictOrdering()); }
public void GroupConsecutiveElementsContiguous() { var groups = new Group[] { new NumGroup() { Value = 1 }, new NumGroup() { Value = 2 }, new NumGroup() { Value = 3 }, new NumGroup() { Value = 10 }, new NumGroup() { Value = 11 }, new NumGroup() { Value = 12 }, }; var result = GroupGroup.GroupConsecutiveElementsWhile(groups, (a, b) => ((NumGroup)a).Value - 1 == ((NumGroup)b).Value); result.Should().BeEquivalentTo(new Group[] { new GroupGroup() { Groups = new Group[] { new NumGroup { Value = 1 }, new NumGroup { Value = 2 }, new NumGroup { Value = 3 } } }, new GroupGroup() { Groups = new Group[] { new NumGroup() { Value = 10 }, new NumGroup() { Value = 11 }, new NumGroup() { Value = 12 } } } }, opts => opts.RespectingRuntimeTypes().WithStrictOrdering()); }