필자는 경로 종속 형식을 사용하여 모듈러 산술로 작업하기 위해 스칼라를 작성했습니다. 부모 클래스는 정수를 모듈로 한 그룹을 나타내며 내부 클래스는이 그룹의 요소를 나타냅니다.스칼라 경로 종속 형식 : 형식 오류에 대한 테스트
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).
경로 의존형을 사용할 때의 좋은 효과는 함께 작동 시키려고하면 다른 정수가 모듈화 된 정수가 유형 오류를 발생한다는 것입니다. 그러나이 사실을 확인하는 테스트를 삽입하고 싶습니다. a plus b
는 컴파일 타임에 유형 오류가 발생으로
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
}
}
그러나, 테스트도 실행되지 않습니다.
어쨌든 컴파일 오류에 대한 테스트를 삽입 하시겠습니까? 또는 컴파일 오류가 정확성 테스트라는 사실 자체가 중복 체크임을 의미합니까 (즉, 내가하려는 것은 의미가 없습니다)?
감사합니다.
중복 된 http://stackoverflow.com/questions/20114298/how-do-i-write-a-scala-unit-test-that-ensures-compliation-fails –