assertcolumns.sas

Go to the documentation of this file.
00001  
00052 /* change history
00053    01.07.2008 AM  umfangreiche Überarbeitung:
00054                   i_allow eingeführt, um erlaubte Unterschiede steuern zu können, 
00055                   i_maxReportObs durch o_maxReportObs ersetzt
00056                   o_copydata eliminiert (Semantik o_copydata=0 durch o_maxReportObs=0 erreicht)
00057                   METHOD=ABSOLUTE eingesetzt, wenn i_fuzz gesetzt
00058 */ 
00059 
00060 %MACRO assertColumns (
00061     i_expected     =      
00062    ,i_actual       =      
00063    ,i_desc         =      
00064    ,i_fuzz         =      
00065    ,i_allow        = DSLABEL LABEL COMPVAR
00066    ,i_id           =       
00067    ,o_maxReportObs = max
00068    ,i_maxReportObs =      /* obsolete */
00069 );
00070 
00071 /*-- possible values for i_allow ---------------------------------------------*/
00072 %LET l_allowSymbols=
00073    DSLABEL 
00074    DSTYPE 
00075    INFORMAT 
00076    FORMAT 
00077    LENGTH 
00078    LABEL 
00079    BASEOBS 
00080    COMPOBS 
00081    BASEBY 
00082    COMPBY 
00083    BASEVAR 
00084    COMPVAR 
00085    VALUE 
00086    TYPE 
00087    BYVAR 
00088    ERROR
00089 ;
00090 
00091 /*-- check parameter i_allow  ------------------------------------------------*/
00092 %LOCAL l_i l_j l_symboli l_symbolj l_potenz l_mask; 
00093 %LET l_mask=0;
00094 %LET l_i=0; 
00095 %DO %WHILE(%length(%scan(&i_allow,%eval(&l_i+1),%str( ))));
00096    %LET l_i = %eval (&l_i + 1);
00097    %LET l_symboli = %upcase(%scan(&i_allow, &l_i, %str( )));
00098    %LET l_j=0;
00099    %LET l_potenz=1;
00100    %DO %WHILE(%length(%scan(&l_allowSymbols,%eval(&l_j+1),%str( ))));
00101       %LET l_j = %eval (&l_j+1);
00102       %LET l_symbolj = %scan(&l_allowSymbols, &l_j, %str( ));
00103       %IF &l_symboli = &l_symbolj %THEN %goto label1;
00104       %LET l_potenz = &l_potenz*2;
00105    %END;
00106    %PUT &g_error: assertColumns: invalid symbol &l_symboli in parameter i_allow;
00107    %RETURN;
00108 %label1:
00109    %LET l_mask = %sysfunc(bor(&l_mask, &l_potenz));
00110 %END;
00111 
00112 /*-- support obsolete parameter i_maxReportObs -------------------------------*/
00113 %IF %length(&i_maxReportObs) %then %LET o_maxReportObs = &i_maxReportObs;
00114 
00115 /*-- verify correct sequence of calls-----------------------------------------*/
00116 %GLOBAL g_inTestcase;
00117 %IF &g_inTestcase EQ 1 %THEN %DO;
00118    %endTestcall()
00119 %END;
00120 %ELSE %IF &g_inTestcase NE 2 %THEN %DO;
00121    %PUT &g_error: assert can only be called after initTestcase;
00122    %RETURN;
00123 %END;
00124 
00125 /*-- get current ids for test case and test --------- ------------------------*/
00126 %LOCAL l_casid l_tstid;
00127 %_sasunit_asserts(
00128     i_type     = assertColumns
00129    ,i_expected = %upcase(&i_allow)
00130    ,i_actual   = 
00131    ,i_desc     = &i_desc
00132    ,i_result   = .
00133    ,r_casid    = l_casid
00134    ,r_tstid    = l_tstid
00135 )
00136 
00137 /*-- check if actual dataset exists ------------------------------------------*/
00138 %LOCAL l_rc l_actual; 
00139 %IF NOT %sysfunc(exist(&i_actual,DATA)) AND NOT %sysfunc(exist(&i_actual,VIEW)) %THEN %DO;
00140    %LET l_rc=1;
00141    %LET l_actual=ERROR: actual table not found.;
00142 %END;
00143 
00144 /*-- check if expected dataset exists ----------------------------------------*/
00145 %ELSE %IF NOT %sysfunc(exist(&i_expected,DATA)) AND NOT %sysfunc(exist(&i_expected,VIEW))%THEN %DO;
00146    %LET l_rc=1;
00147    %LET l_actual=&l_actual ERROR: expected table not found.;
00148 %END;
00149 
00150 /*-- compare tables ----------------------------------------------------------*/
00151 %ELSE %DO;
00152 
00153    %LOCAL l_formchar l_compResult;
00154    %LET l_formchar=%sysfunc(getoption(formchar));
00155    OPTIONS FORMCHAR="|----|+|---+=|-/\<>*";
00156 
00157    ODS DOCUMENT NAME=testout._%substr(00&g_scnid,%length(&g_scnid))_&l_casid._&l_tstid._columns_rep(WRITE);
00158    TITLE;
00159    FOOTNOTE;
00160    PROC COMPARE
00161       BASE=&i_expected 
00162       COMPARE=&i_actual
00163       %IF %quote(&i_fuzz) NE %THEN CRITERION=&i_fuzz METHOD=ABSOLUTE;
00164       ;
00165       %IF %quote(&i_id) NE %THEN %str(ID &i_id;);
00166    RUN;
00167    %PUT sysinfo = &sysinfo;
00168    %LET l_compResult = &sysinfo;
00169 
00170    ODS DOCUMENT CLOSE;
00171    OPTIONS FORMCHAR="&l_formchar";
00172 
00173 /*-- check proc compare result -----------------------------------------------*/
00174    %LET l_rc=%eval(%sysfunc(bxor(%sysfunc(bor(&l_mask,&l_compResult)),&l_mask)) NE 0);
00175 
00176 /*-- format compare result ---------------------------------------------------*/
00177    %LET l_j=0;
00178    %LET l_potenz=1;
00179    %DO %WHILE(%length(%scan(&l_allowSymbols,%eval(&l_j+1),%str( ))));
00180       %LET l_j = %eval (&l_j+1);
00181       %LET l_symbolj = %scan(&l_allowSymbols, &l_j, %str( ));
00182       %IF %sysfunc(band(&l_compResult, &l_potenz)) %THEN %DO;
00183          %LET l_actual = &l_actual &l_symbolj;
00184       %END;
00185       %LET l_potenz = &l_potenz*2;
00186    %END;
00187 
00188 %END; /* i_expected and i_actual exist */
00189 
00190 /*-- update comparison result in test database -------------------------------*/
00191 PROC SQL NOPRINT;
00192    UPDATE target.tst 
00193       SET 
00194           tst_res = &l_rc 
00195          ,tst_act = "&l_actual"
00196       WHERE 
00197          tst_scnid = &g_scnid AND
00198          tst_casid = &l_casid AND
00199          tst_id    = &l_tstid
00200       ;
00201 QUIT;
00202 
00203 /*-- write dataset sto the target area ---------------------------------------*/
00204 %IF &o_maxreportobs NE 0 %THEN %DO;
00205    %IF %sysfunc(exist(&i_expected,DATA)) OR %sysfunc(exist(&i_expected,VIEW)) %THEN %DO;
00206       DATA testout._%substr(00&g_scnid,%length(&g_scnid))_&l_casid._&l_tstid._columns_exp;
00207          SET &i_expected (obs=&o_maxReportObs.);
00208       RUN;
00209    %END;
00210 
00211    %IF %sysfunc(exist(&i_actual,DATA)) OR %sysfunc(exist(&i_actual,VIEW)) %THEN %DO;
00212       DATA testout._%substr(00&g_scnid,%length(&g_scnid))_&l_casid._&l_tstid._columns_act;
00213          SET &i_actual (obs=&o_maxReportObs.);
00214       RUN;
00215    %END;
00216 %END;
00217 
00218 %MEND assertColumns;

Generated on Sun Oct 10 14:10:15 2010 for SASUnit Examples by  doxygen 1.5.3