public void Subsets_Prune () {
char[] input = { 'a', 'b', 'c', 'd' };
char[][] expected = {
new[] { 'a' },
new[] { 'b' },
new[] { 'b', 'a' },
new[] { 'c' },
new[] { 'c', 'b', 'a' },
new[] { 'c', 'b' },
new[] { 'c', 'a' },
new[] { 'd' },
new[] { 'd', 'c', 'a' },
new[] { 'd', 'c' },
new[] { 'd', 'a' },
};
char[][] output = input
.Subsets (x => !(x.Contains ('b') && x.Contains ('d')))
.Select (x => x.ToArray ()).ToArray ();
CollectionAssert.AreEqual (expected, output);
}