diff options
Diffstat (limited to 'tcllib/modules/struct/graph/tests/deserialize.test')
-rw-r--r-- | tcllib/modules/struct/graph/tests/deserialize.test | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/tcllib/modules/struct/graph/tests/deserialize.test b/tcllib/modules/struct/graph/tests/deserialize.test new file mode 100644 index 0000000..b6cc895 --- /dev/null +++ b/tcllib/modules/struct/graph/tests/deserialize.test @@ -0,0 +1,209 @@ +# -*- tcl -*- +# Graph tests - deserialize +# Copyright (c) 2006 Andreas Kupries <andreas_kupries@users.sourceforge.net> +# All rights reserved. +# RCS: @(#) $Id: deserialize.test,v 1.3 2008/10/11 23:23:48 andreas_kupries Exp $ + +# Syntax: graph deserialize SERIALIZATION + +# ------------------------------------------------------------------------- +# Wrong # args: Missing, Too many + +test graph-${impl}-${setimpl}-deserialize-1.0 {deserialize, wrong #args, missing} { + SETUP + catch {mygraph deserialize} result + mygraph destroy + set result +} [tmWrong deserialize serial 0] + +test graph-${impl}-${setimpl}-deserialize-1.1 {deserialize, wrong #args, to many} { + SETUP + catch {mygraph deserialize foo bar} result + mygraph destroy + set result +} [tmTooMany deserialize serial] + +# ------------------------------------------------------------------------- +# Logical arguments checks and failures + +test graph-${impl}-${setimpl}-deserialize-2.0 {deserialize, incorrect length} { + SETUP + set serial {. %3 {} {{f 6 {}}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data foo}} + set fail [catch {mygraph deserialize $serial} result] + mygraph destroy + list $fail $result +} {1 {error in serialization: list length not 1 mod 3.}} + +test graph-${impl}-${setimpl}-deserialize-2.1 {deserialize, attributes, graph, !dict} { + SETUP + set serial {%3 {} {{f 6 {}}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data . foo}} + set fail [catch {mygraph deserialize $serial} result] + mygraph destroy + list $fail $result +} {1 {error in serialization: malformed graph attribute dictionary.}} + +test graph-${impl}-${setimpl}-deserialize-2.2 {deserialize, attributes, node, !dict} { + SETUP + set serial {%3 {.} {{f 6 {}}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data foo}} + set fail [catch {mygraph deserialize $serial} result] + mygraph destroy + list $fail $result +} {1 {error in serialization: malformed node attribute dictionary.}} + +test graph-${impl}-${setimpl}-deserialize-2.3 {deserialize, attributes, arc, !dict} { + SETUP + set serial {%3 {} {{f 6 {.}}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data foo}} + set fail [catch {mygraph deserialize $serial} result] + mygraph destroy + list $fail $result +} {1 {error in serialization: malformed arc attribute dictionary.}} + +test graph-${impl}-${setimpl}-deserialize-2.4 {deserialize, duplicate arcs} { + SETUP + set serial {%3 {} {{a 6 {}}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data foo}} + set fail [catch {mygraph deserialize $serial} result] + mygraph destroy + list $fail $result +} {1 {error in serialization: duplicate definition of arc "a".}} + +test graph-${impl}-${setimpl}-deserialize-2.5 {deserialize, non-numeric node-reference} { + SETUP + set serial {%3 {} {{f . {}}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data foo}} + set fail [catch {mygraph deserialize $serial} result] + mygraph destroy + list $fail $result +} {1 {error in serialization: bad arc destination reference ".".}} + +test graph-${impl}-${setimpl}-deserialize-2.6 {deserialize, incorrect node-reference, not 0 mod 3} { + SETUP + set serial {%3 {} {{f 2 {}}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data foo}} + set fail [catch {mygraph deserialize $serial} result] + mygraph destroy + list $fail $result +} {1 {error in serialization: bad arc destination reference "2".}} + +test graph-${impl}-${setimpl}-deserialize-2.7 {deserialize, out-of-range node-reference, lower bound} { + SETUP + set serial {%3 {} {{f -2 {}}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data foo}} + set fail [catch {mygraph deserialize $serial} result] + mygraph destroy + list $fail $result +} {1 {error in serialization: bad arc destination reference "-2".}} + +test graph-${impl}-${setimpl}-deserialize-2.8 {deserialize, out-of-range node-reference, upper bound} { + SETUP + set serial {%3 {} {{f 14 {}}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data foo}} + set fail [catch {mygraph deserialize $serial} result] + mygraph destroy + list $fail $result +} {1 {error in serialization: bad arc destination reference "14".}} + +test graph-${impl}-${setimpl}-deserialize-2.9 {deserialize, duplicate nodes} { + SETUP + set serial {%1 {foo bar} {{a 3 {}} {c 6 {}}} %1 {} {} %3 {} {{f 3 {}}} {data foo}} + set fail [catch {mygraph deserialize $serial} result] + mygraph destroy + list $fail $result +} {1 {error in serialization: duplicate node names.}} + +test graph-${impl}-${setimpl}-deserialize-2.10 {deserialize, wrong arc information length, missing} { + SETUP + set serial {%3 {} {{f 6}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data foo}} + set fail [catch {mygraph deserialize $serial} result] + mygraph destroy + list $fail $result +} {1 {error in serialization: arc information length not 3 or 4.}} + +test graph-${impl}-${setimpl}-deserialize-2.11 {deserialize, wrong arc information length, too many} { + SETUP + set serial {%3 {} {{f 6 {. .} _weight_ toomuch}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data foo}} + set fail [catch {mygraph deserialize $serial} result] + mygraph destroy + list $fail $result +} {1 {error in serialization: arc information length not 3 or 4.}} + +# ------------------------------------------------------------------------- +# Ok arguments. + +test graph-${impl}-${setimpl}-deserialize-3.0 {deserialize, empty graph} { + SETUP + set serial {{}} + mygraph deserialize $serial + set result [validate_serial mygraph $serial] + mygraph destroy + set result +} ok + +test graph-${impl}-${setimpl}-deserialize-3.1 {deserialize} { + SETUP + + # Our check of the success of the deserialize + # is to validate the generated graph against the + # serialized data. + + set serial {%3 {} {{f 6 {}}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data foo}} + + set result [list] + lappend result [validate_serial mygraph $serial] + + mygraph deserialize $serial + lappend result [validate_serial mygraph $serial] + + mygraph destroy + set result +} {attr/graph/data-mismatch ok} + +test graph-${impl}-${setimpl}-deserialize-3.2 {deserialize} { + SETUP + + # Our check of the success of the deserialize + # is to validate the generated graph against the + # serialized data. + + # Applying to serialization one after the + # other. Checking that the second operation + # completely squashes the data from the first. + + set seriala {%3 {} {{f 6 {}}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data foo}} + set serialb {%0 {foo bar} {{a 3 {}} {c 6 {}}} %1 {} {} %3 {} {{f 3 {}}} {data foo}} + + set result [list] + lappend result [validate_serial mygraph $seriala] + lappend result [validate_serial mygraph $serialb] + + mygraph deserialize $seriala + lappend result [validate_serial mygraph $seriala] + lappend result [validate_serial mygraph $serialb] + + mygraph deserialize $serialb + lappend result [validate_serial mygraph $seriala] + lappend result [validate_serial mygraph $serialb] + + mygraph destroy + set result +} [list \ + attr/graph/data-mismatch attr/graph/data-mismatch \ + ok nodes/mismatch/#nodes \ + arc/b/unknown ok] + + +test graph-${impl}-${setimpl}-deserialize-3.3 {deserialize, weights} { + SETUP + + # Our check of the success of the deserialize + # is to validate the generated graph against the + # serialized data. + + set serial {%3 {} {{f 6 {}}} %0 {foo bar} {{a 6 {} 333} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {} 888}} %2 {} {{e 0 {}}} {data foo}} + + set result [list] + lappend result [validate_serial mygraph $serial] + + mygraph deserialize $serial + lappend result [validate_serial mygraph $serial] + + mygraph destroy + set result +} {attr/graph/data-mismatch ok} + +# ------------------------------------------------------------------------- |