static void Main(string[] args) { if (args.Length < 1) { Console.WriteLine("Please specify a vm file or folder"); return; } var path = args[0]; IEnumerable <string> inputFilenames; string outputFilename; var isBootstrappingRequired = false; if (File.Exists(path)) { inputFilenames = new[] { path }; outputFilename = Path.ChangeExtension(path, "asm"); } else if (Directory.Exists(path)) { inputFilenames = Directory.EnumerateFiles(path, "*.vm"); outputFilename = Path.Combine(path, path.TrimEnd('/') + ".asm"); isBootstrappingRequired = true; } else { Console.WriteLine("Please specify a valid vm file or folder"); return; } var eqCommandCounter = new Counter(); var gtCommandCounter = new Counter(); var ltCommandCounter = new Counter(); var functionCallCounter = new FunctionCallCounter(); using (var sw = File.CreateText(outputFilename)) { if (isBootstrappingRequired) { AddBootstrappingCode(sw); } foreach (var inputFilename in inputFilenames) { var filenameWithoutExt = Path.GetFileNameWithoutExtension(inputFilename); new VMFileTranslator(CreateTranslator( eqCommandCounter, gtCommandCounter, ltCommandCounter, functionCallCounter, filenameWithoutExt )) .TranslateFileToStream(inputFilename, sw); } } }
public void ToAssembly_GivenRepeatCalls_IncrementsReturnLabel(string functionName) { var callCounter = new FunctionCallCounter(); CreateSutWithCallCounter(callCounter).ToAssembly($"call {functionName} 0"); CreateSutWithCallCounter(callCounter).ToAssembly($"call {functionName} 0"); var actual = CreateSutWithCallCounter(callCounter).ToAssembly($"call {functionName} 0"); Assert.Contains($"// push {functionName}$ret.2", actual); Assert.Contains($"@{functionName}$ret.2", actual); Assert.Contains($"({functionName}$ret.2)", actual); }
public void function_returns_new_data_when_new_arguments_are_passed() { const int iters = 100; var counter = new FunctionCallCounter(); for (int i = 0; i < iters; i++) { _cache.GetOrAddFunc(() => counter.GetCallCount(i)).UsingKeys(i); } var result = counter.TotalCount; Assert.Equal(iters, result); }
public void func_returns_data_once() { const int iters = 100; var counter = new FunctionCallCounter(); for (int i = 0; i < iters; i++) { _cache.GetOrAddFunc(() => counter.GetCallCount(0)).UsingKeys(0); } var result = counter.TotalCount; Assert.Equal(1, result); }