From 9afd7c1dc2343f562276f142567a0507e6989df5 Mon Sep 17 00:00:00 2001 From: fdodino Date: Thu, 20 Oct 2016 08:12:18 -0300 Subject: [PATCH] Wollok very big integer support (using decimals) --- .../tests/interpreter/NumberTestCase.xtend | 24 +++++++++++++++++++ .../WollokInterpreterEvaluator.xtend | 7 +++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/org.uqbar.project.wollok.tests/src/org/uqbar/project/wollok/tests/interpreter/NumberTestCase.xtend b/org.uqbar.project.wollok.tests/src/org/uqbar/project/wollok/tests/interpreter/NumberTestCase.xtend index 4212229bfb..d294556347 100644 --- a/org.uqbar.project.wollok.tests/src/org/uqbar/project/wollok/tests/interpreter/NumberTestCase.xtend +++ b/org.uqbar.project.wollok.tests/src/org/uqbar/project/wollok/tests/interpreter/NumberTestCase.xtend @@ -425,4 +425,28 @@ class NumberTestCase extends AbstractWollokInterpreterTestCase { '''.test } + @Test + def void veryBigIntegerAdd() { + ''' + var a = 100000000000000000 + assert.equals(100000000000000001, a + 1) + '''.test + } + + @Test + def void veryBigIntegerMultiply() { + ''' + var a = 100000000000000000 + assert.equals(100000000000000000, a * 1) + '''.test + } + + @Test + def void veryBigIntegerDivide() { + ''' + var a = 100000000000000000 + assert.equals(100000, a / 1000000000000) + '''.test + } + } \ No newline at end of file diff --git a/org.uqbar.project.wollok/src/org/uqbar/project/wollok/interpreter/WollokInterpreterEvaluator.xtend b/org.uqbar.project.wollok/src/org/uqbar/project/wollok/interpreter/WollokInterpreterEvaluator.xtend index 34e64ddf1a..35e9cf25fe 100644 --- a/org.uqbar.project.wollok/src/org/uqbar/project/wollok/interpreter/WollokInterpreterEvaluator.xtend +++ b/org.uqbar.project.wollok/src/org/uqbar/project/wollok/interpreter/WollokInterpreterEvaluator.xtend @@ -218,7 +218,12 @@ class WollokInterpreterEvaluator implements XInterpreterEvaluator if (value.contains('.')) doInstantiateNumber(DOUBLE, new BigDecimal(value)) else { - doInstantiateNumber(INTEGER, Integer.valueOf(value)) + try { + doInstantiateNumber(INTEGER, Integer.valueOf(value)) + } catch (NumberFormatException e) { + // If value is too long, use a decimal + doInstantiateNumber(DOUBLE, new BigDecimal(value)) + } } }