public void testListOfSymbolsClone() { List<Symbol> l = new List<Symbol>(); l.Add(new Symbol("A")); l.Add(new Symbol("B")); l.Add(new Symbol("C")); Symbol[] copy = new Symbol[l.Count]; l.CopyTo(copy); List<Symbol> l2 = copy.ToList<Symbol>(); l2.Remove(new Symbol("B")); Assert.AreEqual(3, l.Count); Assert.AreEqual(2, l2.Count); }
// // PRIVATE METHODS // private bool dpll(List<Sentence> clauses, List<Symbol> symbols, Model model) { // List<Sentence> clauseList = asList(clauses); List<Sentence> clauseList = clauses; // System.Console.WriteLine("clauses are " + clauses.ToString()); // if all clauses are true return true; if (areAllClausesTrue(model, clauseList)) { // System.Console.WriteLine(model.ToString()); return true; } // if even one clause is false return false if (isEvenOneClauseFalse(model, clauseList)) { // System.Console.WriteLine(model.ToString()); return false; } // System.Console.WriteLine("At least one clause is unknown"); // try to find a unit clause SymbolValuePair svp = findPureSymbolValuePair(clauseList, model, symbols); if (svp.notNull()) { Symbol[] copy = new Symbol[symbols.Count]; symbols.CopyTo(copy); List<Symbol> newSymbols = new List<Symbol>(copy); newSymbols.Remove(new Symbol(svp.symbol.getValue())); Model newModel = model.extend(new Symbol(svp.symbol.getValue()), svp.value); return dpll(clauses, newSymbols, newModel); } SymbolValuePair svp2 = findUnitClause(clauseList, model, symbols); if (svp2.notNull()) { Symbol[] copy = new Symbol[symbols.Count]; symbols.CopyTo(copy); List<Symbol> newSymbols = new List<Symbol>(copy); newSymbols.Remove(new Symbol(svp2.symbol.getValue())); Model newModel = model.extend(new Symbol(svp2.symbol.getValue()), svp2.value); return dpll(clauses, newSymbols, newModel); } Symbol symbol = (Symbol)symbols[0]; // System.Console.WriteLine("default behaviour selecting " + symbol); Symbol[] symbolsArr = new Symbol[symbols.Count]; symbols.CopyTo(symbolsArr); List<Symbol> newSymbols2 = symbolsArr.ToList<Symbol>(); newSymbols2.RemoveAt(0); return (dpll(clauses, newSymbols2, model.extend(symbol, true)) || dpll( clauses, newSymbols2, model.extend(symbol, false))); }