From c9a92d71aeb020b0591aa7ac254eaf8e732f2504 Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Fri, 17 Dec 2021 17:57:38 +0100 Subject: [PATCH] [WASM] Add kotlin.math tests --- .../wasm/test/generated/math/mathTestUtils.kt | 64 + .../stdlib/wasm/test/generated/math/powers.kt | 1116 +++++++++++++++++ .../wasm/test/generated/math/roundings.kt | 140 +++ .../wasm/test/generated/math/trigonometry.kt | 865 +++++++++++++ .../src/generators/math/MathTestsGenerator.kt | 114 ++ .../generators/math/mathTestGeneratorMain.kt | 151 +++ 6 files changed, 2450 insertions(+) create mode 100644 libraries/stdlib/wasm/test/generated/math/mathTestUtils.kt create mode 100644 libraries/stdlib/wasm/test/generated/math/powers.kt create mode 100644 libraries/stdlib/wasm/test/generated/math/roundings.kt create mode 100644 libraries/stdlib/wasm/test/generated/math/trigonometry.kt create mode 100644 libraries/tools/kotlin-stdlib-gen/src/generators/math/MathTestsGenerator.kt create mode 100644 libraries/tools/kotlin-stdlib-gen/src/generators/math/mathTestGeneratorMain.kt diff --git a/libraries/stdlib/wasm/test/generated/math/mathTestUtils.kt b/libraries/stdlib/wasm/test/generated/math/mathTestUtils.kt new file mode 100644 index 00000000000..2ae52cf5a29 --- /dev/null +++ b/libraries/stdlib/wasm/test/generated/math/mathTestUtils.kt @@ -0,0 +1,64 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package test.math + +// +// NOTE: THIS FILE IS AUTO-GENERATED by the mathTestGeneratorMain.kt +// See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib +// + +import kotlin.math.* +import kotlin.test.* + + + +//workaround about method with receiver +internal fun powWrapper(x: Double, y: Double): Double = x.pow(y) + +private fun getMantissa(d: Double): Double = Double.fromBits(((d.toBits().toULong() and 0x800fffffffffffffUL) or 0x3ff0000000000000UL).toLong()) +private fun getExp(d: Double): Int = (((d.toBits() shr 52) and 0x7FF) - 1023).toInt() + +private fun compare(arg1: Double, arg2: Double?, result1: Double, result2: Double, exact: Boolean = false) { + val difference: Any? = when { + result1.isNaN() -> if (result2.isNaN()) null else result1 + result1.isInfinite() -> if (result2.isInfinite() && result1.sign == result2.sign) null else result1 + result2.isNaN() -> result2 + result2.isInfinite() -> result2 + else -> { + if (exact) { + if (result1.toBits() == result2.toBits()) null else abs(result1 - result2) + } else { + val (toCompare1, toCompare2) = when (getExp(result1) - getExp(result2)) { + 0 -> getMantissa(result1) to getMantissa(result2) + 1 -> getMantissa(result1) to getMantissa(result2) / 2.0 + -1 -> getMantissa(result1) / 2.0 to getMantissa(result2) + else -> result1 to result2 + } + abs(toCompare1 - toCompare2).takeIf { it > 1e-14 } + } + } + } + assertNull(difference, "ARG1 = " + arg1 + (if (arg2 == null) "" else " and ARG2 = " + arg2)) +} + +internal fun checkAnswers(function: Function1, arguments: Array, answers: Array, exact: Boolean) { + arguments.forEachIndexed { i, x -> + val argument1 = Double.fromBits(x.toLong()) + val answer = Double.fromBits(answers[i].toLong()) + compare(argument1, null, answer, function(argument1), exact = exact) + } +} + +internal fun checkAnswers(function: Function2, arguments: Array, answers: Array, exact: Boolean) { + arguments + .flatMap { lhsElem -> arguments.map { rhsElem -> lhsElem to rhsElem } } + .forEachIndexed { i, x -> + val argument1 = Double.fromBits(x.first.toLong()) + val argument2 = Double.fromBits(x.second.toLong()) + val answer = Double.fromBits(answers[i].toLong()) + compare(argument1, argument2, answer, function(argument1, argument2), exact = exact) + } +} \ No newline at end of file diff --git a/libraries/stdlib/wasm/test/generated/math/powers.kt b/libraries/stdlib/wasm/test/generated/math/powers.kt new file mode 100644 index 00000000000..6aa1a5cb98c --- /dev/null +++ b/libraries/stdlib/wasm/test/generated/math/powers.kt @@ -0,0 +1,1116 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package test.math + +// +// NOTE: THIS FILE IS AUTO-GENERATED by the mathTestGeneratorMain.kt +// See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib +// + +import kotlin.math.* +import kotlin.test.* + + + +class PowersTest { + private val arguments = arrayOf( + 0xfff0000000000000UL, 0x7ff0000000000000UL, 0x1UL, 0x7fefffffffffffffUL, + 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, 0x0UL, 0x3da5fd7fe1796495UL, + 0xbda5fd7fe1796495UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x8000000000000000UL, 0x3da5fd7fe1796495UL, 0xbda5fd7fe1796495UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x3ff0000000000000UL, 0x3ff000000000afecUL, 0x3feffffffffea028UL, 0x3fe0000000000000UL, + 0x4000000000000000UL, 0x3fd0000000000000UL, 0x4010000000000000UL, 0xbff0000000000000UL, + 0xbfeffffffffea028UL, 0xbff000000000afecUL, 0xbfe0000000000000UL, 0xc000000000000000UL, + 0xbfd0000000000000UL, 0xc010000000000000UL, + ) + + + @Test + fun testHypot() { + val answers = arrayOf( + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x1UL, 0x7fefffffffffffffUL, + 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, 0x1UL, 0x3da5fd7fe1796495UL, + 0x3da5fd7fe1796495UL, 0x1UL, 0x1UL, 0x1UL, + 0x1UL, 0x1UL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, + 0x1UL, 0x1UL, 0x1UL, 0x1UL, + 0x3ff0000000000000UL, 0x3ff000000000afecUL, 0x3feffffffffea028UL, 0x3fe0000000000000UL, + 0x4000000000000000UL, 0x3fd0000000000000UL, 0x4010000000000000UL, 0x3ff0000000000000UL, + 0x3feffffffffea028UL, 0x3ff000000000afecUL, 0x3fe0000000000000UL, 0x4000000000000000UL, + 0x3fd0000000000000UL, 0x4010000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7fefffffffffffffUL, 0x7ff0000000000000UL, 0x7ff8000000000000UL, 0x7fefffffffffffffUL, + 0x7fefffffffffffffUL, 0x7fefffffffffffffUL, 0x7fefffffffffffffUL, 0x7fefffffffffffffUL, + 0x7fefffffffffffffUL, 0x7fefffffffffffffUL, 0x7fefffffffffffffUL, 0x7fefffffffffffffUL, + 0x7fefffffffffffffUL, 0x7fefffffffffffffUL, 0x7fefffffffffffffUL, 0x7fefffffffffffffUL, + 0x7fefffffffffffffUL, 0x7fefffffffffffffUL, 0x7fefffffffffffffUL, 0x7fefffffffffffffUL, + 0x7fefffffffffffffUL, 0x7fefffffffffffffUL, 0x7fefffffffffffffUL, 0x7fefffffffffffffUL, + 0x7fefffffffffffffUL, 0x7fefffffffffffffUL, 0x7fefffffffffffffUL, 0x7fefffffffffffffUL, + 0x7fefffffffffffffUL, 0x7fefffffffffffffUL, 0x7fefffffffffffffUL, 0x7fefffffffffffffUL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x6a83b03385a2fc07UL, 0x7fefffffffffffffUL, 0x7ff8000000000000UL, 0x6a8bd7ebc51518adUL, + 0x6a83b03385a2fc07UL, 0x6a83b03385a2fc07UL, 0x6a83b03385a2fc07UL, 0x6a83b03385a2fc07UL, + 0x6a83b03385a2fc07UL, 0x6a83b03385a2fc07UL, 0x6a83b03385a2fc07UL, 0x6a83b03385a2fc07UL, + 0x6a83b03385a2fc07UL, 0x6a83b03385a2fc07UL, 0x6a83b03385a2fc07UL, 0x6a83b03385a2fc07UL, + 0x6a83b03385a2fc07UL, 0x6a83b03385a2fc07UL, 0x6a83b03385a2fc07UL, 0x6a83b03385a2fc07UL, + 0x6a83b03385a2fc07UL, 0x6a83b03385a2fc07UL, 0x6a83b03385a2fc07UL, 0x6a83b03385a2fc07UL, + 0x6a83b03385a2fc07UL, 0x6a83b03385a2fc07UL, 0x6a83b03385a2fc07UL, 0x6a83b03385a2fc07UL, + 0x6a83b03385a2fc07UL, 0x6a83b03385a2fc07UL, 0x6a83b03385a2fc07UL, 0x6a83b03385a2fc07UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x1UL, 0x7fefffffffffffffUL, + 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, 0x0UL, 0x3da5fd7fe1796495UL, + 0x3da5fd7fe1796495UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x3ff0000000000000UL, 0x3ff000000000afecUL, 0x3feffffffffea028UL, 0x3fe0000000000000UL, + 0x4000000000000000UL, 0x3fd0000000000000UL, 0x4010000000000000UL, 0x3ff0000000000000UL, + 0x3feffffffffea028UL, 0x3ff000000000afecUL, 0x3fe0000000000000UL, 0x4000000000000000UL, + 0x3fd0000000000000UL, 0x4010000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x3da5fd7fe1796495UL, 0x7fefffffffffffffUL, 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, + 0x3da5fd7fe1796495UL, 0x3daf19508903685eUL, 0x3daf19508903685eUL, 0x3da5fd7fe1796495UL, + 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, + 0x3daf19508903685eUL, 0x3daf19508903685eUL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, + 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x3ff0000000000000UL, 0x3ff000000000afecUL, + 0x3feffffffffea028UL, 0x3fe0000000000000UL, 0x4000000000000000UL, 0x3fd0000000000000UL, + 0x4010000000000000UL, 0x3ff0000000000000UL, 0x3feffffffffea028UL, 0x3ff000000000afecUL, + 0x3fe0000000000000UL, 0x4000000000000000UL, 0x3fd0000000000000UL, 0x4010000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x3da5fd7fe1796495UL, 0x7fefffffffffffffUL, + 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, 0x3da5fd7fe1796495UL, 0x3daf19508903685eUL, + 0x3daf19508903685eUL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, + 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x3daf19508903685eUL, 0x3daf19508903685eUL, + 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, + 0x3ff0000000000000UL, 0x3ff000000000afecUL, 0x3feffffffffea028UL, 0x3fe0000000000000UL, + 0x4000000000000000UL, 0x3fd0000000000000UL, 0x4010000000000000UL, 0x3ff0000000000000UL, + 0x3feffffffffea028UL, 0x3ff000000000afecUL, 0x3fe0000000000000UL, 0x4000000000000000UL, + 0x3fd0000000000000UL, 0x4010000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x1UL, 0x7fefffffffffffffUL, 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, + 0x0UL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x3ff0000000000000UL, 0x3ff000000000afecUL, + 0x3feffffffffea028UL, 0x3fe0000000000000UL, 0x4000000000000000UL, 0x3fd0000000000000UL, + 0x4010000000000000UL, 0x3ff0000000000000UL, 0x3feffffffffea028UL, 0x3ff000000000afecUL, + 0x3fe0000000000000UL, 0x4000000000000000UL, 0x3fd0000000000000UL, 0x4010000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x1UL, 0x7fefffffffffffffUL, + 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, 0x0UL, 0x3da5fd7fe1796495UL, + 0x3da5fd7fe1796495UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x3ff0000000000000UL, 0x3ff000000000afecUL, 0x3feffffffffea028UL, 0x3fe0000000000000UL, + 0x4000000000000000UL, 0x3fd0000000000000UL, 0x4010000000000000UL, 0x3ff0000000000000UL, + 0x3feffffffffea028UL, 0x3ff000000000afecUL, 0x3fe0000000000000UL, 0x4000000000000000UL, + 0x3fd0000000000000UL, 0x4010000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x1UL, 0x7fefffffffffffffUL, 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, + 0x0UL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x3ff0000000000000UL, 0x3ff000000000afecUL, + 0x3feffffffffea028UL, 0x3fe0000000000000UL, 0x4000000000000000UL, 0x3fd0000000000000UL, + 0x4010000000000000UL, 0x3ff0000000000000UL, 0x3feffffffffea028UL, 0x3ff000000000afecUL, + 0x3fe0000000000000UL, 0x4000000000000000UL, 0x3fd0000000000000UL, 0x4010000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x1UL, 0x7fefffffffffffffUL, + 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, 0x0UL, 0x3da5fd7fe1796495UL, + 0x3da5fd7fe1796495UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x3ff0000000000000UL, 0x3ff000000000afecUL, 0x3feffffffffea028UL, 0x3fe0000000000000UL, + 0x4000000000000000UL, 0x3fd0000000000000UL, 0x4010000000000000UL, 0x3ff0000000000000UL, + 0x3feffffffffea028UL, 0x3ff000000000afecUL, 0x3fe0000000000000UL, 0x4000000000000000UL, + 0x3fd0000000000000UL, 0x4010000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x1UL, 0x7fefffffffffffffUL, 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, + 0x0UL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x3ff0000000000000UL, 0x3ff000000000afecUL, + 0x3feffffffffea028UL, 0x3fe0000000000000UL, 0x4000000000000000UL, 0x3fd0000000000000UL, + 0x4010000000000000UL, 0x3ff0000000000000UL, 0x3feffffffffea028UL, 0x3ff000000000afecUL, + 0x3fe0000000000000UL, 0x4000000000000000UL, 0x3fd0000000000000UL, 0x4010000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x3da5fd7fe1796495UL, 0x7fefffffffffffffUL, + 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, 0x3da5fd7fe1796495UL, 0x3daf19508903685eUL, + 0x3daf19508903685eUL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, + 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x3daf19508903685eUL, 0x3daf19508903685eUL, + 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, + 0x3ff0000000000000UL, 0x3ff000000000afecUL, 0x3feffffffffea028UL, 0x3fe0000000000000UL, + 0x4000000000000000UL, 0x3fd0000000000000UL, 0x4010000000000000UL, 0x3ff0000000000000UL, + 0x3feffffffffea028UL, 0x3ff000000000afecUL, 0x3fe0000000000000UL, 0x4000000000000000UL, + 0x3fd0000000000000UL, 0x4010000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x3da5fd7fe1796495UL, 0x7fefffffffffffffUL, 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, + 0x3da5fd7fe1796495UL, 0x3daf19508903685eUL, 0x3daf19508903685eUL, 0x3da5fd7fe1796495UL, + 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, + 0x3daf19508903685eUL, 0x3daf19508903685eUL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, + 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x3ff0000000000000UL, 0x3ff000000000afecUL, + 0x3feffffffffea028UL, 0x3fe0000000000000UL, 0x4000000000000000UL, 0x3fd0000000000000UL, + 0x4010000000000000UL, 0x3ff0000000000000UL, 0x3feffffffffea028UL, 0x3ff000000000afecUL, + 0x3fe0000000000000UL, 0x4000000000000000UL, 0x3fd0000000000000UL, 0x4010000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x1UL, 0x7fefffffffffffffUL, + 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, 0x0UL, 0x3da5fd7fe1796495UL, + 0x3da5fd7fe1796495UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x3ff0000000000000UL, 0x3ff000000000afecUL, 0x3feffffffffea028UL, 0x3fe0000000000000UL, + 0x4000000000000000UL, 0x3fd0000000000000UL, 0x4010000000000000UL, 0x3ff0000000000000UL, + 0x3feffffffffea028UL, 0x3ff000000000afecUL, 0x3fe0000000000000UL, 0x4000000000000000UL, + 0x3fd0000000000000UL, 0x4010000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x1UL, 0x7fefffffffffffffUL, 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, + 0x0UL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x3ff0000000000000UL, 0x3ff000000000afecUL, + 0x3feffffffffea028UL, 0x3fe0000000000000UL, 0x4000000000000000UL, 0x3fd0000000000000UL, + 0x4010000000000000UL, 0x3ff0000000000000UL, 0x3feffffffffea028UL, 0x3ff000000000afecUL, + 0x3fe0000000000000UL, 0x4000000000000000UL, 0x3fd0000000000000UL, 0x4010000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x1UL, 0x7fefffffffffffffUL, + 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, 0x0UL, 0x3da5fd7fe1796495UL, + 0x3da5fd7fe1796495UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x3ff0000000000000UL, 0x3ff000000000afecUL, 0x3feffffffffea028UL, 0x3fe0000000000000UL, + 0x4000000000000000UL, 0x3fd0000000000000UL, 0x4010000000000000UL, 0x3ff0000000000000UL, + 0x3feffffffffea028UL, 0x3ff000000000afecUL, 0x3fe0000000000000UL, 0x4000000000000000UL, + 0x3fd0000000000000UL, 0x4010000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x1UL, 0x7fefffffffffffffUL, 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, + 0x0UL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x3da5fd7fe1796495UL, 0x3da5fd7fe1796495UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x3ff0000000000000UL, 0x3ff000000000afecUL, + 0x3feffffffffea028UL, 0x3fe0000000000000UL, 0x4000000000000000UL, 0x3fd0000000000000UL, + 0x4010000000000000UL, 0x3ff0000000000000UL, 0x3feffffffffea028UL, 0x3ff000000000afecUL, + 0x3fe0000000000000UL, 0x4000000000000000UL, 0x3fd0000000000000UL, 0x4010000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x3ff0000000000000UL, 0x7fefffffffffffffUL, + 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff6a09e667f3bcdUL, 0x3ff6a09e667fb832UL, 0x3ff6a09e667ebf67UL, 0x3ff1e3779b97f4a8UL, + 0x4001e3779b97f4a8UL, 0x3ff07e0f66afed07UL, 0x40107e0f66afed07UL, 0x3ff6a09e667f3bcdUL, + 0x3ff6a09e667ebf67UL, 0x3ff6a09e667fb832UL, 0x3ff1e3779b97f4a8UL, 0x4001e3779b97f4a8UL, + 0x3ff07e0f66afed07UL, 0x40107e0f66afed07UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x3ff000000000afecUL, 0x7fefffffffffffffUL, 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, + 0x3ff000000000afecUL, 0x3ff000000000afecUL, 0x3ff000000000afecUL, 0x3ff000000000afecUL, + 0x3ff000000000afecUL, 0x3ff000000000afecUL, 0x3ff000000000afecUL, 0x3ff000000000afecUL, + 0x3ff000000000afecUL, 0x3ff000000000afecUL, 0x3ff000000000afecUL, 0x3ff000000000afecUL, + 0x3ff000000000afecUL, 0x3ff000000000afecUL, 0x3ff6a09e667fb832UL, 0x3ff6a09e66803497UL, + 0x3ff6a09e667f3bcdUL, 0x3ff1e3779b989201UL, 0x4001e3779b981bfeUL, 0x3ff07e0f66b097b2UL, + 0x40107e0f66aff7b2UL, 0x3ff6a09e667fb832UL, 0x3ff6a09e667f3bcdUL, 0x3ff6a09e66803497UL, + 0x3ff1e3779b989201UL, 0x4001e3779b981bfeUL, 0x3ff07e0f66b097b2UL, 0x40107e0f66aff7b2UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x3feffffffffea028UL, 0x7fefffffffffffffUL, + 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, 0x3feffffffffea028UL, 0x3feffffffffea028UL, + 0x3feffffffffea028UL, 0x3feffffffffea028UL, 0x3feffffffffea028UL, 0x3feffffffffea028UL, + 0x3feffffffffea028UL, 0x3feffffffffea028UL, 0x3feffffffffea028UL, 0x3feffffffffea028UL, + 0x3feffffffffea028UL, 0x3feffffffffea028UL, 0x3feffffffffea028UL, 0x3feffffffffea028UL, + 0x3ff6a09e667ebf67UL, 0x3ff6a09e667f3bcdUL, 0x3ff6a09e667e4302UL, 0x3ff1e3779b97574eUL, + 0x4001e3779b97cd51UL, 0x3ff07e0f66af425cUL, 0x40107e0f66afe25cUL, 0x3ff6a09e667ebf67UL, + 0x3ff6a09e667e4302UL, 0x3ff6a09e667f3bcdUL, 0x3ff1e3779b97574eUL, 0x4001e3779b97cd51UL, + 0x3ff07e0f66af425cUL, 0x40107e0f66afe25cUL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x3fe0000000000000UL, 0x7fefffffffffffffUL, 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, + 0x3fe0000000000000UL, 0x3fe0000000000000UL, 0x3fe0000000000000UL, 0x3fe0000000000000UL, + 0x3fe0000000000000UL, 0x3fe0000000000000UL, 0x3fe0000000000000UL, 0x3fe0000000000000UL, + 0x3fe0000000000000UL, 0x3fe0000000000000UL, 0x3fe0000000000000UL, 0x3fe0000000000000UL, + 0x3fe0000000000000UL, 0x3fe0000000000000UL, 0x3ff1e3779b97f4a8UL, 0x3ff1e3779b989201UL, + 0x3ff1e3779b97574eUL, 0x3fe6a09e667f3bcdUL, 0x40007e0f66afed07UL, 0x3fe1e3779b97f4a8UL, + 0x40101fe03f61bad0UL, 0x3ff1e3779b97f4a8UL, 0x3ff1e3779b97574eUL, 0x3ff1e3779b989201UL, + 0x3fe6a09e667f3bcdUL, 0x40007e0f66afed07UL, 0x3fe1e3779b97f4a8UL, 0x40101fe03f61bad0UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x4000000000000000UL, 0x7fefffffffffffffUL, + 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, 0x4000000000000000UL, 0x4000000000000000UL, + 0x4000000000000000UL, 0x4000000000000000UL, 0x4000000000000000UL, 0x4000000000000000UL, + 0x4000000000000000UL, 0x4000000000000000UL, 0x4000000000000000UL, 0x4000000000000000UL, + 0x4000000000000000UL, 0x4000000000000000UL, 0x4000000000000000UL, 0x4000000000000000UL, + 0x4001e3779b97f4a8UL, 0x4001e3779b981bfeUL, 0x4001e3779b97cd51UL, 0x40007e0f66afed07UL, + 0x4006a09e667f3bcdUL, 0x40001fe03f61bad0UL, 0x4011e3779b97f4a8UL, 0x4001e3779b97f4a8UL, + 0x4001e3779b97cd51UL, 0x4001e3779b981bfeUL, 0x40007e0f66afed07UL, 0x4006a09e667f3bcdUL, + 0x40001fe03f61bad0UL, 0x4011e3779b97f4a8UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x3fd0000000000000UL, 0x7fefffffffffffffUL, 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, + 0x3fd0000000000000UL, 0x3fd0000000000000UL, 0x3fd0000000000000UL, 0x3fd0000000000000UL, + 0x3fd0000000000000UL, 0x3fd0000000000000UL, 0x3fd0000000000000UL, 0x3fd0000000000000UL, + 0x3fd0000000000000UL, 0x3fd0000000000000UL, 0x3fd0000000000000UL, 0x3fd0000000000000UL, + 0x3fd0000000000000UL, 0x3fd0000000000000UL, 0x3ff07e0f66afed07UL, 0x3ff07e0f66b097b2UL, + 0x3ff07e0f66af425cUL, 0x3fe1e3779b97f4a8UL, 0x40001fe03f61bad0UL, 0x3fd6a09e667f3bcdUL, + 0x401007fe00ff6070UL, 0x3ff07e0f66afed07UL, 0x3ff07e0f66af425cUL, 0x3ff07e0f66b097b2UL, + 0x3fe1e3779b97f4a8UL, 0x40001fe03f61bad0UL, 0x3fd6a09e667f3bcdUL, 0x401007fe00ff6070UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x4010000000000000UL, 0x7fefffffffffffffUL, + 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, 0x4010000000000000UL, 0x4010000000000000UL, + 0x4010000000000000UL, 0x4010000000000000UL, 0x4010000000000000UL, 0x4010000000000000UL, + 0x4010000000000000UL, 0x4010000000000000UL, 0x4010000000000000UL, 0x4010000000000000UL, + 0x4010000000000000UL, 0x4010000000000000UL, 0x4010000000000000UL, 0x4010000000000000UL, + 0x40107e0f66afed07UL, 0x40107e0f66aff7b2UL, 0x40107e0f66afe25cUL, 0x40101fe03f61bad0UL, + 0x4011e3779b97f4a8UL, 0x401007fe00ff6070UL, 0x4016a09e667f3bcdUL, 0x40107e0f66afed07UL, + 0x40107e0f66afe25cUL, 0x40107e0f66aff7b2UL, 0x40101fe03f61bad0UL, 0x4011e3779b97f4a8UL, + 0x401007fe00ff6070UL, 0x4016a09e667f3bcdUL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x3ff0000000000000UL, 0x7fefffffffffffffUL, 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff6a09e667f3bcdUL, 0x3ff6a09e667fb832UL, + 0x3ff6a09e667ebf67UL, 0x3ff1e3779b97f4a8UL, 0x4001e3779b97f4a8UL, 0x3ff07e0f66afed07UL, + 0x40107e0f66afed07UL, 0x3ff6a09e667f3bcdUL, 0x3ff6a09e667ebf67UL, 0x3ff6a09e667fb832UL, + 0x3ff1e3779b97f4a8UL, 0x4001e3779b97f4a8UL, 0x3ff07e0f66afed07UL, 0x40107e0f66afed07UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x3feffffffffea028UL, 0x7fefffffffffffffUL, + 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, 0x3feffffffffea028UL, 0x3feffffffffea028UL, + 0x3feffffffffea028UL, 0x3feffffffffea028UL, 0x3feffffffffea028UL, 0x3feffffffffea028UL, + 0x3feffffffffea028UL, 0x3feffffffffea028UL, 0x3feffffffffea028UL, 0x3feffffffffea028UL, + 0x3feffffffffea028UL, 0x3feffffffffea028UL, 0x3feffffffffea028UL, 0x3feffffffffea028UL, + 0x3ff6a09e667ebf67UL, 0x3ff6a09e667f3bcdUL, 0x3ff6a09e667e4302UL, 0x3ff1e3779b97574eUL, + 0x4001e3779b97cd51UL, 0x3ff07e0f66af425cUL, 0x40107e0f66afe25cUL, 0x3ff6a09e667ebf67UL, + 0x3ff6a09e667e4302UL, 0x3ff6a09e667f3bcdUL, 0x3ff1e3779b97574eUL, 0x4001e3779b97cd51UL, + 0x3ff07e0f66af425cUL, 0x40107e0f66afe25cUL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x3ff000000000afecUL, 0x7fefffffffffffffUL, 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, + 0x3ff000000000afecUL, 0x3ff000000000afecUL, 0x3ff000000000afecUL, 0x3ff000000000afecUL, + 0x3ff000000000afecUL, 0x3ff000000000afecUL, 0x3ff000000000afecUL, 0x3ff000000000afecUL, + 0x3ff000000000afecUL, 0x3ff000000000afecUL, 0x3ff000000000afecUL, 0x3ff000000000afecUL, + 0x3ff000000000afecUL, 0x3ff000000000afecUL, 0x3ff6a09e667fb832UL, 0x3ff6a09e66803497UL, + 0x3ff6a09e667f3bcdUL, 0x3ff1e3779b989201UL, 0x4001e3779b981bfeUL, 0x3ff07e0f66b097b2UL, + 0x40107e0f66aff7b2UL, 0x3ff6a09e667fb832UL, 0x3ff6a09e667f3bcdUL, 0x3ff6a09e66803497UL, + 0x3ff1e3779b989201UL, 0x4001e3779b981bfeUL, 0x3ff07e0f66b097b2UL, 0x40107e0f66aff7b2UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x3fe0000000000000UL, 0x7fefffffffffffffUL, + 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, 0x3fe0000000000000UL, 0x3fe0000000000000UL, + 0x3fe0000000000000UL, 0x3fe0000000000000UL, 0x3fe0000000000000UL, 0x3fe0000000000000UL, + 0x3fe0000000000000UL, 0x3fe0000000000000UL, 0x3fe0000000000000UL, 0x3fe0000000000000UL, + 0x3fe0000000000000UL, 0x3fe0000000000000UL, 0x3fe0000000000000UL, 0x3fe0000000000000UL, + 0x3ff1e3779b97f4a8UL, 0x3ff1e3779b989201UL, 0x3ff1e3779b97574eUL, 0x3fe6a09e667f3bcdUL, + 0x40007e0f66afed07UL, 0x3fe1e3779b97f4a8UL, 0x40101fe03f61bad0UL, 0x3ff1e3779b97f4a8UL, + 0x3ff1e3779b97574eUL, 0x3ff1e3779b989201UL, 0x3fe6a09e667f3bcdUL, 0x40007e0f66afed07UL, + 0x3fe1e3779b97f4a8UL, 0x40101fe03f61bad0UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x4000000000000000UL, 0x7fefffffffffffffUL, 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, + 0x4000000000000000UL, 0x4000000000000000UL, 0x4000000000000000UL, 0x4000000000000000UL, + 0x4000000000000000UL, 0x4000000000000000UL, 0x4000000000000000UL, 0x4000000000000000UL, + 0x4000000000000000UL, 0x4000000000000000UL, 0x4000000000000000UL, 0x4000000000000000UL, + 0x4000000000000000UL, 0x4000000000000000UL, 0x4001e3779b97f4a8UL, 0x4001e3779b981bfeUL, + 0x4001e3779b97cd51UL, 0x40007e0f66afed07UL, 0x4006a09e667f3bcdUL, 0x40001fe03f61bad0UL, + 0x4011e3779b97f4a8UL, 0x4001e3779b97f4a8UL, 0x4001e3779b97cd51UL, 0x4001e3779b981bfeUL, + 0x40007e0f66afed07UL, 0x4006a09e667f3bcdUL, 0x40001fe03f61bad0UL, 0x4011e3779b97f4a8UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x3fd0000000000000UL, 0x7fefffffffffffffUL, + 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, 0x3fd0000000000000UL, 0x3fd0000000000000UL, + 0x3fd0000000000000UL, 0x3fd0000000000000UL, 0x3fd0000000000000UL, 0x3fd0000000000000UL, + 0x3fd0000000000000UL, 0x3fd0000000000000UL, 0x3fd0000000000000UL, 0x3fd0000000000000UL, + 0x3fd0000000000000UL, 0x3fd0000000000000UL, 0x3fd0000000000000UL, 0x3fd0000000000000UL, + 0x3ff07e0f66afed07UL, 0x3ff07e0f66b097b2UL, 0x3ff07e0f66af425cUL, 0x3fe1e3779b97f4a8UL, + 0x40001fe03f61bad0UL, 0x3fd6a09e667f3bcdUL, 0x401007fe00ff6070UL, 0x3ff07e0f66afed07UL, + 0x3ff07e0f66af425cUL, 0x3ff07e0f66b097b2UL, 0x3fe1e3779b97f4a8UL, 0x40001fe03f61bad0UL, + 0x3fd6a09e667f3bcdUL, 0x401007fe00ff6070UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x4010000000000000UL, 0x7fefffffffffffffUL, 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, + 0x4010000000000000UL, 0x4010000000000000UL, 0x4010000000000000UL, 0x4010000000000000UL, + 0x4010000000000000UL, 0x4010000000000000UL, 0x4010000000000000UL, 0x4010000000000000UL, + 0x4010000000000000UL, 0x4010000000000000UL, 0x4010000000000000UL, 0x4010000000000000UL, + 0x4010000000000000UL, 0x4010000000000000UL, 0x40107e0f66afed07UL, 0x40107e0f66aff7b2UL, + 0x40107e0f66afe25cUL, 0x40101fe03f61bad0UL, 0x4011e3779b97f4a8UL, 0x401007fe00ff6070UL, + 0x4016a09e667f3bcdUL, 0x40107e0f66afed07UL, 0x40107e0f66afe25cUL, 0x40107e0f66aff7b2UL, + 0x40101fe03f61bad0UL, 0x4011e3779b97f4a8UL, 0x401007fe00ff6070UL, 0x4016a09e667f3bcdUL, + + ) + + + checkAnswers(::hypot, arguments, answers, true) + } + + @Test + fun testSqrt() { + val answers = arrayOf( + 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x1e60000000000000UL, 0x5fefffffffffffffUL, + 0x7ff8000000000000UL, 0x553919ad633b2c6fUL, 0x0UL, 0x3eca86f0875fcf94UL, + 0x7ff8000000000000UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x8000000000000000UL, 0x3eca86f0875fcf94UL, 0x7ff8000000000000UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x3ff0000000000000UL, 0x3ff00000000057f6UL, 0x3fefffffffff5014UL, 0x3fe6a09e667f3bcdUL, + 0x3ff6a09e667f3bcdUL, 0x3fe0000000000000UL, 0x4000000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, + ) + + + checkAnswers(::sqrt, arguments, answers, true) + } + + @Test + fun testExp() { + val answers = arrayOf( + 0x0UL, 0x7ff0000000000000UL, 0x3ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff000000000afecUL, + 0x3feffffffffea028UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff000000000afecUL, 0x3feffffffffea028UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x4005bf0a8b145769UL, 0x4005bf0a8b154684UL, 0x4005bf0a8b13684fUL, 0x3ffa61298e1e069cUL, + 0x401d8e64b8d4ddaeUL, 0x3ff48b5e3c3e8186UL, 0x404b4c902e273a58UL, 0x3fd78b56362cef38UL, + 0x3fd78b56362df217UL, 0x3fd78b56362bec59UL, 0x3fe368b2fc6f960aUL, 0x3fc152aaa3bf81ccUL, + 0x3fe8ebef9eac820bUL, 0x3f92c155b8213cf4UL, + ) + + + checkAnswers(::exp, arguments, answers, false) + } + + @Test + fun testExpm1() { + val answers = arrayOf( + 0xbff0000000000000UL, 0x7ff0000000000000UL, 0x1UL, 0x7ff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x0UL, 0x3da5fd7fe179dd7aUL, + 0xbda5fd7fe178ebb0UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x8000000000000000UL, 0x3da5fd7fe179dd7aUL, 0xbda5fd7fe178ebb0UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x3ffb7e151628aed2UL, 0x3ffb7e15162a8d07UL, 0x3ffb7e151626d09eUL, 0x3fe4c2531c3c0d38UL, + 0x40198e64b8d4ddaeUL, 0x3fd22d78f0fa061aUL, 0x404acc902e273a58UL, 0xbfe43a54e4e98864UL, + 0xbfe43a54e4e906f4UL, 0xbfe43a54e4ea09d4UL, 0xbfd92e9a0720d3ecUL, 0xbfebab5557101f8dUL, + 0xbfcc5041854df7d4UL, 0xbfef69f5523ef618UL, + ) + + + checkAnswers(::expm1, arguments, answers, true) + } + + @Test + fun testLog() { + val answers = arrayOf( + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0xfff0000000000000UL, 0x7ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, + 0x7ff8000000000000UL, 0xfff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0xfff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, + 0xfff0000000000000UL, 0xfff0000000000000UL, 0x7ff0000000000000UL, 0xfff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x8000000000000000UL, 0x3ff0000000000000UL, 0xbff0c80000000000UL, + 0x7ff8000000000000UL, 0xbff938eef4e0b321UL, 0x7ff8000000000000UL, 0x403d6437a5e7a7edUL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x403d6437a5e7a7edUL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0xc2d0ed360f2ec685UL, 0x42d0ed360f2e0c68UL, 0x4090c80000000000UL, + 0xc090c80000000000UL, 0x4080c80000000000UL, 0xc080c80000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x0UL, + 0xbfee829f39aef509UL, 0x3ff0000000000000UL, 0x7ff8000000000000UL, 0x3ff80c54d0b019deUL, + 0x7ff8000000000000UL, 0xc03c05ed8c8adffeUL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0xc03c05ed8c8adffeUL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x42d0237a93013752UL, + 0xc2d0237a930085dfUL, 0xc090000000000000UL, 0x4090000000000000UL, 0xc080000000000000UL, + 0x4080000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x0UL, + 0xbfe44ca6c0f49887UL, 0x3fe54a64e56089faUL, 0x7ff8000000000000UL, 0x3ff0000000000000UL, + 0x7ff8000000000000UL, 0xc032a509f4f571e9UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0xc032a509f4f571e9UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x42c5799abcf4bf66UL, + 0xc2c5799abcf3d346UL, 0xc0854a64e56089faUL, 0x40854a64e56089faUL, 0xc0754a64e56089faUL, + 0x40754a64e56089faUL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0xfff0000000000000UL, + 0x7ff8000000000000UL, 0xfff0000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0xfff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0xfff0000000000000UL, 0x7ff0000000000000UL, 0xfff0000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x8000000000000000UL, + 0x3fa16b8647ffa4d2UL, 0xbfa245465683a05eUL, 0x7ff8000000000000UL, 0xbfab75fe5085436dUL, + 0x7ff8000000000000UL, 0x3ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x3ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0xc2826dc9d8770db4UL, + 0x42826dc9d8764312UL, 0x404245465683a05eUL, 0xc04245465683a05eUL, 0x403245465683a05eUL, + 0xc03245465683a05eUL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff0000000000000UL, 0xfff0000000000000UL, 0x7ff8000000000000UL, 0xfff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0xfff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0xfff0000000000000UL, 0x7ff0000000000000UL, + 0xfff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0xfff0000000000000UL, + 0x7ff8000000000000UL, 0xfff0000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0xfff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0xfff0000000000000UL, 0x7ff0000000000000UL, 0xfff0000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff0000000000000UL, 0xfff0000000000000UL, 0x7ff8000000000000UL, 0xfff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0xfff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0xfff0000000000000UL, 0x7ff0000000000000UL, + 0xfff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0xfff0000000000000UL, + 0x7ff8000000000000UL, 0xfff0000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0xfff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0xfff0000000000000UL, 0x7ff0000000000000UL, 0xfff0000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff0000000000000UL, 0xfff0000000000000UL, 0x7ff8000000000000UL, 0xfff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0xfff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0xfff0000000000000UL, 0x7ff0000000000000UL, + 0xfff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x8000000000000000UL, 0x3fa16b8647ffa4d2UL, 0xbfa245465683a05eUL, + 0x7ff8000000000000UL, 0xbfab75fe5085436dUL, 0x7ff8000000000000UL, 0x3ff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x3ff0000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0xc2826dc9d8770db4UL, 0x42826dc9d8764312UL, 0x404245465683a05eUL, + 0xc04245465683a05eUL, 0x403245465683a05eUL, 0xc03245465683a05eUL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0xfff0000000000000UL, + 0x7ff8000000000000UL, 0xfff0000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0xfff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0xfff0000000000000UL, 0x7ff0000000000000UL, 0xfff0000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff0000000000000UL, 0xfff0000000000000UL, 0x7ff8000000000000UL, 0xfff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0xfff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0xfff0000000000000UL, 0x7ff0000000000000UL, + 0xfff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0xfff0000000000000UL, + 0x7ff8000000000000UL, 0xfff0000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0xfff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0xfff0000000000000UL, 0x7ff0000000000000UL, 0xfff0000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff0000000000000UL, 0xfff0000000000000UL, 0x7ff8000000000000UL, 0xfff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0xfff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0xfff0000000000000UL, 0x7ff0000000000000UL, + 0xfff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x0UL, 0x8000000000000000UL, 0x0UL, + 0x7ff8000000000000UL, 0x0UL, 0x7ff8000000000000UL, 0x8000000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x8000000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x0UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x0UL, 0x8000000000000000UL, 0x0UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x0UL, + 0xbd0e3f8c7be694a5UL, 0x3d0fb9a6d7f356e7UL, 0x7ff8000000000000UL, 0x3d17d776d6c2c683UL, + 0x7ff8000000000000UL, 0xbd5bc85281584214UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0xbd5bc85281584214UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x3ff0000000000000UL, + 0xbfeffffffffea027UL, 0xbdafb9a6d7f356e7UL, 0x3dafb9a6d7f356e7UL, 0xbd9fb9a6d7f356e7UL, + 0x3d9fb9a6d7f356e7UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x8000000000000000UL, 0x3d0e3f8c7be7e13cUL, 0xbd0fb9a6d7f4b3bbUL, + 0x7ff8000000000000UL, 0xbd17d776d6c3cca9UL, 0x7ff8000000000000UL, 0x3d5bc8528159738eUL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x3d5bc8528159738eUL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0xbff000000000afedUL, 0x3ff0000000000000UL, 0x3dafb9a6d7f4b3bbUL, + 0xbdafb9a6d7f4b3bbUL, 0x3d9fb9a6d7f4b3bbUL, 0xbd9fb9a6d7f4b3bbUL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x8000000000000000UL, + 0x3f4e829f39aef509UL, 0xbf50000000000000UL, 0x7ff8000000000000UL, 0xbf580c54d0b019deUL, + 0x7ff8000000000000UL, 0x3f9c05ed8c8adffeUL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x3f9c05ed8c8adffeUL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0xc230237a93013752UL, + 0x4230237a930085dfUL, 0x3ff0000000000000UL, 0xbff0000000000000UL, 0x3fe0000000000000UL, + 0xbfe0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x0UL, 0xbf4e829f39aef509UL, 0x3f50000000000000UL, + 0x7ff8000000000000UL, 0x3f580c54d0b019deUL, 0x7ff8000000000000UL, 0xbf9c05ed8c8adffeUL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0xbf9c05ed8c8adffeUL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x4230237a93013752UL, 0xc230237a930085dfUL, 0xbff0000000000000UL, + 0x3ff0000000000000UL, 0xbfe0000000000000UL, 0x3fe0000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x8000000000000000UL, + 0x3f5e829f39aef509UL, 0xbf60000000000000UL, 0x7ff8000000000000UL, 0xbf680c54d0b019deUL, + 0x7ff8000000000000UL, 0x3fac05ed8c8adffeUL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x3fac05ed8c8adffeUL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0xc240237a93013752UL, + 0x4240237a930085dfUL, 0x4000000000000000UL, 0xc000000000000000UL, 0x3ff0000000000000UL, + 0xbff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x0UL, 0xbf5e829f39aef509UL, 0x3f60000000000000UL, + 0x7ff8000000000000UL, 0x3f680c54d0b019deUL, 0x7ff8000000000000UL, 0xbfac05ed8c8adffeUL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0xbfac05ed8c8adffeUL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x4240237a93013752UL, 0xc240237a930085dfUL, 0xc000000000000000UL, + 0x4000000000000000UL, 0xbff0000000000000UL, 0x3ff0000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + + ) + + + checkAnswers(::log, arguments, answers, false) + } + + @Test + fun testLn() { + val answers = arrayOf( + 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0xc0874385446d71c3UL, 0x40862e42fefa39efUL, + 0x7ff8000000000000UL, 0x407d83d9c3a25eabUL, 0xfff0000000000000UL, 0xc0395414621954feUL, + 0x7ff8000000000000UL, 0xfff0000000000000UL, 0xfff0000000000000UL, 0xfff0000000000000UL, + 0xfff0000000000000UL, 0xfff0000000000000UL, 0xc0395414621954feUL, 0x7ff8000000000000UL, + 0xfff0000000000000UL, 0xfff0000000000000UL, 0xfff0000000000000UL, 0xfff0000000000000UL, + 0x0UL, 0x3da5fd7fffff871bUL, 0xbda5fd80000078e5UL, 0xbfe62e42fefa39efUL, + 0x3fe62e42fefa39efUL, 0xbff62e42fefa39efUL, 0x3ff62e42fefa39efUL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, + ) + + + checkAnswers(::ln, arguments, answers, false) + val specialFunctionPointArguments = arrayOf( + 0x4005bf0a8b145769UL, 0x4005bf0a8b14af5fUL, 0x4005bf0a8b13ff73UL, 0x3ff5bf0a8b145769UL, + 0x4015bf0a8b145769UL, 0x3fe5bf0a8b145769UL, 0x4025bf0a8b145769UL, 0xc005bf0a8b145769UL, + 0xc005bf0a8b13ff73UL, 0xc005bf0a8b14af5fUL, 0xbff5bf0a8b145769UL, 0xc015bf0a8b145769UL, + 0xbfe5bf0a8b145769UL, 0xc025bf0a8b145769UL, + ) + + val specialFunctionPointResults = arrayOf( + 0x3ff0000000000000UL, 0x3ff00000000040b8UL, 0x3fefffffffff7e90UL, 0x3fd3a37a020b8c21UL, + 0x3ffb17217f7d1cf7UL, 0xbfd8b90bfbe8e7beUL, 0x400317217f7d1cf7UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, + ) + + checkAnswers(::ln, specialFunctionPointArguments, specialFunctionPointResults, false) + } + + @Test + fun testLog10() { + val answers = arrayOf( + 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0xc07434e6420f4374UL, 0x40734413509f79ffUL, + 0x7ff8000000000000UL, 0x4069a2edb0d17ca0UL, 0xfff0000000000000UL, 0xc026000000000000UL, + 0x7ff8000000000000UL, 0xfff0000000000000UL, 0xfff0000000000000UL, 0xfff0000000000000UL, + 0xfff0000000000000UL, 0xfff0000000000000UL, 0xc026000000000000UL, 0x7ff8000000000000UL, + 0xfff0000000000000UL, 0xfff0000000000000UL, 0xfff0000000000000UL, 0xfff0000000000000UL, + 0x0UL, 0x3d9319b8b8ecad6eUL, 0xbd9319b8b8ed7f71UL, 0xbfd34413509f79ffUL, + 0x3fd34413509f79ffUL, 0xbfe34413509f79ffUL, 0x3fe34413509f79ffUL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, + ) + + + checkAnswers(::log10, arguments, answers, false) + val specialFunctionPointArguments = arrayOf( + 0x4024000000000000UL, 0x40240000000015fdUL, 0x4023ffffffffea03UL, 0x4014000000000000UL, + 0x4034000000000000UL, 0x4004000000000000UL, 0x4044000000000000UL, 0xc024000000000000UL, + 0xc023ffffffffea03UL, 0xc0240000000015fdUL, 0xc014000000000000UL, 0xc034000000000000UL, + 0xc004000000000000UL, 0xc044000000000000UL, + ) + + val specialFunctionPointResults = arrayOf( + 0x3ff0000000000000UL, 0x3ff00000000007a4UL, 0x3feffffffffff0b9UL, 0x3fe65df657b04301UL, + 0x3ff4d104d427de80UL, 0x3fd977d95ec10c02UL, 0x3ff9a209a84fbcffUL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, + ) + + checkAnswers(::log10, specialFunctionPointArguments, specialFunctionPointResults, false) + } + + @Test + fun testLog2() { + val answers = arrayOf( + 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0xc090c80000000000UL, 0x4090000000000000UL, + 0x7ff8000000000000UL, 0x40854a64e56089faUL, 0xfff0000000000000UL, 0xc04245465683a05eUL, + 0x7ff8000000000000UL, 0xfff0000000000000UL, 0xfff0000000000000UL, 0xfff0000000000000UL, + 0xfff0000000000000UL, 0xfff0000000000000UL, 0xc04245465683a05eUL, 0x7ff8000000000000UL, + 0xfff0000000000000UL, 0xfff0000000000000UL, 0xfff0000000000000UL, 0xfff0000000000000UL, + 0x0UL, 0x3dafb9a6d7f356e7UL, 0xbdafb9a6d7f4b3bbUL, 0xbff0000000000000UL, + 0x3ff0000000000000UL, 0xc000000000000000UL, 0x4000000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, + ) + + + checkAnswers(::log2, arguments, answers, false) + val specialFunctionPointArguments = arrayOf( + 0x4000000000000000UL, 0x40000000000057f6UL, 0x3fffffffffff5014UL, 0x3ff0000000000000UL, + 0x4010000000000000UL, 0x3fe0000000000000UL, 0x4020000000000000UL, 0xc000000000000000UL, + 0xbfffffffffff5014UL, 0xc0000000000057f6UL, 0xbff0000000000000UL, 0xc010000000000000UL, + 0xbfe0000000000000UL, 0xc020000000000000UL, + ) + + val specialFunctionPointResults = arrayOf( + 0x3ff0000000000000UL, 0x3ff0000000007ee7UL, 0x3fefffffffff0233UL, 0x0UL, + 0x4000000000000000UL, 0xbff0000000000000UL, 0x4008000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, + ) + + checkAnswers(::log2, specialFunctionPointArguments, specialFunctionPointResults, false) + } + + @Test + fun testLn1p() { + val answers = arrayOf( + 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x1UL, 0x40862e42fefa39efUL, + 0x7ff8000000000000UL, 0x407d83d9c3a25eabUL, 0x0UL, 0x3da5fd7fe178ebb0UL, + 0xbda5fd7fe179dd7aUL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x8000000000000000UL, 0x3da5fd7fe178ebb0UL, 0xbda5fd7fe179dd7aUL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x3fe62e42fefa39efUL, 0x3fe62e42fefae9dbUL, 0x3fe62e42fef98a03UL, 0x3fd9f323ecbf984cUL, + 0x3ff193ea7aad030aUL, 0x3fcc8ff7c79a9a22UL, 0x3ff9c041f7ed8d33UL, 0xfff0000000000000UL, + 0xc039541460b5f6ffUL, 0x7ff8000000000000UL, 0xbfe62e42fefa39efUL, 0x7ff8000000000000UL, + 0xbfd269621134db92UL, 0x7ff8000000000000UL, + ) + + + checkAnswers(::ln1p, arguments, answers, true) + val specialFunctionPointArguments = arrayOf( + 0x4005bf0a8b145769UL, 0x4005bf0a8b14af5fUL, 0x4005bf0a8b13ff73UL, 0x3ff5bf0a8b145769UL, + 0x4015bf0a8b145769UL, 0x3fe5bf0a8b145769UL, 0x4025bf0a8b145769UL, 0xc005bf0a8b145769UL, + 0xc005bf0a8b13ff73UL, 0xc005bf0a8b14af5fUL, 0xbff5bf0a8b145769UL, 0xc015bf0a8b145769UL, + 0xbfe5bf0a8b145769UL, 0xc025bf0a8b145769UL, + ) + + val specialFunctionPointResults = arrayOf( + 0x3ff5031eafefb049UL, 0x3ff5031eafefdf99UL, 0x3ff5031eafef80f9UL, 0x3feb772c638242deUL, + 0x3ffdcabb104c08abUL, 0x3fe097dd2c264e2aUL, 0x4003cb5212f5a2d3UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0xbff235a0dc5281b6UL, 0x7ff8000000000000UL, + ) + + checkAnswers(::ln1p, specialFunctionPointArguments, specialFunctionPointResults, true) + } + + @Test + fun testPowWrapper() { + val answers = arrayOf( + 0x0UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x3ff0000000000000UL, 0x7ff0000000000000UL, + 0x0UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x7ff0000000000000UL, 0x0UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0xfff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x8000000000000000UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, + 0x3ff0000000000000UL, 0x7ff0000000000000UL, 0x0UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x7ff0000000000000UL, 0x0UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x7ff0000000000000UL, 0x0UL, 0x3ff0000000000000UL, 0x0UL, + 0x7ff8000000000000UL, 0x0UL, 0x3ff0000000000000UL, 0x3feffffffc00d970UL, + 0x3ff0000001ff9348UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3feffffffc00d970UL, 0x3ff0000001ff9348UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x1UL, 0x1UL, 0x1UL, 0x1e60000000000000UL, + 0x0UL, 0x2f26a09e667f3bcdUL, 0x0UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x6180000000000000UL, 0x7ff0000000000000UL, + 0x50b6a09e667f3bcdUL, 0x7ff0000000000000UL, 0x0UL, 0x7ff0000000000000UL, + 0x3ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000001e7c24cUL, 0x3feffffffc307b69UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000001e7c24cUL, 0x3feffffffc307b69UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x7fefffffffffffffUL, 0x7ff0000000000000UL, + 0x7feffffffc307b63UL, 0x5ff0000000000000UL, 0x7ff0000000000000UL, 0x4ff0000000000000UL, + 0x7ff0000000000000UL, 0x4000000000000UL, 0x400000079f094UL, 0x3ffffff860f6dUL, + 0x1ff0000000000000UL, 0x0UL, 0x2ff0000000000000UL, 0x0UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x3ff0000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x0UL, 0x7ff0000000000000UL, + 0x3ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000001448575UL, 0x3feffffffd76f516UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000001448575UL, 0x3feffffffd76f516UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x6a83b03385a2fc07UL, 0x6a83b03387325055UL, + 0x6a83b0338413a7b9UL, 0x553919ad633b2c6fUL, 0x7ff0000000000000UL, 0x4a940a42b9189f4dUL, + 0x7ff0000000000000UL, 0x155a015c0bc0eef1UL, 0x155a015c0dd06365UL, 0x155a015c09b17a7dUL, + 0x2aa465ede115d454UL, 0x0UL, 0x35498c7e1e7729feUL, 0x0UL, + 0x7ff0000000000000UL, 0x0UL, 0x0UL, 0x0UL, + 0x7ff8000000000000UL, 0x0UL, 0x3ff0000000000000UL, 0x0UL, + 0x7ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x0UL, 0x7ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x0UL, + 0x3ff0000000000000UL, 0x0UL, 0x7ff8000000000000UL, 0x0UL, + 0x3ff0000000000000UL, 0x3fefffffffdd3059UL, 0x3ff00000001167d3UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3fefffffffdd3059UL, 0x3ff00000001167d3UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3da5fd7fe1796495UL, 0x3da5fd7fe161788bUL, + 0x3da5fd7fe191509fUL, 0x3eca86f0875fcf94UL, 0x3b5e392010175ee5UL, 0x3f5d22a4fa316facUL, + 0x36cc8b8218854565UL, 0x42374876e8000000UL, 0x42374876e7e6abecUL, 0x42374876e8195415UL, + 0x41134d0f1066b7cdUL, 0x4480f0cf064dd593UL, 0x408192bb08b38ecdUL, 0x4911efc659cf7d4dUL, + 0x7ff0000000000000UL, 0x0UL, 0x7ff8000000000000UL, 0x0UL, + 0x7ff8000000000000UL, 0x0UL, 0x3ff0000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0xbda5fd7fe1796495UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x3b5e392010175ee5UL, 0x7ff8000000000000UL, 0x36cc8b8218854565UL, 0xc2374876e8000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x4480f0cf064dd593UL, + 0x7ff8000000000000UL, 0x4911efc659cf7d4dUL, 0x7ff0000000000000UL, 0x0UL, + 0x0UL, 0x0UL, 0x7ff8000000000000UL, 0x0UL, + 0x3ff0000000000000UL, 0x0UL, 0x7ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x0UL, 0x7ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x0UL, 0x0UL, 0x0UL, + 0x7ff8000000000000UL, 0x0UL, 0x3ff0000000000000UL, 0x0UL, + 0x7ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x0UL, 0x7ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x0UL, + 0x0UL, 0x0UL, 0x7ff8000000000000UL, 0x0UL, + 0x3ff0000000000000UL, 0x0UL, 0x7ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x0UL, 0x7ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x0UL, 0x0UL, 0x0UL, + 0x7ff8000000000000UL, 0x0UL, 0x3ff0000000000000UL, 0x0UL, + 0x7ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x0UL, 0x7ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x0UL, + 0x0UL, 0x0UL, 0x7ff8000000000000UL, 0x0UL, + 0x3ff0000000000000UL, 0x0UL, 0x7ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x0UL, 0x7ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x8000000000000000UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0xfff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x0UL, 0x3ff0000000000000UL, 0x0UL, + 0x7ff8000000000000UL, 0x0UL, 0x3ff0000000000000UL, 0x3fefffffffdd3059UL, + 0x3ff00000001167d3UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3fefffffffdd3059UL, 0x3ff00000001167d3UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3da5fd7fe1796495UL, 0x3da5fd7fe161788bUL, 0x3da5fd7fe191509fUL, 0x3eca86f0875fcf94UL, + 0x3b5e392010175ee5UL, 0x3f5d22a4fa316facUL, 0x36cc8b8218854565UL, 0x42374876e8000000UL, + 0x42374876e7e6abecUL, 0x42374876e8195415UL, 0x41134d0f1066b7cdUL, 0x4480f0cf064dd593UL, + 0x408192bb08b38ecdUL, 0x4911efc659cf7d4dUL, 0x7ff0000000000000UL, 0x0UL, + 0x7ff8000000000000UL, 0x0UL, 0x7ff8000000000000UL, 0x0UL, + 0x3ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0xbda5fd7fe1796495UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x3b5e392010175ee5UL, 0x7ff8000000000000UL, + 0x36cc8b8218854565UL, 0xc2374876e8000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x4480f0cf064dd593UL, 0x7ff8000000000000UL, 0x4911efc659cf7d4dUL, + 0x7ff0000000000000UL, 0x0UL, 0x0UL, 0x0UL, + 0x7ff8000000000000UL, 0x0UL, 0x3ff0000000000000UL, 0x0UL, + 0x7ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x0UL, 0x7ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x8000000000000000UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0xfff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x0UL, + 0x0UL, 0x0UL, 0x7ff8000000000000UL, 0x0UL, + 0x3ff0000000000000UL, 0x0UL, 0x7ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x0UL, 0x7ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x8000000000000000UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0xfff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x0UL, 0x0UL, 0x0UL, + 0x7ff8000000000000UL, 0x0UL, 0x3ff0000000000000UL, 0x0UL, + 0x7ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x0UL, 0x7ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x8000000000000000UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0xfff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x0UL, + 0x0UL, 0x0UL, 0x7ff8000000000000UL, 0x0UL, + 0x3ff0000000000000UL, 0x0UL, 0x7ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x0UL, 0x7ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x8000000000000000UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0xfff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x7ff8000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x0UL, 0x7ff0000000000000UL, + 0x3ff0000000000000UL, 0x7ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff000000000afecUL, 0x3ff000000000afecUL, + 0x3ff000000000afecUL, 0x3ff00000000057f6UL, 0x3ff0000000015fd8UL, 0x3ff0000000002bfbUL, + 0x3ff000000002bfb0UL, 0x3feffffffffea028UL, 0x3feffffffffea028UL, 0x3feffffffffea028UL, + 0x3fefffffffff5014UL, 0x3feffffffffd4050UL, 0x3fefffffffffa80aUL, 0x3feffffffffa80a0UL, + 0x7ff0000000000000UL, 0x0UL, 0x3ff0000000000000UL, 0x0UL, + 0x7ff8000000000000UL, 0x0UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3feffffffffea028UL, 0x3feffffffffea028UL, 0x3feffffffffea028UL, 0x3fefffffffff5014UL, + 0x3feffffffffd4050UL, 0x3fefffffffffa80aUL, 0x3feffffffffa80a0UL, 0x3ff000000000afecUL, + 0x3ff000000000afecUL, 0x3ff000000000afecUL, 0x3ff00000000057f6UL, 0x3ff0000000015fd8UL, + 0x3ff0000000002bfbUL, 0x3ff000000002bfb0UL, 0x7ff0000000000000UL, 0x0UL, + 0x3ff0000000000000UL, 0x0UL, 0x7ff8000000000000UL, 0x0UL, + 0x3ff0000000000000UL, 0x3fefffffffff0c1fUL, 0x3ff00000000079f1UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3fefffffffff0c1fUL, 0x3ff00000000079f1UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3fe0000000000000UL, 0x3fdfffffffff0c1fUL, + 0x3fe00000000079f1UL, 0x3fe6a09e667f3bcdUL, 0x3fd0000000000000UL, 0x3feae89f995ad3adUL, + 0x3fb0000000000000UL, 0x4000000000000000UL, 0x3fffffffffff0c1fUL, 0x40000000000079f1UL, + 0x3ff6a09e667f3bcdUL, 0x4010000000000000UL, 0x3ff306fe0a31b715UL, 0x4030000000000000UL, + 0x0UL, 0x7ff0000000000000UL, 0x3ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff00000000079f1UL, + 0x3fefffffffff0c1fUL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff00000000079f1UL, 0x3fefffffffff0c1fUL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x4000000000000000UL, 0x40000000000079f1UL, 0x3fffffffffff0c1fUL, 0x3ff6a09e667f3bcdUL, + 0x4010000000000000UL, 0x3ff306fe0a31b715UL, 0x4030000000000000UL, 0x3fe0000000000000UL, + 0x3fe00000000079f1UL, 0x3fdfffffffff0c1fUL, 0x3fe6a09e667f3bcdUL, 0x3fd0000000000000UL, + 0x3feae89f995ad3adUL, 0x3fb0000000000000UL, 0x7ff0000000000000UL, 0x0UL, + 0x3ff0000000000000UL, 0x0UL, 0x7ff8000000000000UL, 0x0UL, + 0x3ff0000000000000UL, 0x3feffffffffe183eUL, 0x3ff000000000f3e1UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3feffffffffe183eUL, 0x3ff000000000f3e1UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3fd0000000000000UL, 0x3fcffffffffe183eUL, + 0x3fd000000000f3e1UL, 0x3fe0000000000000UL, 0x3fb0000000000000UL, 0x3fe6a09e667f3bcdUL, + 0x3f70000000000000UL, 0x4010000000000000UL, 0x400ffffffffe183eUL, 0x401000000000f3e1UL, + 0x4000000000000000UL, 0x4030000000000000UL, 0x3ff6a09e667f3bcdUL, 0x4070000000000000UL, + 0x0UL, 0x7ff0000000000000UL, 0x3ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff000000000f3e1UL, + 0x3feffffffffe183eUL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff000000000f3e1UL, 0x3feffffffffe183eUL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x4010000000000000UL, 0x401000000000f3e1UL, 0x400ffffffffe183eUL, 0x4000000000000000UL, + 0x4030000000000000UL, 0x3ff6a09e667f3bcdUL, 0x4070000000000000UL, 0x3fd0000000000000UL, + 0x3fd000000000f3e1UL, 0x3fcffffffffe183eUL, 0x3fe0000000000000UL, 0x3fb0000000000000UL, + 0x3fe6a09e667f3bcdUL, 0x3f70000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x3ff0000000000000UL, 0x7ff8000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0xbff0000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x3ff0000000000000UL, 0x7ff8000000000000UL, + 0x3ff0000000000000UL, 0xbff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x3ff0000000000000UL, 0x7ff8000000000000UL, 0x3ff0000000000000UL, + 0x7ff0000000000000UL, 0x0UL, 0x7ff8000000000000UL, 0x0UL, + 0x7ff8000000000000UL, 0x0UL, 0x3ff0000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0xbfeffffffffea028UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x3feffffffffd4050UL, 0x7ff8000000000000UL, 0x3feffffffffa80a0UL, 0xbff000000000afecUL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x3ff0000000015fd8UL, + 0x7ff8000000000000UL, 0x3ff000000002bfb0UL, 0x0UL, 0x7ff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, + 0x3ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0xbff000000000afecUL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x3ff0000000015fd8UL, 0x7ff8000000000000UL, + 0x3ff000000002bfb0UL, 0xbfeffffffffea028UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x3feffffffffd4050UL, 0x7ff8000000000000UL, 0x3feffffffffa80a0UL, + 0x7ff0000000000000UL, 0x0UL, 0x7ff8000000000000UL, 0x0UL, + 0x7ff8000000000000UL, 0x0UL, 0x3ff0000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0xbfe0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x3fd0000000000000UL, 0x7ff8000000000000UL, 0x3fb0000000000000UL, 0xc000000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x4010000000000000UL, + 0x7ff8000000000000UL, 0x4030000000000000UL, 0x0UL, 0x7ff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, + 0x3ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0xc000000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x4010000000000000UL, 0x7ff8000000000000UL, + 0x4030000000000000UL, 0xbfe0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x3fd0000000000000UL, 0x7ff8000000000000UL, 0x3fb0000000000000UL, + 0x7ff0000000000000UL, 0x0UL, 0x7ff8000000000000UL, 0x0UL, + 0x7ff8000000000000UL, 0x0UL, 0x3ff0000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0xbfd0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x3fb0000000000000UL, 0x7ff8000000000000UL, 0x3f70000000000000UL, 0xc010000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x4030000000000000UL, + 0x7ff8000000000000UL, 0x4070000000000000UL, 0x0UL, 0x7ff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff0000000000000UL, + 0x3ff0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0xc010000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x4030000000000000UL, 0x7ff8000000000000UL, + 0x4070000000000000UL, 0xbfd0000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x3fb0000000000000UL, 0x7ff8000000000000UL, 0x3f70000000000000UL, + + ) + + + checkAnswers(::powWrapper, arguments, answers, false) + } + +} + diff --git a/libraries/stdlib/wasm/test/generated/math/roundings.kt b/libraries/stdlib/wasm/test/generated/math/roundings.kt new file mode 100644 index 00000000000..10b5aa2f17a --- /dev/null +++ b/libraries/stdlib/wasm/test/generated/math/roundings.kt @@ -0,0 +1,140 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package test.math + +// +// NOTE: THIS FILE IS AUTO-GENERATED by the mathTestGeneratorMain.kt +// See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib +// + +import kotlin.math.* +import kotlin.test.* + + + +class RoundingsTest { + private val arguments = arrayOf( + 0xfff0000000000000UL, 0x7ff0000000000000UL, 0x1UL, 0x7fefffffffffffffUL, + 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, 0x3fd999999999999aUL, 0x3fd99999999c594aUL, + 0x3fd999999996d9eaUL, 0x3fc999999999999aUL, 0x3fe999999999999aUL, 0x3fb999999999999aUL, + 0x3ff999999999999aUL, 0xbfd999999999999aUL, 0xbfd999999996d9eaUL, 0xbfd99999999c594aUL, + 0xbfc999999999999aUL, 0xbfe999999999999aUL, 0xbfb999999999999aUL, 0xbff999999999999aUL, + 0x3fe0000000000000UL, 0x3fe0000000015fd8UL, 0x3fdffffffffd4050UL, 0x3fd0000000000000UL, + 0x3ff0000000000000UL, 0x3fc0000000000000UL, 0x4000000000000000UL, 0xbfe0000000000000UL, + 0xbfdffffffffd4050UL, 0xbfe0000000015fd8UL, 0xbfd0000000000000UL, 0xbff0000000000000UL, + 0xbfc0000000000000UL, 0xc000000000000000UL, 0x3fe3333333333333UL, 0x3fe333333334930bUL, + 0x3fe333333331d35bUL, 0x3fd3333333333333UL, 0x3ff3333333333333UL, 0x3fc3333333333333UL, + 0x4003333333333333UL, 0xbfe3333333333333UL, 0xbfe333333331d35bUL, 0xbfe333333334930bUL, + 0xbfd3333333333333UL, 0xbff3333333333333UL, 0xbfc3333333333333UL, 0xc003333333333333UL, + 0x3ff0000000000000UL, 0x3ff000000000afecUL, 0x3feffffffffea028UL, 0x3fe0000000000000UL, + 0x4000000000000000UL, 0x3fd0000000000000UL, 0x4010000000000000UL, 0xbff0000000000000UL, + 0xbfeffffffffea028UL, 0xbff000000000afecUL, 0xbfe0000000000000UL, 0xc000000000000000UL, + 0xbfd0000000000000UL, 0xc010000000000000UL, + ) + + + @Test + fun testCeil() { + val answers = arrayOf( + 0xfff0000000000000UL, 0x7ff0000000000000UL, 0x3ff0000000000000UL, 0x7fefffffffffffffUL, + 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x4000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0xbff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x4000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0xbff0000000000000UL, + 0x8000000000000000UL, 0xc000000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x4000000000000000UL, 0x3ff0000000000000UL, + 0x4008000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0xbff0000000000000UL, 0x8000000000000000UL, 0xc000000000000000UL, + 0x3ff0000000000000UL, 0x4000000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x4000000000000000UL, 0x3ff0000000000000UL, 0x4010000000000000UL, 0xbff0000000000000UL, + 0x8000000000000000UL, 0xbff0000000000000UL, 0x8000000000000000UL, 0xc000000000000000UL, + 0x8000000000000000UL, 0xc010000000000000UL, + ) + + + checkAnswers(::ceil, arguments, answers, true) + } + + @Test + fun testFloor() { + val answers = arrayOf( + 0xfff0000000000000UL, 0x7ff0000000000000UL, 0x0UL, 0x7fefffffffffffffUL, + 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x3ff0000000000000UL, 0xbff0000000000000UL, 0xbff0000000000000UL, 0xbff0000000000000UL, + 0xbff0000000000000UL, 0xbff0000000000000UL, 0xbff0000000000000UL, 0xc000000000000000UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x3ff0000000000000UL, 0x0UL, 0x4000000000000000UL, 0xbff0000000000000UL, + 0xbff0000000000000UL, 0xbff0000000000000UL, 0xbff0000000000000UL, 0xbff0000000000000UL, + 0xbff0000000000000UL, 0xc000000000000000UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x3ff0000000000000UL, 0x0UL, + 0x4000000000000000UL, 0xbff0000000000000UL, 0xbff0000000000000UL, 0xbff0000000000000UL, + 0xbff0000000000000UL, 0xc000000000000000UL, 0xbff0000000000000UL, 0xc008000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x0UL, 0x0UL, + 0x4000000000000000UL, 0x0UL, 0x4010000000000000UL, 0xbff0000000000000UL, + 0xbff0000000000000UL, 0xc000000000000000UL, 0xbff0000000000000UL, 0xc000000000000000UL, + 0xbff0000000000000UL, 0xc010000000000000UL, + ) + + + checkAnswers(::floor, arguments, answers, true) + } + + @Test + fun testTruncate() { + val answers = arrayOf( + 0xfff0000000000000UL, 0x7ff0000000000000UL, 0x0UL, 0x7fefffffffffffffUL, + 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x3ff0000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0xbff0000000000000UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x3ff0000000000000UL, 0x0UL, 0x4000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0xbff0000000000000UL, + 0x8000000000000000UL, 0xc000000000000000UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x3ff0000000000000UL, 0x0UL, + 0x4000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0xbff0000000000000UL, 0x8000000000000000UL, 0xc000000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x0UL, 0x0UL, + 0x4000000000000000UL, 0x0UL, 0x4010000000000000UL, 0xbff0000000000000UL, + 0x8000000000000000UL, 0xbff0000000000000UL, 0x8000000000000000UL, 0xc000000000000000UL, + 0x8000000000000000UL, 0xc010000000000000UL, + ) + + + checkAnswers(::truncate, arguments, answers, true) + } + + @Test + fun testRound() { + val answers = arrayOf( + 0xfff0000000000000UL, 0x7ff0000000000000UL, 0x0UL, 0x7fefffffffffffffUL, + 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x3ff0000000000000UL, 0x0UL, + 0x4000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0xbff0000000000000UL, 0x8000000000000000UL, 0xc000000000000000UL, + 0x0UL, 0x3ff0000000000000UL, 0x0UL, 0x0UL, + 0x3ff0000000000000UL, 0x0UL, 0x4000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0xbff0000000000000UL, 0x8000000000000000UL, 0xbff0000000000000UL, + 0x8000000000000000UL, 0xc000000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x0UL, 0x3ff0000000000000UL, 0x0UL, + 0x4000000000000000UL, 0xbff0000000000000UL, 0xbff0000000000000UL, 0xbff0000000000000UL, + 0x8000000000000000UL, 0xbff0000000000000UL, 0x8000000000000000UL, 0xc000000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x0UL, + 0x4000000000000000UL, 0x0UL, 0x4010000000000000UL, 0xbff0000000000000UL, + 0xbff0000000000000UL, 0xbff0000000000000UL, 0x8000000000000000UL, 0xc000000000000000UL, + 0x8000000000000000UL, 0xc010000000000000UL, + ) + + + checkAnswers(::round, arguments, answers, true) + } + +} + diff --git a/libraries/stdlib/wasm/test/generated/math/trigonometry.kt b/libraries/stdlib/wasm/test/generated/math/trigonometry.kt new file mode 100644 index 00000000000..0ed0e38b73a --- /dev/null +++ b/libraries/stdlib/wasm/test/generated/math/trigonometry.kt @@ -0,0 +1,865 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package test.math + +// +// NOTE: THIS FILE IS AUTO-GENERATED by the mathTestGeneratorMain.kt +// See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib +// + +import kotlin.math.* +import kotlin.test.* + + + +class TrigonometryTest { + private val arguments = arrayOf( + 0xfff0000000000000UL, 0x7ff0000000000000UL, 0x1UL, 0x7fefffffffffffffUL, + 0x7ff8000000000000UL, 0x6a83b03385a2fc07UL, 0x0UL, 0x3da5fd7fe1796495UL, + 0xbda5fd7fe1796495UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x8000000000000000UL, 0x3da5fd7fe1796495UL, 0xbda5fd7fe1796495UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x3ff0000000000000UL, 0x3ff000000000afecUL, 0x3feffffffffea028UL, 0x3fe0000000000000UL, + 0x4000000000000000UL, 0x3fd0000000000000UL, 0x4010000000000000UL, 0xbff0000000000000UL, + 0xbfeffffffffea028UL, 0xbff000000000afecUL, 0xbfe0000000000000UL, 0xc000000000000000UL, + 0xbfd0000000000000UL, 0xc010000000000000UL, 0x400921fb54442d18UL, 0x400921fb5444850eUL, + 0x400921fb5443d522UL, 0x3ff921fb54442d18UL, 0x401921fb54442d18UL, 0x3fe921fb54442d18UL, + 0x402921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb5443d522UL, 0xc00921fb5444850eUL, + 0xbff921fb54442d18UL, 0xc01921fb54442d18UL, 0xbfe921fb54442d18UL, 0xc02921fb54442d18UL, + + ) + + + @Test + fun testSin() { + val answers = arrayOf( + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x1UL, 0x3f7452fc98b34e97UL, + 0x7ff8000000000000UL, 0x3fedcf338109c34bUL, 0x0UL, 0x3da5fd7fe1796495UL, + 0xbda5fd7fe1796495UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x8000000000000000UL, 0x3da5fd7fe1796495UL, 0xbda5fd7fe1796495UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x3feaed548f090ceeUL, 0x3feaed548f09cb08UL, 0x3feaed548f084ed4UL, 0x3fdeaee8744b05f0UL, + 0x3fed18f6ead1b446UL, 0x3fcfaaeed4f31577UL, 0xbfe837b9dddc1eaeUL, 0xbfeaed548f090ceeUL, + 0xbfeaed548f084ed4UL, 0xbfeaed548f09cb08UL, 0xbfdeaee8744b05f0UL, 0xbfed18f6ead1b446UL, + 0xbfcfaaeed4f31577UL, 0x3fe837b9dddc1eaeUL, 0x3ca1a62633145c07UL, 0xbda5fd6e59d9ccecUL, + 0x3da5fd91a6263314UL, 0x3ff0000000000000UL, 0xbcb1a62633145c07UL, 0x3fe6a09e667f3bccUL, + 0xbcc1a62633145c07UL, 0xbca1a62633145c07UL, 0xbda5fd91a6263314UL, 0x3da5fd6e59d9ccecUL, + 0xbff0000000000000UL, 0x3cb1a62633145c07UL, 0xbfe6a09e667f3bccUL, 0x3cc1a62633145c07UL, + + ) + + + checkAnswers(::sin, arguments, answers, true) + } + + @Test + fun testCos() { + val answers = arrayOf( + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x3ff0000000000000UL, 0xbfefffe62ecfab75UL, + 0x7ff8000000000000UL, 0x3fd745ba83a7adcaUL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3fe14a280fb5068cUL, 0x3fe14a280fb3de7bUL, 0x3fe14a280fb62e9dUL, 0x3fec1528065b7d50UL, + 0xbfdaa22657537205UL, 0x3fef01549f7deea1UL, 0xbfe4eaa606db24c1UL, 0x3fe14a280fb5068cUL, + 0x3fe14a280fb62e9dUL, 0x3fe14a280fb3de7bUL, 0x3fec1528065b7d50UL, 0xbfdaa22657537205UL, + 0x3fef01549f7deea1UL, 0xbfe4eaa606db24c1UL, 0xbff0000000000000UL, 0xbff0000000000000UL, + 0xbff0000000000000UL, 0x3c91a62633145c07UL, 0x3ff0000000000000UL, 0x3fe6a09e667f3bcdUL, + 0x3ff0000000000000UL, 0xbff0000000000000UL, 0xbff0000000000000UL, 0xbff0000000000000UL, + 0x3c91a62633145c07UL, 0x3ff0000000000000UL, 0x3fe6a09e667f3bcdUL, 0x3ff0000000000000UL, + + ) + + + checkAnswers(::cos, arguments, answers, true) + } + + @Test + fun testTan() { + val answers = arrayOf( + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x1UL, 0xbf74530cfe729484UL, + 0x7ff8000000000000UL, 0x40047e879c4b7f73UL, 0x0UL, 0x3da5fd7fe1796495UL, + 0xbda5fd7fe1796495UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x8000000000000000UL, 0x3da5fd7fe1796495UL, 0xbda5fd7fe1796495UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x3ff8eb245cbee3a6UL, 0x3ff8eb245cc13e45UL, 0x3ff8eb245cbc8906UL, 0x3fe17b4f5bf3474aUL, + 0xc0017af62e0950f8UL, 0x3fd05785a43c4c56UL, 0x3ff2866f9be4de13UL, 0xbff8eb245cbee3a6UL, + 0xbff8eb245cbc8906UL, 0xbff8eb245cc13e45UL, 0xbfe17b4f5bf3474aUL, 0x40017af62e0950f8UL, + 0xbfd05785a43c4c56UL, 0xbff2866f9be4de13UL, 0xbca1a62633145c07UL, 0x3da5fd6e59d9ccecUL, + 0xbda5fd91a6263314UL, 0x434d02967c31cdb5UL, 0xbcb1a62633145c07UL, 0x3fefffffffffffffUL, + 0xbcc1a62633145c07UL, 0x3ca1a62633145c07UL, 0x3da5fd91a6263314UL, 0xbda5fd6e59d9ccecUL, + 0xc34d02967c31cdb5UL, 0x3cb1a62633145c07UL, 0xbfefffffffffffffUL, 0x3cc1a62633145c07UL, + + ) + + + checkAnswers(::tan, arguments, answers, false) + } + + @Test + fun testAsin() { + val answers = arrayOf( + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x1UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x0UL, 0x3da5fd7fe1796495UL, + 0xbda5fd7fe1796495UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x8000000000000000UL, 0x3da5fd7fe1796495UL, 0xbda5fd7fe1796495UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x3ff921fb54442d18UL, 0x7ff8000000000000UL, 0x3ff921f6a3c9521bUL, 0x3fe0c152382d7366UL, + 0x7ff8000000000000UL, 0x3fd02be9ce0b87cdUL, 0x7ff8000000000000UL, 0xbff921fb54442d18UL, + 0xbff921f6a3c9521bUL, 0x7ff8000000000000UL, 0xbfe0c152382d7366UL, 0x7ff8000000000000UL, + 0xbfd02be9ce0b87cdUL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x3fece8276c3e139cUL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0xbfece8276c3e139cUL, 0x7ff8000000000000UL, + + ) + + + checkAnswers(::asin, arguments, answers, true) + } + + @Test + fun testAtan() { + val answers = arrayOf( + 0xbff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x1UL, 0x3ff921fb54442d18UL, + 0x7ff8000000000000UL, 0x3ff921fb54442d18UL, 0x0UL, 0x3da5fd7fe1796495UL, + 0xbda5fd7fe1796495UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x8000000000000000UL, 0x3da5fd7fe1796495UL, 0xbda5fd7fe1796495UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x3fe921fb54442d18UL, 0x3fe921fb5444dd04UL, 0x3fe921fb54437d2cUL, 0x3fddac670561bb4fUL, + 0x3ff1b6e192ebbe44UL, 0x3fcf5b75f92c80ddUL, 0x3ff5368c951e9cfdUL, 0xbfe921fb54442d18UL, + 0xbfe921fb54437d2cUL, 0xbfe921fb5444dd04UL, 0xbfddac670561bb4fUL, 0xbff1b6e192ebbe44UL, + 0xbfcf5b75f92c80ddUL, 0xbff5368c951e9cfdUL, 0x3ff433b8a322ddd2UL, 0x3ff433b8a322ee02UL, + 0x3ff433b8a322cda3UL, 0x3ff00fe987ed02ffUL, 0x3ff69b8154baf42eUL, 0x3fe54e04c05d06a0UL, + 0x3ff7dcb7c5c399ecUL, 0xbff433b8a322ddd2UL, 0xbff433b8a322cda3UL, 0xbff433b8a322ee02UL, + 0xbff00fe987ed02ffUL, 0xbff69b8154baf42eUL, 0xbfe54e04c05d06a0UL, 0xbff7dcb7c5c399ecUL, + + ) + + + checkAnswers(::atan, arguments, answers, true) + } + + @Test + fun testAtan2() { + val answers = arrayOf( + 0xc002d97c7f3321d2UL, 0xbfe921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0x7ff8000000000000UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0x4002d97c7f3321d2UL, 0x3fe921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x7ff8000000000000UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x400921fb54442d18UL, 0x0UL, 0x3fe921fb54442d18UL, 0x0UL, + 0x7ff8000000000000UL, 0x0UL, 0x3ff921fb54442d18UL, 0x174876e800UL, + 0x400921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x174876e800UL, 0x400921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x1UL, 0x1UL, 0x1UL, 0x2UL, + 0x0UL, 0x4UL, 0x0UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x0UL, 0x0UL, + 0x0UL, 0x1UL, 0x0UL, 0x1UL, + 0x0UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x0UL, 0x3ff921fb54442d18UL, 0x3fe921fb54442d18UL, + 0x7ff8000000000000UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d19UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d19UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d19UL, + 0x3ff921fb54442d19UL, 0x3ff921fb54442d19UL, 0x3ff921fb54442d19UL, 0x3ff921fb54442d19UL, + 0x3ff921fb54442d19UL, 0x3ff921fb54442d19UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d19UL, 0x3ff921fb54442d19UL, 0x3ff921fb54442d19UL, + 0x3ff921fb54442d19UL, 0x3ff921fb54442d19UL, 0x3ff921fb54442d19UL, 0x3ff921fb54442d19UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x400921fb54442d18UL, 0x0UL, 0x3ff921fb54442d18UL, 0x2a83b03385a2fc08UL, + 0x7ff8000000000000UL, 0x3fe921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d19UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d19UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d19UL, + 0x3ff921fb54442d19UL, 0x3ff921fb54442d19UL, 0x3ff921fb54442d19UL, 0x3ff921fb54442d19UL, + 0x3ff921fb54442d19UL, 0x3ff921fb54442d19UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d19UL, 0x3ff921fb54442d19UL, 0x3ff921fb54442d19UL, + 0x3ff921fb54442d19UL, 0x3ff921fb54442d19UL, 0x3ff921fb54442d19UL, 0x3ff921fb54442d19UL, + 0x400921fb54442d18UL, 0x0UL, 0x0UL, 0x0UL, + 0x7ff8000000000000UL, 0x0UL, 0x0UL, 0x0UL, + 0x400921fb54442d18UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x400921fb54442d18UL, 0x0UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x0UL, 0x3ff921fb54442d18UL, 0x2bfbUL, + 0x7ff8000000000000UL, 0x1311dee714150ee9UL, 0x3ff921fb54442d18UL, 0x3fe921fb54442d18UL, + 0x4002d97c7f3321d2UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3fe921fb54442d18UL, 0x4002d97c7f3321d2UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3da5fd7fe1796495UL, 0x3da5fd7fe17872ccUL, 0x3da5fd7fe17a565eUL, 0x3db5fd7fe1796495UL, + 0x3d95fd7fe1796495UL, 0x3dc5fd7fe1796495UL, 0x3d85fd7fe1796495UL, 0x400921fb5443d522UL, + 0x400921fb5443d522UL, 0x400921fb5443d522UL, 0x400921fb54437d2cUL, 0x400921fb5444011dUL, + 0x400921fb5442cd40UL, 0x400921fb5444171bUL, 0x3d8bffb390866e47UL, 0x3d8bffb390860c49UL, + 0x3d8bffb39086d045UL, 0x3d9bffb390866e47UL, 0x3d7bffb390866e47UL, 0x3dabffb390866e47UL, + 0x3d6bffb390866e47UL, 0x400921fb54441119UL, 0x400921fb54441119UL, 0x400921fb54441119UL, + 0x400921fb5443f519UL, 0x400921fb54441f18UL, 0x400921fb5443bd19UL, 0x400921fb54442618UL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0xbff921fb54442d18UL, 0x8000000000002bfbUL, + 0x7ff8000000000000UL, 0x9311dee714150ee9UL, 0xbff921fb54442d18UL, 0xbfe921fb54442d18UL, + 0xc002d97c7f3321d2UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbfe921fb54442d18UL, 0xc002d97c7f3321d2UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbda5fd7fe1796495UL, 0xbda5fd7fe17872ccUL, 0xbda5fd7fe17a565eUL, 0xbdb5fd7fe1796495UL, + 0xbd95fd7fe1796495UL, 0xbdc5fd7fe1796495UL, 0xbd85fd7fe1796495UL, 0xc00921fb5443d522UL, + 0xc00921fb5443d522UL, 0xc00921fb5443d522UL, 0xc00921fb54437d2cUL, 0xc00921fb5444011dUL, + 0xc00921fb5442cd40UL, 0xc00921fb5444171bUL, 0xbd8bffb390866e47UL, 0xbd8bffb390860c49UL, + 0xbd8bffb39086d045UL, 0xbd9bffb390866e47UL, 0xbd7bffb390866e47UL, 0xbdabffb390866e47UL, + 0xbd6bffb390866e47UL, 0xc00921fb54441119UL, 0xc00921fb54441119UL, 0xc00921fb54441119UL, + 0xc00921fb5443f519UL, 0xc00921fb54441f18UL, 0xc00921fb5443bd19UL, 0xc00921fb54442618UL, + 0x400921fb54442d18UL, 0x0UL, 0x0UL, 0x0UL, + 0x7ff8000000000000UL, 0x0UL, 0x0UL, 0x0UL, + 0x400921fb54442d18UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x400921fb54442d18UL, 0x0UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x0UL, 0x0UL, 0x0UL, + 0x7ff8000000000000UL, 0x0UL, 0x0UL, 0x0UL, + 0x400921fb54442d18UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x400921fb54442d18UL, 0x0UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x0UL, 0x0UL, 0x0UL, + 0x7ff8000000000000UL, 0x0UL, 0x0UL, 0x0UL, + 0x400921fb54442d18UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x400921fb54442d18UL, 0x0UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x0UL, 0x0UL, 0x0UL, + 0x7ff8000000000000UL, 0x0UL, 0x0UL, 0x0UL, + 0x400921fb54442d18UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x400921fb54442d18UL, 0x0UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x0UL, 0x0UL, + 0x0UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, + 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, 0x400921fb54442d18UL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x7ff8000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0xc00921fb54442d18UL, 0x8000000000000000UL, 0xc00921fb54442d18UL, + 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0xc00921fb54442d18UL, + 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, + 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, + 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, + 0x400921fb54442d18UL, 0x0UL, 0x3ff921fb54442d18UL, 0x2bfbUL, + 0x7ff8000000000000UL, 0x1311dee714150ee9UL, 0x3ff921fb54442d18UL, 0x3fe921fb54442d18UL, + 0x4002d97c7f3321d2UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3fe921fb54442d18UL, 0x4002d97c7f3321d2UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3da5fd7fe1796495UL, 0x3da5fd7fe17872ccUL, 0x3da5fd7fe17a565eUL, 0x3db5fd7fe1796495UL, + 0x3d95fd7fe1796495UL, 0x3dc5fd7fe1796495UL, 0x3d85fd7fe1796495UL, 0x400921fb5443d522UL, + 0x400921fb5443d522UL, 0x400921fb5443d522UL, 0x400921fb54437d2cUL, 0x400921fb5444011dUL, + 0x400921fb5442cd40UL, 0x400921fb5444171bUL, 0x3d8bffb390866e47UL, 0x3d8bffb390860c49UL, + 0x3d8bffb39086d045UL, 0x3d9bffb390866e47UL, 0x3d7bffb390866e47UL, 0x3dabffb390866e47UL, + 0x3d6bffb390866e47UL, 0x400921fb54441119UL, 0x400921fb54441119UL, 0x400921fb54441119UL, + 0x400921fb5443f519UL, 0x400921fb54441f18UL, 0x400921fb5443bd19UL, 0x400921fb54442618UL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0xbff921fb54442d18UL, 0x8000000000002bfbUL, + 0x7ff8000000000000UL, 0x9311dee714150ee9UL, 0xbff921fb54442d18UL, 0xbfe921fb54442d18UL, + 0xc002d97c7f3321d2UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbfe921fb54442d18UL, 0xc002d97c7f3321d2UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbda5fd7fe1796495UL, 0xbda5fd7fe17872ccUL, 0xbda5fd7fe17a565eUL, 0xbdb5fd7fe1796495UL, + 0xbd95fd7fe1796495UL, 0xbdc5fd7fe1796495UL, 0xbd85fd7fe1796495UL, 0xc00921fb5443d522UL, + 0xc00921fb5443d522UL, 0xc00921fb5443d522UL, 0xc00921fb54437d2cUL, 0xc00921fb5444011dUL, + 0xc00921fb5442cd40UL, 0xc00921fb5444171bUL, 0xbd8bffb390866e47UL, 0xbd8bffb390860c49UL, + 0xbd8bffb39086d045UL, 0xbd9bffb390866e47UL, 0xbd7bffb390866e47UL, 0xbdabffb390866e47UL, + 0xbd6bffb390866e47UL, 0xc00921fb54441119UL, 0xc00921fb54441119UL, 0xc00921fb54441119UL, + 0xc00921fb5443f519UL, 0xc00921fb54441f18UL, 0xc00921fb5443bd19UL, 0xc00921fb54442618UL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x7ff8000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0xc00921fb54442d18UL, 0x8000000000000000UL, 0xc00921fb54442d18UL, + 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0xc00921fb54442d18UL, + 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, + 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, + 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x7ff8000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0xc00921fb54442d18UL, 0x8000000000000000UL, 0xc00921fb54442d18UL, + 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0xc00921fb54442d18UL, + 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, + 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, + 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x7ff8000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0xc00921fb54442d18UL, 0x8000000000000000UL, 0xc00921fb54442d18UL, + 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0xc00921fb54442d18UL, + 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, + 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, + 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x7ff8000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0xc00921fb54442d18UL, 0x8000000000000000UL, 0xc00921fb54442d18UL, + 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0xc00921fb54442d18UL, + 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, + 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x8000000000000000UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, + 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, 0xc00921fb54442d18UL, + 0x400921fb54442d18UL, 0x0UL, 0x3ff921fb54442d18UL, 0x4000000000000UL, + 0x7ff8000000000000UL, 0x155a015c0bc0eef1UL, 0x3ff921fb54442d18UL, 0x3ff921fb54437d2cUL, + 0x3ff921fb5444dd05UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54437d2cUL, 0x3ff921fb5444dd05UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3fe921fb54442d18UL, 0x3fe921fb54437d2cUL, 0x3fe921fb5444dd04UL, 0x3ff1b6e192ebbe44UL, + 0x3fddac670561bb4fUL, 0x3ff5368c951e9cfdUL, 0x3fcf5b75f92c80ddUL, 0x4002d97c7f3321d2UL, + 0x4002d97c7f32f5d7UL, 0x4002d97c7f334dcdUL, 0x4000468a8ace4df6UL, 0x40056c6e7397f5aeUL, + 0x3ffd0d6a1369bd34UL, 0x40072c43f4b1650aUL, 0x3fd3b90ac4853d17UL, 0x3fd3b90ac484fc59UL, + 0x3fd3b90ac4857dd4UL, 0x3fe2242398ae5432UL, 0x3fc433cffc49c751UL, 0x3fecf5f1e82b5390UL, + 0x3fb45438e80932c3UL, 0x4006aad9fbb38575UL, 0x4006aad9fbb37d5eUL, 0x4006aad9fbb38d8dUL, + 0x400498f26e18980cUL, 0x4007debe547f90a3UL, 0x4001e47eda395834UL, 0x40087f598d03e382UL, + 0x400921fb54442d18UL, 0x0UL, 0x3ff921fb54442d18UL, 0x4000000002bfbUL, + 0x7ff8000000000000UL, 0x155a015c0bc20cdfUL, 0x3ff921fb54442d18UL, 0x3ff921fb54437d2cUL, + 0x3ff921fb5444dd05UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54437d2cUL, 0x3ff921fb5444dd05UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3fe921fb5444dd04UL, 0x3fe921fb54442d18UL, 0x3fe921fb54458cf0UL, 0x3ff1b6e192ec04a3UL, + 0x3fddac670562d4c9UL, 0x3ff5368c951ec661UL, 0x3fcf5b75f92dcc03UL, 0x4002d97c7f32f5d7UL, + 0x4002d97c7f32c9dcUL, 0x4002d97c7f3321d2UL, 0x4000468a8ace2ac7UL, 0x40056c6e7397d27fUL, + 0x3ffd0d6a136993d0UL, 0x40072c43f4b15058UL, 0x3fd3b90ac4860878UL, 0x3fd3b90ac485c7bcUL, + 0x3fd3b90ac4864936UL, 0x3fe2242398aef396UL, 0x3fc433cffc4aa1c6UL, 0x3fecf5f1e82bfe79UL, + 0x3fb45438e80a1158UL, 0x4006aad9fbb36c09UL, 0x4006aad9fbb363f2UL, 0x4006aad9fbb37421UL, + 0x400498f26e187033UL, 0x4007debe547f82fcUL, 0x4001e47eda392d7aUL, 0x40087f598d03dc8eUL, + 0x400921fb54442d18UL, 0x0UL, 0x3ff921fb54442d18UL, 0x3ffffffffd405UL, + 0x7ff8000000000000UL, 0x155a015c0bbfd103UL, 0x3ff921fb54442d18UL, 0x3ff921fb54437d2cUL, + 0x3ff921fb5444dd05UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54437d2cUL, 0x3ff921fb5444dd05UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3fe921fb54437d2cUL, 0x3fe921fb5442cd40UL, 0x3fe921fb54442d18UL, 0x3ff1b6e192eb77e6UL, + 0x3fddac670560a1d6UL, 0x3ff5368c951e7398UL, 0x3fcf5b75f92b35b8UL, 0x4002d97c7f334dcdUL, + 0x4002d97c7f3321d2UL, 0x4002d97c7f3379c8UL, 0x4000468a8ace7126UL, 0x40056c6e739818deUL, + 0x3ffd0d6a1369e699UL, 0x40072c43f4b179bdUL, 0x3fd3b90ac48471b4UL, 0x3fd3b90ac48430f8UL, + 0x3fd3b90ac484b272UL, 0x3fe2242398adb4ceUL, 0x3fc433cffc48ecdcUL, 0x3fecf5f1e82aa8a7UL, + 0x3fb45438e808542eUL, 0x4006aad9fbb39ee2UL, 0x4006aad9fbb396caUL, 0x4006aad9fbb3a6f9UL, + 0x400498f26e18bfe5UL, 0x4007debe547f9e4aUL, 0x4001e47eda3982eeUL, 0x40087f598d03ea77UL, + 0x400921fb54442d18UL, 0x0UL, 0x3ff921fb54442d18UL, 0x2000000000000UL, + 0x7ff8000000000000UL, 0x154a015c0bc0eef1UL, 0x3ff921fb54442d18UL, 0x3ff921fb5442cd40UL, + 0x3ff921fb54458cf1UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb5442cd40UL, 0x3ff921fb54458cf1UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3fddac670561bb4fUL, 0x3fddac670560a1d6UL, 0x3fddac670562d4c9UL, 0x3fe921fb54442d18UL, + 0x3fcf5b75f92c80ddUL, 0x3ff1b6e192ebbe44UL, 0x3fbfd5ba9aac2f6eUL, 0x40056c6e7397f5aeUL, + 0x40056c6e7397d27fUL, 0x40056c6e739818deUL, 0x4002d97c7f3321d2UL, 0x40072c43f4b1650aUL, + 0x4000468a8ace4df6UL, 0x4008234d7f6ecb9dUL, 0x3fc433cffc49c751UL, 0x3fc433cffc4981c7UL, + 0x3fc433cffc4a0cdaUL, 0x3fd3b90ac4853d17UL, 0x3fb45438e80932c3UL, 0x3fe2242398ae5432UL, + 0x3fa45c708d443772UL, 0x4007debe547f90a3UL, 0x4007debe547f8c4bUL, 0x4007debe547f94fcUL, + 0x4006aad9fbb38575UL, 0x40087f598d03e382UL, 0x400498f26e18980cUL, 0x4008d089920f1c3aUL, + 0x400921fb54442d18UL, 0x0UL, 0x3ff921fb54442d18UL, 0x8000000000000UL, + 0x7ff8000000000000UL, 0x156a015c0bc0eef1UL, 0x3ff921fb54442d18UL, 0x3ff921fb5443d522UL, + 0x3ff921fb5444850fUL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb5443d522UL, 0x3ff921fb5444850fUL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff1b6e192ebbe44UL, 0x3ff1b6e192eb77e6UL, 0x3ff1b6e192ec04a3UL, 0x3ff5368c951e9cfdUL, + 0x3fe921fb54442d18UL, 0x3ff7249faa996a21UL, 0x3fddac670561bb4fUL, 0x4000468a8ace4df6UL, + 0x4000468a8ace2ac7UL, 0x4000468a8ace7126UL, 0x3ffd0d6a1369bd34UL, 0x4002d97c7f3321d2UL, + 0x3ffb1f56fdeef010UL, 0x40056c6e7397f5aeUL, 0x3fe2242398ae5432UL, 0x3fe2242398ae2175UL, + 0x3fe2242398ae86eeUL, 0x3fecf5f1e82b5390UL, 0x3fd3b90ac4853d17UL, 0x3ff32545abb24f20UL, + 0x3fc433cffc49c751UL, 0x400498f26e18980cUL, 0x400498f26e188b5dUL, 0x400498f26e18a4bbUL, + 0x4001e47eda395834UL, 0x4006aad9fbb38575UL, 0x3fff1eb0fcd60b11UL, 0x4007debe547f90a3UL, + 0x400921fb54442d18UL, 0x0UL, 0x3ff921fb54442d18UL, 0x1000000000000UL, + 0x7ff8000000000000UL, 0x153a015c0bc0eef1UL, 0x3ff921fb54442d18UL, 0x3ff921fb54416d68UL, + 0x3ff921fb5446ecc9UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54416d68UL, 0x3ff921fb5446ecc9UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3fcf5b75f92c80ddUL, 0x3fcf5b75f92b35b8UL, 0x3fcf5b75f92dcc03UL, 0x3fddac670561bb4fUL, + 0x3fbfd5ba9aac2f6eUL, 0x3fe921fb54442d18UL, 0x3faff55bb72cfdeaUL, 0x40072c43f4b1650aUL, + 0x40072c43f4b15058UL, 0x40072c43f4b179bdUL, 0x40056c6e7397f5aeUL, 0x4008234d7f6ecb9dUL, + 0x4002d97c7f3321d2UL, 0x4008a225e5677921UL, 0x3fb45438e80932c3UL, 0x3fb45438e808ebe9UL, + 0x3fb45438e809799dUL, 0x3fc433cffc49c751UL, 0x3fa45c708d443772UL, 0x3fd3b90ac4853d17UL, + 0x3f945e8055946782UL, 0x40087f598d03e382UL, 0x40087f598d03e14bUL, 0x40087f598d03e5b9UL, + 0x4007debe547f90a3UL, 0x4008d089920f1c3aUL, 0x4006aad9fbb38575UL, 0x4008f93e53990449UL, + 0x400921fb54442d18UL, 0x0UL, 0x3ff921fb54442d18UL, 0x10000000000001UL, + 0x7ff8000000000000UL, 0x157a015c0bc0eef1UL, 0x3ff921fb54442d18UL, 0x3ff921fb5444011dUL, + 0x3ff921fb54445914UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb5444011dUL, 0x3ff921fb54445914UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff5368c951e9cfdUL, 0x3ff5368c951e7398UL, 0x3ff5368c951ec661UL, 0x3ff7249faa996a21UL, + 0x3ff1b6e192ebbe44UL, 0x3ff82250768ac529UL, 0x3fe921fb54442d18UL, 0x3ffd0d6a1369bd34UL, + 0x3ffd0d6a136993d0UL, 0x3ffd0d6a1369e699UL, 0x3ffb1f56fdeef010UL, 0x4000468a8ace4df6UL, + 0x3ffa21a631fd9508UL, 0x4002d97c7f3321d2UL, 0x3fecf5f1e82b5390UL, 0x3fecf5f1e82b1d29UL, + 0x3fecf5f1e82b89f7UL, 0x3ff32545abb24f20UL, 0x3fe2242398ae5432UL, 0x3ff607d636e70256UL, + 0x3fd3b90ac4853d17UL, 0x4001e47eda395834UL, 0x4001e47eda394a9aUL, 0x4001e47eda3965ceUL, + 0x3fff1eb0fcd60b11UL, 0x400498f26e18980cUL, 0x3ffc3c2071a157dbUL, 0x4006aad9fbb38575UL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0xbff921fb54442d18UL, 0x8004000000000000UL, + 0x7ff8000000000000UL, 0x955a015c0bc0eef1UL, 0xbff921fb54442d18UL, 0xbff921fb54437d2cUL, + 0xbff921fb5444dd05UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54437d2cUL, 0xbff921fb5444dd05UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbfe921fb54442d18UL, 0xbfe921fb54437d2cUL, 0xbfe921fb5444dd04UL, 0xbff1b6e192ebbe44UL, + 0xbfddac670561bb4fUL, 0xbff5368c951e9cfdUL, 0xbfcf5b75f92c80ddUL, 0xc002d97c7f3321d2UL, + 0xc002d97c7f32f5d7UL, 0xc002d97c7f334dcdUL, 0xc000468a8ace4df6UL, 0xc0056c6e7397f5aeUL, + 0xbffd0d6a1369bd34UL, 0xc0072c43f4b1650aUL, 0xbfd3b90ac4853d17UL, 0xbfd3b90ac484fc59UL, + 0xbfd3b90ac4857dd4UL, 0xbfe2242398ae5432UL, 0xbfc433cffc49c751UL, 0xbfecf5f1e82b5390UL, + 0xbfb45438e80932c3UL, 0xc006aad9fbb38575UL, 0xc006aad9fbb37d5eUL, 0xc006aad9fbb38d8dUL, + 0xc00498f26e18980cUL, 0xc007debe547f90a3UL, 0xc001e47eda395834UL, 0xc0087f598d03e382UL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0xbff921fb54442d18UL, 0x8003ffffffffd405UL, + 0x7ff8000000000000UL, 0x955a015c0bbfd103UL, 0xbff921fb54442d18UL, 0xbff921fb54437d2cUL, + 0xbff921fb5444dd05UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54437d2cUL, 0xbff921fb5444dd05UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbfe921fb54437d2cUL, 0xbfe921fb5442cd40UL, 0xbfe921fb54442d18UL, 0xbff1b6e192eb77e6UL, + 0xbfddac670560a1d6UL, 0xbff5368c951e7398UL, 0xbfcf5b75f92b35b8UL, 0xc002d97c7f334dcdUL, + 0xc002d97c7f3321d2UL, 0xc002d97c7f3379c8UL, 0xc000468a8ace7126UL, 0xc0056c6e739818deUL, + 0xbffd0d6a1369e699UL, 0xc0072c43f4b179bdUL, 0xbfd3b90ac48471b4UL, 0xbfd3b90ac48430f8UL, + 0xbfd3b90ac484b272UL, 0xbfe2242398adb4ceUL, 0xbfc433cffc48ecdcUL, 0xbfecf5f1e82aa8a7UL, + 0xbfb45438e808542eUL, 0xc006aad9fbb39ee2UL, 0xc006aad9fbb396caUL, 0xc006aad9fbb3a6f9UL, + 0xc00498f26e18bfe5UL, 0xc007debe547f9e4aUL, 0xc001e47eda3982eeUL, 0xc0087f598d03ea77UL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0xbff921fb54442d18UL, 0x8004000000002bfbUL, + 0x7ff8000000000000UL, 0x955a015c0bc20cdfUL, 0xbff921fb54442d18UL, 0xbff921fb54437d2cUL, + 0xbff921fb5444dd05UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54437d2cUL, 0xbff921fb5444dd05UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbfe921fb5444dd04UL, 0xbfe921fb54442d18UL, 0xbfe921fb54458cf0UL, 0xbff1b6e192ec04a3UL, + 0xbfddac670562d4c9UL, 0xbff5368c951ec661UL, 0xbfcf5b75f92dcc03UL, 0xc002d97c7f32f5d7UL, + 0xc002d97c7f32c9dcUL, 0xc002d97c7f3321d2UL, 0xc000468a8ace2ac7UL, 0xc0056c6e7397d27fUL, + 0xbffd0d6a136993d0UL, 0xc0072c43f4b15058UL, 0xbfd3b90ac4860878UL, 0xbfd3b90ac485c7bcUL, + 0xbfd3b90ac4864936UL, 0xbfe2242398aef396UL, 0xbfc433cffc4aa1c6UL, 0xbfecf5f1e82bfe79UL, + 0xbfb45438e80a1158UL, 0xc006aad9fbb36c09UL, 0xc006aad9fbb363f2UL, 0xc006aad9fbb37421UL, + 0xc00498f26e187033UL, 0xc007debe547f82fcUL, 0xc001e47eda392d7aUL, 0xc0087f598d03dc8eUL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0xbff921fb54442d18UL, 0x8002000000000000UL, + 0x7ff8000000000000UL, 0x954a015c0bc0eef1UL, 0xbff921fb54442d18UL, 0xbff921fb5442cd40UL, + 0xbff921fb54458cf1UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb5442cd40UL, 0xbff921fb54458cf1UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbfddac670561bb4fUL, 0xbfddac670560a1d6UL, 0xbfddac670562d4c9UL, 0xbfe921fb54442d18UL, + 0xbfcf5b75f92c80ddUL, 0xbff1b6e192ebbe44UL, 0xbfbfd5ba9aac2f6eUL, 0xc0056c6e7397f5aeUL, + 0xc0056c6e7397d27fUL, 0xc0056c6e739818deUL, 0xc002d97c7f3321d2UL, 0xc0072c43f4b1650aUL, + 0xc000468a8ace4df6UL, 0xc008234d7f6ecb9dUL, 0xbfc433cffc49c751UL, 0xbfc433cffc4981c7UL, + 0xbfc433cffc4a0cdaUL, 0xbfd3b90ac4853d17UL, 0xbfb45438e80932c3UL, 0xbfe2242398ae5432UL, + 0xbfa45c708d443772UL, 0xc007debe547f90a3UL, 0xc007debe547f8c4bUL, 0xc007debe547f94fcUL, + 0xc006aad9fbb38575UL, 0xc0087f598d03e382UL, 0xc00498f26e18980cUL, 0xc008d089920f1c3aUL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0xbff921fb54442d18UL, 0x8008000000000000UL, + 0x7ff8000000000000UL, 0x956a015c0bc0eef1UL, 0xbff921fb54442d18UL, 0xbff921fb5443d522UL, + 0xbff921fb5444850fUL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb5443d522UL, 0xbff921fb5444850fUL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff1b6e192ebbe44UL, 0xbff1b6e192eb77e6UL, 0xbff1b6e192ec04a3UL, 0xbff5368c951e9cfdUL, + 0xbfe921fb54442d18UL, 0xbff7249faa996a21UL, 0xbfddac670561bb4fUL, 0xc000468a8ace4df6UL, + 0xc000468a8ace2ac7UL, 0xc000468a8ace7126UL, 0xbffd0d6a1369bd34UL, 0xc002d97c7f3321d2UL, + 0xbffb1f56fdeef010UL, 0xc0056c6e7397f5aeUL, 0xbfe2242398ae5432UL, 0xbfe2242398ae2175UL, + 0xbfe2242398ae86eeUL, 0xbfecf5f1e82b5390UL, 0xbfd3b90ac4853d17UL, 0xbff32545abb24f20UL, + 0xbfc433cffc49c751UL, 0xc00498f26e18980cUL, 0xc00498f26e188b5dUL, 0xc00498f26e18a4bbUL, + 0xc001e47eda395834UL, 0xc006aad9fbb38575UL, 0xbfff1eb0fcd60b11UL, 0xc007debe547f90a3UL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0xbff921fb54442d18UL, 0x8001000000000000UL, + 0x7ff8000000000000UL, 0x953a015c0bc0eef1UL, 0xbff921fb54442d18UL, 0xbff921fb54416d68UL, + 0xbff921fb5446ecc9UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54416d68UL, 0xbff921fb5446ecc9UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbfcf5b75f92c80ddUL, 0xbfcf5b75f92b35b8UL, 0xbfcf5b75f92dcc03UL, 0xbfddac670561bb4fUL, + 0xbfbfd5ba9aac2f6eUL, 0xbfe921fb54442d18UL, 0xbfaff55bb72cfdeaUL, 0xc0072c43f4b1650aUL, + 0xc0072c43f4b15058UL, 0xc0072c43f4b179bdUL, 0xc0056c6e7397f5aeUL, 0xc008234d7f6ecb9dUL, + 0xc002d97c7f3321d2UL, 0xc008a225e5677921UL, 0xbfb45438e80932c3UL, 0xbfb45438e808ebe9UL, + 0xbfb45438e809799dUL, 0xbfc433cffc49c751UL, 0xbfa45c708d443772UL, 0xbfd3b90ac4853d17UL, + 0xbf945e8055946782UL, 0xc0087f598d03e382UL, 0xc0087f598d03e14bUL, 0xc0087f598d03e5b9UL, + 0xc007debe547f90a3UL, 0xc008d089920f1c3aUL, 0xc006aad9fbb38575UL, 0xc008f93e53990449UL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0xbff921fb54442d18UL, 0x8010000000000001UL, + 0x7ff8000000000000UL, 0x957a015c0bc0eef1UL, 0xbff921fb54442d18UL, 0xbff921fb5444011dUL, + 0xbff921fb54445914UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb5444011dUL, 0xbff921fb54445914UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff5368c951e9cfdUL, 0xbff5368c951e7398UL, 0xbff5368c951ec661UL, 0xbff7249faa996a21UL, + 0xbff1b6e192ebbe44UL, 0xbff82250768ac529UL, 0xbfe921fb54442d18UL, 0xbffd0d6a1369bd34UL, + 0xbffd0d6a136993d0UL, 0xbffd0d6a1369e699UL, 0xbffb1f56fdeef010UL, 0xc000468a8ace4df6UL, + 0xbffa21a631fd9508UL, 0xc002d97c7f3321d2UL, 0xbfecf5f1e82b5390UL, 0xbfecf5f1e82b1d29UL, + 0xbfecf5f1e82b89f7UL, 0xbff32545abb24f20UL, 0xbfe2242398ae5432UL, 0xbff607d636e70256UL, + 0xbfd3b90ac4853d17UL, 0xc001e47eda395834UL, 0xc001e47eda394a9aUL, 0xc001e47eda3965ceUL, + 0xbfff1eb0fcd60b11UL, 0xc00498f26e18980cUL, 0xbffc3c2071a157dbUL, 0xc006aad9fbb38575UL, + 0x400921fb54442d18UL, 0x0UL, 0x3ff921fb54442d18UL, 0xc90fdaa22168cUL, + 0x7ff8000000000000UL, 0x15746cad8f3fcefcUL, 0x3ff921fb54442d18UL, 0x3ff921fb5443f519UL, + 0x3ff921fb54446518UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb5443f519UL, 0x3ff921fb54446518UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff433b8a322ddd2UL, 0x3ff433b8a322aafaUL, 0x3ff433b8a32310abUL, 0x3ff69b8154baf42eUL, + 0x3ff00fe987ed02ffUL, 0x3ff7dcb7c5c399ecUL, 0x3fe54e04c05d06a0UL, 0x3ffe103e05657c5fUL, + 0x3ffe103e05654986UL, 0x3ffe103e0565af37UL, 0x3ffba87553cd6603UL, 0x40011a06904dab99UL, + 0x3ffa673ee2c4c045UL, 0x4003ce7a242ceb70UL, 0x3fe921fb54442d18UL, 0x3fe921fb5443f519UL, + 0x3fe921fb54446517UL, 0x3ff1b6e192ebbe44UL, 0x3fddac670561bb4fUL, 0x3ff5368c951e9cfdUL, + 0x3fcf5b75f92c80ddUL, 0x4002d97c7f3321d2UL, 0x4002d97c7f3313d2UL, 0x4002d97c7f332fd2UL, + 0x4000468a8ace4df6UL, 0x40056c6e7397f5aeUL, 0x3ffd0d6a1369bd34UL, 0x40072c43f4b1650aUL, + 0x400921fb54442d18UL, 0x0UL, 0x3ff921fb54442d18UL, 0xc90fdaa224287UL, + 0x7ff8000000000000UL, 0x15746cad8f401678UL, 0x3ff921fb54442d18UL, 0x3ff921fb5443f519UL, + 0x3ff921fb54446518UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb5443f519UL, 0x3ff921fb54446518UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff433b8a322ee02UL, 0x3ff433b8a322bb29UL, 0x3ff433b8a32320daUL, 0x3ff69b8154bafcdfUL, + 0x3ff00fe987ed1c5dUL, 0x3ff7dcb7c5c39e5aUL, 0x3fe54e04c05d3d07UL, 0x3ffe103e05656c2fUL, + 0x3ffe103e05653957UL, 0x3ffe103e05659f08UL, 0x3ffba87553cd5d52UL, 0x40011a06904d9eeaUL, + 0x3ffa673ee2c4bbd7UL, 0x4003ce7a242cddd6UL, 0x3fe921fb54446517UL, 0x3fe921fb54442d18UL, + 0x3fe921fb54449d17UL, 0x3ff1b6e192ebd4aaUL, 0x3fddac67056214e7UL, 0x3ff5368c951eaa2aUL, + 0x3fcf5b75f92cea45UL, 0x4002d97c7f3313d2UL, 0x4002d97c7f3305d2UL, 0x4002d97c7f3321d2UL, + 0x4000468a8ace42c4UL, 0x40056c6e7397ea7bUL, 0x3ffd0d6a1369b007UL, 0x40072c43f4b15e74UL, + 0x400921fb54442d18UL, 0x0UL, 0x3ff921fb54442d18UL, 0xc90fdaa21ea91UL, + 0x7ff8000000000000UL, 0x15746cad8f3f8780UL, 0x3ff921fb54442d18UL, 0x3ff921fb5443f519UL, + 0x3ff921fb54446518UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb5443f519UL, 0x3ff921fb54446518UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff433b8a322cda3UL, 0x3ff433b8a3229acbUL, 0x3ff433b8a323007cUL, 0x3ff69b8154baeb7dUL, + 0x3ff00fe987ece9a1UL, 0x3ff7dcb7c5c3957eUL, 0x3fe54e04c05cd039UL, 0x3ffe103e05658c8eUL, + 0x3ffe103e056559b5UL, 0x3ffe103e0565bf66UL, 0x3ffba87553cd6eb4UL, 0x40011a06904db848UL, + 0x3ffa673ee2c4c4b3UL, 0x4003ce7a242cf90aUL, 0x3fe921fb5443f519UL, 0x3fe921fb5443bd19UL, + 0x3fe921fb54442d18UL, 0x3ff1b6e192eba7deUL, 0x3fddac67056161b7UL, 0x3ff5368c951e8fcfUL, + 0x3fcf5b75f92c1775UL, 0x4002d97c7f332fd2UL, 0x4002d97c7f3321d2UL, 0x4002d97c7f333dd2UL, + 0x4000468a8ace592aUL, 0x40056c6e739800e1UL, 0x3ffd0d6a1369ca62UL, 0x40072c43f4b16ba1UL, + 0x400921fb54442d18UL, 0x0UL, 0x3ff921fb54442d18UL, 0x6487ed5110b46UL, + 0x7ff8000000000000UL, 0x15646cad8f3fcefcUL, 0x3ff921fb54442d18UL, 0x3ff921fb5443bd19UL, + 0x3ff921fb54449d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb5443bd19UL, 0x3ff921fb54449d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff00fe987ed02ffUL, 0x3ff00fe987ecb34dUL, 0x3ff00fe987ed52b1UL, 0x3ff433b8a322ddd2UL, + 0x3fe54e04c05d06a0UL, 0x3ff69b8154baf42eUL, 0x3fd7f2d6a24777e1UL, 0x40011a06904dab99UL, + 0x40011a06904d83c0UL, 0x40011a06904dd372UL, 0x3ffe103e05657c5fUL, 0x4003ce7a242ceb70UL, + 0x3ffba87553cd6603UL, 0x400623a07ffb3e1cUL, 0x3fddac670561bb4fUL, 0x3fddac67056161b7UL, + 0x3fddac67056214e7UL, 0x3fe921fb54442d18UL, 0x3fcf5b75f92c80ddUL, 0x3ff1b6e192ebbe44UL, + 0x3fbfd5ba9aac2f6eUL, 0x40056c6e7397f5aeUL, 0x40056c6e7397ea7bUL, 0x40056c6e739800e1UL, + 0x4002d97c7f3321d2UL, 0x40072c43f4b1650aUL, 0x4000468a8ace4df6UL, 0x4008234d7f6ecb9dUL, + 0x400921fb54442d18UL, 0x0UL, 0x3ff921fb54442d18UL, 0x1921fb54442d19UL, + 0x7ff8000000000000UL, 0x15846cad8f3fcefcUL, 0x3ff921fb54442d18UL, 0x3ff921fb54441119UL, + 0x3ff921fb54444918UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54441119UL, 0x3ff921fb54444918UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff69b8154baf42eUL, 0x3ff69b8154bad8e0UL, 0x3ff69b8154bb0f7dUL, 0x3ff7dcb7c5c399ecUL, + 0x3ff433b8a322ddd2UL, 0x3ff87f17cfda0b5dUL, 0x3ff00fe987ed02ffUL, 0x3ffba87553cd6603UL, + 0x3ffba87553cd4ab4UL, 0x3ffba87553cd8151UL, 0x3ffa673ee2c4c045UL, 0x3ffe103e05657c5fUL, + 0x3ff9c4ded8ae4ed4UL, 0x40011a06904dab99UL, 0x3ff1b6e192ebbe44UL, 0x3ff1b6e192eba7deUL, + 0x3ff1b6e192ebd4aaUL, 0x3ff5368c951e9cfdUL, 0x3fe921fb54442d18UL, 0x3ff7249faa996a21UL, + 0x3fddac670561bb4fUL, 0x4000468a8ace4df6UL, 0x4000468a8ace42c4UL, 0x4000468a8ace592aUL, + 0x3ffd0d6a1369bd34UL, 0x4002d97c7f3321d2UL, 0x3ffb1f56fdeef010UL, 0x40056c6e7397f5aeUL, + 0x400921fb54442d18UL, 0x0UL, 0x3ff921fb54442d18UL, 0x3243f6a8885a3UL, + 0x7ff8000000000000UL, 0x15546cad8f3fcefcUL, 0x3ff921fb54442d18UL, 0x3ff921fb54434d1bUL, + 0x3ff921fb54450d16UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54434d1bUL, 0x3ff921fb54450d16UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3fe54e04c05d06a0UL, 0x3fe54e04c05c5bb7UL, 0x3fe54e04c05db189UL, 0x3ff00fe987ed02ffUL, + 0x3fd7f2d6a24777e1UL, 0x3ff433b8a322ddd2UL, 0x3fc8d128eae95614UL, 0x4003ce7a242ceb70UL, + 0x4003ce7a242cc0b6UL, 0x4003ce7a242d162aUL, 0x40011a06904dab99UL, 0x400623a07ffb3e1cUL, + 0x3ffe103e05657c5fUL, 0x400794e8c59597b7UL, 0x3fcf5b75f92c80ddUL, 0x3fcf5b75f92c1775UL, + 0x3fcf5b75f92cea45UL, 0x3fddac670561bb4fUL, 0x3fbfd5ba9aac2f6eUL, 0x3fe921fb54442d18UL, + 0x3faff55bb72cfdeaUL, 0x40072c43f4b1650aUL, 0x40072c43f4b15e74UL, 0x40072c43f4b16ba1UL, + 0x40056c6e7397f5aeUL, 0x4008234d7f6ecb9dUL, 0x4002d97c7f3321d2UL, 0x4008a225e5677921UL, + 0x400921fb54442d18UL, 0x0UL, 0x3ff921fb54442d18UL, 0x2921fb54442d19UL, + 0x7ff8000000000000UL, 0x15946cad8f3fcefcUL, 0x3ff921fb54442d18UL, 0x3ff921fb54441f18UL, + 0x3ff921fb54443b19UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54441f18UL, 0x3ff921fb54443b19UL, + 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, 0x3ff921fb54442d18UL, + 0x3ff7dcb7c5c399ecUL, 0x3ff7dcb7c5c38c03UL, 0x3ff7dcb7c5c3a7d5UL, 0x3ff87f17cfda0b5dUL, + 0x3ff69b8154baf42eUL, 0x3ff8d08152eddb7aUL, 0x3ff433b8a322ddd2UL, 0x3ffa673ee2c4c045UL, + 0x3ffa673ee2c4b25cUL, 0x3ffa673ee2c4ce2eUL, 0x3ff9c4ded8ae4ed4UL, 0x3ffba87553cd6603UL, + 0x3ff97375559a7eb7UL, 0x3ffe103e05657c5fUL, 0x3ff5368c951e9cfdUL, 0x3ff5368c951e8fcfUL, + 0x3ff5368c951eaa2aUL, 0x3ff7249faa996a21UL, 0x3ff1b6e192ebbe44UL, 0x3ff82250768ac529UL, + 0x3fe921fb54442d18UL, 0x3ffd0d6a1369bd34UL, 0x3ffd0d6a1369b007UL, 0x3ffd0d6a1369ca62UL, + 0x3ffb1f56fdeef010UL, 0x4000468a8ace4df6UL, 0x3ffa21a631fd9508UL, 0x4002d97c7f3321d2UL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0xbff921fb54442d18UL, 0x800c90fdaa22168cUL, + 0x7ff8000000000000UL, 0x95746cad8f3fcefcUL, 0xbff921fb54442d18UL, 0xbff921fb5443f519UL, + 0xbff921fb54446518UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb5443f519UL, 0xbff921fb54446518UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff433b8a322ddd2UL, 0xbff433b8a322aafaUL, 0xbff433b8a32310abUL, 0xbff69b8154baf42eUL, + 0xbff00fe987ed02ffUL, 0xbff7dcb7c5c399ecUL, 0xbfe54e04c05d06a0UL, 0xbffe103e05657c5fUL, + 0xbffe103e05654986UL, 0xbffe103e0565af37UL, 0xbffba87553cd6603UL, 0xc0011a06904dab99UL, + 0xbffa673ee2c4c045UL, 0xc003ce7a242ceb70UL, 0xbfe921fb54442d18UL, 0xbfe921fb5443f519UL, + 0xbfe921fb54446517UL, 0xbff1b6e192ebbe44UL, 0xbfddac670561bb4fUL, 0xbff5368c951e9cfdUL, + 0xbfcf5b75f92c80ddUL, 0xc002d97c7f3321d2UL, 0xc002d97c7f3313d2UL, 0xc002d97c7f332fd2UL, + 0xc000468a8ace4df6UL, 0xc0056c6e7397f5aeUL, 0xbffd0d6a1369bd34UL, 0xc0072c43f4b1650aUL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0xbff921fb54442d18UL, 0x800c90fdaa21ea91UL, + 0x7ff8000000000000UL, 0x95746cad8f3f8780UL, 0xbff921fb54442d18UL, 0xbff921fb5443f519UL, + 0xbff921fb54446518UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb5443f519UL, 0xbff921fb54446518UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff433b8a322cda3UL, 0xbff433b8a3229acbUL, 0xbff433b8a323007cUL, 0xbff69b8154baeb7dUL, + 0xbff00fe987ece9a1UL, 0xbff7dcb7c5c3957eUL, 0xbfe54e04c05cd039UL, 0xbffe103e05658c8eUL, + 0xbffe103e056559b5UL, 0xbffe103e0565bf66UL, 0xbffba87553cd6eb4UL, 0xc0011a06904db848UL, + 0xbffa673ee2c4c4b3UL, 0xc003ce7a242cf90aUL, 0xbfe921fb5443f519UL, 0xbfe921fb5443bd19UL, + 0xbfe921fb54442d18UL, 0xbff1b6e192eba7deUL, 0xbfddac67056161b7UL, 0xbff5368c951e8fcfUL, + 0xbfcf5b75f92c1775UL, 0xc002d97c7f332fd2UL, 0xc002d97c7f3321d2UL, 0xc002d97c7f333dd2UL, + 0xc000468a8ace592aUL, 0xc0056c6e739800e1UL, 0xbffd0d6a1369ca62UL, 0xc0072c43f4b16ba1UL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0xbff921fb54442d18UL, 0x800c90fdaa224287UL, + 0x7ff8000000000000UL, 0x95746cad8f401678UL, 0xbff921fb54442d18UL, 0xbff921fb5443f519UL, + 0xbff921fb54446518UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb5443f519UL, 0xbff921fb54446518UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff433b8a322ee02UL, 0xbff433b8a322bb29UL, 0xbff433b8a32320daUL, 0xbff69b8154bafcdfUL, + 0xbff00fe987ed1c5dUL, 0xbff7dcb7c5c39e5aUL, 0xbfe54e04c05d3d07UL, 0xbffe103e05656c2fUL, + 0xbffe103e05653957UL, 0xbffe103e05659f08UL, 0xbffba87553cd5d52UL, 0xc0011a06904d9eeaUL, + 0xbffa673ee2c4bbd7UL, 0xc003ce7a242cddd6UL, 0xbfe921fb54446517UL, 0xbfe921fb54442d18UL, + 0xbfe921fb54449d17UL, 0xbff1b6e192ebd4aaUL, 0xbfddac67056214e7UL, 0xbff5368c951eaa2aUL, + 0xbfcf5b75f92cea45UL, 0xc002d97c7f3313d2UL, 0xc002d97c7f3305d2UL, 0xc002d97c7f3321d2UL, + 0xc000468a8ace42c4UL, 0xc0056c6e7397ea7bUL, 0xbffd0d6a1369b007UL, 0xc0072c43f4b15e74UL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0xbff921fb54442d18UL, 0x8006487ed5110b46UL, + 0x7ff8000000000000UL, 0x95646cad8f3fcefcUL, 0xbff921fb54442d18UL, 0xbff921fb5443bd19UL, + 0xbff921fb54449d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb5443bd19UL, 0xbff921fb54449d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff00fe987ed02ffUL, 0xbff00fe987ecb34dUL, 0xbff00fe987ed52b1UL, 0xbff433b8a322ddd2UL, + 0xbfe54e04c05d06a0UL, 0xbff69b8154baf42eUL, 0xbfd7f2d6a24777e1UL, 0xc0011a06904dab99UL, + 0xc0011a06904d83c0UL, 0xc0011a06904dd372UL, 0xbffe103e05657c5fUL, 0xc003ce7a242ceb70UL, + 0xbffba87553cd6603UL, 0xc00623a07ffb3e1cUL, 0xbfddac670561bb4fUL, 0xbfddac67056161b7UL, + 0xbfddac67056214e7UL, 0xbfe921fb54442d18UL, 0xbfcf5b75f92c80ddUL, 0xbff1b6e192ebbe44UL, + 0xbfbfd5ba9aac2f6eUL, 0xc0056c6e7397f5aeUL, 0xc0056c6e7397ea7bUL, 0xc0056c6e739800e1UL, + 0xc002d97c7f3321d2UL, 0xc0072c43f4b1650aUL, 0xc000468a8ace4df6UL, 0xc008234d7f6ecb9dUL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0xbff921fb54442d18UL, 0x801921fb54442d19UL, + 0x7ff8000000000000UL, 0x95846cad8f3fcefcUL, 0xbff921fb54442d18UL, 0xbff921fb54441119UL, + 0xbff921fb54444918UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54441119UL, 0xbff921fb54444918UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff69b8154baf42eUL, 0xbff69b8154bad8e0UL, 0xbff69b8154bb0f7dUL, 0xbff7dcb7c5c399ecUL, + 0xbff433b8a322ddd2UL, 0xbff87f17cfda0b5dUL, 0xbff00fe987ed02ffUL, 0xbffba87553cd6603UL, + 0xbffba87553cd4ab4UL, 0xbffba87553cd8151UL, 0xbffa673ee2c4c045UL, 0xbffe103e05657c5fUL, + 0xbff9c4ded8ae4ed4UL, 0xc0011a06904dab99UL, 0xbff1b6e192ebbe44UL, 0xbff1b6e192eba7deUL, + 0xbff1b6e192ebd4aaUL, 0xbff5368c951e9cfdUL, 0xbfe921fb54442d18UL, 0xbff7249faa996a21UL, + 0xbfddac670561bb4fUL, 0xc000468a8ace4df6UL, 0xc000468a8ace42c4UL, 0xc000468a8ace592aUL, + 0xbffd0d6a1369bd34UL, 0xc002d97c7f3321d2UL, 0xbffb1f56fdeef010UL, 0xc0056c6e7397f5aeUL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0xbff921fb54442d18UL, 0x8003243f6a8885a3UL, + 0x7ff8000000000000UL, 0x95546cad8f3fcefcUL, 0xbff921fb54442d18UL, 0xbff921fb54434d1bUL, + 0xbff921fb54450d16UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54434d1bUL, 0xbff921fb54450d16UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbfe54e04c05d06a0UL, 0xbfe54e04c05c5bb7UL, 0xbfe54e04c05db189UL, 0xbff00fe987ed02ffUL, + 0xbfd7f2d6a24777e1UL, 0xbff433b8a322ddd2UL, 0xbfc8d128eae95614UL, 0xc003ce7a242ceb70UL, + 0xc003ce7a242cc0b6UL, 0xc003ce7a242d162aUL, 0xc0011a06904dab99UL, 0xc00623a07ffb3e1cUL, + 0xbffe103e05657c5fUL, 0xc00794e8c59597b7UL, 0xbfcf5b75f92c80ddUL, 0xbfcf5b75f92c1775UL, + 0xbfcf5b75f92cea45UL, 0xbfddac670561bb4fUL, 0xbfbfd5ba9aac2f6eUL, 0xbfe921fb54442d18UL, + 0xbfaff55bb72cfdeaUL, 0xc0072c43f4b1650aUL, 0xc0072c43f4b15e74UL, 0xc0072c43f4b16ba1UL, + 0xc0056c6e7397f5aeUL, 0xc008234d7f6ecb9dUL, 0xc002d97c7f3321d2UL, 0xc008a225e5677921UL, + 0xc00921fb54442d18UL, 0x8000000000000000UL, 0xbff921fb54442d18UL, 0x802921fb54442d19UL, + 0x7ff8000000000000UL, 0x95946cad8f3fcefcUL, 0xbff921fb54442d18UL, 0xbff921fb54441f18UL, + 0xbff921fb54443b19UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54441f18UL, 0xbff921fb54443b19UL, + 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, 0xbff921fb54442d18UL, + 0xbff7dcb7c5c399ecUL, 0xbff7dcb7c5c38c03UL, 0xbff7dcb7c5c3a7d5UL, 0xbff87f17cfda0b5dUL, + 0xbff69b8154baf42eUL, 0xbff8d08152eddb7aUL, 0xbff433b8a322ddd2UL, 0xbffa673ee2c4c045UL, + 0xbffa673ee2c4b25cUL, 0xbffa673ee2c4ce2eUL, 0xbff9c4ded8ae4ed4UL, 0xbffba87553cd6603UL, + 0xbff97375559a7eb7UL, 0xbffe103e05657c5fUL, 0xbff5368c951e9cfdUL, 0xbff5368c951e8fcfUL, + 0xbff5368c951eaa2aUL, 0xbff7249faa996a21UL, 0xbff1b6e192ebbe44UL, 0xbff82250768ac529UL, + 0xbfe921fb54442d18UL, 0xbffd0d6a1369bd34UL, 0xbffd0d6a1369b007UL, 0xbffd0d6a1369ca62UL, + 0xbffb1f56fdeef010UL, 0xc000468a8ace4df6UL, 0xbffa21a631fd9508UL, 0xc002d97c7f3321d2UL, + + ) + + + checkAnswers(::atan2, arguments, answers, true) + } + + @Test + fun testSinh() { + val answers = arrayOf( + 0xfff0000000000000UL, 0x7ff0000000000000UL, 0x1UL, 0x7ff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x0UL, 0x3da5fd7fe1796495UL, + 0xbda5fd7fe1796495UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x8000000000000000UL, 0x3da5fd7fe1796495UL, 0xbda5fd7fe1796495UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x3ff2cd9fc44eb982UL, 0x3ff2cd9fc44fc8f8UL, 0x3ff2cd9fc44daa0cUL, 0x3fe0acd00fe63b97UL, + 0x400d03cf63b6e1a0UL, 0x3fd02accd9d08102UL, 0x403b4a3803703630UL, 0xbff2cd9fc44eb982UL, + 0xbff2cd9fc44daa0cUL, 0xbff2cd9fc44fc8f8UL, 0xbfe0acd00fe63b97UL, 0xc00d03cf63b6e1a0UL, + 0xbfd02accd9d08102UL, 0xc03b4a3803703630UL, 0x402718f45d72e672UL, 0x402718f45d73e55aUL, + 0x402718f45d71e789UL, 0x4002690f661dd820UL, 0x4070bbeb1603926aUL, 0x3febcc270b522736UL, + 0x4101807d40a5fb0aUL, 0xc02718f45d72e672UL, 0xc02718f45d71e789UL, 0xc02718f45d73e55aUL, + 0xc002690f661dd820UL, 0xc070bbeb1603926aUL, 0xbfebcc270b522736UL, 0xc101807d40a5fb0aUL, + + ) + + + checkAnswers(::sinh, arguments, answers, true) + } + + @Test + fun testCosh() { + val answers = arrayOf( + 0x7ff0000000000000UL, 0x7ff0000000000000UL, 0x3ff0000000000000UL, 0x7ff0000000000000UL, + 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, 0x3ff0000000000000UL, + 0x3ff8b07551d9f551UL, 0x3ff8b07551dac40fUL, 0x3ff8b07551d92692UL, 0x3ff20ac1862ae8d0UL, + 0x400e18fa0df2d9bcUL, 0x3ff080ab05ca6146UL, 0x403b4ee858de3e80UL, 0x3ff8b07551d9f551UL, + 0x3ff8b07551d92692UL, 0x3ff8b07551dac40fUL, 0x3ff20ac1862ae8d0UL, 0x400e18fa0df2d9bcUL, + 0x3ff080ab05ca6146UL, 0x403b4ee858de3e80UL, 0x40272f147fee4000UL, 0x40272f147fef3df6UL, + 0x40272f147fed420bUL, 0x400412cc2a8d4e9eUL, 0x4070bbf2bc2b69c6UL, 0x3ff531994ce525b9UL, + 0x4101807d40a7cf1aUL, 0x40272f147fee4000UL, 0x40272f147fed420bUL, 0x40272f147fef3df6UL, + 0x400412cc2a8d4e9eUL, 0x4070bbf2bc2b69c6UL, 0x3ff531994ce525b9UL, 0x4101807d40a7cf1aUL, + + ) + + + checkAnswers(::cosh, arguments, answers, true) + } + + @Test + fun testTanh() { + val answers = arrayOf( + 0xbff0000000000000UL, 0x3ff0000000000000UL, 0x1UL, 0x3ff0000000000000UL, + 0x7ff8000000000000UL, 0x3ff0000000000000UL, 0x0UL, 0x3da5fd7fe1796495UL, + 0xbda5fd7fe1796495UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x8000000000000000UL, 0x3da5fd7fe1796495UL, 0xbda5fd7fe1796495UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x3fe85efab514f394UL, 0x3fe85efab5158758UL, 0x3fe85efab5145fcfUL, 0x3fdd9353d7568af3UL, + 0x3feed9505e1bc3d4UL, 0x3fcf597ea69a1c86UL, 0x3feffa81708a0b42UL, 0xbfe85efab514f394UL, + 0xbfe85efab5145fcfUL, 0xbfe85efab5158758UL, 0xbfdd9353d7568af3UL, 0xbfeed9505e1bc3d4UL, + 0xbfcf597ea69a1c86UL, 0xbfeffa81708a0b42UL, 0x3fefe175fa292810UL, 0x3fefe175fa292aaeUL, + 0x3fefe175fa292571UL, 0x3fed594fdae482baUL, 0x3feffff15f81f9abUL, 0x3fe4fc441fa6d6d6UL, + 0x3feffffffffca835UL, 0xbfefe175fa292810UL, 0xbfefe175fa292571UL, 0xbfefe175fa292aaeUL, + 0xbfed594fdae482baUL, 0xbfeffff15f81f9abUL, 0xbfe4fc441fa6d6d6UL, 0xbfeffffffffca835UL, + + ) + + + checkAnswers(::tanh, arguments, answers, true) + } + + @Test + fun testAsinh() { + val answers = arrayOf( + 0xfff0000000000000UL, 0x7ff0000000000000UL, 0x1UL, 0x408633ce8fb9f87dUL, + 0x7ff8000000000000UL, 0x407d8ef0e521dbc8UL, 0x0UL, 0x3da5fd7fe1796495UL, + 0xbda5fd7fe1796495UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x8000000000000000UL, 0x3da5fd7fe1796495UL, 0xbda5fd7fe1796495UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x3fec34366179d426UL, 0x3fec3436617accf1UL, 0x3fec34366178db5dUL, 0x3fdecc2caec5160aUL, + 0x3ff719218313d087UL, 0x3fcfacfb2399e637UL, 0x4000c1f8a6e80eebUL, 0xbfec34366179d426UL, + 0xbfec34366178db5dUL, 0xbfec3436617accf1UL, 0xbfdecc2caec5160aUL, 0xbff719218313d087UL, + 0xbfcfacfb2399e637UL, 0xc000c1f8a6e80eebUL, 0x3ffdcbf69f10006dUL, 0x3ffdcbf69f1035c9UL, + 0x3ffdcbf69f0fcb10UL, 0x3ff3bc04e847ec05UL, 0x40044c62a1e4f804UL, 0x3fe7144779e3f0bcUL, + 0x4009ce5672c85ff0UL, 0xbffdcbf69f10006dUL, 0xbffdcbf69f0fcb10UL, 0xbffdcbf69f1035c9UL, + 0xbff3bc04e847ec05UL, 0xc0044c62a1e4f804UL, 0xbfe7144779e3f0bcUL, 0xc009ce5672c85ff0UL, + + ) + + + checkAnswers(::asinh, arguments, answers, false) + } + + @Test + fun testAcosh() { + val answers = arrayOf( + 0x7ff8000000000000UL, 0x7ff0000000000000UL, 0x7ff8000000000000UL, 0x408633ce8fb9f87dUL, + 0x7ff8000000000000UL, 0x407d8ef0e521dbc8UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x0UL, 0x3ed2c1eb6bf6c712UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x3ff5124271980434UL, 0x7ff8000000000000UL, 0x400081eb4b421592UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x3ffcfc02f90106c2UL, 0x3ffcfc02f90141d3UL, + 0x3ffcfc02f900cbb0UL, 0x3ff05f23c6cbaf31UL, 0x400432718f372526UL, 0x7ff8000000000000UL, + 0x4009c7da6362eaa7UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + + ) + + + checkAnswers(::acosh, arguments, answers, false) + } + + @Test + fun testAtanh() { + val answers = arrayOf( + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x1UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x0UL, 0x3da5fd7fe1796495UL, + 0xbda5fd7fe1796495UL, 0x0UL, 0x0UL, 0x0UL, + 0x0UL, 0x8000000000000000UL, 0x3da5fd7fe1796495UL, 0xbda5fd7fe1796495UL, + 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, 0x8000000000000000UL, + 0x7ff0000000000000UL, 0x7ff8000000000000UL, 0x402a058678adc34fUL, 0x3fe193ea7aad030bUL, + 0x7ff8000000000000UL, 0x3fd058aefa811452UL, 0x7ff8000000000000UL, 0xfff0000000000000UL, + 0xc02a058678adc34fUL, 0x7ff8000000000000UL, 0xbfe193ea7aad030bUL, 0x7ff8000000000000UL, + 0xbfd058aefa811452UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x3ff0f2eb07023068UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0x7ff8000000000000UL, + 0x7ff8000000000000UL, 0x7ff8000000000000UL, 0xbff0f2eb07023069UL, 0x7ff8000000000000UL, + + ) + + + checkAnswers(::atanh, arguments, answers, false) + } + +} + diff --git a/libraries/tools/kotlin-stdlib-gen/src/generators/math/MathTestsGenerator.kt b/libraries/tools/kotlin-stdlib-gen/src/generators/math/MathTestsGenerator.kt new file mode 100644 index 00000000000..36553683c24 --- /dev/null +++ b/libraries/tools/kotlin-stdlib-gen/src/generators/math/MathTestsGenerator.kt @@ -0,0 +1,114 @@ +package generators.math + +import templates.capitalize +import java.io.File +import java.io.FileWriter +import kotlin.reflect.KCallable + +internal class MathTestsGenerator( + private val outputFile: File, + private val testPoints: List, + private val functions: List +) { + sealed class Model(val exact: Boolean) { + abstract val function: Function<*> + } + class ModelFunction1(override val function: Function1, exact: Boolean = true, val customTestPoint: Double? = null) : Model(exact) + class ModelFunction2(override val function: Function2, exact: Boolean = true) : Model(exact) + + private val doubleSpecialPoints = listOf( + Double.NEGATIVE_INFINITY, + Double.POSITIVE_INFINITY, + Double.MIN_VALUE, + Double.MAX_VALUE, + Double.NaN, + 123456.789123e200, //Just a random point + ) + + private fun mutatePoints(points: List): Sequence = sequence { + for (pt in points) { + yield(pt) + yield(pt + 0.1e-10) + yield(pt - 0.1e-10) + yield(pt * 0.5) + yield(pt / 0.5) + yield(pt * 0.25) + yield(pt / 0.25) + yield(-pt) + yield(-pt + 0.1e-10) + yield(-pt - 0.1e-10) + yield(-pt * 0.5) + yield(-pt / 0.5) + yield(-pt * 0.25) + yield(-pt / 0.25) + } + } + + private fun generatePoints(): Sequence = + doubleSpecialPoints.asSequence() + mutatePoints(testPoints) + + private fun generate2dPoints(): Sequence> = + generatePoints().flatMap { lhsElem -> generatePoints().map { rhsElem -> lhsElem to rhsElem } } + + private fun Double.toULongString() = "0x${toBits().toULong().toString(16)}UL" + + private fun Sequence.toULongVariableList(name: String): String = buildString { + appendLine("val $name = arrayOf(") + this@toULongVariableList.forEachIndexed { i, d -> + append("${d.toULongString()}, ".prependIndent()) + if (i % 4 == 3) appendLine() + } + appendLine() + appendLine(")") + } + + private fun generateTestMethods(): String = buildString { + functions.forEach { model -> + appendLine() + appendLine("@Test") + val function = model.function + val name = (function as KCallable<*>).name + appendLine("fun test${name.capitalize()}() {") + val answers = when (model) { + is ModelFunction1 -> generatePoints().map { arg -> model.function(arg) } + is ModelFunction2 -> generate2dPoints().map { arg -> model.function(arg.first, arg.second) } + } + appendLineWithIndent(answers.toULongVariableList("answers")) + appendLine() + appendLineWithIndent("checkAnswers(::$name, arguments, answers, ${model.exact})") + val specialFunctionPoint = (model as? ModelFunction1)?.customTestPoint + if (specialFunctionPoint != null) { + appendLineWithIndent(mutatePoints(listOf(specialFunctionPoint)).toULongVariableList("specialFunctionPointArguments")) + appendLineWithIndent( + mutatePoints(listOf(specialFunctionPoint)).map(model.function).toULongVariableList("specialFunctionPointResults") + ) + appendLineWithIndent("checkAnswers(::$name, specialFunctionPointArguments, specialFunctionPointResults, ${model.exact})") + } + appendLine("}") + } + } + + + private fun StringBuilder.appendLineWithIndent(string: String) { + appendLine(string.prependIndent()) + } + + private fun FileWriter.writeTestClass() { + appendLine( + """ +class ${outputFile.nameWithoutExtension.capitalize()}Test { +${("private " + generatePoints().toULongVariableList("arguments")).prependIndent()} +${generateTestMethods().prependIndent()} +} + """ + ) + } + + fun generate() { + FileWriter(outputFile).use { writer -> + writer.writeHeader(outputFile) + writer.appendLine() + writer.writeTestClass() + } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-stdlib-gen/src/generators/math/mathTestGeneratorMain.kt b/libraries/tools/kotlin-stdlib-gen/src/generators/math/mathTestGeneratorMain.kt new file mode 100644 index 00000000000..dcb763a3fc8 --- /dev/null +++ b/libraries/tools/kotlin-stdlib-gen/src/generators/math/mathTestGeneratorMain.kt @@ -0,0 +1,151 @@ +package generators.math + +import templates.COPYRIGHT_NOTICE +import templates.autoGeneratedWarning +import templates.readCopyrightNoticeFromProfile +import java.io.File +import java.io.FileWriter +import kotlin.math.* +import kotlin.system.exitProcess + +fun main(args: Array) { + val baseDir: File + when (args.size) { + 1 -> { + baseDir = File(args[0]) + } + else -> { + println("Parameters: - generates sources for std math tests") + exitProcess(1) + } + } + + COPYRIGHT_NOTICE = + readCopyrightNoticeFromProfile { Thread.currentThread().contextClassLoader.getResourceAsStream("apache.xml")!!.reader() } + + generateUtils(baseDir.resolve("mathTestUtils.kt")) + + val trigonometryFunctions = listOf( + MathTestsGenerator.ModelFunction1(::sin), + MathTestsGenerator.ModelFunction1(::cos), + MathTestsGenerator.ModelFunction1(::tan, exact = false), + MathTestsGenerator.ModelFunction1(::asin), + MathTestsGenerator.ModelFunction1(::atan), + MathTestsGenerator.ModelFunction2(::atan2), + MathTestsGenerator.ModelFunction1(::sinh), + MathTestsGenerator.ModelFunction1(::cosh), + MathTestsGenerator.ModelFunction1(::tanh), + MathTestsGenerator.ModelFunction1(::asinh, exact = false), + MathTestsGenerator.ModelFunction1(::acosh, exact = false), + MathTestsGenerator.ModelFunction1(::atanh, exact = false), + ) + MathTestsGenerator( + outputFile = baseDir.resolve("trigonometry.kt"), + testPoints = listOf(0.0, 1.0, PI), + functions = trigonometryFunctions + ).generate() + + //workaround about method with receiver + fun powWrapper(x: Double, y: Double): Double = x.pow(y) + + val powerFunctions = listOf( + MathTestsGenerator.ModelFunction2(::hypot), + MathTestsGenerator.ModelFunction1(::sqrt), + MathTestsGenerator.ModelFunction1(::exp, exact = false), + MathTestsGenerator.ModelFunction1(::expm1), + MathTestsGenerator.ModelFunction2(::log, exact = false), + MathTestsGenerator.ModelFunction1(::ln, exact = false, customTestPoint = E), + MathTestsGenerator.ModelFunction1(::log10, exact = false, customTestPoint = 10.0), + MathTestsGenerator.ModelFunction1(::log2, exact = false, customTestPoint = 2.0), + MathTestsGenerator.ModelFunction1(::ln1p, customTestPoint = E), + MathTestsGenerator.ModelFunction2(::powWrapper, exact = false), + ) + MathTestsGenerator( + outputFile = baseDir.resolve("powers.kt"), + testPoints = listOf(0.0, 1.0), + functions = powerFunctions + ).generate() + + + val roundingFunctions = listOf( + MathTestsGenerator.ModelFunction1(::ceil), + MathTestsGenerator.ModelFunction1(::floor), + MathTestsGenerator.ModelFunction1(::truncate), + MathTestsGenerator.ModelFunction1(::round), + ) + MathTestsGenerator( + outputFile = baseDir.resolve("roundings.kt"), + testPoints = listOf(0.4, 0.5, 0.6, 1.0), + functions = roundingFunctions + ).generate() + +} + +internal fun FileWriter.writeHeader(outputFile: File) { + println("Generating file: $outputFile") + appendLine(COPYRIGHT_NOTICE) + appendLine("package test.math") + appendLine() + appendLine(autoGeneratedWarning("mathTestGeneratorMain.kt")) + appendLine() + appendLine("import kotlin.math.*") + appendLine("import kotlin.test.*") + appendLine() +} + +private fun generateUtils(outputFile: File) { + FileWriter(outputFile).use { writer -> + writer.writeHeader(outputFile) + writer.appendLine() + writer.write(""" + +//workaround about method with receiver +internal fun powWrapper(x: Double, y: Double): Double = x.pow(y) + +private fun getMantissa(d: Double): Double = Double.fromBits(((d.toBits().toULong() and 0x800fffffffffffffUL) or 0x3ff0000000000000UL).toLong()) +private fun getExp(d: Double): Int = (((d.toBits() shr 52) and 0x7FF) - 1023).toInt() + +private fun compare(arg1: Double, arg2: Double?, result1: Double, result2: Double, exact: Boolean = false) { + val difference: Any? = when { + result1.isNaN() -> if (result2.isNaN()) null else result1 + result1.isInfinite() -> if (result2.isInfinite() && result1.sign == result2.sign) null else result1 + result2.isNaN() -> result2 + result2.isInfinite() -> result2 + else -> { + if (exact) { + if (result1.toBits() == result2.toBits()) null else abs(result1 - result2) + } else { + val (toCompare1, toCompare2) = when (getExp(result1) - getExp(result2)) { + 0 -> getMantissa(result1) to getMantissa(result2) + 1 -> getMantissa(result1) to getMantissa(result2) / 2.0 + -1 -> getMantissa(result1) / 2.0 to getMantissa(result2) + else -> result1 to result2 + } + abs(toCompare1 - toCompare2).takeIf { it > 1e-14 } + } + } + } + assertNull(difference, "ARG1 = " + arg1 + (if (arg2 == null) "" else " and ARG2 = " + arg2)) +} + +internal fun checkAnswers(function: Function1, arguments: Array, answers: Array, exact: Boolean) { + arguments.forEachIndexed { i, x -> + val argument1 = Double.fromBits(x.toLong()) + val answer = Double.fromBits(answers[i].toLong()) + compare(argument1, null, answer, function(argument1), exact = exact) + } +} + +internal fun checkAnswers(function: Function2, arguments: Array, answers: Array, exact: Boolean) { + arguments + .flatMap { lhsElem -> arguments.map { rhsElem -> lhsElem to rhsElem } } + .forEachIndexed { i, x -> + val argument1 = Double.fromBits(x.first.toLong()) + val argument2 = Double.fromBits(x.second.toLong()) + val answer = Double.fromBits(answers[i].toLong()) + compare(argument1, argument2, answer, function(argument1, argument2), exact = exact) + } +} + """.trimIndent()) + } +} \ No newline at end of file