public void TestDetachConditions() { // Initialize WaitSet waitSet = new WaitSet(); GuardCondition guardCondition = new GuardCondition(); GuardCondition otherGuardCondition = new GuardCondition(); GuardCondition anotherGuardCondition = new GuardCondition(); ReturnCode result = waitSet.AttachCondition(guardCondition); Assert.AreEqual(ReturnCode.Ok, result); result = waitSet.AttachCondition(otherGuardCondition); Assert.AreEqual(ReturnCode.Ok, result); result = waitSet.AttachCondition(anotherGuardCondition); Assert.AreEqual(ReturnCode.Ok, result); // Test with null parameter result = waitSet.DetachConditions(null); Assert.AreEqual(ReturnCode.Ok, result); // Test with empty list parameter List <Condition> conditions = new List <Condition>(); result = waitSet.DetachConditions(conditions); Assert.AreEqual(ReturnCode.Ok, result); // Test with single element list parameter conditions = new List <Condition>() { guardCondition }; result = waitSet.DetachConditions(conditions); Assert.AreEqual(ReturnCode.Ok, result); conditions = new List <Condition>() { null }; result = waitSet.GetConditions(conditions); Assert.AreEqual(ReturnCode.Ok, result); Assert.IsNotNull(conditions); Assert.AreEqual(2, conditions.Count); Assert.IsNotNull(conditions[0]); Assert.IsNotNull(conditions[1]); Assert.IsTrue(conditions[0] != conditions[1]); Assert.IsTrue(anotherGuardCondition == conditions[0] || anotherGuardCondition == conditions[1]); Assert.IsTrue(otherGuardCondition == conditions[0] || otherGuardCondition == conditions[1]); // Detach the other conditions conditions = new List <Condition>() { otherGuardCondition, anotherGuardCondition }; result = waitSet.DetachConditions(conditions); Assert.AreEqual(ReturnCode.Ok, result); conditions = new List <Condition>() { null }; result = waitSet.GetConditions(conditions); Assert.AreEqual(ReturnCode.Ok, result); Assert.IsNotNull(conditions); Assert.AreEqual(0, conditions.Count); // Detach a not attached conditions GuardCondition notAttachedCondition = new GuardCondition(); conditions = new List <Condition>() { notAttachedCondition }; result = waitSet.DetachConditions(conditions); Assert.AreEqual(ReturnCode.PreconditionNotMet, result); }