1;
2; Alain C., 22 June 2012
3;
4; More systematic tests on EXECUTE, CALL_FUNCTION and CALL_PROCEDURE
5;
6; ----------------------------------------------
7; we add a keyword (add_one) to test also keyword,
8; because of bug report 3490415
9; we add a keyword (via_keyword) to test also value transmited by
10; keyword, because of bug report 3569697
11;
12pro PRO_MY_PRO, x, y, add_one=add_one, via_keyword=via_key_keyword
13;
14y=x+5
15;
16if KEYWORD_SET(add_one) then y=y+1.
17;
18; transmitting outside value via keyword
19via_key_keyword=-1
20;
21end
22;
23; --------------------
24;
25pro BASIC_CALL_PROCEDURE, help=help, test=test, no_exit=no_exit, verbose=verbose
26;
27if KEYWORD_SET(help) then begin
28    print, 'pro BASIC_CALL_PROCEDURE, help=help, test=test, no_exit=no_exit, verbose=verbose'
29    return
30endif
31;
32nb_errors = 0
33tolerance=1e-5
34;
35; internal intrinsic function, single value
36;
37txt1='XYZ is cool'
38txt2='GDL is cool'
39CALL_PROCEDURE, 'STRPUT', txt1, 'GDL', 0
40;
41if (STRCMP(txt1, txt2) NE 1)  then nb_errors=nb_errors+1
42if KEYWORD_SET(verbose) then print, txt1, txt2
43;
44; internal intrinsic function, array
45;
46; no idea now, help welcome
47;
48; external procedure, single element
49;
50expected=17.
51CALL_PROCEDURE, 'PRO_MY_PRO', 12, result
52;
53if (ABS(result-expected) GT tolerance)  then begin
54   MESSAGE, /continue, 'Error at basic (Self Defined Procedure) call level'
55   nb_errors=nb_errors+1
56endif
57if KEYWORD_SET(verbose) then print, result, expected
58;
59; external procedure, single element, keyword
60;
61expected=17.+1.
62CALL_PROCEDURE, 'PRO_MY_PRO', 12, result, /add_one
63;
64if (ABS(result-expected) GT tolerance)  then begin
65   MESSAGE, /continue, 'Error at /keyword (Self Defined Procedure) call level'
66   nb_errors=nb_errors+1
67endif
68if KEYWORD_SET(verbose) then print, result, expected
69;
70; external procedure, single element, one keyword by value
71;
72expected=17.
73key_expected=-1.
74CALL_PROCEDURE, 'PRO_MY_PRO', 12, result, via_keyword=via_keyword
75;
76if (ABS(result-expected) GT tolerance) then begin
77    MESSAGE, /continue, 'Error 1 at KEYWORD BY VALUE (Self Defined Pro) call level'
78    nb_errors=nb_errors+1
79endif
80if KEYWORD_SET(verbose) then print, result, expected
81;
82if (ABS(via_keyword-key_expected) GT tolerance) then begin
83    MESSAGE, /continue, 'Error 2 at KEYWORD BY VALUE (Self Defined Pro) call level'
84    nb_errors=nb_errors+1
85endif
86if KEYWORD_SET(verbose) then print, via_keyword, key_expected
87;
88; external function, single element, two keywords
89;
90expected=17+1.
91key_expected=-1.
92CALL_PROCEDURE, 'PRO_MY_PRO', 12, result, via_keyword=via_keyword, /add_one
93;
94if (ABS(result-expected) GT tolerance) then begin
95    MESSAGE, /continue, 'Error 1 at KEYWORD BY VALUE (Self Defined Pro) call level'
96    nb_errors=nb_errors+1
97endif
98if KEYWORD_SET(verbose) then print, result, expected
99;
100if (ABS(via_keyword-key_expected) GT tolerance) then begin
101    MESSAGE, /continue, 'Error 2 at KEYWORD BY VALUE (Self Defined pro) call level'
102    nb_errors=nb_errors+1
103endif
104if KEYWORD_SET(verbose) then print, via_keyword, key_expected
105;
106; external function, value 2D array
107;
108data_in=REPLICATE(-5,12,3)
109PRO_MY_PRO, data_in, data_out1
110CALL_PROCEDURE, 'PRO_MY_PRO', data_in, data_out2
111;
112if (TOTAL(ABS(data_out1-data_out2)) GT tolerance)  then begin
113   MESSAGE, /continue, 'Error at ARRAY (Self Defined Procedure) call level'
114   nb_errors=nb_errors+1
115endif
116if KEYWORD_SET(verbose) then print, data_out1-data_out2
117;
118;
119if (nb_errors GT 0) then begin
120    MESSAGE, STRING(nb_errors)+' Errors founded when testing CALL_PROCEDURE', /continue
121endif else begin
122    MESSAGE, 'testing CALL_PROCEDURE: No Errors found', /continue
123endelse
124;
125if KEYWORD_SET(test) then STOP
126;
127if (nb_errors GT 0) AND ~KEYWORD_SET(no_exit) then EXIT, status=1
128;
129end
130;
131; ----------------------------------------------------
132;
133pro TEST_CALL_PROCEDURE, help=help, test=test, no_exit=no_exit, verbose=verbose
134;
135if KEYWORD_SET(help) then begin
136    print, 'pro TEST_CALL_PROCEDURE, help=help, test=test, no_exit=no_exit, verbose=verbose'
137    return
138endif
139;
140BASIC_CALL_PROCEDURE, help=help, test=test, no_exit=no_exit, verbose=verbose
141;
142end
143