417   val result = code  | 
   417   val result = code  | 
   418   val end = System.nanoTime()  | 
   418   val end = System.nanoTime()  | 
   419   (result, (end - start))  | 
   419   (result, (end - start))  | 
   420 }  | 
   420 }  | 
   421   | 
   421   | 
   422 //size: of a Aregx for testing purposes   | 
   422 //size: of a Rrexp and ARexp for testing purposes   | 
   423 def size(r: Rexp) : Int = r match { | 
   423 def size(r: Rexp) : Int = r match { | 
   424   case ZERO => 1  | 
   424   case ZERO => 1  | 
   425   case ONE => 1  | 
   425   case ONE => 1  | 
   426   case PRED(_,_) => 1  | 
   426   case PRED(_,_) => 1  | 
   427   case SEQ(r1, r2) => 1 + size(r1) + size(r2)  | 
   427   case SEQ(r1, r2) => 1 + size(r1) + size(r2)  | 
   688   | 
   688   | 
   689 println("Partial searching: ") | 
   689 println("Partial searching: ") | 
   690 enum(2, "abc").map(tests_ders_bsimp(strs(1, "abc"))).  | 
   690 enum(2, "abc").map(tests_ders_bsimp(strs(1, "abc"))).  | 
   691   flatten.toSet.flatten.minBy(a => asize(a._1))  | 
   691   flatten.toSet.flatten.minBy(a => asize(a._1))  | 
   692   | 
   692   | 
         | 
   693 // tests about good  | 
         | 
   694 def good (a: ARexp) : Boolean = a match { | 
         | 
   695   case AZERO => false  | 
         | 
   696   case AONE(_) => true  | 
         | 
   697   case APRED(_, _, _) => true  | 
         | 
   698   case AALTS(_, Nil) => false  | 
         | 
   699   case AALTS(_, rs) => rs.forall(good(_))  | 
         | 
   700   case ASEQ(_, r1, r2) => good(r1) & good(r2)  | 
         | 
   701   case ASTAR(_, _) => true  | 
         | 
   702 }  | 
         | 
   703   | 
         | 
   704 def tests_good(r: Rexp) = { | 
         | 
   705   val a = bsimp(internalise(r))  | 
         | 
   706   if  (! good(a) & a != AZERO) { | 
         | 
   707         println(s"Counter-example on ${astring(a)}") | 
         | 
   708         Some(a)    | 
         | 
   709   } else None   | 
         | 
   710 }  | 
         | 
   711   | 
         | 
   712 enum(2, "abc").map(tests_good).toSet  | 
         | 
   713   | 
         | 
   714 val g1 = AALTS(Nil, Nil)  | 
         | 
   715 good(g1)  | 
         | 
   716 good(bsimp(g1))  | 
   693   | 
   717   | 
   694   | 
   718   | 
   695 //tests retrieve and lexing  | 
   719 //tests retrieve and lexing  | 
   696   | 
   720   | 
   697 def tests_retrieve_lex(ss: Set[String])(r: Rexp) = { | 
   721 def tests_retrieve_lex(ss: Set[String])(r: Rexp) = { |