Skip to content

Instantly share code, notes, and snippets.

@greghelton
Last active August 29, 2015 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save greghelton/bbcf149ef2d8a989904b to your computer and use it in GitHub Desktop.
Save greghelton/bbcf149ef2d8a989904b to your computer and use it in GitHub Desktop.
Testing the RPGLE Date Function Subprocedure. This technique was devised by my coworker, Deborah. The TST_ADDDUR RPGLE program below calls the ADDDUR subprocedure that is shown in the previous gist.. The TST_ADDDUR program requires the ADDDUR module to be linked into a SRVPGM and added to the ADDDUR binding directory. See the H spec in the code …
H option(*srcstmt : *nodebugio) debug(*yes) bnddir('ADDDUR')
H dftactgrp(*no) actgrp(*caller)
H EXTBININT(*YES)
H ALWNULL(*USRCTL)
H copyright('(C) COPYRIGHT StoneEagle Insurance Systems, Inc. 2010')
*=========================================================================
*
* Pgm : TST_ADDDUR - Test Add Duration
* Pgmer:
* Date : August 2014
*=========================================================================
FTestAddD up e k disk rename(TestAddD:TestRec)
F prefix('T.')
*Data structures for the files
D T e ds qualified extname(TestAddD) inz
* prototype for subprocedure under test
d adddur pr 26A
d initalValue 26A VALUE
d scale 3P 0 VALUE
d units 7A VALUE
d success 4A
/free
if T.Processed <> 'Y';
T.outdate = adddur(T.InDate:T.Scale:T.Unit:T.SuccessCd);
T.Processed = 'Y';
update TestRec;
endif;
/end-free
CREATE TABLE GHELTON.TESTADDD (
ID INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
INDATE CHAR(26) NOT NULL DEFAULT '',
SCALE DECIMAL(3,0) NOT NULL DEFAULT 0,
UNIT CHAR(7) NOT NULL DEFAULT '',
EXPECTEDDT CHAR(26) NOT NULL DEFAULT '',
OUTDATE CHAR(26) NOT NULL DEFAULT '',
SUCCESSCD CHAR(4) NOT NULL DEFAULT '',
NOTES CHAR(1000) NOT NULL DEFAULT '',
PROCESSED CHAR(1) NOT NULL DEFAULT '');
INSERT INTO GHELTON.TESTADDD (INDATE, SCALE, UNIT, EXPECTEDDT, OUTDATE, SUCCESSCD, NOTES) VALUES
( '2014-08-21-00.00.00.000000', 3, 'HOURS', '2014-08-21-03.00.00.000000', '', '', '+ 3 hours' );
INSERT INTO GHELTON.TESTADDD (INDATE, SCALE, UNIT, EXPECTEDDT, OUTDATE, SUCCESSCD, NOTES) VALUES
( '2014-08-21-00.00.00.000000', 3, 'MINUTES', '2014-08-21-00.03.00.000000', '', '', '+ 3 minutes' );
INSERT INTO GHELTON.TESTADDD (INDATE, SCALE, UNIT, EXPECTEDDT, OUTDATE, SUCCESSCD, NOTES) VALUES
( '2014-08-21-00.00.00.000000', 3, 'SECONDS', '2014-08-21-00.00.03.000000', '', '', '+ 3 seconds' );
INSERT INTO GHELTON.TESTADDD (INDATE, SCALE, UNIT, EXPECTEDDT, OUTDATE, SUCCESSCD, NOTES) VALUES
( '2014-08-21-00.00.00.000000', 3, 'MONTHS', '2014-11-21-00.00.00.000000', '', '', '+ 3 months' );
INSERT INTO GHELTON.TESTADDD (INDATE, SCALE, UNIT, EXPECTEDDT, OUTDATE, SUCCESSCD, NOTES) VALUES
( '2014-08-21-00.00.00.000000', 3, 'DAYS', '2014-08-24-00.00.00.000000', '', '', '+ 3 days' );
INSERT INTO GHELTON.TESTADDD (INDATE, SCALE, UNIT, EXPECTEDDT, OUTDATE, SUCCESSCD, NOTES) VALUES
( '2014-08-21-00.00.00.000000', 30, 'DAYS', '2014-09-20-00.00.00.000000', '', '', '+ 30 days' );
INSERT INTO GHELTON.TESTADDD (INDATE, SCALE, UNIT, EXPECTEDDT, OUTDATE, SUCCESSCD, NOTES) VALUES
( '2014-08-21-00.00.00.000000', 300, 'DAYS', '2015-06-17-00.00.00.000000', '', '', '+ 300 days' );
INSERT INTO GHELTON.TESTADDD (INDATE, SCALE, UNIT, EXPECTEDDT, OUTDATE, SUCCESSCD, NOTES) VALUES
( '2014-08-21-00.00.00.000000', -3, 'DAYS', '2014-08-18-00.00.00.000000', '', '', '- 3 days' );
INSERT INTO GHELTON.TESTADDD (INDATE, SCALE, UNIT, EXPECTEDDT, OUTDATE, SUCCESSCD, NOTES) VALUES
( '2014-08-21-00.00.00.000000', 3, 'TEST', '2014-08-21-00.00.00.000000', '', '', 'bad units - should show success code of 9999 ' );
INSERT INTO GHELTON.TESTADDD (INDATE, SCALE, UNIT, EXPECTEDDT, OUTDATE, SUCCESSCD, NOTES) VALUES
( 'Deborah', 3, 'DAYS', '2014-08-21-00.00.00.000000', '', '', 'bad indate - should show success code of 9999' );
INSERT INTO GHELTON.TESTADDD (INDATE, SCALE, UNIT, EXPECTEDDT, OUTDATE, SUCCESSCD, NOTES) VALUES
( '2014-08-21-00.00.00.000000', -3, 'YEARS', '2011-08-21-00.00.00.000000', '', '', '-3 years' );
-- This SQL statement shows results for any test where expected date not equal to date returned from the new program.
SELECT * FROM GHELTON.TESTADDD WHERE EXPECTEDDT <> OUTDATE;
-- To prepare to re-run tests
UPDATE GHELTON.TESTADDD SET SUCCESSCD = '';
UPDATE GHELTON.TESTADDD SET PROCESSED = '';
UPDATE GHELTON.TESTADDD SET OUTDATE = '';
-- Call RPG program from within SQL session
CL: CALL GHELTON/TST_ADDDUR
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment