geforkt von Mirrors/FastAsyncWorldEdit
Cover many more ops
(cherry picked from commit 3dbaae79cd4aa37724fb8969bbf595180e152f3e)
Dieser Commit ist enthalten in:
Ursprung
a464bde43b
Commit
0e4a206f72
@ -462,8 +462,6 @@ class CompilingVisitor extends ExpressionBaseVisitor<MethodHandle> {
|
|||||||
return (l, r) -> ExpressionHandles.boolToDouble(l != r);
|
return (l, r) -> ExpressionHandles.boolToDouble(l != r);
|
||||||
case NEAR:
|
case NEAR:
|
||||||
return (l, r) -> ExpressionHandles.boolToDouble(almostEqual2sComplement(l, r));
|
return (l, r) -> ExpressionHandles.boolToDouble(almostEqual2sComplement(l, r));
|
||||||
case GREATER_THAN_OR_EQUAL:
|
|
||||||
return (l, r) -> ExpressionHandles.boolToDouble(l >= r);
|
|
||||||
}
|
}
|
||||||
throw ExpressionHelper.evalException(ctx, "Invalid text for equality expr: " + ctx.op.getText());
|
throw ExpressionHelper.evalException(ctx, "Invalid text for equality expr: " + ctx.op.getText());
|
||||||
});
|
});
|
||||||
|
@ -101,6 +101,84 @@ class ExpressionTest extends BaseExpressionTest {
|
|||||||
checkTestCase("!-2", 0);
|
checkTestCase("!-2", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testComplement() {
|
||||||
|
checkTestCase("~0", ~0);
|
||||||
|
checkTestCase("~1", ~1);
|
||||||
|
checkTestCase("~-1", ~-1);
|
||||||
|
checkTestCase("~-2", ~-2);
|
||||||
|
// it drops the decimal!
|
||||||
|
checkTestCase("~0.1", ~0);
|
||||||
|
checkTestCase("~0.5", ~0);
|
||||||
|
checkTestCase("~1.9", ~1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testShift() {
|
||||||
|
checkTestCase("1<<4", 1 << 4);
|
||||||
|
// drops both decimals
|
||||||
|
checkTestCase("1.1<<4.1", 1 << 4);
|
||||||
|
checkTestCase("16>>2", 16 >> 2);
|
||||||
|
checkTestCase("16.9>>2.1", 16 >> 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testComparisonOps() {
|
||||||
|
checkTestCase("1>=0", 1);
|
||||||
|
checkTestCase("1>0", 1);
|
||||||
|
|
||||||
|
checkTestCase("0>=0", 1);
|
||||||
|
checkTestCase("0>0", 0);
|
||||||
|
|
||||||
|
checkTestCase("0<=1", 1);
|
||||||
|
checkTestCase("0<1", 1);
|
||||||
|
|
||||||
|
checkTestCase("0<=0", 1);
|
||||||
|
checkTestCase("0<0", 0);
|
||||||
|
|
||||||
|
checkTestCase("1>=2", 0);
|
||||||
|
checkTestCase("1>2", 0);
|
||||||
|
|
||||||
|
checkTestCase("0>=1", 0);
|
||||||
|
checkTestCase("0>1", 0);
|
||||||
|
|
||||||
|
checkTestCase("2<=1", 0);
|
||||||
|
checkTestCase("2<1", 0);
|
||||||
|
|
||||||
|
checkTestCase("1<=0", 0);
|
||||||
|
checkTestCase("1<0", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testEqualityOps() {
|
||||||
|
checkTestCase("1==1", 1);
|
||||||
|
checkTestCase("0==1", 0);
|
||||||
|
checkTestCase("1==0", 0);
|
||||||
|
|
||||||
|
checkTestCase("1!=1", 0);
|
||||||
|
checkTestCase("0!=1", 1);
|
||||||
|
checkTestCase("1!=0", 1);
|
||||||
|
|
||||||
|
checkTestCase("1.1==1.1", 1);
|
||||||
|
// These aren't normally equal
|
||||||
|
checkTestCase("1!=0.999999999", 1);
|
||||||
|
// But they are _almost_ equal!
|
||||||
|
checkTestCase("1~=0.999999999", 1);
|
||||||
|
// On the other hand, these aren't
|
||||||
|
checkTestCase("1~=0.9", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testPostfixOps() {
|
||||||
|
checkTestCase("(-1)!", 0);
|
||||||
|
checkTestCase("0!", 1);
|
||||||
|
checkTestCase("1!", 1);
|
||||||
|
checkTestCase("2!", 2);
|
||||||
|
checkTestCase("2000!", Double.POSITIVE_INFINITY);
|
||||||
|
// it truncates
|
||||||
|
checkTestCase("2.9!", 2);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testErrors() {
|
public void testErrors() {
|
||||||
// test lexer errors
|
// test lexer errors
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren