SLFTST3A TITLE 'Driver voor toets-opgave 3 Aftrekpost' *********************************************************************** * Start create : 12-04-2007 * 1st delivery : 12-04-2007 * Designer : AF Kornelis * Programmer : AF Kornelis *********************************************************************** * * Dit programma is een test-driver voor het programma dat in de * opgave gevraagd is te maken. * De test-aanroepen 1 t/m 9 zijn afgesterd: * dit betreft diverse testen die niet gevraagd zijn in de opgave. * *********************************************************************** * * Constants and definitions * *********************************************************************** MAXREASON EQU 6 * Max. reason code from TOETS3 LPP EQU 12 * Max. data lines per page *********************************************************************** * * Program entry and linkage * *********************************************************************** YREGS , * Define register equates SLFTST3A CSECT , * SLFTST3A AMODE 31 SLFTST3A RMODE 24 USING SLFTST3A,R15 * Establish addressability B START * Skip header data DC AL1(START-*),C'SLFTST3A &SYSDATE &SYSTIME' START DS 0H STM R14,R12,12(R13) * Save GPRs LR R12,R15 * Copy base address DROP R15 * No longer needed USING SLFTST3A,R12 * Re-establish addressability LA R2,SAVEAREA * Point new savearea ST R2,8(,R13) * Set ptr to new savearea ST R13,4(,R2) * Set ptr from ne to prev save LR R13,R2 * Activate new savearea *********************************************************************** * * Obtain test results * *********************************************************************** OPEN (SYSOUT,OUTPUT) MVC OUTREC,OUTREC-1 * Wipe entire print line LA R8,1 * Init data line count * * to force header on first put * Testcase 1 - invalid pointer XR R1,R1 * Destroy parm ptr ** BAS R14,CALL2B * Call TOETS3 LA R1,PARMPTR * Set up parm ptr * Testcase 2 - invalid pointer to parmarea ** BAS R14,CALL2B * Call TOETS3 LA R15,PARMAREA ST R15,PARMPTR OI PARMPTR,X'80' * Testcase 3 - missing pointer to printer record LA R1,PARMPTR * Set up parm ptr ** BAS R14,CALL2B * Call TOETS3 NI PARMPTR,X'7F' * Testcase 4 - invalid pointer to printer record LA R1,PARMPTR * Set up parm ptr ** BAS R14,CALL2B * Call TOETS3 LA R15,OUTREC+1 * Pass only data area, no ASA ST R15,PARMPTR+4 * Testcase 5 - too many parameters in parmarea LA R1,PARMPTR * Set up parm ptr ** BAS R14,CALL2B * Call TOETS3 OI PARMPTR+4,X'80' * Testcase 6 - invalid pointer to percentage table LA R1,PARMPTR * Set up parm ptr ** BAS R14,CALL2B * Call TOETS3 LA R15,TABLE1 ST R15,TABPTR * Testcase 7 - invalid reasoncode (too high) LA R7,TEST7OK * Fake subrtn retaddr IC R15,OUTREC * Save ASA char MVC OUTREC,OUTREC-1 * Clear entire print line STC R15,OUTREC * Restore ASA char LA R15,12 * Set retcode=12 LA R0,MAXREASON+1 * Set reason too high ** B CHEAT * Pretend 2B did that TEST7OK DS 0H * Testcase 8 - invalid reasoncode (negative) LA R7,TEST8OK * Fake subrtn retaddr IC R15,OUTREC * Save ASA char MVC OUTREC,OUTREC-1 * Clear entire print line STC R15,OUTREC * Restore ASA char LA R15,12 * Set retcode=12 LA R0,1 * Set reason to LNR R0,R0 * Minus 1 ** B CHEAT * Pretend 2B did that TEST8OK DS 0H * Testcase 9 - invalid returncode LA R7,TEST9OK * Fake subrtn retaddr IC R15,OUTREC * Save ASA char MVC OUTREC,OUTREC-1 * Clear entire print line STC R15,OUTREC * Restore ASA char L R15,=X'7FFFFFFF' * Set retcode to max value ** B CHEAT * Pretend 2B did that TEST9OK DS 0H * Prepare next series of testcases MVC NOMINAAL,=CL6' ' MVC RESULT,=CL6' ' MVC BRUTO,=CL6' ' MVC MINPERC,=CL6' ' MVC MINBEDR,=CL6' ' MVC MAXPERC,=CL6' ' MVC MAXBEDR,=CL6' ' MVC TABSIZE,=XL4'00' MVC TABLEN,=XL4'00' * Testcase 10 - NOMINAAL niet numeriek LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 ZAP NOMINAAL,=P'153999' * Nominaal bedrag 1.539,99 * Testcase 11 - BRUTO niet numeriek LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 ZAP BRUTO,=P'2578900' * Bruto inkomen 25.789,-- * Testcase 12 - MINPERC niet numeriek LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 ZAP MINPERC,=P'10' * Perc ondergrens 1,0% * Testcase 13 - MINBEDR niet numeriek LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 ZAP MINBEDR,=P'1500' * Abs. ondergrens 15,-- * Testcase 14 - MAXPERC niet numeriek LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 ZAP MAXPERC,=P'750' * Perc bovengrens 75,0% * Testcase 15 - MAXBEDR niet numeriek LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 ZAP MAXBEDR,=P'1800000' * Abs. bovengrens 18.000,-- * Testcase 16 - TABSIZE = 0 LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 MVC TABSIZE,=H'-3' * 3 elementen initieel * Testcase 17 - TABSIZE < 0 LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 MVC TABSIZE,=H'3' * 3 elementen initieel * Testcase 18 - TABLEN = 0 LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 MVC TABLEN,=H'-16' * elementlengte = 16 * Testcase 19 - TABLEN < 0 LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 MVC TABLEN,=H'16' * elementlengte = 16 * Testcase 20 - NOMINAAL (>0) < MINBEDR ZAP NOMINAAL,=P'47999' * Nominaal bedrag 479,99 ZAP MINBEDR,=P'48000' * Abs. ondergrens 480,-- LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 * Testcase 21 - NOMINAAL (0) < MINBEDR ZAP NOMINAAL,=P'0' * Nominaal bedrag 0,-- LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 * Testcase 22 - NOMINAAL (<0) < MINBEDR ZAP NOMINAAL,=P'-155500' * Nominaal bedrag -1.550,-- LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 * Testcase 23 - NOMINAAL = MINBEDR ZAP NOMINAAL,=P'48000' * Nominaal bedrag 480,-- LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 * Testcase 24 - NOMINAAL > MINBEDR ZAP NOMINAAL,=P'48001' * Nominaal bedrag 480,01 LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 * Testcase 25 - NOMINAAL (>0) < PERC(BRUTO) (zonder afronden) ZAP NOMINAAL,=P'54099' * Nominaal bedrag 540,99 ZAP BRUTO,=P'1082000' * Bruto inkomen 10.820,-- ZAP MINPERC,=P'50' * Min perc. 5,0% LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 * Testcase 26 - NOMINAAL (>0) < PERC(BRUTO) (met afronden) ZAP BRUTO,=P'1083980' * Bruto inkomen 10.839,80 ZAP MINPERC,=P'50' * Min perc. 5,0% LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 * Testcase 27 - NOMINAAL = PERC(BRUTO) ZAP NOMINAAL,=P'54100' * Nominaal bedrag 541,-- ZAP BRUTO,=P'1082000' * Bruto inkomen 10.820,-- LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 * Testcase 28 - NOMINAAL > PERC(BRUTO) ZAP NOMINAAL,=P'54101' * Nominaal bedrag 541,01 LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 * Testcase 29 - BRUTO = 0 ZAP BRUTO,=P'0' * Bruto inkomen 0,-- LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 * Testcase 30 - BRUTO < 0 ZAP BRUTO,=P'-1' * Bruto inkomen -0,01 LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 * Testcase 30 - BRUTO > 0 ZAP BRUTO,=P'1082000' * Bruto inkomen 10.820,-- LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 * Testcase 31 - Gemaximeerd op MAXBEDR (>0) ZAP MAXBEDR,=P'48000' * Max. bedrag 480,-- LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 * Testcase 32 - Gemaximeerd op MAXBEDR (=0) ZAP MAXBEDR,=P'0' * Max. bedrag 0,-- LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 * Testcase 33 - Gemaximeerd op MAXPERC(BRUTO) ZAP NOMINAAL,=P'216401' * Nominaal bedrag 2.164,01 ZAP MAXBEDR,=P'580000' * Max. bedrag 5.800,-- ZAP MAXPERC,=P'200' * Max. percentage 20,0% LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 * Testcase 34 - Niet gemaximeerd NOMINAAL < MAXPERC(BRUTO) ZAP NOMINAAL,=P'216399' * Nominaal bedrag 2.163,99 LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 * Testcase 35 - Niet gemaximeerd NOMINAAL = MAXPERC(BRUTO) ZAP NOMINAAL,=P'216400' * Nominaal bedrag 2.164,-- LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 * Testcase 36 - Niet gemaximeerd na afronding ZAP BRUTO,=P'1081501' * Bruto inkomen 10.815,01 LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 * Testcase 37 - Gemaximeerd na afronding ZAP BRUTO,=P'1081499' * Bruto inkomen 10.814,99 LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 ZAP BRUTO,=P'1082000' * Bruto inkomen 10.820,-- * * Prepare for table tests LH R10,TABLEN L R11,TABPTR * Point 1st entry USING TABENT,R11 * Set addressable * Testcase 38 - Geen tabel entry van toepassing MVC TABSIZE,=H'1' * Slechts een element ZAP TABMAX,=P'100' * T/m 1,00 Euro LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 * Testcase 39 - Geen tabel entry van toepassing MVC TABSIZE,=H'3' * Slechts een element LA R11,0(R10,R11) * Point entry 2 ZAP TABMAX,=P'200' * T/m 2,00 Euro LA R11,0(R10,R11) * Point entry 3 ZAP TABMAX,=P'300' * T/m 3,00 Euro LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 * Testcase 40 - Eerste tabel entry van toepassing L R11,TABPTR * Point 1st entry ZAP TABMAX,=P'500000' * T/m 5.000,-- Euro LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 * Testcase 41 - Tweede tabel entry van toepassing ZAP TABMAX,=P'150000' * T/m 1.500,-- Euro LA R11,0(R10,R11) * Point entry 2 ZAP TABMAX,=P'300000' * T/m 3.000,-- Euro LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 * Testcase 42 - Andere tabel van twee elementen, andere lengte * Laatste tabel entry van toepassing en afronden MVC TABSIZE,=H'2' * Twee entries MVC TABLEN,=H'20' * van 20 bytes LA R11,TABLE2 * Point tweede tabel ST R11,TABPTR * Set ptr in parmarea LH R10,TABLEN * Corrigeer element-lengte LA R1,PARMPTR * Set up parm ptr BAS R14,CALL2B * Call TOETS3 PUT SYSOUT,TRAILER * Write trailer record CLOSE (SYSOUT) DROP R11 * Tabentry no longer in use *********************************************************************** * * Program exit, returncode already in R15 * *********************************************************************** EXIT DS 0H * Workarea handling L R13,4(,R13) * Get ptr to prev savearea LM R14,R12,12(R13) * Reset all other registers XR R15,R15 * Set returncode BR R14 * Return *********************************************************************** * * Subroutine voor aanroepen subprogramma * *********************************************************************** CALL2B DS 0H * Workarea handling LR R7,R14 * Save return address L R15,SUBPGM * Point naar TOETS3 BASR R14,R15 * Call TOETS3 CHEAT DS 0H * For testing errors in 2B MVI OUTREC+1,C'0' * Assume RC=0 LTR R15,R15 * Retcode ok? BZ CALL2BOK * Ja: ga verder MVI OUTREC+1,C'4' * Assume RC=4 CH R15,=H'4' * Retcode 4? BE CALL2BOK * Ja: ga verder MVC RESULT,NORESULT * Forceer ongeldige waarde MVI OUTREC+1,C'8' * Assume RC=8 CH R15,=H'8' * Retcode 8? BE CALL2BOK * Ja: ga verder MVC OUTREC+1(2),=C'12' * Assume RC=12 CH R15,=H'12' * Bij retcode 12 BE REASON12 * error message bouwen MVC OUTREC+1(2),=C' ' * Remove assumed RC * * ongeldige return code CVD R15,WORKDEC * Show returncode MVC OUTREC+1(L'CODEMASK),CODEMASK in decimal format ED OUTREC+1(L'CODEMASK),WORKDEC as print data MVC OUTREC+L'OUTREC-L'ERRMSG(L'ERRMSG),ERRMSG0 B CALL2BOK * Ja: ga verder REASON12 DS 0H * Handle retcode 12 * * RC=12, dus interne fout, reasoncode in r0 bepaalt welke * Error message moeten we hier opbouwen omdat TOETS3 bij * interne fouten geen print-data kan produceren * LA R15,MAXREASON * Max geldige reasoncode CLR R0,R15 * Geldige reasoncode? BNH REASONOK * Ja: Akkoord CVD R0,WORKDEC * Show reasoncode MVC OUTREC+1(L'CODEMASK),CODEMASK in decimal format ED OUTREC+1(L'CODEMASK),WORKDEC as print data MVC OUTREC+1(2),=C'12' * Re-insert retcode XR R0,R0 * geef algmene foutmelding REASONOK DS 0H * LA R1,L'ERRMSG * Lengte tekst-entry MR R0,R0 * R1 := 35*reasoncode * * is offset in errmsg tabel LA R15,ERRMSG(R1) * Point to correct error msg MVC OUTREC+L'OUTREC-L'ERRMSG(L'ERRMSG),0(R15) CALL2BOK DC 0H * * Call complete: print results - and header if needed BCT R8,PRTDATA * R8 = residual line count PUT SYSOUT,HEADER * Write header line LA R8,LPP * Start with fresh count MVI OUTREC,C'0' * Add blank line before data PRTDATA DS 0H * Print a data line PUT SYSOUT,OUTREC * Write report record MVC OUTREC,OUTREC-1 * Clear entire print line BR R7 * Return DROP , * End all USINGs *********************************************************************** * * Data areas - constants * *********************************************************************** LTORG , SUBPGM DC V(TOETS3) SYSOUT DCB DDNAME=SYSOUT,DSORG=PS,MACRF=PM,LRECL=80,RECFM=FBA HEADER DC CL81'1 Nominaal bedrag Aftrekbaar bedrag' TRAILER DC CL81'0*** Einde Overzicht *** ' ERRMSG0 DC CL35'Onbekende returncode van TOETS3! ' ERRMSG DC CL35'Onbekende reasoncode van TOETS3! ' DC CL35'TOETS3 RSN=1 parmlist ptr fout! ' Reason=1 DC CL35'TOETS3 RSN=2 parmarea ptr fout! ' Reason=2 DC CL35'TOETS3 RSN=3 prtbuf ptr ontbreekt!' Reason=3 DC CL35'TOETS3 RSN=4 prtbuf ptr fout! ' Reason=4 DC CL35'TOETS3 RSN=5 overtollige parms! ' Reason=5 DC CL35'TOETS3 RSN=6 tabel ptr fout! ' Reason=6 NORESULT DC CL(L'RESULT)' ' * To invalidate RESULT field MASK DC 4X'2020204B' DC X'20212060' CODEMASK EQU MASK,*-MASK *********************************************************************** * * Data areas - variables * *********************************************************************** SAVEAREA DC 18F'0' * Register savearea WORKDEC DC D'0' * Workarea for CVD DC CL1' ' * Blank for wiping OUTREC OUTREC DC CL81' ' * Record area * PARMPTR DC A(0) * Ptr to Parmlist LINEPTR DC A(0) * Ptr to print line * PARMAREA DS 0C * NOMINAAL DC PL6'154000' * Nominaal bedrag 1.540,-- RESULT DC PL6'0' * Resultaat-bedrag BRUTO DC PL6'2578900' * Bruto inkomen 25.789,-- MINPERC DC PL2'50' * Perc ondergrens 5,0% MINBEDR DC PL6'50000' * Abs. ondergrens 500,-- MAXPERC DC PL2'250' * Perc bovengrens 25,0% MAXBEDR DC PL6'1800000' * Abs. bovengrens 18.000,-- TABSIZE DC H'3' * nr of table elements TABLEN DC H'16' * table element length TABPTR DC A(0) * point to table * TABLE1 DC 0D ENT1_1 DC PL6'500000' * 5.000,-- DC PL2'400' * 40,0% DC XL8'00' ENT1_2 DC PL6'1500000' * 15.000,-- DC PL2'500' * 50,0% DC XL8'00' ENT1_3 DC PL6'99999999999' * DC PL2'750' * 75,0% DC XL8'00' * TABLE2 DC 0D ENT2_1 DC PL6'200000' * 2.000,-- DC PL2'183' * 18,3% DC XL12'00' ENT2_2 DC PL6'400000' * 4.000,-- DC PL2'217' * 21,7% DC XL12'00' * PRINT NOGEN DCBD DSORG=PS * Voor z390 variant van DCB * TABENT DSECT , TABMAX DS PL6'0' * Maximum bedrag TABPERC DS PL2 * Percentage DS 0X * Filler - size unknown * END
Deze site is aangesloten bij WebRing. Bekijkt u gerust de lijst van mainframe-gerelateerde sites. |
Dino's zijn niet dood. Ze zijn gezond en wel en leven in computer-centra overal om ons heen. Zij spreken in tongen en doen wonderbare magie met computers. Pas op voor de dino! En voor het geval u zit te wachten op het definitieve einde van deze dino's: onthoud dat dino's de wereld 155 miljoen jaren hebben geregeerd! | |
[ Aanmelden | Ring Overzicht | Willekeurig | | ] |
Hieronder vindt u het logo van onze sponsor en logos van web-standaarden waaraan deze web-pagina voldoet.