All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonTest.co.touchlab.stately.concurrency.LockTest.kt Maven / Gradle / Ivy

package co.touchlab.stately.concurrency

import co.touchlab.testhelp.concurrency.ThreadOperations
import co.touchlab.testhelp.concurrency.sleep
import co.touchlab.testhelp.isMultithreaded
import kotlin.test.Test
import kotlin.test.assertEquals

class LockTest {

    /**
     * Just making sure locks are created. Not really testing the locks.
     */
    @Test
    fun lockWorks() {
        // Don't care about JS
        if (!isMultithreaded) {
            return
        }

        val lock = Lock()
        val aint = AtomicInt(0)

        val ops = ThreadOperations { }
        ops.exe {
            lock.withLock {
                sleep(3000)
                aint.value = 1
            }
        }

        ops.run(1)
        sleep(1000)
        lock.withLock {
            assertEquals(1, aint.value)
            aint.value = 2
        }

        sleep(3000)

        lock.withLock {
            assertEquals(2, aint.value)
        }

        lock.close()
    }

    @Test
    fun lockReentrant() {
        // Don't care about JS
        if (!isMultithreaded) {
            return
        }

        val lock = Lock()

        lock.withLock {
            lock.lock()
            sleep(1000)
            lock.unlock()
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy