Removed stringification for number values outside of IEEE754 64bit range.

Signed-off-by: Roman Grigoriadi <roman.grigoriadi@oracle.com>
diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/BigDecimalTypeSerializer.java b/src/main/java/org/eclipse/yasson/internal/serializer/BigDecimalTypeSerializer.java
index 7eeacef..94b916f 100644
--- a/src/main/java/org/eclipse/yasson/internal/serializer/BigDecimalTypeSerializer.java
+++ b/src/main/java/org/eclipse/yasson/internal/serializer/BigDecimalTypeSerializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019 Oracle and/or its affiliates. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
  * which accompanies this distribution.
@@ -36,19 +36,11 @@
 
     @Override
     protected void serializeNonFormatted(BigDecimal obj, JsonGenerator generator, String key) {
-        if (BigNumberUtil.isIEEE754(obj)) {
-            generator.write(key, obj);
-        } else {
-            generator.write(key, obj.toString());
-        }
+        generator.write(key, obj);
     }
 
     @Override
     protected void serializeNonFormatted(BigDecimal obj, JsonGenerator generator) {
-        if (BigNumberUtil.isIEEE754(obj)) {
-            generator.write(obj);
-        } else {
-            generator.write(obj.toString());
-        }
+        generator.write(obj);
     }
 }
diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/BigIntegerTypeSerializer.java b/src/main/java/org/eclipse/yasson/internal/serializer/BigIntegerTypeSerializer.java
index 6b18aa7..3376854 100644
--- a/src/main/java/org/eclipse/yasson/internal/serializer/BigIntegerTypeSerializer.java
+++ b/src/main/java/org/eclipse/yasson/internal/serializer/BigIntegerTypeSerializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019 Oracle and/or its affiliates. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
  * which accompanies this distribution.
@@ -36,19 +36,11 @@
 
     @Override
     protected void serializeNonFormatted(BigInteger obj, JsonGenerator generator, String key) {
-        if (BigNumberUtil.isIEEE754(obj)) {
-            generator.write(key, obj);
-        } else {
-            generator.write(key, obj.toString());
-        }
+        generator.write(key, obj);
     }
 
     @Override
     protected void serializeNonFormatted(BigInteger obj, JsonGenerator generator) {
-        if (BigNumberUtil.isIEEE754(obj)) {
-            generator.write(obj);
-        } else {
-            generator.write(obj.toString());
-        }
+        generator.write(obj);
     }
 }
diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/BigNumberUtil.java b/src/main/java/org/eclipse/yasson/internal/serializer/BigNumberUtil.java
deleted file mode 100644
index 5cb0724..0000000
--- a/src/main/java/org/eclipse/yasson/internal/serializer/BigNumberUtil.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
- * which accompanies this distribution.
- * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- * David Kral
- ******************************************************************************/
-
-package org.eclipse.yasson.internal.serializer;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/**
- * Utility class for checking of IEEE-754 standard in big numbers
- *
- * @author David Kral
- */
-class BigNumberUtil {
-
-    // 53 means max bit value of number with sign bit included
-    private static final int MAX_BIT_SIZE = 53;
-
-    // Max value for Long. Similar to JavaScript Number.MAX_SAFE_INTEGER (2**53)-1
-    private static final long MAX_JS_SAFE_VALUE = 9007199254740991L;
-
-    // Min value for Long. Similar to JavaScript Number.MIN_SAFE_INTEGER -(2**53)+1
-    private static final long MIN_JS_SAFE_VALUE = -9007199254740991L;
-
-    // -1022 is the lowest range of the exponent
-    // more https://en.wikipedia.org/wiki/Exponent_bias
-    private static final int MIN_RANGE = -1022;
-
-    // 1023 is the highest range of the exponent
-    // more https://en.wikipedia.org/wiki/Exponent_bias
-    private static final int MAX_RANGE = 1023;
-
-    /**
-     * Checks whether the value of {@link BigDecimal} matches format IEEE-754
-     *
-     * @param value value which is going to be checked
-     * @return true if value matches format IEEE-754
-     */
-    static boolean isIEEE754(BigDecimal value) {
-        //scale of the number
-        int scale = value.scale();
-        //bit value of number without scale
-        int valBits = value.unscaledValue().abs().bitLength();
-        //bit value of scaled number
-        int intBitsScaled = value.toBigInteger().bitLength();
-        // Number whose bit length is than 53 or is not in range is considered as non IEEE 754-2008 binary64 compliant
-        return valBits <= MAX_BIT_SIZE && intBitsScaled <= MAX_BIT_SIZE && MIN_RANGE <= scale && scale <= MAX_RANGE;
-    }
-
-    /**
-     * Checks whether the value of {@link BigInteger} matches format IEEE-754
-     *
-     * @param value value which is going to be checked
-     * @return true if value matches format IEEE-754
-     */
-    static boolean isIEEE754(BigInteger value) {
-        // Number whose bit length is than 53 is considered as non IEEE 754-2008 binary64 compliant
-        return value.abs().bitLength() <= MAX_BIT_SIZE;
-    }
-
-    /**
-     * Checks whether the value of {@link Long} matches format IEEE-754
-     *
-     * @param value value which is going to be checked
-     * @return true if value matches format IEEE-754
-     */
-    static boolean isIEEE754(Long value) {
-        return value >= MIN_JS_SAFE_VALUE && value <= MAX_JS_SAFE_VALUE;
-    }
-
-
-
-}
diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/LongTypeSerializer.java b/src/main/java/org/eclipse/yasson/internal/serializer/LongTypeSerializer.java
index 2d8fe91..fcdf822 100644
--- a/src/main/java/org/eclipse/yasson/internal/serializer/LongTypeSerializer.java
+++ b/src/main/java/org/eclipse/yasson/internal/serializer/LongTypeSerializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019 Oracle and/or its affiliates. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
  * which accompanies this distribution.
