1
0
mirror of https://github.com/sasjs/core.git synced 2026-01-03 15:40:05 +00:00

feat: adding mcf_length to mp_getmaxvarlengths

BREAKING CHANGE: mp_getmaxvarlengths now returns 0 for non-special missings, and will use numeric length (as opposed to cast-to-character length) by default
This commit is contained in:
munja
2022-01-23 23:26:10 +01:00
parent f7fac50108
commit 142b46570d
7 changed files with 196 additions and 53 deletions

View File

@@ -12,6 +12,7 @@
data test;
call symputx('null',mcf_length(.));
call symputx('special',mcf_length(._))
call symputx('three',mcf_length(1));
call symputx('four',mcf_length(10000000));
call symputx('five',mcf_length(12345678));
@@ -24,6 +25,10 @@ run;
iftrue=(%str(&null)=%str(0)),
desc=Check if NULL returns 0
)
%mp_assert(
iftrue=(%str(&special)=%str(3)),
desc=Check if special missing ._ returns 3
)
%mp_assert(
iftrue=(%str(&three)=%str(3)),
desc=Check for length 3
@@ -47,4 +52,16 @@ run;
%mp_assert(
iftrue=(%str(&eight)=%str(8)),
desc=Check for length 8
)
%mp_assert(
iftrue=(&syscc=0),
desc=Check syscc=0 before re-initialisation
)
/* test 2 - compile again test for warnings */
%mcf_length(wrap=YES, insert_cmplib=YES)
%mp_assert(
iftrue=(&syscc=0),
desc=Check syscc=0 after re-initialisation
)

View File

@@ -0,0 +1,80 @@
/**
@file
@brief Testing mp_getmaxvarlengths macro
<h4> SAS Macros </h4>
@li mp_getmaxvarlengths.sas
@li mp_assert.sas
@li mp_assertdsobs.sas
@li mp_assertscope.sas
**/
/* regular usage */
%mp_assertscope(SNAPSHOT)
%mp_getmaxvarlengths(sashelp.class,outds=work.myds)
%mp_assertscope(COMPARE,desc=checking scope leakage on mp_getmaxvarlengths)
%mp_assert(
iftrue=(&syscc=0),
desc=No errs
)
%mp_assertdsobs(work.myds,
desc=Has 5 records,
test=EQUALS 5
)
data work.errs;
set work.myds;
if name='Name' and maxlen ne 7 then output;
if name='Sex' and maxlen ne 1 then output;
if name='Age' and maxlen ne 3 then output;
if name='Height' and maxlen ne 8 then output;
if name='Weight' and maxlen ne 3 then output;
run;
data _null_;
set work.errs;
putlog (_all_)(=);
run;
%mp_assertdsobs(work.errs,
desc=Err table has 0 records,
test=EQUALS 0
)
/* test2 */
data work.test2;
length a 3 b 5;
a=1/3;
b=1/3;
c=1/3;
d=._;
e=.;
output;
output;
run;
%mp_getmaxvarlengths(work.test2,outds=work.myds2)
%mp_assert(
iftrue=(&syscc=0),
desc=No errs in second test (with nulls)
)
%mp_assertdsobs(work.myds2,
desc=Has 5 records,
test=EQUALS 5
)
data work.errs2;
set work.myds2;
if name='a' and maxlen ne 3 then output;
if name='b' and maxlen ne 5 then output;
if name='c' and maxlen ne 8 then output;
if name='d' and maxlen ne 3 then output;
if name='e' and maxlen ne 0 then output;
run;
data _null_;
set work.errs2;
putlog (_all_)(=);
run;
%mp_assertdsobs(work.errs2,
desc=Err table has 0 records,
test=EQUALS 0
)