gpt4 book ai didi

scala - 简洁但可扩展的 Scala/sbt 测试以验证 Project Euler 答案

转载 作者:行者123 更新时间:2023-12-01 03:51:28 24 4
gpt4 key购买 nike

我正在使用 Project Euler学习 Scala 中的函数式编程,以及 sbt 和其他最佳实践。我最初尝试使用 ScalaTest 创建测试以验证解决方案曾是:

package euler
import org.scalatest._

class SolutionsSpec extends Spec with Matchers {
"The problems" should "have the correct solutions" in {
Problem1.solve should be ( 233168 )
Problem2.solve should be ( 4613732 )
Problem3.solve should be ( 6857 )
Problem4.solve should be ( 906609 )
}
}

这很简洁,但我担心如果我遇到更长的运行时间更难的问题,它可能无法扩展。据我所知,我无法以这种方式测试个别问题。

我在 GitHub 上搜索并找到了两个有用的例子,类似于我想要做的:
  • danielmiladinov/ProjectEuler-Scala
  • todd-cook/Effective-Scala-with-Project-Euler

  • 两者都比我想要的更冗长,因为我基本上只是测试从问题编号到解决方案的映射。

    我的问题 : 是否有一种简洁优雅的方法来进行这种测试,并且仍然灵活,以便我可以检查单个或一组问题的结果?

    编辑 : 我找到了 this answer使用 Project Euler 阻止 TDD。澄清一下,我也在为数学辅助函数编写单元测试。我检查答案的部分目的是检查回归,但最重要的是作为练习。

    编辑 2 :我现在正在尝试使用 FunSuite :
    class SolutionsSuite extends FunSuite with Matchers {
    test("Problem 1") { Problem1.solve should be ( 233168 ) }
    test("Problem 2") { Problem2.solve should be ( 4613732 ) }
    test("Problem 3") { Problem3.solve should be ( 6857 ) }
    test("Problem 4") { Problem4.solve should be ( 906609 ) }
    }

    这可能更接近我想要的。输出看起来更好:
    $ sbt test
    ...
    [info] SolutionsSuite:
    [info] - Problem 1 (28 milliseconds)
    [info] - Problem 2 (4 milliseconds)
    [info] - Problem 3 (38 milliseconds)
    [info] - Problem 4 (172 milliseconds)

    但是我仍然无法弄清楚如何运行问题的一个子集。这个问题似乎表明我正在寻找的东西在 sbt 中是不可能的: Run just a specific scalatest test from sbt .

    编辑 3 :看起来能够运行单个测试功能而不是整个套件的目标是每个问题的 sbt 0.13.3 Allow running of single junit test #911 .

    编辑 4 : 供引用, my Project Euler GitHub project .

    最佳答案

    您可能想在 https://github.com/sethtisue/project-euler 复制我的设置.每个测试看起来像:

    class Problem1 extends Problem(1, "12345") {
    def solve: Int = ...
    }

    其中“12345”是预期答案(始终是字符串),返回类型为 solve可以是任何东西(因为它只会得到 .toString ed,因为字符串是您最终将在 Euler 站点输入的内容)。
    Problem定义为每个问题都是它自己的套件,因此您可以轻松使用 sbt 的 test-only命令只运行你想要的问题。

    关于scala - 简洁但可扩展的 Scala/sbt 测试以验证 Project Euler 答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22314466/

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