From 8c61bb2cf1c90a96c935a1eae18f283ce7aabe00 Mon Sep 17 00:00:00 2001 From: Sam Cao Date: Fri, 1 Nov 2024 10:33:23 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20Add=20EQ,=20EQEQ,=20NotEQ,?= =?UTF-8?q?=20NotEQEQ=20for=20long?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/ts/test/test.logical.operations.ts | 20 +++++++ .../buddy/ts2java/ast/Ts2JavaAstBinExpr.java | 3 +- .../buddy/ts2java/ast/Ts2JavaAstBinaryOp.java | 4 ++ .../buddy/ts2java/TestLogicalOperations.java | 56 +++++++++++++++++++ 4 files changed, 81 insertions(+), 2 deletions(-) diff --git a/scripts/ts/test/test.logical.operations.ts b/scripts/ts/test/test.logical.operations.ts index 66fe63d..94e70a6 100644 --- a/scripts/ts/test/test.logical.operations.ts +++ b/scripts/ts/test/test.logical.operations.ts @@ -9,6 +9,14 @@ class Test { return a === b; } + public logicalEQ_IL_Z(a: int, b: long): boolean { + return a == b; + } + + public logicalEQEQ_IL_Z(a: int, b: long): boolean { + return a === b; + } + public logicalGE_II_Z(a: int, b: int): boolean { return a >= b; } @@ -49,10 +57,20 @@ class Test { public logicalNotEQ_II_Z(a: int, b: int): boolean { return a != b; } + + public logicalNotEQEQ_IL_Z(a: int, b: long): boolean { + return a !== b; + } + + public logicalNotEQ_IL_Z(a: int, b: long): boolean { + return a != b; + } } console.log(new Test().logicalEQ_II_Z(1, 2)); console.log(new Test().logicalEQEQ_II_Z(1, 2)); +console.log(new Test().logicalEQ_IL_Z(1, 2)); +console.log(new Test().logicalEQEQ_IL_Z(1, 2)); console.log(new Test().logicalGE_II_Z(1, 2)); console.log(new Test().logicalGE_IL_Z(1, 2)); console.log(new Test().logicalGT_II_Z(1, 2)); @@ -63,3 +81,5 @@ console.log(new Test().logicalLT_II_Z(1, 2)); console.log(new Test().logicalLT_IL_Z(1, 2)); console.log(new Test().logicalNotEQEQ_II_Z(1, 2)); console.log(new Test().logicalNotEQ_II_Z(1, 2)); +console.log(new Test().logicalNotEQEQ_IL_Z(1, 2)); +console.log(new Test().logicalNotEQ_IL_Z(1, 2)); diff --git a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstBinExpr.java b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstBinExpr.java index 1326505..bf79bc5 100644 --- a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstBinExpr.java +++ b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstBinExpr.java @@ -89,9 +89,8 @@ private TypeDescription manipulateExpression(JavaFunctionContext functionContext switch (expression.getType()) { case BinExpr: return new Ts2JavaAstBinExpr().manipulate(functionContext, expression.as(Swc4jAstBinExpr.class)); - case Ident: { + case Ident: return new Ts2JavaAstIdent().manipulate(functionContext, expression.as(Swc4jAstIdent.class)); - } default: throw new Ts2JavaAstException( expression, diff --git a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstBinaryOp.java b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstBinaryOp.java index a0261c9..dee2e32 100644 --- a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstBinaryOp.java +++ b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/Ts2JavaAstBinaryOp.java @@ -119,8 +119,12 @@ public static StackManipulation getLogicalStackManipulation(Swc4jAstBinaryOp bin break; case EqEq: case EqEqEq: + opcodeCompare = Opcodes.IFNE; + break; case NotEq: case NotEqEq: + opcodeCompare = Opcodes.IFEQ; + break; default: throw new Ts2JavaException( SimpleFreeMarkerFormat.format("Unsupported binary operation ${binaryOp} for type ${type} in logical operation.", diff --git a/src/test/java/com/caoccao/javet/buddy/ts2java/TestLogicalOperations.java b/src/test/java/com/caoccao/javet/buddy/ts2java/TestLogicalOperations.java index 12a25a0..051bf68 100644 --- a/src/test/java/com/caoccao/javet/buddy/ts2java/TestLogicalOperations.java +++ b/src/test/java/com/caoccao/javet/buddy/ts2java/TestLogicalOperations.java @@ -156,6 +156,20 @@ public void testLogicalEQEQ_II_Z() throws Exception { assertTrue((boolean) method.invoke(object, 1, 1)); } + @Test + public void testLogicalEQEQ_IL_Z() throws Exception { + Method method = clazz.getMethod("logicalEQEQ_IL_Z", int.class, long.class); + assertNotNull(method); + assertEquals(boolean.class, method.getReturnType()); + assertEquals(2, method.getParameterCount()); + assertEquals(int.class, method.getParameters()[0].getType()); + assertEquals(long.class, method.getParameters()[1].getType()); + Object object = clazz.getConstructor().newInstance(); + assertFalse((boolean) method.invoke(object, 1, 2L)); + assertFalse((boolean) method.invoke(object, 2, 1L)); + assertTrue((boolean) method.invoke(object, 1, 1L)); + } + @Test public void testLogicalEQ_II_Z() throws Exception { assertFalse(logicalEQ_II_Z(1, 2)); @@ -171,6 +185,20 @@ public void testLogicalEQ_II_Z() throws Exception { assertTrue((boolean) method.invoke(object, 1, 1)); } + @Test + public void testLogicalEQ_IL_Z() throws Exception { + Method method = clazz.getMethod("logicalEQ_IL_Z", int.class, long.class); + assertNotNull(method); + assertEquals(boolean.class, method.getReturnType()); + assertEquals(2, method.getParameterCount()); + assertEquals(int.class, method.getParameters()[0].getType()); + assertEquals(long.class, method.getParameters()[1].getType()); + Object object = clazz.getConstructor().newInstance(); + assertFalse((boolean) method.invoke(object, 1, 2L)); + assertFalse((boolean) method.invoke(object, 2, 1L)); + assertTrue((boolean) method.invoke(object, 1, 1L)); + } + @Test public void testLogicalGE_II_Z() throws Exception { Method method = clazz.getMethod("logicalGE_II_Z", int.class, int.class); @@ -310,4 +338,32 @@ public void testLogicalNotEQ_II_Z() throws Exception { assertTrue((boolean) method.invoke(object, 2, 1)); assertFalse((boolean) method.invoke(object, 1, 1)); } + + @Test + public void testLogicalNotEQEQ_IL_Z() throws Exception { + Method method = clazz.getMethod("logicalNotEQEQ_IL_Z", int.class, long.class); + assertNotNull(method); + assertEquals(boolean.class, method.getReturnType()); + assertEquals(2, method.getParameterCount()); + assertEquals(int.class, method.getParameters()[0].getType()); + assertEquals(long.class, method.getParameters()[1].getType()); + Object object = clazz.getConstructor().newInstance(); + assertTrue((boolean) method.invoke(object, 1, 2L)); + assertTrue((boolean) method.invoke(object, 2, 1L)); + assertFalse((boolean) method.invoke(object, 1, 1L)); + } + + @Test + public void testLogicalNotEQ_IL_Z() throws Exception { + Method method = clazz.getMethod("logicalNotEQ_IL_Z", int.class, long.class); + assertNotNull(method); + assertEquals(boolean.class, method.getReturnType()); + assertEquals(2, method.getParameterCount()); + assertEquals(int.class, method.getParameters()[0].getType()); + assertEquals(long.class, method.getParameters()[1].getType()); + Object object = clazz.getConstructor().newInstance(); + assertTrue((boolean) method.invoke(object, 1, 2L)); + assertTrue((boolean) method.invoke(object, 2, 1L)); + assertFalse((boolean) method.invoke(object, 1, 1L)); + } }