diff --git a/testcases/Prime.scala b/testcases/Prime.scala new file mode 100644 index 0000000000000000000000000000000000000000..11a9f181bba828859c104435433b159aa76e40b8 --- /dev/null +++ b/testcases/Prime.scala @@ -0,0 +1,51 @@ +object Prime { + // an attempt at defining isPrime in PureScala... + + // for positive numbers only + def isPrime(i : Int) : Boolean = { + (i >= 2 && noneDivides(2, i)) + } + + def noneDivides(start : Int, number : Int) : Boolean = { + if(start == number) { + true + } else { + !divides(start, number) && noneDivides(start + 1, number) + } + } + + // for positive numbers only + def divides(i : Int, j : Int) : Boolean = { + val result = i == j || (i < j && ((j / i) * i == j)) + result + } + + // no a problem + def allTheseArePrime() : Boolean = { + isPrime(2) && isPrime(31) && isPrime(2) && isPrime(17) && isPrime(53) + } ensuring(res => res) + + // Can't seem to get that one to work in reasonable time + // def findTwoLargePrimes(x : Int, y : Int) : Boolean = { + // x > 200 && y > x && isPrime(x) && isPrime(y) + // } ensuring(res => !res) + + // Seems to work with lucky tests only :) + def findLargePrime(x : Int) : Boolean = { + x > 200 && isPrime(x) + } ensuring(res => !res) + + // Just for testing. + def main(args : Array[String]) : Unit = { + def test(n : Int) : Unit = { + println("Is " + n + " prime ? -> " + isPrime(n)) + } + test(119) + test(31) + test(1) + test(2) + test(0) + + println(allTheseArePrime) + } +}