| 153 |      1 | 
 | 
|  |      2 | import scala.concurrent._
 | 
|  |      3 | import scala.concurrent.duration._
 | 
|  |      4 | import ExecutionContext.Implicits.global
 | 
|  |      5 | import scala.language.postfixOps 
 | 
|  |      6 | import scala.language.reflectiveCalls
 | 
|  |      7 | 
 | 
|  |      8 | 
 | 
|  |      9 | 
 | 
|  |     10 | lazy val f = Future {
 | 
|  |     11 |   import CW8a._
 | 
|  |     12 | 
 | 
|  |     13 |   val EVIL_urban = SEQ(STAR(STAR(CHAR('a'))), CHAR('b'))
 | 
|  |     14 | 
 | 
|  |     15 |   //println("1")
 | 
|  |     16 |   assert(ders(List.fill(5)('a'), EVIL_urban) == SEQ(SEQ(STAR(CHAR('a')),STAR(STAR(CHAR('a')))),CHAR('b')))
 | 
|  |     17 |   //println("2")
 | 
|  |     18 |   assert(ders(List('b'), EVIL_urban) == ONE)
 | 
|  |     19 |   //println("3")
 | 
|  |     20 |   assert(ders(List('b','b'), EVIL_urban) == ZERO)
 | 
|  |     21 |   //println("4")
 | 
|  |     22 |   assert(matcher(EVIL_urban, "a" * 5 ++ "b") == true)
 | 
|  |     23 |   //println("5")
 | 
|  |     24 |   assert(matcher(EVIL_urban, "b") == true)
 | 
|  |     25 |   //println("6") 
 | 
|  |     26 |   assert(matcher(EVIL_urban, "bb") == false)
 | 
|  |     27 |   //println("7")
 | 
|  |     28 |   assert(matcher("abc", "abc") == true)
 | 
|  |     29 |   //println("8")
 | 
|  |     30 |   assert(matcher(("ab" | "a") ~ (ONE | "bc"), "abc") == true)
 | 
|  |     31 |   //println("9")
 | 
|  |     32 |   assert(matcher(ONE, "") == true)
 | 
|  |     33 |   //println("10")
 | 
|  |     34 |   assert(matcher(ZERO, "") == false)
 | 
|  |     35 |   //println("11")
 | 
|  |     36 |   assert(matcher(ONE | CHAR('a'), "") == true)
 | 
|  |     37 |   //println("12")
 | 
|  |     38 |   assert(matcher(ONE | CHAR('a'), "a") == true)
 | 
|  |     39 | }
 | 
|  |     40 | 
 | 
|  |     41 | Await.result(f, 90 second)
 |