public static void AreEqual(BitVecExpr expr, Tv[] expectedTvArray, State state) { Contract.Requires(expr != null); Contract.Requires(expectedTvArray != null); Contract.Requires(state != null); int nBits = (int)expr.SortSize; Assert.AreEqual(nBits, expectedTvArray.Length); Tv[] actualTvArray = ToolsZ3.GetTvArray(expr, (int)expr.SortSize, state.Solver, state.Solver_U, state.Ctx); Assert.AreEqual(actualTvArray.Length, nBits); Assert.AreEqual(expectedTvArray.Length, nBits); ulong?actualLong = ToolsZ3.ToUlong(actualTvArray); ulong?expectedLong = ToolsZ3.ToUlong(expectedTvArray); if (actualLong.HasValue && expectedLong.HasValue) { Assert.AreEqual(actualLong.Value, expectedLong.Value, "Expr " + expr + ": Expected value " + expectedLong.Value + " while actual value is " + actualLong.Value); } else { for (int i = 0; i < nBits; ++i) { Assert.AreEqual(expectedTvArray[i], actualTvArray[i], "Expr " + expr + ": Pos " + i + ": expected value " + ToolsZ3.ToStringBin(expectedTvArray) + " while actual value is " + ToolsZ3.ToStringBin(actualTvArray)); } } }
public static void AreEqual(Rn name, Tv[] expectedTvArray, State state) { Contract.Requires(state != null); Contract.Requires(expectedTvArray != null); Assert.IsNotNull(state); int nBits = RegisterTools.NBits(name); Assert.AreEqual(nBits, expectedTvArray.Length); Tv[] actualTvArray = state.GetTvArray(name); Assert.AreEqual(nBits, actualTvArray.Length); ulong?actualLong = ToolsZ3.ToUlong(actualTvArray); ulong?expectedLong = ToolsZ3.ToUlong(expectedTvArray); if (actualLong.HasValue && expectedLong.HasValue) { Assert.AreEqual(expectedLong.Value, actualLong.Value, "Reg " + name + ": Expected value " + expectedLong.Value + " while actual value is " + actualLong.Value); } else { AreEqual(expectedTvArray, actualTvArray); } }