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