- import kotlin.concurrent.thread
- object MyStructTest {
- @JvmStatic
- private var v2i: MyValueVec2i = MyValueVec2i(1, 2)
- @JvmStatic
- private var c2i: MyClassVec2i = MyClassVec2i(1, 2)
- @JvmStatic
- private var v2f: MyValueVec2f = MyValueVec2f(1f, 2f)
- @JvmStatic
- private var c2f: MyClassVec2f = MyClassVec2f(1f, 2f)
- @JvmStatic
- private var v3i: MyValueVec3i = MyValueVec3i(1, 2, 3)
- @JvmStatic
- private var c3i: MyClassVec3i = MyClassVec3i(1, 2, 3)
- @JvmStatic
- fun main(args: Array<String>) {
- testInline()
- testThread()
- }
- @JvmStatic
- private fun testInline() {
- println("testInline")
- test({ v2i = v2i + v2i - v2i }, { c2i = c2i + c2i - c2i }, "2i")
- test({ v2f = v2f + v2f - v2f }, { c2f = c2f + c2f - c2f }, "2f")
- test({ v3i = v3i + v3i - v3i }, { c3i = c3i + c3i - c3i }, "3i")
- }
- @JvmStatic
- private fun testThread() {
- println("testThread")
- thread { test({ v2i = v2i + v2i - v2i }, { c2i = c2i + c2i - c2i }, "2i") }
- thread { test({ v2f = v2f + v2f - v2f }, { c2f = c2f + c2f - c2f }, "2f") }
- thread { test({ v3i = v3i + v3i - v3i }, { c3i = c3i + c3i - c3i }, "3i") }
- }
- @JvmStatic
- private inline fun test(opValue: () -> Unit, opClass: () -> Unit, suffix: String) {
- val c1 = 10
- val c2 = 10000_0000
- var valueTimes = 0
- var classTimes = 0
- for (i in 0 until c1) {
- val t0 = System.currentTimeMillis()
- for (j in 1..c2) {
- opValue()
- }
- val t1 = System.currentTimeMillis()
- for (j in 1..c2) {
- opClass()
- }
- val t2 = System.currentTimeMillis()
- valueTimes += (t1 - t0).toInt()
- classTimes += (t2 - t1).toInt()
- }
- println("value$suffix: ${valueTimes / c1.toDouble()} class$suffix: ${classTimes / c1.toDouble()}")
- }
- }
复制代码 |