public static void ParallelState7() { string[] actions = new string[] { "MultipleBreak", "MultipleBreak", "MultipleBreak", "MultipleBreak", "MultipleBreak", "MultipleBreak", "MultipleBreak", "MultipleBreak", "MultipleBreak", "MultipleBreak", }; string[] verifications = new string[] { "BreakVerification", }; TestParameters parameters = new TestParameters { Api = API.For, Count = 10, Actions = actions, Verifications = verifications, ExpectingException = false, WithLocalState = true, Is64 = false, }; ParallelStateTest test = new ParallelStateTest(parameters); test.RealRun(); }
private int _iterCount = 0; // test own counter for certain scenario, so the test can change behaviour after certain number of loop iteration #endregion #region Constructor public ParallelStateTest(TestParameters parameters) { _parameters = parameters; _mreSlim = new ManualResetEventSlim(false); _results = new double[parameters.Count]; _sequences = new List<int>[1024]; _sequences64 = new List<long>[1024]; _threadCount = 0; // Set available actions _availableActions["Stop"] = StopAction; _availableActions["Break"] = BreakAction; _availableActions["Exceptional"] = ExceptionalAction; _availableActions["MultipleStop"] = MultipleStopAction; _availableActions["MultipleBreak"] = MultipleBreakAction; _availableActions["MultipleException"] = MultipleExceptionAction; _availableActions["SyncWaitStop"] = SyncWaitStop; _availableActions["SyncSetStop"] = SyncSetStop; _availableActions["SyncWaitBreak"] = SyncWaitBreak; _availableActions["SyncSetBreak"] = SyncSetBreak; _availableActions["SyncWaitStopCatchExp"] = SyncWaitStopCatchExp; _availableActions["SyncWaitBreakCatchExp"] = SyncWaitBreakCatchExp; _availableActions["SyncWaitExceptional"] = SyncWaitExceptional; _availableActions["SyncSetExceptional"] = SyncSetExceptional; // Set available verifications _availableVerifications["StopVerification"] = StopVerification; _availableVerifications["BreakVerification"] = BreakVerification; _availableVerifications["ExceptionalVerification"] = ExceptionalVerification; _barrier = new Barrier(parameters.Count); // A barrier is used in the workload to ensure that all tasks are running before any proceed. // This causes delays if the count is higher than the number of processors, as the thread pool // will need to (slowly) inject additional threads to meet the demand. As a less-than-ideal // workaround, we change the thread pool's min thread count to be at least the number required // for the test. Not perfect, but better than nothing. ThreadPoolHelpers.EnsureMinThreadsAtLeast(parameters.Count); int length = parameters.Count; if (length < 0) length = 0; if (parameters.Api != API.For) { int[] collArray = new int[length]; for (int j = 0; j < length; j++) collArray[j] = ((int)_startIndex) + j; if (parameters.Api == API.ForeachOnArray) _collection = collArray; else if (parameters.Api == API.ForeachOnList) _collection = new List<int>(collArray); else _collection = collArray; } int index = 0; for (index = 0; index < parameters.Count; index++) _actions.Add(DummyAction); index = 0; foreach (string action in parameters.Actions) { Action<long, ParallelLoopState> a = null; string[] actionIndexPair = action.Split('_'); if (!_availableActions.TryGetValue(actionIndexPair[0], out a)) throw new ArgumentException(actionIndexPair[0] + " is not a valid action"); _actions[actionIndexPair.Length > 1 ? int.Parse(actionIndexPair[1]) : index++] = a; } foreach (string verification in parameters.Verifications) { Action<ParallelLoopResult?> act = null; if (!_availableVerifications.TryGetValue(verification, out act)) throw new ArgumentException(verification + " is not a valid verification"); _verifications.Enqueue(act); } }
public static void ParallelState76() { string[] actions = new string[] { "SyncWaitBreak_0", "SyncSetBreak_1", }; string[] verifications = new string[] { "BreakVerification", }; TestParameters parameters = new TestParameters { Api = API.ForeachOnList, Count = 10, Actions = actions, Verifications = verifications, ExpectingException = false, WithLocalState = true, Is64 = false, }; ParallelStateTest test = new ParallelStateTest(parameters); test.RealRun(); }
public static void ParallelState49() { string[] actions = new string[] { "SyncSetStop_0", "SyncWaitBreakCatchExp_1", }; string[] verifications = new string[] { "StopVerification", }; TestParameters parameters = new TestParameters { Api = API.ForeachOnArray, Count = 10, Actions = actions, Verifications = verifications, ExpectingException = false, WithLocalState = false, Is64 = false, }; ParallelStateTest test = new ParallelStateTest(parameters); test.RealRun(); }
public static void ParallelState36() { string[] actions = new string[] { "Exceptional", }; string[] verifications = new string[] { "ExceptionalVerification", }; TestParameters parameters = new TestParameters { Api = API.ForeachOnArray, Count = 10, Actions = actions, Verifications = verifications, ExpectingException = true, WithLocalState = true, Is64 = false, }; ParallelStateTest test = new ParallelStateTest(parameters); test.RealRun(); }
private int _iterCount = 0; // test own counter for certain scenario, so the test can change behaviour after certain number of loop iteration #endregion #region Constructor public ParallelStateTest(TestParameters parameters) { _parameters = parameters; _mreSlim = new ManualResetEventSlim(false); _results = new double[parameters.Count]; _sequences = new List<int>[1024]; _sequences64 = new List<long>[1024]; _threadCount = 0; // Set available actions _availableActions["Stop"] = StopAction; _availableActions["Break"] = BreakAction; _availableActions["Exceptional"] = ExceptionalAction; _availableActions["MultipleStop"] = MultipleStopAction; _availableActions["MultipleBreak"] = MultipleBreakAction; _availableActions["MultipleException"] = MultipleExceptionAction; _availableActions["SyncWaitStop"] = SyncWaitStop; _availableActions["SyncSetStop"] = SyncSetStop; _availableActions["SyncWaitBreak"] = SyncWaitBreak; _availableActions["SyncSetBreak"] = SyncSetBreak; _availableActions["SyncWaitStopCatchExp"] = SyncWaitStopCatchExp; _availableActions["SyncWaitBreakCatchExp"] = SyncWaitBreakCatchExp; _availableActions["SyncWaitExceptional"] = SyncWaitExceptional; _availableActions["SyncSetExceptional"] = SyncSetExceptional; // Set available verifications _availableVerifications["StopVerification"] = StopVerification; _availableVerifications["BreakVerification"] = BreakVerification; _availableVerifications["ExceptionalVerification"] = ExceptionalVerification; _barrier = new Barrier(parameters.Count); int length = parameters.Count; if (length < 0) length = 0; if (parameters.Api != API.For) { int[] collArray = new int[length]; for (int j = 0; j < length; j++) collArray[j] = ((int)_startIndex) + j; if (parameters.Api == API.ForeachOnArray) _collection = collArray; else if (parameters.Api == API.ForeachOnList) _collection = new List<int>(collArray); else _collection = collArray; } int index = 0; for (index = 0; index < parameters.Count; index++) _actions.Add(DummyAction); index = 0; foreach (string action in parameters.Actions) { Action<long, ParallelLoopState> a = null; string[] actionIndexPair = action.Split('_'); if (!_availableActions.TryGetValue(actionIndexPair[0], out a)) throw new ArgumentException(actionIndexPair[0] + " is not a valid action"); _actions[actionIndexPair.Length > 1 ? int.Parse(actionIndexPair[1]) : index++] = a; } foreach (string verification in parameters.Verifications) { Action<ParallelLoopResult?> act = null; if (!_availableVerifications.TryGetValue(verification, out act)) throw new ArgumentException(verification + " is not a valid verification"); _verifications.Enqueue(act); } }