Bump version numbers to 6.2.0
[scilab.git] / scilab / modules / scicos / tests / unit_tests / model / Diagram.tst
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2014 - Scilab Enterprises - Paul Bignier
4 // Copyright (C) 2017-2018 - ESI Group - Clement DAVID
5 //
6 //  This file is distributed under the same license as the Scilab package.
7 // =============================================================================
8
9 // <-- CLI SHELL MODE -->
10
11 loadXcosLibs();
12 scicos_log("TRACE");
13
14 // Allocate a diagram and access its fields
15 scs_m = scicos_diagram()
16 scs_m.props
17 scs_m.objs
18 scs_m.version
19 scs_m.contrib
20
21 clear scs_m
22
23 // Create a dummy diagram with one undefined block then clear it
24 scs_m = scicos_diagram(objs=list(scicos_block()));
25 clear scs_m
26
27 // Create a diagram containing 2 summation blocks and two links
28 Sum    = BIGSOM_f("define");
29 Scope1 = CSCOPE("define");
30 Scope2 = CSCOPE("define");
31 lnk1   = scicos_link();          // Data link
32 lnk2   = scicos_link(ct=[1,-1]); // Activation link
33
34 scs_m = scicos_diagram( objs=list(Sum,Scope1,Scope2,lnk1,lnk2) )
35 scs_m.objs
36
37 // Link output port #1 of block #1 with input port #1 of block #2 thanks to lnk1
38 scs_m.objs(4).from = [1 1 0]; // Link block #1
39 assert_checkequal(scs_m.objs(1).graphics.pout, 4);   // Check that block #1 is connected to lnk1
40 assert_checkequal(scs_m.objs(1).model.out,    -1);   // "
41 scs_m.objs(4).to = [2 1 1];   // Link block #2
42 assert_checkequal(scs_m.objs(4).from, [1 1 0]);
43 assert_checkequal(scs_m.objs(4).to,   [2 1 1]);
44 assert_checkequal(scs_m.objs(2).graphics.pin, 4);    // Check that block #2 is connected to lnk1
45 assert_checkequal(scs_m.objs(2).model.in,    -1);    // "
46
47 // Disconnect the source
48 scs_m.objs(4).from = [0 0 0];
49 assert_checkequal(scs_m.objs(4).from, [0 0 0]);
50 assert_checkequal(scs_m.objs(4).to,   [2 1 1]);
51 assert_checkequal(scs_m.objs(1).graphics.pout, 4);     // Check that block #1 is still connected
52 assert_checkequal(scs_m.objs(2).graphics.pin, 4); // block #2 is still connected to the link
53
54 // Disconnect the destination
55 scs_m.objs(4).to = [0 0 0];
56 assert_checkequal(scs_m.objs(2).graphics.pin, 4);  // Check that block #2 is still connected
57
58 // Verify that it is impossible to create event links
59 scs_m.objs(5).from = [2 1 1]; // Link the input of block #2
60 scs_m.objs(5).to = [3 1 0];   // Try to add an event output to block #3 ; it should fail !
61 assert_checkequal(scs_m.objs(5).from, [2 1 1]);
62 assert_checkequal(scs_m.objs(5).to,   [3 1 0]);
63 assert_checkequal(scs_m.objs(2).graphics.pein,  0);  // Check that block #2 is connected to lnk2
64 assert_checkequal(scs_m.objs(2).model.evtin,    1);  // "
65 assert_checkequal(scs_m.objs(3).graphics.peout, []);  // Check that block #3 is not connected to lnk2
66 assert_checkequal(scs_m.objs(3).model.evtout,  []);  // "
67
68 // Verify that it is impossible to link two inputs or two outputs together
69 scs_m.objs(5).from = [2 1 0]; // Two outputs
70 scs_m.objs(5).to = [3 1 1];   // Two inputs
71
72
73 //===================================================================================================
74 // Test predefined link at diagram creation
75 clear scs_m;
76
77 lnk   = scicos_link( from=[1 1 0],to=[2 1 1] );
78 scs_m = scicos_diagram( objs=list(Sum,Scope1,lnk) );
79
80 assert_checkequal(scs_m.objs(3).from, [1 1 0]);
81 assert_checkequal(scs_m.objs(3).to,   [2 1 1]);
82 assert_checkequal(scs_m.objs(1).graphics.pout,  3);  // Check that block #1 is connected to lnk
83 assert_checkequal(scs_m.objs(1).model.out,     -1);  // "
84 assert_checkequal(scs_m.objs(2).graphics.pin,   3);  // Check that block #2 is connected to lnk
85 assert_checkequal(scs_m.objs(2).model.in,      -1);  // "
86
87
88 //===================================================================================================
89 // Test predefined link insertion
90 clear scs_m;
91
92 lnk   = scicos_link( from=[1 1 0],to=[2 1 1] );
93 scs_m = scicos_diagram( objs=list(Sum,Scope1) );
94
95 assert_checkequal(scs_m.objs(1).graphics.pout,  0);  // Check that block #1 is not connected
96 assert_checkequal(scs_m.objs(1).model.out,     -1);  // "
97 assert_checkequal(scs_m.objs(2).graphics.pin,   0);  // Check that block #2 is not connected
98 assert_checkequal(scs_m.objs(2).model.in,      -1);  // "
99
100 scs_m.objs(3) = lnk;          // Add the predefined Link
101
102 scs_m.objs
103 assert_checkequal(scs_m.objs(3).from, [1 1 0]);
104 assert_checkequal(scs_m.objs(3).to,   [2 1 1]);
105 assert_checkequal(scs_m.objs(1).graphics.pout,  3);  // Check that block #1 is connected to lnk
106 assert_checkequal(scs_m.objs(1).model.out,     -1);  // "
107 assert_checkequal(scs_m.objs(2).graphics.pin,   3);  // Check that block #2 is connected to lnk
108 assert_checkequal(scs_m.objs(2).model.in,      -1);  // "
109
110
111 //===================================================================================================
112 // Test Links insertion before Block insertion
113 clear scs_m;
114
115 lnk   = scicos_link( from=[2 1 0],to=[3 1 1] );
116 scs_m = scicos_diagram();
117
118 scs_m.objs(1) = lnk;          // Add the predefined Link
119 assert_checkequal(scs_m.objs(1).from, [2 1 0]);
120 assert_checkequal(scs_m.objs(1).to,   [3 1 1]);
121
122 scs_m.objs(2) = Sum;          // Add the Block that lnk's 'from' points to
123 scs_m.objs(3) = Scope1;       // Add the Block that lnk's 'to' points to
124
125 scs_m.objs
126
127 // Check that the linking has been done
128 // Sum (#2 in diagram) is linked to Scope1 (#3) through lnk (#1)
129 assert_checkequal(scs_m.objs(1).from, [2 1 0]);
130 assert_checkequal(scs_m.objs(1).to,   [3 1 1]);
131
132 assert_checkequal(scs_m.objs(2).graphics.pout,  0);
133 assert_checkequal(scs_m.objs(2).model.out,     -1);
134 assert_checkequal(scs_m.objs(3).graphics.pin,   0);
135 assert_checkequal(scs_m.objs(3).model.in,      -1);
136
137
138 // Check that all the model items are freed
139 clear Sum Scope1 Scope2 lnk1 lnk2 lnk scs_m