32 %MACRO assertRecordCount(i_libref =
37 ,i_desc = Check
for a specific number of records
42 %IF &g_inTestcase EQ 1 %THEN %DO;
45 %ELSE %IF &g_inTestcase NE 2 %THEN %DO;
46 %PUT &g_error.(SASUNIT): assert must be called after initTestcase;
50 %LOCAL l_dsname l_result l_actual;
51 %LET l_dsname = %sysfunc(catx(., &i_libref., &i_memname.));
54 %LET i_operator = %sysfunc(upcase(&i_operator.));
57 %IF &i_where = %THEN %LET i_where=1;
59 %*************************************************************;
60 %*** Check preconditions ***;
61 %*************************************************************;
63 %*** check
for valid libref und existence of data set***;
64 %IF ((%sysfunc (libref (&i_libref.)) NE 0) or (%sysfunc(exist(&l_dsname)) EQ 0)) %THEN %DO;
66 %LET l_errmsg =Libref is invalid or table does not exist;
70 %*** check
for valid parameter i_recordsExp ***;
72 IF (INPUT(&i_recordsExp., 32.) =.) then call symput('l_actual',"-3");
73 ELSE IF (&i_recordsExp. < 0) then call symput('l_actual',"-4");;
76 %IF (&l_actual. EQ -3 OR &l_actual. EQ -4) %THEN %DO;
77 %LET l_errmsg =Parameter i_recordsExp does not contain a number;
81 %*** check for valid parameter i_operator***;
83 IF NOT("&i_operator." IN ("EQ", "NE", "GT", "LT", "GE", "LE", "=", "<", ">", ">=", "<=", "~=")) THEN call symput('l_actual',"-5");
85 %IF (&l_actual. EQ -5) %THEN %DO;
86 %LET l_errmsg =Parameter i_opertaor contains an invalid operator;
90 %*************************************************************;
92 %*************************************************************;
94 %*** Determine results***;
96 select count(*) into :l_actual
101 %IF (&SQLRC. NE 0) %THEN %DO;
107 %*** Determine results***;
108 %IF (&l_actual. &i_operator. &i_recordsExp. AND &l_actual. NE -999) %THEN %DO;
113 *** update result in test database ***;
114 %_asserts(i_type = assertRecordCount
115 ,i_expected = %str(&i_operator. &i_recordsExp.)
116 ,i_actual = %str(&l_actual.)
118 ,i_result = &l_result.
119 ,i_errmsg = &l_errmsg.;