def test_wrong_release(self):
        lock = SemLock()
        with self.assertRaisesRegexp(Exception, "release unlocked lock"):
            lock.release()

        lock.acquire()
        lock.release()

        with self.assertRaisesRegexp(Exception, "release unlocked lock"):
            lock.release()
    def test_acquire(self):
        lock = SemLock()
        lock.acquire()
        t1 = threading.Thread(target=lock.acquire)
        t1.start()

        t2 = threading.Thread(target=lock.acquire)
        t2.start()

        time.sleep(1)
        lock.release()
        time.sleep(1)
        lock.release()

        t1.join()
        t2.join()