in utilities/Microsoft.Quantum.Katas/CheckKataMagic.cs [145:197]
public virtual bool Simulate(OperationInfo test, string userAnswer, IChannel channel)
{
// The skeleton answer used to compile the workspace
var skeletonAnswer = FindSkeletonAnswer(test, userAnswer);
if (skeletonAnswer == null)
{
channel.Stderr($"Invalid task name: {userAnswer}");
return false;
}
// The reference implementation
var referenceAnswer = FindReferenceImplementation(test, userAnswer);
if (referenceAnswer == null)
{
channel.Stderr($"Reference answer not found: {userAnswer}");
return false;
}
try
{
var qsim = CreateSimulator();
var hasWarnings = false;
qsim.DisableLogToConsole();
qsim.OnDisplayableDiagnostic += channel.Display;
qsim.Register(skeletonAnswer.RoslynType, referenceAnswer.RoslynType, typeof(ICallable));
qsim.OnLog += (msg) =>
{
hasWarnings = msg?.StartsWith("[WARNING]") ?? hasWarnings;
channel.Stdout(msg);
};
var value = test.RunAsync(qsim, null).Result;
if (qsim is IDisposable dis) { dis.Dispose(); }
return !hasWarnings;
}
catch (AggregateException agg)
{
foreach (var e in agg.InnerExceptions) { channel.Stderr(e.Message); }
channel.Stderr($"Try again!");
return false;
}
catch (Exception e)
{
channel.Stderr(e.Message);
channel.Stderr($"Try again!");
return false;
}
}