public void OperatorPlus_Union()
        {
            Cellule[] cells = new Cellule[] {
                GénérerCellule(valeurFixe: 4, possibilités: new List <int> {
                    1, 2
                }),
                GénérerCellule(valeurTrouvé: 3, possibilités: new List <int> {
                    2, 4, 6
                }),
                GénérerCellule(possibilités: new List <int> {
                    1, 2, 4, 7
                }),
                GénérerCellule(possibilités: new List <int> {
                    6, 7, 8, 9
                }),
                GénérerCellule(possibilités: new List <int> {
                    1, 2, 8, 9
                })
            };
            Groupe g1 = GénérerGroupe(cells[0], cells[2], cells[3], cells[4]);
            Groupe g2 = GénérerGroupe(cells[1], cells[2], cells[3]);

            Assert.AreEqual(4, g1.Count);
            Assert.AreEqual(3, g2.Count);

            Groupe g = g1 + g2;

            Assert.AreEqual(5, g.Count);
            foreach (Cellule c in cells)
            {
                Assert.IsTrue(g.Contains(c));
            }
        }
        public void GetCellulesContenantAuMoins_GroupeNonNulleEtNulle()
        {
            Cellule [] cells = null;
            Groupe     g     = GénérerGroupe(
                cells = new Cellule[] {
                GénérerCellule(valeurFixe: 3, possibilités: new List <int> {
                    1, 7, 8, 3
                }),
                GénérerCellule(valeurTrouvé: 2, possibilités: new List <int> {
                    1, 7, 8, 3
                }),
                GénérerCellule(possibilités: new List <int> {
                    1, 2, 8, 6, 7
                }),
                GénérerCellule(possibilités: new List <int> {
                    1, 2, 3
                }),
                GénérerCellule(possibilités: new List <int> {
                    4, 5, 6
                }),
                GénérerCellule(possibilités: new List <int> {
                    1, 2, 7, 8
                })
            }
                );
            Groupe res = g.GetCellulesContenantAuMoins(new int[] { 1, 2 });

            // Vérification
            Assert.AreEqual(3, res.Count);
            foreach (int i in new int [] { 2, 3, 5 })
            {
                Assert.IsTrue(res.Contains(cells[i]));
            }
            foreach (int i in new int[] { 0, 1, 4 })
            {
                Assert.IsFalse(res.Contains(cells[i]));
            }
            res = g.GetCellulesContenantAuMoins(new int[] { 1, 2, 4 });
            // Vérification
            Assert.AreEqual(0, res.Count);
        }
        public void GetCellulesContenantAuPlus_MelangesCellulesFixéTrouvéEtAutre()
        {
            Cellule[] cells =
            {
                GénérerCellule(possibilités: new List <int> {
                    2, 3, 4, 5
                }),
                GénérerCellule(valeurFixe: 4, possibilités: new List <int>{
                    1, 2
                }),
                GénérerCellule(valeurTrouvé: 3, possibilités: new List <int>{
                    1, 2
                }),
                GénérerCellule(possibilités: new List <int> {
                    1, 2, 3
                }),
                GénérerCellule(possibilités: new List <int> {
                    1, 2
                }),
                GénérerCellule(possibilités: new List <int> {
                    1, 3
                }),
                GénérerCellule(possibilités: new List <int> {
                    1, 3, 4
                })
            };
            Groupe g  = GénérerGroupe(cells);
            Groupe g2 = g.GetCellulesContenantAuPlus(new int[] { 1, 2, 3 });

            Assert.AreEqual(3, g2.Count);
            foreach (int i in new int [] { 0, 1, 2, 6 })
            {
                Assert.IsFalse(g2.Contains(cells[i]), "Ne devrait pas contenir " + cells[i]);
            }
            foreach (int i in new int[] { 3, 4, 5 })
            {
                Assert.IsTrue(g2.Contains(cells[i]), "Devrait contenir " + cells[i]);
            }
        }
        public void OperatorMultiply_Intersection()
        {
            Cellule[] cells = new Cellule[] {
                GénérerCellule(valeurFixe: 4, possibilités: new List <int> {
                    1, 2
                }),
                GénérerCellule(valeurTrouvé: 3, possibilités: new List <int> {
                    2, 4, 6
                }),
                GénérerCellule(possibilités: new List <int> {
                    1, 2, 4, 7
                }),
                GénérerCellule(possibilités: new List <int> {
                    6, 7, 8, 9
                }),
                GénérerCellule(possibilités: new List <int> {
                    1, 2, 8, 9
                })
            };
            Groupe g1 = GénérerGroupe(cells[0], cells[2], cells[3], cells[4]);
            Groupe g2 = GénérerGroupe(cells[1], cells[2], cells[3]);

            Assert.AreEqual(4, g1.Count);
            Assert.AreEqual(3, g2.Count);

            Groupe g = g1 * g2;

            Assert.AreEqual(2, g.Count);
            // Appartenance
            foreach (Cellule c in new Cellule[] { cells[2], cells[3] })
            {
                Assert.IsTrue(g.Contains(c));
            }
            // Non appartenance
            foreach (Cellule c in new Cellule[] { cells[0], cells[1], cells[4] })
            {
                Assert.IsFalse(g.Contains(c));
            }
        }
        public void SupprimerPossibilités3_GroupeNonModifié()
        {
            Cellule c1 = null, c2 = null;
            Groupe  g = GénérerGroupe(
                GénérerCellule(valeurFixe: 3, possibilités: new List <int> {
                1, 7, 8, 3
            }),
                GénérerCellule(valeurTrouvé: 2, possibilités: new List <int> {
                1, 7, 8, 3
            }),
                c2 = GénérerCellule(possibilités: new List <int> {
                1, 2, 8, 6, 7
            }),
                GénérerCellule(possibilités: new List <int> {
                1, 2, 3
            }),
                GénérerCellule(possibilités: new List <int> {
                4, 5, 6
            }),
                c1 = GénérerCellule(possibilités: new List <int> {
                1, 2, 7, 8
            })
                );
            Groupe except = new Groupe {
                c1, c2
            };

            Assert.IsFalse(g.SupprimerPossibilité(new int[] { 7, 8, 9 }, except));
            foreach (Cellule _c in g)
            {
                if (_c.Fixé || _c.Trouvé || except.Contains(_c))
                {
                    Assert.IsTrue(_c.Possibilités.Contains(7));
                    Assert.IsTrue(_c.Possibilités.Contains(8));
                }
                else
                {
                    Assert.IsFalse(_c.Possibilités.Contains(7));
                    Assert.IsFalse(_c.Possibilités.Contains(8));
                }
            }
        }