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