Fizzbuzz.cbl
Note: This copybook is used with both example 1 and example 2.
$set sourceformat"variable"
Program-Id. fizzbuzz.
Working-Storage Section.
01 Current-Number Pic 9999.
01 Current-Result Pic x(10).
01 Args Pic x(128).
01 Starting-Numberx Pic x(10).
01 Ending-Numberx Pic x(10).
01 Starting-Number Pic 9999.
01 Ending-Number Pic 9999.
Procedure Division.
Move Spaces To Starting-Numberx, Ending-NumberX
Move 1 To Starting-Number
Move 100 To Ending-Number
Accept Args From COMMAND-LINE
Unstring Args Delimited By Space
Into Starting-Number, Ending-Numberx
End-Unstring
If Starting-Numberx Not Equal Spaces
Move Function numval(Starting-Numberx) To Starting-Number
End-If
If Ending-Numberx Not Equal Spaces
Move Function numval(Ending-Numberx) To Ending-Number
End-If
Perform Varying Current-Number From Starting-Number By 1
Until Current-Number > Ending-Number
Perform Process-Number
Display Current-Result
End-Perform
Goback.
Process-Number Section.
Evaluate True
When Function mod(Current-Number,15) Equal 0
Move "FIZZBUZZ" To Current-Result
When Function Mod(Current-Number,7) Equal 0
Move "BAZ" To Current-Result
When Function Mod(Current-Number,5) Equal 0
Move "BUZZ" To Current-Result
When Function mod(Current-Number, 3) Equal 0
Move "FIZZ" To Current-Result
When Other
Move Current-Number To Current-Result
End-Evaluate
.
End Program fizzbuzz.
MFUPD_Fizzbuzz.cpy
Note: This copybook is used with example 1.
Entry "MFUT_FIZZBUZZ".
Move 3 To CURRENT-NUMBER
Perform Process-Number
display CURRENT-NUMBER " IS " CURRENT-RESULT
If CURRENT-RESULT Not Equal "FIZZ"
Call "MFU_ASSERT_FAIL_Z" using z"3 should be FIZZ"
End-If
Move 15 To CURRENT-NUMBER
Perform Process-Number
display CURRENT-NUMBER " IS " CURRENT-RESULT
If CURRENT-RESULT Not Equal "FIZZBUZZ"
Call "MFU_ASSERT_FAIL_Z" using z"15 should be FIZZBUZZ"
End-If
MFUWS_Fizzbuzz.cpy
Note: This copybook is used with example 2.
copy "mfunit.cpy".
*> data driven externals
01 mfu-dd-CURRENT-NUMBER is MFU-DD-VALUE external.
01 mfu-dd-CURRENT-RESULT is MFU-DD-VALUE external.
01 ws-test-temp-message pic x(255).
MFUPD_Fizzbuzz.cpy
Note: This copybook is used with example 2.
*>----------------------------------------------------------------
*>
*> A set of tests for the "fizzbuzz" example
*>
*> Objective:
*> Tests for fizz, buzz, baz, fizzbuzz and normal number
*>
*>----------------------------------------------------------------
Entry "MFUT_FIZZBUZZ".
Move Function numval(mfu-dd-CURRENT-NUMBER) To CURRENT-NUMBER
Perform PROCESS-NUMBER
If CURRENT-RESULT Not Equal mfu-dd-CURRENT-RESULT
Move Spaces To ws-test-temp-message
String "FAIL - Got: " Delimited By Size
mfu-dd-CURRENT-RESULT Delimited By Space
", Expected " Delimited By Size
CURRENT-RESULT Delimited By Space
", For number " Delimited By Size
mfu-dd-CURRENT-NUMBER Delimited By Space
x"0" Delimited By Size
Into ws-test-temp-message
End-String
Call "MFU_ASSERT_FAIL_Z" Using
By Reference ws-test-temp-message
End-Call
End-If
Goback.
Fizzbuzz-Metadata Section.
Entry "MFUM_FIZZBUZZ"
Move "csv:fizzbuzz_data.csv" To MFU-MD-TESTDATA
Goback.
fizzbuzz_data.csv
Note: This data file is used with example 2.
CURRENT-NUMBER,CURRENT-RESULT
0,FIZZBUZZ
1,0001
2,0002
3,FIZZ
4,0004
5,BUZZ
6,FIZZ
7,BAZ
8,0008
9,FIZZ
10,BUZZ
11,0011
12,FIZZ
13,0013
14,BAZ
14,BAZ
15,FIZZBUZZ
16,0016
17,0017
18,FIZZ
19,0019
20,BUZZ