mirror of
https://github.com/valitydev/thrift.git
synced 2024-11-07 02:45:22 +00:00
e46419b5ec
emitting doubles with high precision Client: cpp Client: erl Client: java Client: js Client: py This closes #1511
178 lines
10 KiB
Python
178 lines
10 KiB
Python
#
|
|
# 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.
|
|
#
|
|
|
|
import unittest
|
|
|
|
from DoubleConstantsTest import constants
|
|
|
|
#
|
|
# In order to run the test under Windows. We need to create symbolic link
|
|
# name 'thrift' to '../src' folder by using:
|
|
#
|
|
# mklink /D thrift ..\src
|
|
#
|
|
|
|
|
|
class TestRenderedDoubleConstants(unittest.TestCase):
|
|
ASSERTION_MESSAGE_FOR_RENDERED_DOUBLE_CONSTANTS_TEST = \
|
|
"failed to verify a double constant generated by Thrift (expected = %f, got = %f)"
|
|
ASSERTION_MESSAGE_FOR_RENDERED_DOUBLE_LIST_TEST =\
|
|
"failed to verify a list item by Thrift (expected = %f, got = %f)"
|
|
ASSERTION_MESSAGE_FOR_TYPE_CHECKS = "the rendered variable with name %s is not of double type"
|
|
|
|
# to make sure the variables inside Thrift files are generated correctly
|
|
def test_rendered_double_constants(self):
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_INT_CONSTANT = 1.0
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_NEGATIVE_INT_CONSTANT = -100.0
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_LARGEST_INT_CONSTANT = 9223372036854775807.0
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_SMALLEST_INT_CONSTANT = -9223372036854775807.0
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_DOUBLE_WITH_MANY_DECIMALS = 3.14159265359
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_FRACTIONAL_DOUBLE = 1000000.1
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_NEGATIVE_FRACTIONAL_DOUBLE = -1000000.1
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_LARGE_DOUBLE = 1.7e+308
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_LARGE_FRACTIONAL_DOUBLE = 9223372036854775816.43
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_SMALL_DOUBLE = -1.7e+308
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_NEGATIVE_BUT_LARGE_FRACTIONAL_DOUBLE = -9223372036854775816.43
|
|
self.assertAlmostEqual(
|
|
constants.DOUBLE_ASSIGNED_TO_INT_CONSTANT_TEST, EXPECTED_DOUBLE_ASSIGNED_TO_INT_CONSTANT, places=7,
|
|
msg=TestRenderedDoubleConstants.ASSERTION_MESSAGE_FOR_RENDERED_DOUBLE_CONSTANTS_TEST % (
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_INT_CONSTANT, constants.DOUBLE_ASSIGNED_TO_INT_CONSTANT_TEST))
|
|
self.assertAlmostEqual(
|
|
constants.DOUBLE_ASSIGNED_TO_NEGATIVE_INT_CONSTANT_TEST, EXPECTED_DOUBLE_ASSIGNED_TO_NEGATIVE_INT_CONSTANT,
|
|
places=7,
|
|
msg=TestRenderedDoubleConstants.ASSERTION_MESSAGE_FOR_RENDERED_DOUBLE_CONSTANTS_TEST % (
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_NEGATIVE_INT_CONSTANT,
|
|
constants.DOUBLE_ASSIGNED_TO_NEGATIVE_INT_CONSTANT_TEST))
|
|
self.assertAlmostEqual(
|
|
constants.DOUBLE_ASSIGNED_TO_LARGEST_INT_CONSTANT_TEST, EXPECTED_DOUBLE_ASSIGNED_TO_LARGEST_INT_CONSTANT,
|
|
places=7,
|
|
msg=TestRenderedDoubleConstants.ASSERTION_MESSAGE_FOR_RENDERED_DOUBLE_CONSTANTS_TEST % (
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_LARGEST_INT_CONSTANT,
|
|
constants.DOUBLE_ASSIGNED_TO_LARGEST_INT_CONSTANT_TEST))
|
|
self.assertAlmostEqual(
|
|
constants.DOUBLE_ASSIGNED_TO_SMALLEST_INT_CONSTANT_TEST, EXPECTED_DOUBLE_ASSIGNED_TO_SMALLEST_INT_CONSTANT,
|
|
places=7,
|
|
msg=TestRenderedDoubleConstants.ASSERTION_MESSAGE_FOR_RENDERED_DOUBLE_CONSTANTS_TEST % (
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_SMALLEST_INT_CONSTANT,
|
|
constants.DOUBLE_ASSIGNED_TO_SMALLEST_INT_CONSTANT_TEST))
|
|
self.assertAlmostEqual(
|
|
constants.DOUBLE_ASSIGNED_TO_DOUBLE_WITH_MANY_DECIMALS_TEST,
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_DOUBLE_WITH_MANY_DECIMALS, places=7,
|
|
msg=TestRenderedDoubleConstants.ASSERTION_MESSAGE_FOR_RENDERED_DOUBLE_CONSTANTS_TEST % (
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_DOUBLE_WITH_MANY_DECIMALS,
|
|
constants.DOUBLE_ASSIGNED_TO_DOUBLE_WITH_MANY_DECIMALS_TEST))
|
|
self.assertAlmostEqual(
|
|
constants.DOUBLE_ASSIGNED_TO_FRACTIONAL_DOUBLE_TEST, EXPECTED_DOUBLE_ASSIGNED_TO_FRACTIONAL_DOUBLE,
|
|
places=7,
|
|
msg=TestRenderedDoubleConstants.ASSERTION_MESSAGE_FOR_RENDERED_DOUBLE_CONSTANTS_TEST % (
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_FRACTIONAL_DOUBLE,
|
|
constants.DOUBLE_ASSIGNED_TO_FRACTIONAL_DOUBLE_TEST))
|
|
self.assertAlmostEqual(
|
|
constants.DOUBLE_ASSIGNED_TO_NEGATIVE_FRACTIONAL_DOUBLE_TEST,
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_NEGATIVE_FRACTIONAL_DOUBLE, places=7,
|
|
msg=TestRenderedDoubleConstants.ASSERTION_MESSAGE_FOR_RENDERED_DOUBLE_CONSTANTS_TEST % (
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_NEGATIVE_FRACTIONAL_DOUBLE,
|
|
constants.DOUBLE_ASSIGNED_TO_NEGATIVE_FRACTIONAL_DOUBLE_TEST))
|
|
self.assertAlmostEqual(
|
|
constants.DOUBLE_ASSIGNED_TO_LARGE_DOUBLE_TEST, EXPECTED_DOUBLE_ASSIGNED_TO_LARGE_DOUBLE, places=7,
|
|
msg=TestRenderedDoubleConstants.ASSERTION_MESSAGE_FOR_RENDERED_DOUBLE_CONSTANTS_TEST % (
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_LARGE_DOUBLE,
|
|
constants.DOUBLE_ASSIGNED_TO_LARGE_DOUBLE_TEST))
|
|
self.assertAlmostEqual(
|
|
constants.DOUBLE_ASSIGNED_TO_LARGE_FRACTIONAL_DOUBLE_TEST,
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_LARGE_FRACTIONAL_DOUBLE, places=7,
|
|
msg=TestRenderedDoubleConstants.ASSERTION_MESSAGE_FOR_RENDERED_DOUBLE_CONSTANTS_TEST % (
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_LARGE_FRACTIONAL_DOUBLE,
|
|
constants.DOUBLE_ASSIGNED_TO_LARGE_FRACTIONAL_DOUBLE_TEST))
|
|
self.assertAlmostEqual(
|
|
constants.DOUBLE_ASSIGNED_TO_SMALL_DOUBLE_TEST, EXPECTED_DOUBLE_ASSIGNED_TO_SMALL_DOUBLE, places=7,
|
|
msg=TestRenderedDoubleConstants.ASSERTION_MESSAGE_FOR_RENDERED_DOUBLE_CONSTANTS_TEST % (
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_SMALL_DOUBLE,
|
|
constants.DOUBLE_ASSIGNED_TO_SMALL_DOUBLE_TEST))
|
|
self.assertAlmostEqual(
|
|
constants.DOUBLE_ASSIGNED_TO_NEGATIVE_BUT_LARGE_FRACTIONAL_DOUBLE_TEST,
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_NEGATIVE_BUT_LARGE_FRACTIONAL_DOUBLE, places=7,
|
|
msg=TestRenderedDoubleConstants.ASSERTION_MESSAGE_FOR_RENDERED_DOUBLE_CONSTANTS_TEST % (
|
|
EXPECTED_DOUBLE_ASSIGNED_TO_NEGATIVE_BUT_LARGE_FRACTIONAL_DOUBLE,
|
|
constants.DOUBLE_ASSIGNED_TO_NEGATIVE_BUT_LARGE_FRACTIONAL_DOUBLE_TEST))
|
|
self.assertTrue(
|
|
isinstance(constants.DOUBLE_ASSIGNED_TO_INT_CONSTANT_TEST, float),
|
|
msg=TestRenderedDoubleConstants.ASSERTION_MESSAGE_FOR_TYPE_CHECKS %
|
|
"DOUBLE_ASSIGNED_TO_INT_CONSTANT_TEST")
|
|
self.assertTrue(
|
|
isinstance(constants.DOUBLE_ASSIGNED_TO_NEGATIVE_INT_CONSTANT_TEST, float),
|
|
msg=TestRenderedDoubleConstants.ASSERTION_MESSAGE_FOR_TYPE_CHECKS %
|
|
"DOUBLE_ASSIGNED_TO_NEGATIVE_INT_CONSTANT_TEST")
|
|
self.assertTrue(
|
|
isinstance(constants.DOUBLE_ASSIGNED_TO_LARGEST_INT_CONSTANT_TEST, float),
|
|
msg=TestRenderedDoubleConstants.ASSERTION_MESSAGE_FOR_TYPE_CHECKS %
|
|
"DOUBLE_ASSIGNED_TO_LARGEST_INT_CONSTANT_TEST")
|
|
self.assertTrue(
|
|
isinstance(constants.DOUBLE_ASSIGNED_TO_SMALLEST_INT_CONSTANT_TEST, float),
|
|
msg=TestRenderedDoubleConstants.ASSERTION_MESSAGE_FOR_TYPE_CHECKS %
|
|
"DOUBLE_ASSIGNED_TO_SMALLEST_INT_CONSTANT_TEST")
|
|
self.assertTrue(
|
|
isinstance(constants.DOUBLE_ASSIGNED_TO_DOUBLE_WITH_MANY_DECIMALS_TEST, float),
|
|
msg=TestRenderedDoubleConstants.ASSERTION_MESSAGE_FOR_TYPE_CHECKS %
|
|
"DOUBLE_ASSIGNED_TO_DOUBLE_WITH_MANY_DECIMALS_TEST")
|
|
self.assertTrue(
|
|
isinstance(constants.DOUBLE_ASSIGNED_TO_FRACTIONAL_DOUBLE_TEST, float),
|
|
msg=TestRenderedDoubleConstants.ASSERTION_MESSAGE_FOR_TYPE_CHECKS %
|
|
"DOUBLE_ASSIGNED_TO_FRACTIONAL_DOUBLE_TEST")
|
|
self.assertTrue(
|
|
isinstance(constants.DOUBLE_ASSIGNED_TO_NEGATIVE_FRACTIONAL_DOUBLE_TEST, float),
|
|
msg=TestRenderedDoubleConstants.ASSERTION_MESSAGE_FOR_TYPE_CHECKS %
|
|
"DOUBLE_ASSIGNED_TO_NEGATIVE_FRACTIONAL_DOUBLE_TEST")
|
|
self.assertTrue(
|
|
isinstance(constants.DOUBLE_ASSIGNED_TO_LARGE_DOUBLE_TEST, float),
|
|
msg=TestRenderedDoubleConstants.ASSERTION_MESSAGE_FOR_TYPE_CHECKS %
|
|
"DOUBLE_ASSIGNED_TO_LARGE_DOUBLE_TEST")
|
|
self.assertTrue(
|
|
isinstance(constants.DOUBLE_ASSIGNED_TO_LARGE_FRACTIONAL_DOUBLE_TEST, float),
|
|
msg=TestRenderedDoubleConstants.ASSERTION_MESSAGE_FOR_TYPE_CHECKS %
|
|
"DOUBLE_ASSIGNED_TO_LARGE_FRACTIONAL_DOUBLE_TEST")
|
|
self.assertTrue(
|
|
isinstance(constants.DOUBLE_ASSIGNED_TO_SMALL_DOUBLE_TEST, float),
|
|
msg=TestRenderedDoubleConstants.ASSERTION_MESSAGE_FOR_TYPE_CHECKS %
|
|
"DOUBLE_ASSIGNED_TO_SMALL_DOUBLE_TEST")
|
|
self.assertTrue(
|
|
isinstance(constants.DOUBLE_ASSIGNED_TO_NEGATIVE_BUT_LARGE_FRACTIONAL_DOUBLE_TEST, float),
|
|
msg=TestRenderedDoubleConstants.ASSERTION_MESSAGE_FOR_TYPE_CHECKS %
|
|
"DOUBLE_ASSIGNED_TO_NEGATIVE_BUT_LARGE_FRACTIONAL_DOUBLE_TEST")
|
|
|
|
# to make sure the variables inside Thrift files are generated correctly
|
|
def test_rendered_double_list(self):
|
|
EXPECTED_DOUBLE_LIST = [1.0, -100.0, 100.0, 9223372036854775807.0, -9223372036854775807.0, 3.14159265359,
|
|
1000000.1, -1000000.1, 1.7e+308, -1.7e+308, 9223372036854775816.43,
|
|
-9223372036854775816.43]
|
|
self.assertEqual(len(constants.DOUBLE_LIST_TEST), len(EXPECTED_DOUBLE_LIST))
|
|
for i, expectedValue in enumerate(EXPECTED_DOUBLE_LIST):
|
|
self.assertAlmostEqual(constants.DOUBLE_LIST_TEST[i], expectedValue, places=7)
|
|
|
|
|
|
def suite():
|
|
suite = unittest.TestSuite()
|
|
loader = unittest.TestLoader()
|
|
suite.addTest(loader.loadTestsFromTestCase(TestRenderedDoubleConstants))
|
|
return suite
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main(defaultTest="suite", testRunner=unittest.TextTestRunner(verbosity=2))
|