-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ci(feat): Add additional tests for arithmetic, control.
- Loading branch information
Showing
6 changed files
with
452 additions
and
110 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
use super::common::CommonTestRunner; | ||
|
||
/// Tests performing a single paragraph. | ||
#[test] | ||
fn perform_single() { | ||
CommonTestRunner::new("perform_single") | ||
.source(r#" | ||
IDENTIFICATION DIVISION. | ||
PROGRAM-ID. PERFORM-SINGLE-TEST. | ||
PROCEDURE DIVISION. | ||
PERFORM TEST-PARA. | ||
STOP RUN. | ||
TEST-PARA. | ||
DISPLAY "Hello". | ||
"#) | ||
.expect_output("Hello\n") | ||
.run(); | ||
} | ||
|
||
/// Tests performing a set of paragraphs. | ||
#[test] | ||
fn perform_thru() { | ||
CommonTestRunner::new("perform_thru") | ||
.source(r#" | ||
IDENTIFICATION DIVISION. | ||
PROGRAM-ID. PERFORM-THRU-TEST. | ||
PROCEDURE DIVISION. | ||
PERFORM A-PARA THRU C-PARA. | ||
STOP RUN. | ||
A-PARA. | ||
DISPLAY "Hello". | ||
B-PARA. | ||
DISPLAY "COBOL". | ||
C-PARA. | ||
DISPLAY "World". | ||
"#) | ||
.expect_output("HelloCOBOLWorld\n\n\n") | ||
.run(); | ||
} | ||
|
||
/// Tests performing until a condition is met. | ||
#[test] | ||
fn perform_until() { | ||
CommonTestRunner::new("perform_until") | ||
.source(r#" | ||
IDENTIFICATION DIVISION. | ||
PROGRAM-ID. PERFORM-UNTIL-TEST. | ||
DATA DIVISION. | ||
WORKING-STORAGE SECTION. | ||
01 LIMIT-VAL PIC 9(6) COMP VALUE 0. | ||
PROCEDURE DIVISION. | ||
PERFORM TEST-PARA UNTIL LIMIT-VAL >= 3. | ||
STOP RUN. | ||
TEST-PARA. | ||
DISPLAY "Hello". | ||
ADD 1 TO LIMIT-VAL. | ||
"#) | ||
.expect_output("HelloHelloHello\n\n\n") | ||
.run(); | ||
} | ||
|
||
/// Tests performing a paragraph N times. | ||
#[test] | ||
fn perform_times() { | ||
CommonTestRunner::new("perform_times") | ||
.source(r#" | ||
IDENTIFICATION DIVISION. | ||
PROGRAM-ID. PERFORM-TIMES-TEST. | ||
PROCEDURE DIVISION. | ||
PERFORM TEST-PARA 3 TIMES. | ||
STOP RUN. | ||
TEST-PARA. | ||
DISPLAY "Hello". | ||
"#) | ||
.expect_output("HelloHelloHello\n\n\n") | ||
.run(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,161 +1,159 @@ | ||
use super::common::CommonTestRunner; | ||
|
||
/// Tests that the "MOD" intrinsic functions correctly on an exact | ||
/// divisor. | ||
/// Tests that the MOD intrinsic for an exact divisor functions. | ||
#[test] | ||
fn mod_exact() { | ||
CommonTestRunner::new("mod_exact") | ||
.source(r#" | ||
IDENTIFICATION DIVISION. | ||
PROGRAM-ID. MOD-EXACT. | ||
PROGRAM-ID. MOD-EXACT-TEST. | ||
DATA DIVISION. | ||
WORKING-STORAGE SECTION. | ||
01 OUT-VAL PIC 9(4) COMP. | ||
01 INT-VAL PIC 9(4) COMP. | ||
PROCEDURE DIVISION. | ||
MOVE FUNCTION MOD(4, 2) TO OUT-VAL. | ||
DISPLAY OUT-VAL. | ||
MOVE FUNCTION MOD(20, 2) TO INT-VAL. | ||
DISPLAY INT-VAL. | ||
STOP RUN. | ||
"#) | ||
.expect_output("0\n") | ||
.run(); | ||
} | ||
|
||
/// Tests that the "MOD" intrinsic functions correctly on an exact | ||
/// divisor. | ||
/// Tests that the MOD intrinsic for an non-exact divisor functions. | ||
#[test] | ||
fn mod_non_divisor() { | ||
CommonTestRunner::new("mod_non_divisor") | ||
fn mod_non_exact() { | ||
CommonTestRunner::new("mod_non_exact") | ||
.source(r#" | ||
IDENTIFICATION DIVISION. | ||
PROGRAM-ID. MOD-NON-DIV. | ||
PROGRAM-ID. MOD-NON-EXACT-TEST. | ||
DATA DIVISION. | ||
WORKING-STORAGE SECTION. | ||
01 OUT-VAL PIC 9(4) COMP. | ||
01 INT-VAL PIC 9(4) COMP. | ||
PROCEDURE DIVISION. | ||
MOVE FUNCTION MOD(5, 3) TO OUT-VAL. | ||
DISPLAY OUT-VAL. | ||
MOVE FUNCTION MOD(16, 3) TO INT-VAL. | ||
DISPLAY INT-VAL. | ||
STOP RUN. | ||
"#) | ||
.expect_output("2\n") | ||
.expect_output("1\n") | ||
.run(); | ||
} | ||
|
||
/// Tests that the "LENGTH" intrinsic functions correctly on a zero | ||
/// length string. | ||
/// Tests that the LENGTH intrinsic works for a zero-length string. | ||
#[test] | ||
fn str_length_zero() { | ||
CommonTestRunner::new("str_length_zero") | ||
fn length_zero() { | ||
CommonTestRunner::new("length_zero") | ||
.source(r#" | ||
IDENTIFICATION DIVISION. | ||
PROGRAM-ID. STR-LEN-ZERO. | ||
PROGRAM-ID. LENGTH-ZERO-TEST. | ||
DATA DIVISION. | ||
WORKING-STORAGE SECTION. | ||
01 OUT-VAL PIC 9(4) COMP. | ||
01 STR-VAL PIC X(10) VALUE "". | ||
01 INT-VAL PIC 9(10) COMP. | ||
PROCEDURE DIVISION. | ||
MOVE FUNCTION LENGTH("") TO OUT-VAL. | ||
DISPLAY OUT-VAL. | ||
MOVE FUNCTION LENGTH(STR-VAL) TO INT-VAL. | ||
DISPLAY INT-VAL. | ||
STOP RUN. | ||
"#) | ||
.expect_output("0\n") | ||
.run(); | ||
} | ||
|
||
/// Tests that the "LENGTH" intrinsic functions correctly on a | ||
/// non-zero length string. | ||
/// Tests that the LENGTH intrinsic works for a non-zero length string. | ||
#[test] | ||
fn str_length_non_zero() { | ||
CommonTestRunner::new("str_length_non_zero") | ||
fn length_non_zero() { | ||
CommonTestRunner::new("length_non_zero") | ||
.source(r#" | ||
IDENTIFICATION DIVISION. | ||
PROGRAM-ID. STR-LEN-NON-ZERO. | ||
PROGRAM-ID. LENGTH-NON-ZERO-TEST. | ||
DATA DIVISION. | ||
WORKING-STORAGE SECTION. | ||
01 OUT-VAL PIC 9(4) COMP. | ||
01 STR-VAL PIC X(10) VALUE "SomeStr". | ||
01 INT-VAL PIC 9(10) COMP. | ||
PROCEDURE DIVISION. | ||
MOVE FUNCTION LENGTH("SomeLitVal") TO OUT-VAL. | ||
DISPLAY OUT-VAL. | ||
MOVE FUNCTION LENGTH(STR-VAL) TO INT-VAL. | ||
DISPLAY INT-VAL. | ||
STOP RUN. | ||
"#) | ||
.expect_output("10\n") | ||
.expect_output("7\n") | ||
.run(); | ||
} | ||
|
||
/// Tests that the "RANDOM" intrinsic generates different | ||
/// values on subsequent executions. | ||
|
||
/// Tests that the RANDOM intrinsic differs on subsequent calls. | ||
#[test] | ||
fn random_differs() { | ||
CommonTestRunner::new("random_differs") | ||
.source(r#" | ||
IDENTIFICATION DIVISION. | ||
PROGRAM-ID. RANDOM-DIFFERS. | ||
PROGRAM-ID. RANDOM-DIFFERS-TEST. | ||
DATA DIVISION. | ||
WORKING-STORAGE SECTION. | ||
01 A-VAL PIC S9(4)P9(4) COMP. | ||
01 B-VAL PIC S9(4)P9(4) COMP. | ||
01 A-VAL PIC 9(4)P9(4) COMP. | ||
01 B-VAL PIC 9(4)P9(4) COMP. | ||
PROCEDURE DIVISION. | ||
MOVE FUNCTION RANDOM() TO A-VAL. | ||
MOVE FUNCTION RANDOM() TO B-VAL. | ||
IF A-VAL = B-VAL THEN | ||
DISPLAY "fail" | ||
ELSE | ||
IF NOT A-VAL = B-VAL THEN | ||
DISPLAY "pass" | ||
ELSE | ||
DISPLAY "fail" | ||
END-IF. | ||
STOP RUN. | ||
"#) | ||
.expect_output("pass\n") | ||
.run(); | ||
} | ||
|
||
/// Tests that the "INTEGER" intrinsic correctly rounds up a given | ||
/// floating point value. | ||
/// Tests that the INTEGER intrinsic works for a non-integer equivalent value. | ||
#[test] | ||
fn integer_rounds_up() { | ||
CommonTestRunner::new("integer_rounds_up") | ||
fn integer_converts_float() { | ||
CommonTestRunner::new("integer_converts_float") | ||
.source(r#" | ||
IDENTIFICATION DIVISION. | ||
PROGRAM-ID. INT-ROUNDS-UP. | ||
PROGRAM-ID. INT-CONV-FLOAT-TEST. | ||
DATA DIVISION. | ||
WORKING-STORAGE SECTION. | ||
01 OUT-VAL PIC 9(4) COMP. | ||
01 FLT-VAL PIC 9(4)P9(4) COMP VALUE 20.43. | ||
01 INT-VAL PIC 9(10) COMP. | ||
PROCEDURE DIVISION. | ||
MOVE FUNCTION INTEGER(2.398282) TO OUT-VAL. | ||
DISPLAY OUT-VAL. | ||
MOVE FUNCTION INTEGER(FLT-VAL) TO INT-VAL. | ||
DISPLAY INT-VAL. | ||
STOP RUN. | ||
"#) | ||
.expect_output("3\n") | ||
.expect_output("21\n") | ||
.run(); | ||
} | ||
|
||
/// Tests that the "INTEGER" intrinsic correctly converts an exact | ||
/// floating point value to the equivalent integer. | ||
/// Tests that the INTEGER intrinsic works for an integer equivalent value. | ||
#[test] | ||
fn integer_translates_exact() { | ||
CommonTestRunner::new("integer_translates_exact") | ||
fn integer_converts_int() { | ||
CommonTestRunner::new("integer_converts_int") | ||
.source(r#" | ||
IDENTIFICATION DIVISION. | ||
PROGRAM-ID. INT-TRANS-EXACT. | ||
PROGRAM-ID. INT-CONV-INT-TEST. | ||
DATA DIVISION. | ||
WORKING-STORAGE SECTION. | ||
01 OUT-VAL PIC 9(4) COMP. | ||
01 FLT-VAL PIC 9(4)P9(4) COMP VALUE 220.0. | ||
01 INT-VAL PIC 9(10) COMP. | ||
PROCEDURE DIVISION. | ||
MOVE FUNCTION INTEGER(214.0) TO OUT-VAL. | ||
DISPLAY OUT-VAL. | ||
MOVE FUNCTION INTEGER(FLT-VAL) TO INT-VAL. | ||
DISPLAY INT-VAL. | ||
STOP RUN. | ||
"#) | ||
.expect_output("214\n") | ||
.expect_output("220\n") | ||
.run(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.