diff --git a/distribution/lib/Standard/DuckDB/0.0.0-dev/src/Internal/DuckDB_Type_Mapping.enso b/distribution/lib/Standard/DuckDB/0.0.0-dev/src/Internal/DuckDB_Type_Mapping.enso index 8e874ac79f1b..010617c145df 100644 --- a/distribution/lib/Standard/DuckDB/0.0.0-dev/src/Internal/DuckDB_Type_Mapping.enso +++ b/distribution/lib/Standard/DuckDB/0.0.0-dev/src/Internal/DuckDB_Type_Mapping.enso @@ -111,11 +111,7 @@ type DuckDB_Type_Mapping Types.TIMESTAMP -> Value_Type.Date_Time False Types.BLOB -> Value_Type.Binary Nothing False Types.BIT -> Value_Type.Binary Nothing False - _ -> case sql_type.name of - "TIMESTAMP_NS" -> Value_Type.Date_Time False - "TIMESTAMPTZ" -> Value_Type.Date_Time True - "TIMESTAMP WITH TIME ZONE" -> Value_Type.Date_Time True - _ -> Value_Type.Unsupported_Data_Type sql_type.name sql_type + _ -> Value_Type.Unsupported_Data_Type sql_type.name sql_type ## --- private: true diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/example/TestConstants.java b/engine/runtime-integration-tests/src/test/java/org/enso/example/TestConstants.java new file mode 100644 index 000000000000..a9195dee9e41 --- /dev/null +++ b/engine/runtime-integration-tests/src/test/java/org/enso/example/TestConstants.java @@ -0,0 +1,8 @@ +package org.enso.example; + +public class TestConstants { + private TestConstants() {} + + public static final int A = 1; + public static final int B = 2020; +} diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/CaseOfTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/CaseOfTest.java index c49769374e1f..c0ec2ad7f76d 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/CaseOfTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/CaseOfTest.java @@ -1,5 +1,7 @@ package org.enso.interpreter.test; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertEquals; import org.enso.interpreter.runtime.data.EnsoMultiValue; @@ -55,4 +57,40 @@ private void doCaseOfBoolean(Object t, Object f) { var two = choose.execute(f); assertEquals("With " + f + " we should get 2", 2, two.asInt()); } + + /** See #14426. */ + @Test + public void caseOfJavaFinalFields_SmallInteger() { + var code = + """ + polyglot java import org.enso.example.TestConstants + + main = + x = 1 + case x of + TestConstants.A -> "A" + _ -> "Unknown" + """; + var res = ctxRule.evalModule(code); + assertThat(res.isString(), is(true)); + assertThat(res.asString(), is("A")); + } + + /** See #14426. */ + @Test + public void caseOfJavaFinalFields_BiggerInteger() { + var code = + """ + polyglot java import org.enso.example.TestConstants + + main = + x = 2020 + case x of + TestConstants.B -> "B" + _ -> "Unknown" + """; + var res = ctxRule.evalModule(code); + assertThat(res.isString(), is(true)); + assertThat(res.asString(), is("B")); + } } diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/meta/IsSameObjectNode.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/meta/IsSameObjectNode.java index ad640db092ae..1f96785b2434 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/meta/IsSameObjectNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/meta/IsSameObjectNode.java @@ -36,6 +36,11 @@ boolean isSameDouble(double left, double right) { } } + @Specialization + boolean isSameLong(long left, long right) { + return left == right; + } + @Specialization( guards = { "interop.isString(left)", diff --git a/test/Base_Tests/polyglot-sources/enso-test-java-helpers/src/main/java/org/enso/base_test_helpers/Constants.java b/test/Base_Tests/polyglot-sources/enso-test-java-helpers/src/main/java/org/enso/base_test_helpers/Constants.java new file mode 100644 index 000000000000..f3b2e93b1b03 --- /dev/null +++ b/test/Base_Tests/polyglot-sources/enso-test-java-helpers/src/main/java/org/enso/base_test_helpers/Constants.java @@ -0,0 +1,11 @@ +package org.enso.base_test_helpers; + +public class Constants { + private Constants() {} + + public static final int SMALL_INT = 1; + public static final int BIG_INT = 2020; + public static final long SMALL_LONG = 2L; + public static final long BIG_LONG = 20_000L; + public static final String STRING = "string"; +} diff --git a/test/Base_Tests/src/Semantic/Case_Spec.enso b/test/Base_Tests/src/Semantic/Case_Spec.enso index 485544f462b5..98496a6f7324 100644 --- a/test/Base_Tests/src/Semantic/Case_Spec.enso +++ b/test/Base_Tests/src/Semantic/Case_Spec.enso @@ -3,6 +3,7 @@ import Standard.Base.Data.Array as Array_Module import Standard.Base.Data.Text as Text_Module import Standard.Base.Data.Vector as Vector_Module +polyglot java import org.enso.base_test_helpers.Constants as Java_Constants polyglot java import java.lang.Class polyglot java import java.lang.Long as Java_Long polyglot java import java.lang.Object as Java_Object @@ -347,6 +348,23 @@ add_specs suite_builder = suite_builder.group "Pattern Matches" group_builder-> _ : Function -> Nothing _ -> Test.fail "Expected to match on Function type." + group_builder.specify "should pattern match on Java constant fields" <| + case 1 of + Java_Constants.SMALL_INT -> Nothing + _ -> Test.fail "Expected to match on SMALL_INT." + case "string" of + Java_Constants.STRING -> Nothing + _ -> Test.fail "Expected to match on STRING." + case 2 of + Java_Constants.SMALL_LONG -> Nothing + _ -> Test.fail "Expected to match on SMALL_LONG." + case 20000 of + Java_Constants.BIG_LONG -> Nothing + _ -> Test.fail "Expected to match on BIG_LONG." + case 2020 of + Java_Constants.BIG_INT -> Nothing + _ -> Test.fail "Expected to match on BIG_INT." + main filter=Nothing = suite = Test.build suite_builder-> add_specs suite_builder