File: src/stringlattice.ml (return to index)



Statistics:  
kind coverage
binding 2 / 2 (100%)
sequence 0 / 0 (-%)
for 0 / 0 (-%)
if/then 4 / 4 (100%)
try 0 / 0 (-%)
while 0 / 0 (-%)
match/function 29 / 30 (96%)
kind coverage
class expression 0 / 0 (-%)
class initializer 0 / 0 (-%)
class method 0 / 0 (-%)
class value 0 / 0 (-%)
toplevel expression 0 / 0 (-%)
lazy operator 0 / 0 (-%)



Source:

fold all unfold all
000001| (** Abstract string datatype and operations *)
000002|  
000003| type elem =
000004|   | Bot
000005|   | Const of string
000006|   | Top
000007|  
000008| (*  eq : elem -> elem -> bool  *)
000009| let eq (a:elem) a' = (*[745613]*)a = a'
000010|  
000011| (*  leq : elem -> elem -> bool  *)
000012| let leq s s' = match s,s' with
000013|   | Bot,_ -> (*[25569135]*)true
000014|   | _,Bot -> (*[699621]*)false
000015|   | _,Top -> (*[16404435]*)true
000016|   | Top,_ -> (*[0]*)false
000017|   | Const c, Const c' -> (*[15992524]*)c=c'
000018|  
000019| (*  join : elem -> elem -> elem  *)
000020| let join s s' = match s,s' with
000021|   | Bot,_ -> (*[10641574]*)s'
000022|   | _,Bot -> (*[612814]*)s
000023|   | Top,_ -> (*[7069584]*)Top
000024|   | _,Top -> (*[439334]*)Top
000025|   | Const c, Const c' -> (*[6658812]*)if c=c' then (*[6508467]*)s else (*[150345]*)Top
000026|  
000027| (*  meet : elem -> elem -> elem  *)
000028| let meet s s' = match s,s' with
000029|   | Bot,_ -> (*[1792629]*)Bot
000030|   | _,Bot -> (*[503732]*)Bot
000031|   | Top,_ -> (*[710345]*)s'
000032|   | _,Top -> (*[162613]*)s
000033|   | Const c, Const c' -> (*[668290]*)if c=c' then (*[596871]*)s else (*[71419]*)Bot
000034|  
000035| (* const : string -> elem  *)
000036| let const s = (*[25708484]*)Const s
000037|  
000038| (*  bot : elem  *)
000039| let bot = (*[1]*)Bot
000040|  
000041| (*  top : elem  *)
000042| let top = (*[1]*)Top
000043|  
000044| (*  upper : elem -> elem *)
000045| let upper s = match s with
000046|   | Bot -> (*[6060]*)Bot
000047|   | Top -> (*[7833]*)Top
000048|   | Const c -> (*[3047]*)Const (String.uppercase c)
000049|  
000050| (*  lower : elem -> elem *)
000051| let lower s = match s with
000052|   | Bot -> (*[5923]*)Bot
000053|   | Top -> (*[7917]*)Top
000054|   | Const c -> (*[3174]*)Const (String.lowercase c)
000055|  
000056| (*  concat : elem -> elem -> elem *)
000057| let concat s s' = match s,s' with
000058|   | Bot,_ -> (*[5894]*)Bot
000059|   | _,Bot -> (*[3884]*)Bot
000060|   | Top,_ -> (*[8680]*)Top
000061|   | _,Top -> (*[1684]*)Top
000062|   | Const c, Const c' -> (*[1985]*)Const (c ^ c')
000063|  
000064| (*  empty : elem -> bool  *)
000065| let empty s = (*[5000]*)s = Bot
000066|  
000067| (*  nonempty : elem -> bool  *)
000068| let nonempty s = (*[45380]*)s <> Bot
000069|  
000070|  
000071| (** {3 Pretty printing routine } *)
000072|  
000073| (*  to_string : elem -> unit  *)
000074| let to_string s = match s with
000075|   | Bot     -> "Bot"
000076|   | Const c -> "Const \"" ^ c ^ "\""
000077|   | Top     -> "Top"
000078|  
000079| (*  pprint : elem -> unit  *)
000080| let pprint s = match s with
000081|   | Bot     -> Format.printf "Bot"
000082|   | Const c -> Format.printf "Const \"%s\"" c
000083|   | Top     -> Format.printf "Top"

Legend:
   some code - line containing no point
   some code - line containing only visited points
   some code - line containing only unvisited points
   some code - line containing both visited and unvisited points