Ejemplo n.º 1
0
        protected static CompilationTestInfo ParseCs(string code, bool translate, Info info = null)
        {
            var project = CreateOneFileProject(code, info?.Ref);
            var c       = new Cs2PyCompiler
            {
                CSharpProject = project
            };

            c.TranslationAssemblies.Add(typeof(AssemblySandbox).Assembly);

            c.ReferencedAssemblies.Add(typeof(Tensorflow.TensorShape).Assembly);
            c.ReferencedAssemblies.Add(typeof(System.Linq.Enumerable).Assembly);
            c.ReferencedAssemblies.Add(typeof(System.Data.Linq.Binary).Assembly);
            var filename = Path.GetTempFileName().Replace(".tmp", ".dll");
            var er       = c.CompileCSharpProject(c.Sandbox, filename);

            if (!er.Success && er.Diagnostics.Any())
            {
                throw new Exception(er.Diagnostics[0].GetMessage());
            }
            Assert.True(er.Success);
            var translationInfo = c.ParseCsSource();

            if (!translate)
            {
                return(new CompilationTestInfo(c, translationInfo, null));
            }
            var translationState = new TranslationState(translationInfo);
            var translator       = new Translator(translationState);

            translator.Info.CurrentAssembly = c.CompiledAssembly;
            translator.Translate(c.Sandbox);
            var compare = info?.Compare;

            if (compare != null)
            {
                compare = compare.Trim();
                if (!compare.StartsWith("'''"))
                {
                    compare = "'''\r\nGenerated with cs2py\r\n'''\r\n" + compare;
                }
                var emiter = new PySourceCodeEmiter();
                var writer = new PySourceCodeWriter();
                translator.Modules[0].Emit(emiter, writer, new PyEmitStyle());
                var pyCode = writer.GetCode();
                Assert.Equal(compare.Trim(), pyCode.Trim());
            }

            return(new CompilationTestInfo(c, translationInfo, translator));
        }
Ejemplo n.º 2
0
 public CompilationTestInfo(Cs2PyCompiler compiler, TranslationInfo info, Translator translator)
 {
     Compiler   = compiler;
     Info       = info;
     Translator = translator;
 }