Assertion can be enabled / disabled using JVM's -ea and -da flags #295
scala> class Subject(val name: String, val mark: Int) defined class Subject scala> scala> ///////////////////////////////////////////////////// scala> // Example 1 : Assertion using 'assert()' method #295 scala> ///////////////////////////////////////////////////// scala> def subtract(sub: Subject, mark: Int): Subject = { | val res = if (mark > 0) { | val newMark = sub.mark - mark | println("newMark -> " + newMark) | new Subject(sub.name, newMark) | }else { | sub | } | assert(res.mark >= 0) | res | } subtract: (sub: Subject, mark: Int)Subject scala> val sub = new Subject("english", 50) sub: Subject = $iwC$$iwC$Subject@6752d7fc scala> subtract(sub, 60) newMark -> -10 java.lang.AssertionError: assertion failed at scala.Predef$.assert(Predef.scala:165) scala> ///////////////////////////////////////////////////// scala> // Example 2 : Assertion using 'ensuring()' method scala> ///////////////////////////////////////////////////// scala> def subtract(sub: Subject, mark: Int): Subject = { | if (mark <= 0) { | sub | }else { | val newMark = sub.mark - mark | println("newMark. -> " + newMark) | new Subject(sub.name, newMark) | }ensuring { x => | println("x -> " + x.mark) | x.mark >= 0 | } | } subtract: (sub: Subject, mark: Int)Subject scala> val sub = new Subject("english", 50) sub: Subject = $iwC$$iwC$Subject@503a3c11 scala> subtract(sub, 60) newMark. -> -10 x -> -10 java.lang.AssertionError: assertion failed at scala.Predef$.assert(Predef.scala:165) scala> ///////////////////////////////////////////////////// scala> // Example 3 : Example 2 Simplified scala> ///////////////////////////////////////////////////// scala> def subtract(sub: Subject, mark: Int): Subject = { | if (mark <= 0) { | sub | }else { | val newMark = sub.mark - mark | println("newMark.. -> " + newMark) | new Subject(sub.name, newMark) | }ensuring ( _.mark >= 0) | } subtract: (sub: Subject, mark: Int)Subject scala> scala> val sub = new Subject("english", 50) sub: Subject = $iwC$$iwC$Subject@455e8356 scala> subtract(sub, 60) newMark.. -> -10 java.lang.AssertionError: assertion failed at scala.Predef$.assert(Predef.scala:165) at scala.Predef$Ensuring$.ensuring$extension2(Predef.scala:244)