1# -*- tcl -*- 2# Graph tests - deserialize 3# Copyright (c) 2006 Andreas Kupries <andreas_kupries@users.sourceforge.net> 4# All rights reserved. 5# RCS: @(#) $Id: deserialize.test,v 1.3 2008/10/11 23:23:48 andreas_kupries Exp $ 6 7# Syntax: graph deserialize SERIALIZATION 8 9# ------------------------------------------------------------------------- 10# Wrong # args: Missing, Too many 11 12test graph-${impl}-${setimpl}-deserialize-1.0 {deserialize, wrong #args, missing} { 13 SETUP 14 catch {mygraph deserialize} result 15 mygraph destroy 16 set result 17} [tmWrong deserialize serial 0] 18 19test graph-${impl}-${setimpl}-deserialize-1.1 {deserialize, wrong #args, to many} { 20 SETUP 21 catch {mygraph deserialize foo bar} result 22 mygraph destroy 23 set result 24} [tmTooMany deserialize serial] 25 26# ------------------------------------------------------------------------- 27# Logical arguments checks and failures 28 29test graph-${impl}-${setimpl}-deserialize-2.0 {deserialize, incorrect length} { 30 SETUP 31 set serial {. %3 {} {{f 6 {}}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data foo}} 32 set fail [catch {mygraph deserialize $serial} result] 33 mygraph destroy 34 list $fail $result 35} {1 {error in serialization: list length not 1 mod 3.}} 36 37test graph-${impl}-${setimpl}-deserialize-2.1 {deserialize, attributes, graph, !dict} { 38 SETUP 39 set serial {%3 {} {{f 6 {}}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data . foo}} 40 set fail [catch {mygraph deserialize $serial} result] 41 mygraph destroy 42 list $fail $result 43} {1 {error in serialization: malformed graph attribute dictionary.}} 44 45test graph-${impl}-${setimpl}-deserialize-2.2 {deserialize, attributes, node, !dict} { 46 SETUP 47 set serial {%3 {.} {{f 6 {}}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data foo}} 48 set fail [catch {mygraph deserialize $serial} result] 49 mygraph destroy 50 list $fail $result 51} {1 {error in serialization: malformed node attribute dictionary.}} 52 53test graph-${impl}-${setimpl}-deserialize-2.3 {deserialize, attributes, arc, !dict} { 54 SETUP 55 set serial {%3 {} {{f 6 {.}}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data foo}} 56 set fail [catch {mygraph deserialize $serial} result] 57 mygraph destroy 58 list $fail $result 59} {1 {error in serialization: malformed arc attribute dictionary.}} 60 61test graph-${impl}-${setimpl}-deserialize-2.4 {deserialize, duplicate arcs} { 62 SETUP 63 set serial {%3 {} {{a 6 {}}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data foo}} 64 set fail [catch {mygraph deserialize $serial} result] 65 mygraph destroy 66 list $fail $result 67} {1 {error in serialization: duplicate definition of arc "a".}} 68 69test graph-${impl}-${setimpl}-deserialize-2.5 {deserialize, non-numeric node-reference} { 70 SETUP 71 set serial {%3 {} {{f . {}}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data foo}} 72 set fail [catch {mygraph deserialize $serial} result] 73 mygraph destroy 74 list $fail $result 75} {1 {error in serialization: bad arc destination reference ".".}} 76 77test graph-${impl}-${setimpl}-deserialize-2.6 {deserialize, incorrect node-reference, not 0 mod 3} { 78 SETUP 79 set serial {%3 {} {{f 2 {}}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data foo}} 80 set fail [catch {mygraph deserialize $serial} result] 81 mygraph destroy 82 list $fail $result 83} {1 {error in serialization: bad arc destination reference "2".}} 84 85test graph-${impl}-${setimpl}-deserialize-2.7 {deserialize, out-of-range node-reference, lower bound} { 86 SETUP 87 set serial {%3 {} {{f -2 {}}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data foo}} 88 set fail [catch {mygraph deserialize $serial} result] 89 mygraph destroy 90 list $fail $result 91} {1 {error in serialization: bad arc destination reference "-2".}} 92 93test graph-${impl}-${setimpl}-deserialize-2.8 {deserialize, out-of-range node-reference, upper bound} { 94 SETUP 95 set serial {%3 {} {{f 14 {}}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data foo}} 96 set fail [catch {mygraph deserialize $serial} result] 97 mygraph destroy 98 list $fail $result 99} {1 {error in serialization: bad arc destination reference "14".}} 100 101test graph-${impl}-${setimpl}-deserialize-2.9 {deserialize, duplicate nodes} { 102 SETUP 103 set serial {%1 {foo bar} {{a 3 {}} {c 6 {}}} %1 {} {} %3 {} {{f 3 {}}} {data foo}} 104 set fail [catch {mygraph deserialize $serial} result] 105 mygraph destroy 106 list $fail $result 107} {1 {error in serialization: duplicate node names.}} 108 109test graph-${impl}-${setimpl}-deserialize-2.10 {deserialize, wrong arc information length, missing} { 110 SETUP 111 set serial {%3 {} {{f 6}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data foo}} 112 set fail [catch {mygraph deserialize $serial} result] 113 mygraph destroy 114 list $fail $result 115} {1 {error in serialization: arc information length not 3 or 4.}} 116 117test graph-${impl}-${setimpl}-deserialize-2.11 {deserialize, wrong arc information length, too many} { 118 SETUP 119 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}} 120 set fail [catch {mygraph deserialize $serial} result] 121 mygraph destroy 122 list $fail $result 123} {1 {error in serialization: arc information length not 3 or 4.}} 124 125# ------------------------------------------------------------------------- 126# Ok arguments. 127 128test graph-${impl}-${setimpl}-deserialize-3.0 {deserialize, empty graph} { 129 SETUP 130 set serial {{}} 131 mygraph deserialize $serial 132 set result [validate_serial mygraph $serial] 133 mygraph destroy 134 set result 135} ok 136 137test graph-${impl}-${setimpl}-deserialize-3.1 {deserialize} { 138 SETUP 139 140 # Our check of the success of the deserialize 141 # is to validate the generated graph against the 142 # serialized data. 143 144 set serial {%3 {} {{f 6 {}}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data foo}} 145 146 set result [list] 147 lappend result [validate_serial mygraph $serial] 148 149 mygraph deserialize $serial 150 lappend result [validate_serial mygraph $serial] 151 152 mygraph destroy 153 set result 154} {attr/graph/data-mismatch ok} 155 156test graph-${impl}-${setimpl}-deserialize-3.2 {deserialize} { 157 SETUP 158 159 # Our check of the success of the deserialize 160 # is to validate the generated graph against the 161 # serialized data. 162 163 # Applying to serialization one after the 164 # other. Checking that the second operation 165 # completely squashes the data from the first. 166 167 set seriala {%3 {} {{f 6 {}}} %0 {foo bar} {{a 6 {}} {b 9 {bar snarf}} {c 0 {}}} %1 {} {{d 9 {}}} %2 {} {{e 0 {}}} {data foo}} 168 set serialb {%0 {foo bar} {{a 3 {}} {c 6 {}}} %1 {} {} %3 {} {{f 3 {}}} {data foo}} 169 170 set result [list] 171 lappend result [validate_serial mygraph $seriala] 172 lappend result [validate_serial mygraph $serialb] 173 174 mygraph deserialize $seriala 175 lappend result [validate_serial mygraph $seriala] 176 lappend result [validate_serial mygraph $serialb] 177 178 mygraph deserialize $serialb 179 lappend result [validate_serial mygraph $seriala] 180 lappend result [validate_serial mygraph $serialb] 181 182 mygraph destroy 183 set result 184} [list \ 185 attr/graph/data-mismatch attr/graph/data-mismatch \ 186 ok nodes/mismatch/#nodes \ 187 arc/b/unknown ok] 188 189 190test graph-${impl}-${setimpl}-deserialize-3.3 {deserialize, weights} { 191 SETUP 192 193 # Our check of the success of the deserialize 194 # is to validate the generated graph against the 195 # serialized data. 196 197 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}} 198 199 set result [list] 200 lappend result [validate_serial mygraph $serial] 201 202 mygraph deserialize $serial 203 lappend result [validate_serial mygraph $serial] 204 205 mygraph destroy 206 set result 207} {attr/graph/data-mismatch ok} 208 209# ------------------------------------------------------------------------- 210