public async Task TestQ5() { var travisUUID = Environment.GetEnvironmentVariable("travistestidentifier"); if (travisUUID == null) { travisUUID = ""; } Console.WriteLine("Testing Q5"); string responseBody = await client.GetStringAsync(baseUrl + "tests/run/5/" + travisUUID); List<TestCase> testCases = JsonConvert.DeserializeObject<List<TestCase>>(responseBody); List<Answer> answers = new List<Answer>(); foreach (var test in testCases) { try { Answer answer = new Answer(); StructuredTrades input = JsonConvert.DeserializeObject<StructuredTrades>(test.input); var cancellationToken = new CancellationTokenSource(); cancellationToken.CancelAfter(1000); await Task.Run(() => answer = getFifthAnswer(input, test), cancellationToken.Token); answers.Add(answer); } catch (TaskCanceledException _) { Console.WriteLine("A test in Question 5 has timed out. Tests must complete within one second."); answers.Add(new Answer() { questionNumber = 5, testNumber = test.testNumber, correct = "TIMED_OUT", speed = -1 }); } catch (Exception ex) { Console.WriteLine(ex.StackTrace); } } if (travisUUID.Length > 0) { Console.WriteLine("Submitting Q5"); string ans = JsonConvert.SerializeObject(answers); await client.PostAsync(baseUrl + "answer/contestant/" + travisUUID + "/5", new StringContent(ans, Encoding.UTF8, "application/json")); } }
Answer getFifthAnswer(StructuredTrades input, TestCase test) { var timer = new Stopwatch(); timer.Start(); var answer = Question5.Answer(input.allowedAllocations, input.totalValue); timer.Stop(); var timeTaken = ((double)timer.ElapsedTicks / Stopwatch.Frequency) * 1000000000; return new Answer() { questionNumber = 5, testNumber = test.testNumber, correct = answer == test.output ? "CORRECT" : "INCORRECT", speed = timeTaken }; }