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)