public void CombinedKeysAreNotMarkedIfNone() { var st = Test(":a=7 :b=8 :c=9 x/=:d :e=1", changeDetection: true); var d = st.GetVariableChangeSetKey(new VariableName(":d")); var e = st.GetVariableChangeSetKey(new VariableName(":e")); var combined = ChangeSetKey.Combine(d, e); var cs = st.ChangeSet; Assert.IsFalse(cs.Contains(combined)); }
public void CombinedKeysAreMarkedIfAny() { var st = Test(":a=7 :b=8 :c=9 x/=:d :e=1", changeDetection: true); var a = st.GetVariableChangeSetKey(new VariableName(":a")); var b = st.GetVariableChangeSetKey(new VariableName(":b")); var c = st.GetVariableChangeSetKey(new VariableName(":c")); var d = st.GetVariableChangeSetKey(new VariableName(":c")); var combined = ChangeSetKey.Combine(a, ChangeSetKey.Combine(b, ChangeSetKey.Combine(c, d))); var cs = st.ChangeSet; Assert.IsTrue(cs.Contains(combined)); }
public static ChangeSetKey Combine(ChangeSetKey a, ChangeSetKey b) { return(new ChangeSetKey(a.Flag | b.Flag)); }
/// <summary> /// Run the program for multiple ticks /// </summary> /// <param name="internals"></param> /// <param name="externals"></param> /// <param name="maxTicks">Maximum number of ticks to run</param> /// <param name="changed">Execution will end if any of the variables represented by this key are changed</param> /// <returns>Total ticks executed</returns> public int Run(ArraySegment <Value> internals, ArraySegment <Value> externals, int maxTicks, ChangeSetKey changed) { var ticks = 0; for (int i = 0; i < maxTicks; i++) { Tick(internals, externals); ticks++; if (ChangeSet.Contains(changed)) { break; } } return(ticks); }
/// <summary> /// Test if this set contains the given key. May returns false positives. Will not return false negatives. /// </summary> /// <param name="key"></param> /// <returns></returns> public bool Contains(ChangeSetKey key) { return((_bits & key.Flag) != 0); }