-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
wangyunchao
committed
Dec 11, 2022
1 parent
e17e758
commit 6bbe248
Showing
2 changed files
with
118 additions
and
0 deletions.
There are no files selected for viewing
69 changes: 69 additions & 0 deletions
69
src/test/java/com/wast/test/expression/ExprCompilerJavassistTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
package com.wast.test.expression; | ||
|
||
import io.github.wycst.wast.common.expression.EvaluateEnvironment; | ||
import io.github.wycst.wast.common.expression.Expression; | ||
import io.github.wycst.wast.common.expression.compile.CompilerEnvironment; | ||
import io.github.wycst.wast.common.expression.compile.CompilerExpression; | ||
import io.github.wycst.wast.common.expression.functions.JavassistExprFunction; | ||
|
||
import java.util.HashMap; | ||
import java.util.Map; | ||
|
||
/** | ||
* @Author: wangy | ||
* @Date: 2022/11/6 11:36 | ||
* @Description: | ||
*/ | ||
public class ExprCompilerJavassistTest { | ||
|
||
public static void main(String[] args) { | ||
|
||
String el = "arg.a+arg.b+@max(140,113,arg.b)"; | ||
|
||
Map aa = new HashMap(); | ||
aa.put("a", 120); | ||
aa.put("b", 150); | ||
|
||
Map map = new HashMap(); | ||
map.put("arg", aa); | ||
map.put("b", 8); | ||
map.put("c", 1); | ||
map.put("中路", 1d); | ||
|
||
EvaluateEnvironment evaluateEnvironment = EvaluateEnvironment.create(map); | ||
evaluateEnvironment.registerStaticMethods(Math.class); | ||
|
||
double result = 0, a = 4, b = 5; | ||
CompilerEnvironment compileEnvironment = new CompilerEnvironment(); | ||
compileEnvironment.setSkipParse(true); | ||
compileEnvironment.setVariableType(int.class, "arg.a", "arg.b"); | ||
compileEnvironment.registerJavassistFunction("max", new JavassistExprFunction<Integer, Integer>() { | ||
|
||
@Override | ||
public Integer execute(Integer... p) { | ||
return 1; | ||
} | ||
}, int.class, int.class, int.class, int.class); | ||
|
||
System.out.println(CompilerExpression.generateJavaCode(el, compileEnvironment)); | ||
|
||
long s1 = System.currentTimeMillis(); | ||
CompilerExpression compiler = CompilerExpression.compile(el, compileEnvironment, CompilerExpression.Coder.Javassist); | ||
long s2 = System.currentTimeMillis(); | ||
System.out.println("==== eval2 " + compiler.evaluate(map)); | ||
|
||
Object r = Expression.eval(el, map); | ||
|
||
System.out.println(" == compile " + (s2 - s1)); | ||
|
||
long l1 = System.currentTimeMillis(); | ||
for (int i = 0 ; i < 100000000; i++) { | ||
} | ||
|
||
long l2 = System.currentTimeMillis(); | ||
System.out.println(l2 - l1); | ||
System.out.println(result); | ||
} | ||
|
||
|
||
} |
49 changes: 49 additions & 0 deletions
49
src/test/java/com/wast/test/expression/ExprCompilerNativeTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
package com.wast.test.expression; | ||
|
||
import io.github.wycst.wast.common.expression.EvaluateEnvironment; | ||
import io.github.wycst.wast.common.expression.Expression; | ||
import io.github.wycst.wast.common.expression.compile.CompilerEnvironment; | ||
import io.github.wycst.wast.common.expression.compile.CompilerExpression; | ||
import io.github.wycst.wast.common.expression.functions.JavassistExprFunction; | ||
|
||
import java.util.HashMap; | ||
import java.util.Map; | ||
|
||
/** | ||
* @Author: wangy | ||
* @Date: 2022/11/6 11:36 | ||
* @Description: | ||
*/ | ||
public class ExprCompilerNativeTest { | ||
|
||
public static void main(String[] args) { | ||
|
||
String el = "arg.a+arg.b+b+c"; | ||
CompilerEnvironment compileEnvironment = new CompilerEnvironment(); | ||
|
||
// 如果设置false会将表达式进行先解析再编译; | ||
// 如果设置为true将跳过解析在代码中直接return,此时最好使用setVariableType来声明变量类型 | ||
// 不伦是否设置skipParse,使用setVariableType来声明变量类型都是不错的选择,能大大提高效率 | ||
compileEnvironment.setSkipParse(true); | ||
compileEnvironment.setVariableType(int.class, "arg.a", "arg.b", "b", "c"); | ||
|
||
// 输出编译的源代码 | ||
System.out.println(CompilerExpression.generateJavaCode(el, compileEnvironment)); | ||
CompilerExpression compiler = CompilerExpression.compile(el, compileEnvironment, CompilerExpression.Coder.Native); | ||
|
||
|
||
Map aa = new HashMap(); | ||
aa.put("a", 120); | ||
aa.put("b", 150); | ||
|
||
Map var = new HashMap(); | ||
var.put("arg", aa); | ||
var.put("b", 8); | ||
var.put("c", 1); | ||
|
||
// 执行 | ||
System.out.println("==== eval result " + compiler.evaluate(var)); | ||
} | ||
|
||
|
||
} |