gpt4 book ai didi

scala - 测试以确保两个函数同时运行?

转载 作者:行者123 更新时间:2023-12-01 11:13:39 25 4
gpt4 key购买 nike

假设我有一个函数 runConcurrently(f1: Int => Int, f2: Int => Int): (Int, Int) 返回 f1 的结果> 和 f2

现在我想编写一个测试来确保 f1f2runConcurrentlyconcurrently 运行> 被调用。我想让测试具有确定性并尽可能高效。

您建议如何编写测试?

附言我不想将它与任何特定的测试框架或库结合使用。唯一的依赖应该是 Scala/Java SDK。

最佳答案

最接近的做法是使用两个函数都使用的某种共享条件:

def runConcurrently(f1: => Int, f2: => Int): Future[(Int, Int)] = 
Future(f1) zip Future(f2)

val sem1 = new Semaphore(0)
val sem2 = new Semaphore(0)

def f1 = {
sem1.release
sem2.acquire
1
}

def f2 = {
sem2.release
sem1.acquire
2
}

Await.result(runConcurrently(f1, f2), 1 second) shouldBe (1,2)

这个想法是,至少在另一个函数开始之前,这两个函数都不能完成。因此,按顺序运行它们的尝试将永远不会完成,并且您将超时。

特别是,如果您尝试使用单线程执行上下文运行此代码,它将失败。

关于scala - 测试以确保两个函数同时运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56306825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com