我寫了一些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
拋出在編譯時錯誤類型,測試將不能運行。
有無論如何插入一個編譯錯誤的測試?或者編譯錯誤是否正確的測試本身意味着這是一個多餘的檢查(即我試圖做的沒有意義)?
謝謝
重複http://stackoverflow.com/questions/20114298/how-do-i-write-a-scala-unit-test-that-ensures-compliation-fails –