@@ -35,19 +35,11 @@
 
     @Override
     protected void serializeNonFormatted(Long obj, JsonGenerator generator, String key) {
-        if (BigNumberUtil.isIEEE754(obj)) {
-            generator.write(key, obj);
-        } else {
-            generator.write(key, obj.toString());
-        }
+        generator.write(key, obj);
     }
 
     @Override
     protected void serializeNonFormatted(Long obj, JsonGenerator generator) {
-        if (BigNumberUtil.isIEEE754(obj)) {
-            generator.write(obj);
-        } else {
-            generator.write(obj.toString());
-        }
+        generator.write(obj);
     }
 }
diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/NumberTypeSerializer.java b/src/main/java/org/eclipse/yasson/internal/serializer/NumberTypeSerializer.java
index 76166c0..32425d4 100644
--- a/src/main/java/org/eclipse/yasson/internal/serializer/NumberTypeSerializer.java
+++ b/src/main/java/org/eclipse/yasson/internal/serializer/NumberTypeSerializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019 Oracle and/or its affiliates. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
  * which accompanies this distribution.
@@ -38,10 +38,6 @@
     @Override
     protected void serialize(Number obj, JsonGenerator generator, Marshaller marshaller) {
         BigDecimal bigDecimalValue = new BigDecimal(String.valueOf(obj));
-        if (BigNumberUtil.isIEEE754(bigDecimalValue)) {
-            generator.write(bigDecimalValue);
-        } else {
-            generator.write(String.valueOf(obj));
-        }
+        generator.write(bigDecimalValue);
     }
 }
diff --git a/src/test/java/org/eclipse/yasson/defaultmapping/basic/NumberTest.java b/src/test/java/org/eclipse/yasson/defaultmapping/basic/NumberTest.java
index 2841f3f..a2cbadc 100644
--- a/src/test/java/org/eclipse/yasson/defaultmapping/basic/NumberTest.java
+++ b/src/test/java/org/eclipse/yasson/defaultmapping/basic/NumberTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019 Oracle and/or its affiliates. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
  * which accompanies this distribution.
@@ -50,7 +50,7 @@
     @Test
     public void testBigDecimalMarshalling() {
         String jsonString = jsonb.toJson(new BigDecimal("0.10000000000000001"));
-        Assert.assertEquals("\"0.10000000000000001\"", jsonString);
+        Assert.assertEquals("0.10000000000000001", jsonString);
 
         jsonString = jsonb.toJson(new BigDecimal("0.1000000000000001"));
         Assert.assertEquals("0.1000000000000001", jsonString);
@@ -58,7 +58,7 @@
         BigDecimal result = jsonb.fromJson("0.10000000000000001", BigDecimal.class);
         Assert.assertEquals(new BigDecimal("0.10000000000000001"), result);
 
-        result = jsonb.fromJson("\"0.100000000000000001\"", BigDecimal.class);
+        result = jsonb.fromJson("0.100000000000000001", BigDecimal.class);
         Assert.assertEquals(new BigDecimal("0.100000000000000001"), result);
     }
 
@@ -68,13 +68,13 @@
         Assert.assertEquals("9007199254740991", jsonString);
 
         jsonString = jsonb.toJson(new BigDecimal("9007199254740992"));
-        Assert.assertEquals("\"9007199254740992\"", jsonString);
+        Assert.assertEquals("9007199254740992", jsonString);
 
         jsonString = jsonb.toJson(new BigDecimal("9007199254740991.1"));
