private bool HelpingFunctionForTests(byte[] problem, TimeSpan timeout, int threadsCount, double expectectedResult, Stopwatch stopwatch) { Debug.WriteLine(stopwatch.ElapsedMilliseconds / 1000.0 + ": " + "problem serialized"); byte[] problemData; using (var memoryStream = new MemoryStream()) { var formatter = new BinaryFormatter(); formatter.Serialize(memoryStream, Encoding.UTF8.GetString(problem)); problemData = memoryStream.ToArray(); } var taskSolver = new DvrpTaskSolver(problemData); var partialProblemsData = taskSolver.DivideProblem(threadsCount); Debug.WriteLine(stopwatch.ElapsedMilliseconds / 1000.0 + ": " + "problem divided; threadsCount=" + threadsCount); var tasks = new List <Task <byte[]> >(threadsCount); foreach (var partialProblemData in partialProblemsData) { var data = partialProblemData; tasks.Add(new Task <byte[]>(() => { var taskSolver2 = new DvrpTaskSolver(problemData); return(taskSolver2.Solve(data, timeout)); } )); tasks[tasks.Count - 1].Start(); } Task.WaitAll(tasks.ToArray()); Debug.WriteLine(stopwatch.ElapsedMilliseconds / 1000.0 + ": " + "partial solutions solved"); var finalSolutionData = taskSolver.MergeSolution(tasks.Select(task => task.Result).ToArray()); Debug.WriteLine(stopwatch.ElapsedMilliseconds / 1000.0 + ": " + "problems merged"); bool result; using (var memoryStream = new MemoryStream(finalSolutionData)) { var finalSolution = (string)_formatter.Deserialize(memoryStream); Debug.WriteLine(stopwatch.ElapsedMilliseconds / 1000.0 + ": " + finalSolution); var reg = new Regex(@"[-+]?\d+([,.]\d+)?"); MatchCollection m; m = reg.Matches(finalSolution); result = Math.Abs(Math.Round((double)new decimal(double.Parse(m[0].Value)), 2) - expectectedResult) < Double.Epsilon; } Debug.WriteLine(stopwatch.ElapsedMilliseconds / 1000.0 + ": " + "final solution deserialized"); return(result); }
private bool HelpingFunctionForTests(byte[] problem, TimeSpan timeout, int threadsCount, double expectectedResult, Stopwatch stopwatch) { Debug.WriteLine(stopwatch.ElapsedMilliseconds/1000.0 + ": " + "problem serialized"); byte[] problemData; using (var memoryStream = new MemoryStream()) { var formatter = new BinaryFormatter(); formatter.Serialize(memoryStream, Encoding.UTF8.GetString(problem)); problemData = memoryStream.ToArray(); } var taskSolver = new DvrpTaskSolver(problemData); var partialProblemsData = taskSolver.DivideProblem(threadsCount); Debug.WriteLine(stopwatch.ElapsedMilliseconds/1000.0 + ": " + "problem divided; threadsCount=" + threadsCount); var tasks = new List<Task<byte[]>>(threadsCount); foreach (var partialProblemData in partialProblemsData) { var data = partialProblemData; tasks.Add(new Task<byte[]>(() => { var taskSolver2 = new DvrpTaskSolver(problemData); return taskSolver2.Solve(data, timeout); } )); tasks[tasks.Count - 1].Start(); } Task.WaitAll(tasks.ToArray()); Debug.WriteLine(stopwatch.ElapsedMilliseconds/1000.0 + ": " + "partial solutions solved"); var finalSolutionData = taskSolver.MergeSolution(tasks.Select(task => task.Result).ToArray()); Debug.WriteLine(stopwatch.ElapsedMilliseconds/1000.0 + ": " + "problems merged"); bool result; using (var memoryStream = new MemoryStream(finalSolutionData)) { var finalSolution = (string)_formatter.Deserialize(memoryStream); Debug.WriteLine(stopwatch.ElapsedMilliseconds / 1000.0 + ": " + finalSolution); var reg = new Regex(@"[-+]?\d+([,.]\d+)?"); MatchCollection m; m = reg.Matches(finalSolution); result = Math.Abs(Math.Round((double)new decimal(double.Parse(m[0].Value)), 2) - expectectedResult) < Double.Epsilon; } Debug.WriteLine(stopwatch.ElapsedMilliseconds / 1000.0 + ": " + "final solution deserialized"); return result; }