# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

"""Golden numeric digits from Java 8, 11 and 17 Double.toString."""

from decimal import Decimal
import struct

import pytest

from pypaimon.utils.numeric_utils import java_double_decimal_text


@pytest.mark.parametrize('bits,expected', [
    (0xc381e88f38c0c8fd, '-1.61304845894623136E17'),
    (0x44b52d02c7e14af6, '9.999999999999999E22'),
    (0x0000000000000001, '4.9E-324'),
    (0x0010000000000000, '2.2250738585072014E-308'),
    (0x7fefffffffffffff, '1.7976931348623157E308'),
    (0x0000000000000002, '1.0E-323'),
    (0x000fffffffffffff, '2.225073858507201E-308'),
    (0x0010000000000001, '2.225073858507202E-308'),
    (0x016fffffffffffff, '9.332636185032188E-302'),
    (0x0170000000000000, '9.332636185032189E-302'),
    (0x0170000000000001, '9.33263618503219E-302'),
    (0x39afffffffffffff, '7.888609052210117E-31'),
    (0x39b0000000000000, '7.888609052210118E-31'),
    (0x39b0000000000001, '7.88860905221012E-31'),
    (0x3befffffffffffff, '5.4210108624275216E-20'),
    (0x3bf0000000000000, '5.421010862427522E-20'),
    (0x3bf0000000000001, '5.421010862427523E-20'),
    (0x3c9fffffffffffff, '1.1102230246251564E-16'),
    (0x3ca0000000000000, '1.1102230246251565E-16'),
    (0x3ca0000000000001, '1.1102230246251568E-16'),
    (0x3e9fffffffffffff, '4.7683715820312495E-7'),
    (0x3ea0000000000000, '4.76837158203125E-7'),
    (0x3ea0000000000001, '4.768371582031251E-7'),
    (0x3fbfffffffffffff, '0.12499999999999999'),
    (0x3fc0000000000000, '0.125'),
    (0x3fc0000000000001, '0.12500000000000003'),
    (0x3fefffffffffffff, '0.9999999999999999'),
    (0x3ff0000000000000, '1.0'),
    (0x3ff0000000000001, '1.0000000000000002'),
    (0x3fffffffffffffff, '1.9999999999999998'),
    (0x4000000000000000, '2.0'),
    (0x4000000000000001, '2.0000000000000004'),
    (0x41efffffffffffff, '4.2949672959999995E9'),
    (0x41f0000000000000, '4.294967296E9'),
    (0x41f0000000000001, '4.294967296000001E9'),
    (0x432fffffffffffff, '4.5035996273704955E15'),
    (0x4330000000000000, '4.503599627370496E15'),
    (0x4330000000000001, '4.503599627370497E15'),
    (0x433fffffffffffff, '9.007199254740991E15'),
    (0x4340000000000000, '9.007199254740992E15'),
    (0x4340000000000001, '9.007199254740994E15'),
    (0x434fffffffffffff, '1.8014398509481982E16'),
    (0x4350000000000000, '1.8014398509481984E16'),
])
def test_double_decimal_digits_match_supported_jvms(bits, expected):
    value = struct.unpack('>d', struct.pack('>Q', bits))[0]
    assert Decimal(java_double_decimal_text(value)) == Decimal(expected)
