Files
kotlin-fork/js/js.translator/testData/box/number/constantPropagation.kt
T
2019-12-06 05:37:09 +03:00

290 lines
9.4 KiB
Kotlin
Vendored

// EXPECTED_REACHABLE_NODES: 1454
// MODULE: lib1
// FILE: lib1.kt
package foo
// PROPERTY_READ_COUNT: name=longValue count=4 scope=testLongVal
// PROPERTY_READ_COUNT: name=L23 count=2 scope=testLongVal
// PROPERTY_READ_COUNT: name=L_23 count=2 scope=testLongVal
// PROPERTY_READ_COUNT: name=L46 count=1 scope=testLongVal
fun testLongVal() {
val longValue = 23L
val longValueCopy = longValue
assertEquals(23L, longValueCopy)
val minusLongValue = -longValue
assertEquals(-23L, minusLongValue)
val minusLongValueParenthesized = -(longValue)
assertEquals(-23L, minusLongValueParenthesized)
val twiceLongValue = 2 * longValue
assertEquals(46L, twiceLongValue)
}
private const val privateLongConst = 10 * 10L
internal const val internalLongConst = 10 * 100L
const val longConst = 42L
// PROPERTY_READ_COUNT: name=privateLongConst count=1 scope=testLongConst
// PROPERTY_READ_COUNT: name=L100 count=1 scope=testLongConst
// PROPERTY_READ_COUNT: name=internalLongConst count=1 scope=testLongConst
// PROPERTY_READ_COUNT: name=L1000 count=1 scope=testLongConst
// PROPERTY_READ_COUNT: name=longConst count=1 scope=testLongConst
// PROPERTY_READ_COUNT: name=L42 count=1 scope=testLongConst
// PROPERTY_READ_COUNT: name=L_42 count=4 scope=testLongConst
// PROPERTY_READ_COUNT: name=L84 count=2 scope=testLongConst
fun testLongConst() {
assertEquals(100L, privateLongConst)
assertEquals(1000L, internalLongConst)
val longConstCopy = longConst
assertEquals(42L, longConstCopy)
val minusLongConst = -longConst
assertEquals(-42L, minusLongConst)
val minusLongConstParenthesized = -(longConst)
assertEquals(-42L, minusLongConstParenthesized)
val twiceLongConst = 2 * longConst
assertEquals(84L, twiceLongConst)
}
// PROPERTY_READ_COUNT: name=Long$Companion$MAX_VALUE count=2 scope=testLongMaxMinValue
// PROPERTY_READ_COUNT: name=L_9223372036854775807 count=2 scope=testLongMaxMinValue
// PROPERTY_READ_COUNT: name=Long$Companion$MIN_VALUE count=4 scope=testLongMaxMinValue
fun testLongMaxMinValue() {
val longMaxValue = Long.MAX_VALUE
assertEquals(9223372036854775807L, longMaxValue)
val minusLongMaxValue = -Long.MAX_VALUE
assertEquals(-9223372036854775807L, minusLongMaxValue)
val longMinValue = Long.MIN_VALUE
assertEquals(-9223372036854775807L - 1L, longMinValue)
val minusLongMinValue = -Long.MIN_VALUE
assertEquals(-9223372036854775807L - 1L, minusLongMinValue)
}
// PROPERTY_READ_COUNT: name=intValue count=4 scope=testIntVal
fun testIntVal() {
val intValue = 23
val intValueCopy = intValue
assertEquals(23, intValueCopy)
val minusIntValue = -intValue
assertEquals(-23, minusIntValue)
val minusIntValueParenthesized = -(intValue)
assertEquals(-23, minusIntValueParenthesized)
val twiceIntValue = 2 * intValue
assertEquals(46, twiceIntValue)
}
const val intConst = 42
// PROPERTY_NOT_READ_FROM: intConst scope=testIntConst
fun testIntConst() {
val intConstCopy = intConst
assertEquals(42, intConstCopy)
val minusIntConst = -intConst
assertEquals(-42, minusIntConst)
val minusIntConstParenthesized = -(intConst)
assertEquals(-42, minusIntConstParenthesized)
val twiceIntConst = 2 * intConst
assertEquals(84, twiceIntConst)
}
// PROPERTY_NOT_READ_FROM: MAX_VALUE scope=testIntMaxMinValue
// PROPERTY_NOT_READ_FROM: MIN_VALUE scope=testIntMaxMinValue
fun testIntMaxMinValue() {
val intMaxValue = Int.MAX_VALUE
assertEquals(2147483647, intMaxValue)
val minusIntMaxValue = -Int.MAX_VALUE
assertEquals(-2147483647, minusIntMaxValue)
val intMinValue = Int.MIN_VALUE
assertEquals(-2147483648, intMinValue)
val minusIntMinValue = -Int.MIN_VALUE
assertEquals(-2147483648, minusIntMinValue)
}
const val bigLongConst = 123456789012345L
// PROPERTY_READ_COUNT: name=longConst count=1 scope=testImportedLongConstInlineFunLib1
// PROPERTY_READ_COUNT: name=bigLongConst count=1 scope=testImportedLongConstInlineFunLib1
inline fun testImportedLongConstInlineFunLib1() {
val longConstCopy = longConst
assertEquals(42L, longConstCopy)
val minusLongConst = -longConst
assertEquals(-42L, minusLongConst)
val minusLongConstParenthesized = -(longConst)
assertEquals(-42L, minusLongConstParenthesized)
val twiceLongConst = 2 * longConst
assertEquals(84L, twiceLongConst)
val bigLongConstCopy = bigLongConst
assertEquals(123456789012345L, bigLongConstCopy)
}
// PROPERTY_READ_COUNT: name=longConst count=1 scope=testImportedLongConstInlinedLocally
// PROPERTY_READ_COUNT: name=L42 count=1 scope=testImportedLongConstInlinedLocally
// PROPERTY_READ_COUNT: name=L_42 count=4 scope=testImportedLongConstInlinedLocally
// PROPERTY_READ_COUNT: name=L84 count=2 scope=testImportedLongConstInlinedLocally
// PROPERTY_READ_COUNT: name=bigLongConst count=1 scope=testImportedLongConstInlinedLocally
// PROPERTY_READ_COUNT: name=L123456789012345 count=1 scope=testImportedLongConstInlinedLocally
private fun testImportedLongConstInlinedLocally() {
testImportedLongConstInlineFunLib1()
}
class A {
companion object {
private const val a = 10L
const val b = 20L
}
fun testCompanion() {
assertEquals(10L, a)
assertEquals(20L, b)
}
}
fun testCompanionVal() {
A().testCompanion()
}
fun testLib1() {
testLongVal()
testLongConst()
testLongMaxMinValue()
testIntVal()
testIntConst()
testIntMaxMinValue()
testImportedLongConstInlinedLocally()
testCompanionVal()
}
// MODULE: lib2(lib1)
// FILE: lib2.kt
package foo
// PROPERTY_NOT_READ_FROM: $module$lib1.foo.longConst
// PROPERTY_READ_COUNT: name=longConst count=1 scope=testImportedLongConst
// PROPERTY_READ_COUNT: name=L42 count=1 scope=testImportedLongConst
// PROPERTY_READ_COUNT: name=L_42 count=4 scope=testImportedLongConst
// PROPERTY_READ_COUNT: name=L84 count=2 scope=testImportedLongConst
// PROPERTY_READ_COUNT: name=bigLongConst count=1 scope=testImportedLongConst
// PROPERTY_READ_COUNT: name=L123456789012345 count=1 scope=testImportedLongConst
fun testImportedLongConst() {
val longConstCopy = longConst
assertEquals(42L, longConstCopy)
val minusLongConst = -longConst
assertEquals(-42L, minusLongConst)
val minusLongConstParenthesized = -(longConst)
assertEquals(-42L, minusLongConstParenthesized)
val twiceLongConst = 2 * longConst
assertEquals(84L, twiceLongConst)
val bigLongConstCopy = bigLongConst
assertEquals(123456789012345L, bigLongConstCopy)
}
// PROPERTY_READ_COUNT: name=longConst count=1 scope=testImportedLongConstInlineFun
// PROPERTY_READ_COUNT: name=bigLongConst count=1 scope=testImportedLongConstInlineFun
inline fun testImportedLongConstInlineFun() {
val longConstCopy = longConst
assertEquals(42L, longConstCopy)
val minusLongConst = -longConst
assertEquals(-42L, minusLongConst)
val minusLongConstParenthesized = -(longConst)
assertEquals(-42L, minusLongConstParenthesized)
val twiceLongConst = 2 * longConst
assertEquals(84L, twiceLongConst)
val bigLongConstCopy = bigLongConst
assertEquals(123456789012345L, bigLongConstCopy)
}
// PROPERTY_READ_COUNT: name=longConst count=1 scope=testImportedLongConstInlinedLocally
// PROPERTY_READ_COUNT: name=L42 count=1 scope=testImportedLongConstInlinedLocally
// PROPERTY_READ_COUNT: name=L_42 count=4 scope=testImportedLongConstInlinedLocally
// PROPERTY_READ_COUNT: name=L84 count=2 scope=testImportedLongConstInlinedLocally
// PROPERTY_READ_COUNT: name=bigLongConst count=1 scope=testImportedLongConstInlinedLocally
// PROPERTY_READ_COUNT: name=L123456789012345 count=1 scope=testImportedLongConstInlinedLocally
fun testImportedLongConstInlinedLocally() {
testImportedLongConstInlineFun()
}
// PROPERTY_READ_COUNT: name=longConst count=1 scope=testImportedLongConstInlinedLocallyFromOtherModule
// PROPERTY_READ_COUNT: name=L42 count=1 scope=testImportedLongConstInlinedLocallyFromOtherModule
// PROPERTY_READ_COUNT: name=L_42 count=4 scope=testImportedLongConstInlinedLocallyFromOtherModule
// PROPERTY_READ_COUNT: name=L84 count=2 scope=testImportedLongConstInlinedLocallyFromOtherModule
// PROPERTY_READ_COUNT: name=bigLongConst count=1 scope=testImportedLongConstInlinedLocallyFromOtherModule
// PROPERTY_READ_COUNT: name=L123456789012345 count=1 scope=testImportedLongConstInlinedLocallyFromOtherModule
private fun testImportedLongConstInlinedLocallyFromOtherModule() {
testImportedLongConstInlineFunLib1()
}
fun testLib2() {
testLib1()
testImportedLongConst()
testImportedLongConstInlinedLocallyFromOtherModule()
assertEquals(20L, A.b)
}
// MODULE: main(lib2)
// FILE: main.kt
package foo
// PROPERTY_READ_COUNT: name=longConst count=1 scope=testImportedLongConstInlinedFromOtherModule
// PROPERTY_READ_COUNT: name=L42 count=1 scope=testImportedLongConstInlinedFromOtherModule
// PROPERTY_READ_COUNT: name=L_42 count=4 scope=testImportedLongConstInlinedFromOtherModule
// PROPERTY_READ_COUNT: name=L84 count=2 scope=testImportedLongConstInlinedFromOtherModule
// PROPERTY_READ_COUNT: name=bigLongConst count=1 scope=testImportedLongConstInlinedFromOtherModule
// PROPERTY_READ_COUNT: name=L123456789012345 count=1 scope=testImportedLongConstInlinedFromOtherModule
fun testImportedLongConstInlinedFromOtherModule() {
testImportedLongConstInlineFun()
}
fun box(): String {
testLib2()
testImportedLongConstInlinedLocally()
testImportedLongConstInlinedFromOtherModule()
return "OK"
}