zoukankan      html  css  js  c++  java
  • PythonTest

    using System;
    using System.Text;
    using System.Collections.Generic;
    using System.Linq;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using IronPython.Hosting;
    using Microsoft.Scripting.Hosting;
    using Shiji.Base;
    using Shiji.HR.Dal;

    namespace Test.Bll
    {
        
    /// <summary>
        
    /// PythonTest 的摘要说明
        
    /// </summary>
        [TestClass]
        
    public class PythonTest
        {
            ScriptEngine engine;
            ScriptScope scope;

            
    public PythonTest()
            {
                engine 
    = Python.CreateEngine();
                scope 
    = engine.CreateScope();
            }

            
    private TestContext testContextInstance;

            
    /// <summary>
            
    ///获取或设置测试上下文,该上下文提供
            
    ///有关当前测试运行及其功能的信息。
            
    ///</summary>
            public TestContext TestContext
            {
                
    get
                {
                    
    return testContextInstance;
                }
                
    set
                {
                    testContextInstance 
    = value;
                }
            }

            

            [TestMethod]
            
    public void 测试简单表达式()
            {
                var strExpression 
    = "1+2";
                var sourceCode 
    = engine.CreateScriptSourceFromString(strExpression);
                var actual 
    = sourceCode.Execute<int>();

                Assert.AreEqual(
    3, actual);
            }

            [TestMethod]
            
    public void 测试传入变量()
            {
                var strExpression 
    = "\"Hello:\" + str";
                var sourceCode 
    = engine.CreateScriptSourceFromString(strExpression);
                scope.SetVariable(
    "str""Python");
                var actual 
    = sourceCode.Execute<string>(scope);
                scope.RemoveVariable(
    "str");
                Assert.AreEqual(
    "Hello:Python", actual);
            }


            [TestMethod]
            
    public void 测试C引用Python函数()
            {
                var strExpression 
    = @"
    def MyFunction(n):
        return 2*n 
                    
    ";
                var sourceCode 
    = engine.CreateScriptSourceFromString(strExpression).Compile().Execute(scope);

                var func 
    = engine.GetVariable<Func<intint>>(scope, "MyFunction");

                Assert.AreEqual(
    0, func(0));
                Assert.AreEqual(
    2, func(1));
                Assert.AreEqual(
    4, func(2));
            }

            [TestMethod]
            
    public void 测试Python引用C函数()
            {
                var strExpression 
    = "CMethod('Python')";
                var sourceCode 
    = engine.CreateScriptSourceFromString(strExpression);
                scope.SetVariable(
    "CMethod", (Func<stringstring>)TMethod);
                var actual 
    = sourceCode.Execute<string>(scope);
                scope.RemoveVariable(
    "CMethod");
                Assert.AreEqual(
    "Hello:Python", actual);
            }

            
    public string TMethod(string info)
            {
                
    return "Hello:" + info;
            }

            [TestMethod]
            
    public void 测试Python引用C函数2()
            {
                var strExpression 
    = "CMethod('Python')";
                var sourceCode 
    = engine.CreateScriptSourceFromString(strExpression);
                scope.SetVariable(
    "CMethod", (Func<stringstring>)T2Method);
                var actual 
    = sourceCode.Execute<string>(scope);
                scope.RemoveVariable(
    "CMethod");
                Assert.AreEqual(
    "Hello:Python", actual);
            }

            
    public string T2Method(string info)
            {
                
    return TMethod(info);
            }

            [TestMethod]
            
    public void 测试Linq1()
            {
                var mc 
    = App.DB.GetTable<HR_MetaClass>().First(p => p.Code == "HR_Catalog");
                
    //mc.HR_MetaProperty.Count
                
    //此处调用属性
                var strExpression = "mc.HR_MetaProperty.Count";
                var sourceCode 
    = engine.CreateScriptSourceFromString(strExpression);
                scope.SetVariable(
    "mc", mc);
                var actual 
    = sourceCode.Execute<int>(scope);
                scope.RemoveVariable(
    "mc");
                Assert.AreEqual(
    12, actual);
            }

            [TestMethod]
            
    public void 测试Linq2()
            {
                var mc 
    = App.DB.GetTable<HR_MetaClass>().First(p => p.Code == "HR_Catalog");
                
    //mc.HR_MetaProperty.Count
                
    //此处调用方法,具体可以参看http://blogs.msdn.com/sreekarc/archive/2007/05/01/extension-methods-and-delegates.aspx

                var strExpression 
    = @"
    import clr
    clr.AddReference('System.Core')
    from System.Linq import*
    Enumerable.Count(mc.HR_MetaProperty)
    ";
                var sourceCode 
    = engine.CreateScriptSourceFromString(strExpression);
                scope.SetVariable(
    "mc", mc);
                var actual 
    = sourceCode.Execute<int>(scope);
                scope.RemoveVariable(
    "mc");
                Assert.AreEqual(
    12, actual);


            }

            [TestMethod]
            
    public void 测试Linq3()
            {
                var mc 
    = App.DB.GetTable<HR_MetaClass>().First(p => p.Code == "HR_Catalog");
                var strExpression 
    = @"
    import clr
    clr.AddReference('System.Core')
    from System.Linq import*
    Enumerable.First(mc.HR_MetaProperty,lambda p:p.Code=='Code')
    ";
                var sourceCode 
    = engine.CreateScriptSourceFromString(strExpression);
                scope.SetVariable(
    "mc", mc);
                var actual 
    = sourceCode.Execute<HR_MetaProperty>(scope);
                scope.RemoveVariable(
    "mc");
                Assert.AreEqual(
    "Code", actual.Code);
            }

        }
    }
  • 相关阅读:
    5.4 省选模拟赛 修改 线段树优化dp 线段树上二分
    一本通 高手训练 1782 分层图 状压dp
    luogu P3830 [SHOI2012]随机树 期望 dp
    5.2 省选模拟赛 或许 线型基
    luogu P4562 [JXOI2018]游戏 组合数学
    一本通 高手训练 1781 死亡之树 状态压缩dp
    luogu P4726 【模板】多项式指数函数 多项式 exp 牛顿迭代 泰勒展开
    4.28 省选模拟赛 负环 倍增 矩阵乘法 dp
    HDU 1756 Cupid's Arrow 计算几何 判断一个点是否在多边形内
    一本通 高手训练 1763 简单树 可持久化线段树 树链刨分 标记永久化
  • 原文地址:https://www.cnblogs.com/rock_chen/p/1650942.html
Copyright © 2011-2022 走看看