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