-        Assert.assertEquals("\"9007199254740991.1\"", jsonString);
+        Assert.assertEquals("9007199254740991.1", jsonString);
 
         jsonString = jsonb.toJson(new BigDecimal(new BigInteger("1"), -400));
-        Assert.assertEquals("\"" + new BigDecimal(new BigInteger("1"), -400) + "\"", jsonString);
+        Assert.assertEquals(new BigDecimal(new BigInteger("1"), -400).toString(), jsonString);
     }
 
     @Test
@@ -83,7 +83,7 @@
         Assert.assertEquals("9007199254740991", jsonString);
 
         jsonString = jsonb.toJson(new BigInteger("9007199254740992"));
-        Assert.assertEquals("\"9007199254740992\"", jsonString);
+        Assert.assertEquals("9007199254740992", jsonString);
     }
 
     @Test
@@ -91,12 +91,12 @@
         BigDecimalInNumber testValueQuoted = new BigDecimalInNumber() {{setBigDecValue(new BigDecimal("9007199254740992"));}};
         BigDecimalInNumber testValueUnQuoted = new BigDecimalInNumber() {{setBigDecValue(new BigDecimal("9007199254740991"));}};
         String jsonString = jsonb.toJson(testValueQuoted);
-        Assert.assertEquals("{\"bigDecValue\":\"9007199254740992\"}", jsonString);
+        Assert.assertEquals("{\"bigDecValue\":9007199254740992}", jsonString);
 
         jsonString = jsonb.toJson(testValueUnQuoted);
         Assert.assertEquals("{\"bigDecValue\":9007199254740991}", jsonString);
 
-        BigDecimalInNumber result = jsonb.fromJson("{\"bigDecValue\":\"9007199254740992\"}", BigDecimalInNumber.class);
+        BigDecimalInNumber result = jsonb.fromJson("{\"bigDecValue\":9007199254740992}", BigDecimalInNumber.class);
         Assert.assertEquals(testValueQuoted.getBigDecValue(), result.getBigDecValue());
 
         result = jsonb.fromJson("{\"bigDecValue\":9007199254740991}", BigDecimalInNumber.class);
@@ -109,19 +109,19 @@
         Assert.assertEquals("{\"value\":0.1000000000000001}", jsonString);
 
         jsonString = jsonb.toJson(new ScalarValueWrapper<>(new BigDecimal("0.10000000000000001")));
-        Assert.assertEquals("{\"value\":\"0.10000000000000001\"}", jsonString);
+        Assert.assertEquals("{\"value\":0.10000000000000001}", jsonString);
 
         ScalarValueWrapper<BigDecimal> result = jsonb.fromJson("{\"value\":0.1000000000000001}", new TestTypeToken<ScalarValueWrapper<BigDecimal>>(){}.getType());
         Assert.assertEquals(new BigDecimal("0.1000000000000001"), result.getValue());
 
-        result = jsonb.fromJson("{\"value\":\"0.10000000000000001\"}", new TestTypeToken<ScalarValueWrapper<BigDecimal>>(){}.getType());
+        result = jsonb.fromJson("{\"value\":0.10000000000000001}", new TestTypeToken<ScalarValueWrapper<BigDecimal>>(){}.getType());
         Assert.assertEquals(new BigDecimal("0.10000000000000001"), result.getValue());
     }
 
     @Test
     public void testBigDecimalCastedToNumber() {
         String jsonString = jsonb.toJson(new Object() { public Number number = new BigDecimal("0.10000000000000001"); });
-        Assert.assertEquals("{\"number\":\"0.10000000000000001\"}", jsonString);
+        Assert.assertEquals("{\"number\":0.10000000000000001}", jsonString);
 
         jsonString = jsonb.toJson(new Object() { public Number number = new BigDecimal("0.1000000000000001"); });
         Assert.assertEquals("{\"number\":0.1000000000000001}", jsonString);
@@ -140,7 +140,7 @@
         Assert.assertEquals(Long.valueOf("9007199254740991"), deserialized);
 
         json = jsonb.toJson(upperJsUnsafeValue);
-        Assert.assertEquals("\"9007199254740992\"", json);
+        Assert.assertEquals("9007199254740992", json);
         deserialized = jsonb.fromJson(json, Long.class);
         Assert.assertEquals(Long.valueOf("9007199254740992"), deserialized);
 
@@ -154,7 +154,7 @@
         Assert.assertEquals(Long.valueOf("-9007199254740991"), deserialized);
 
         json = jsonb.toJson(lowerJsUnsafeValue);
-        Assert.assertEquals("\"-9007199254740992\"", json);
+        Assert.assertEquals("-9007199254740992", json);
         deserialized = jsonb.fromJson(json, Long.class);
         Assert.assertEquals(Long.valueOf("-9007199254740992"), deserialized);
     }