【发布时间】:2014-07-22 14:49:57
【问题描述】:
我编写了一些 Scala 来使用路径相关类型来处理模运算。父类表示以某个整数为模的组,内部类表示该组的元素。
class ModularInt( modulus : Int ) {
case class Value( value: Int ) {
def plus( a: Value ) : Value = {
val rem: Int = (value + a.toInt) % modulus
if( rem < 0 )
Value(modulus + rem)
else
Value(rem)
}
def toInt = value
}
}
这似乎工作正常(例如模 7:6 + 2 = 1)。
使用路径相关类型的一个很好的副作用是,如果您尝试将它们一起操作,则对不同整数取模的数字会引发类型错误。但是,我想插入一个测试来证实这一事实。
import org.scalatest.FunSuite
import org.junit.runner.RunWith
import org.scalatest.junit.JUnitRunner
@RunWith(classOf[JUnitRunner])
class ModularIntSuite extends FunSuite {
test("a mod n + b mod m => error") {
val n: Int = 3
val m: Int = 4
val modulen = new ModularInt( n )
val modulem = new ModularInt( m )
val a = new modulen.Value(0)
val b = new modulem.Value(0)
assert(a plus b) // catch error here
}
}
但是,由于a plus b 在编译时抛出类型错误,测试甚至不会运行。
是否有为编译错误插入测试?或者编译错误本身就是正确性测试这一事实是否意味着这是一个冗余检查(即我试图做的事情没有意义)?
谢谢
【问题讨论】:
标签: scala scalatest path-dependent-type