Beispiel #1
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }