I’ve done exercises ‘Pangram’ and ‘Leap’, verified my solution with a COBOL Online Compiler but still the test functionality in exercism shows that some tests are not correct.
Does anyone know how this can be fixed or is this a common issue with the testing of COBOL exercises on the browser?
Unfortunately, that way you cannot post your solution and the exercise just stays open all the time although it is solved…
Best Regards
Can you include your code for those exercises, which tests were failing, and what error messages were you getting? That’ll be helpful for us to understand what’s going on. Also, when you verified your solution with the compiler, were you using the test cases provided by Exercism?
Of course, see my code and test case summary for COBOL Pangram and COBOL Leap below. Exactly, verfied my code with the testcases provided by Exercism in the COBOL Online Compiler of Online COBOL Compiler
Pangram: My Code
IDENTIFICATION DIVISION.
PROGRAM-ID. PANGRAM.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-SENTENCE PIC X(60) VALUE '’.
01 WS-SENTENCE-UC PIC X(60).
01 WS-SENT-PNTR PIC 9(2) VALUE 1.
01 WS-LETTER PIC X(1) VALUE 'A'.
01 WS-RESULT PIC 9 VALUE 0.
01 WS-COUNTER PIC 9(2) VALUE 0.
01 WS-ALPH-TABLE.
05 WS-ALPH-VALUES.
10 FILLER PIC X(13) VALUE 'ABCDEFGHIJKLM'.
10 FILLER PIC X(13) VALUE 'NOPQRSTUVWXYZ'.
05 WS-ALPH-ENTRIES REDEFINES WS-ALPH-VALUES.
10 WS-ALPH-ENTRY PIC X(01) OCCURS 26 TIMES.
05 WS-ALPH-DRIVER PIC 9(2) VALUE 1.
05 WS-CHECK-CHAR PIC X(1).
PROCEDURE DIVISION.
PANGRAM SECTION.
*>make sentence upper case
MOVE FUNCTION UPPER-CASE(WS-SENTENCE) TO WS-SENTENCE-UC
*>iterate through alphabet
PERFORM LENGTH OF WS-ALPH-VALUES TIMES
*>take each character one at a time
MOVE WS-ALPH-ENTRY(WS-ALPH-DRIVER) TO WS-CHECK-CHAR
*>go through sentence, if sentence contains character, increase counter
PERFORM LENGTH OF WS-SENTENCE TIMES
IF WS-SENTENCE-UC(WS-SENT-PNTR:1) = WS-CHECK-CHAR THEN
MOVE 1 TO WS-SENT-PNTR
ADD 1 TO WS-COUNTER
EXIT PERFORM
ELSE
ADD 1 TO WS-SENT-PNTR
END-IF
END-PERFORM
MOVE 1 TO WS-SENT-PNTR
ADD 1 TO WS-ALPH-DRIVER
END-PERFORM
*>if counter is 26 at the end return 1, else return 0
IF WS-COUNTER = 26 THEN
MOVE 1 TO WS-RESULT
END-IF
DISPLAY WS-RESULT
DISPLAY WS-COUNTER
EXIT.
Pangram: Exercism Test Cases
test.cob:157: warning: alphanumeric literal has zero length; a SPACE will be assumed [-Wothers]
155 | TO UT-TEST-CASE-NAME..
156 | PERFORM UT-INITIALIZE-MOCK-COUNT..
157 > MOVE '' TO WS-SENTENCE..
158 | PERFORM PANGRAM..
159 | ADD 1 TO UT-TEST-CASE-COUNT..
00
0
PASS: 1. empty sentence
04
0
**** FAIL: 2. perfect lower case
EXPECTED +00000000001.0000000, WAS +00000000000.0000000
30
0
**** FAIL: 3. only lower case
EXPECTED +00000000001.0000000, WAS +00000000000.0000000
55
0
PASS: 4. missing the letter 'x'
76
0
PASS: 5. missing the letter 'h'
84
0
**** FAIL: 6. with underscores
EXPECTED +00000000001.0000000, WAS +00000000000.0000000
10
0
**** FAIL: 7. with numbers
EXPECTED +00000000001.0000000, WAS +00000000000.0000000
34
0
PASS: 8. missing letters replaced by numbers
52
0
**** FAIL: 9. mixed case and punctuation
EXPECTED +00000000001.0000000, WAS +00000000000.0000000
64
0
PASS: 10. case insensitive
90
0
PASS: 11. a-m and A-M are 26 different characters but not a pangram
11 TEST CASES WERE EXECUTED
6 PASSED
5 FAILED
=================================================
Leap: My Code
IDENTIFICATION DIVISION.
PROGRAM-ID. LEAP.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-YEAR PIC 9(4) VALUE 1800.
01 WS-RESULT PIC 9(1) VALUE 0.
01 WS-TEMP PIC 9(5).
01 WS-REM4 PIC 9(5).
01 WS-REM100 PIC 9(5).
01 WS-REM400 PIC 9(5).
PROCEDURE DIVISION.
LEAP SECTION.
DIVIDE WS-YEAR BY 4 GIVING WS-TEMP REMAINDER WS-REM4
DIVIDE WS-YEAR BY 100 GIVING WS-TEMP REMAINDER WS-REM100
DIVIDE WS-YEAR BY 400 GIVING WS-TEMP REMAINDER WS-REM400
IF WS-REM4 = 0 AND (WS-REM100 NOT = 0 OR WS-REM400 = 0) THEN
MOVE 1 TO WS-RESULT
END-IF
DISPLAY WS-RESULT
EXIT.
Leap: Exercism Test Cases
PASS: 1. year not divisible by 4 in common year
PASS: 2. year divisible by 2, not divisible by 4 in common year
PASS: 3. year divisible by 4, not divisible by 100 in leap year
PASS: 4. year divisible by 4 and 5 is still a leap year
**** FAIL: 5. year divisible by 100, not divisible by 400 in common year
EXPECTED +00000000000.0000000, WAS +00000000001.0000000
**** FAIL: 6. year divisible by 100 but not by 3 is still not a leap year
EXPECTED +00000000000.0000000, WAS +00000000001.0000000
PASS: 7. year divisible by 400 is leap year
PASS: 8. year divisible by 400 but not by 125 is still a leap year
**** FAIL: 9. year divisible by 200, not divisible by 400 in common year
EXPECTED +00000000000.0000000, WAS +00000000001.0000000
9 TEST CASES WERE EXECUTED
6 PASSED
3 FAILED
=================================================