00001
00052
00053
00054
00055
00056
00057
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 =
00069 );
00070
00071
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
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
00113 %IF %length(&i_maxReportObs) %then %LET o_maxReportObs = &i_maxReportObs;
00114
00115
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
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
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
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
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
00174 %LET l_rc=%eval(%sysfunc(bxor(%sysfunc(bor(&l_mask,&l_compResult)),&l_mask)) NE 0);
00175
00176
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;
00189
00190
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
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;