Skip to content

Commit

Permalink
ci(feat): Add additional testing for intrinsics.
Browse files Browse the repository at this point in the history
  • Loading branch information
c272 committed May 20, 2024
1 parent 13f2c41 commit 7e7ccc2
Show file tree
Hide file tree
Showing 5 changed files with 342 additions and 10 deletions.
10 changes: 5 additions & 5 deletions crates/compiler/src/tests/data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ fn str_initial_value() {
CommonTestRunner::new("str_initial_val")
.source(r#"
IDENTIFICATION DIVISION.
PROGRAM-ID. INITIAL-VALUE-TEST.
PROGRAM-ID. STR-INITIAL-VALUE-TEST.
DATA DIVISION.
WORKING-STORAGE SECTION.
Expand All @@ -26,7 +26,7 @@ fn invalid_str_initial_value() {
CommonTestRunner::new("invalid_str_initial_val")
.source(r#"
IDENTIFICATION DIVISION.
PROGRAM-ID. INITIAL-VALUE-TEST.
PROGRAM-ID. INV-STR-INITIAL-VALUE-TEST.
DATA DIVISION.
WORKING-STORAGE SECTION.
Expand All @@ -46,7 +46,7 @@ fn int_initial_value() {
CommonTestRunner::new("int_initial_val")
.source(r#"
IDENTIFICATION DIVISION.
PROGRAM-ID. INITIAL-VALUE-TEST.
PROGRAM-ID. INT-INITIAL-VALUE-TEST.
DATA DIVISION.
WORKING-STORAGE SECTION.
Expand All @@ -66,7 +66,7 @@ fn invalid_int_initial_value() {
CommonTestRunner::new("invalid_int_initial_val")
.source(r#"
IDENTIFICATION DIVISION.
PROGRAM-ID. INITIAL-VALUE-TEST.
PROGRAM-ID. INV-INT-INITIAL-VALUE-TEST.
DATA DIVISION.
WORKING-STORAGE SECTION.
Expand All @@ -86,7 +86,7 @@ fn float_initial_value() {
CommonTestRunner::new("float_initial_val")
.source(r#"
IDENTIFICATION DIVISION.
PROGRAM-ID. INITIAL-VALUE-TEST.
PROGRAM-ID. FLT-INITIAL-VALUE-TEST.
DATA DIVISION.
WORKING-STORAGE SECTION.
Expand Down
161 changes: 161 additions & 0 deletions crates/compiler/src/tests/intrinsics.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
use super::common::CommonTestRunner;

/// Tests that the "MOD" intrinsic functions correctly on an exact
/// divisor.
#[test]
fn mod_exact() {
CommonTestRunner::new("mod_exact")
.source(r#"
IDENTIFICATION DIVISION.
PROGRAM-ID. MOD-EXACT.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 OUT-VAL PIC 9(4) COMP.
PROCEDURE DIVISION.
MOVE FUNCTION MOD(4, 2) TO OUT-VAL.
DISPLAY OUT-VAL.
STOP RUN.
"#)
.expect_output("0\n")
.run();
}

/// Tests that the "MOD" intrinsic functions correctly on an exact
/// divisor.
#[test]
fn mod_non_divisor() {
CommonTestRunner::new("mod_non_divisor")
.source(r#"
IDENTIFICATION DIVISION.
PROGRAM-ID. MOD-NON-DIV.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 OUT-VAL PIC 9(4) COMP.
PROCEDURE DIVISION.
MOVE FUNCTION MOD(5, 3) TO OUT-VAL.
DISPLAY OUT-VAL.
STOP RUN.
"#)
.expect_output("2\n")
.run();
}

/// Tests that the "LENGTH" intrinsic functions correctly on a zero
/// length string.
#[test]
fn str_length_zero() {
CommonTestRunner::new("str_length_zero")
.source(r#"
IDENTIFICATION DIVISION.
PROGRAM-ID. STR-LEN-ZERO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 OUT-VAL PIC 9(4) COMP.
PROCEDURE DIVISION.
MOVE FUNCTION LENGTH("") TO OUT-VAL.
DISPLAY OUT-VAL.
STOP RUN.
"#)
.expect_output("0\n")
.run();
}

/// Tests that the "LENGTH" intrinsic functions correctly on a
/// non-zero length string.
#[test]
fn str_length_non_zero() {
CommonTestRunner::new("str_length_non_zero")
.source(r#"
IDENTIFICATION DIVISION.
PROGRAM-ID. STR-LEN-NON-ZERO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 OUT-VAL PIC 9(4) COMP.
PROCEDURE DIVISION.
MOVE FUNCTION LENGTH("SomeLitVal") TO OUT-VAL.
DISPLAY OUT-VAL.
STOP RUN.
"#)
.expect_output("10\n")
.run();
}

/// Tests that the "RANDOM" intrinsic generates different
/// values on subsequent executions.
#[test]
fn random_differs() {
CommonTestRunner::new("random_differs")
.source(r#"
IDENTIFICATION DIVISION.
PROGRAM-ID. RANDOM-DIFFERS.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A-VAL PIC S9(4)P9(4) COMP.
01 B-VAL PIC S9(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
DISPLAY "pass"
END-IF.
STOP RUN.
"#)
.expect_output("pass\n")
.run();
}

/// Tests that the "INTEGER" intrinsic correctly rounds up a given
/// floating point value.
#[test]
fn integer_rounds_up() {
CommonTestRunner::new("integer_rounds_up")
.source(r#"
IDENTIFICATION DIVISION.
PROGRAM-ID. INT-ROUNDS-UP.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 OUT-VAL PIC 9(4) COMP.
PROCEDURE DIVISION.
MOVE FUNCTION INTEGER(2.398282) TO OUT-VAL.
DISPLAY OUT-VAL.
STOP RUN.
"#)
.expect_output("3\n")
.run();
}

/// Tests that the "INTEGER" intrinsic correctly converts an exact
/// floating point value to the equivalent integer.
#[test]
fn integer_translates_exact() {
CommonTestRunner::new("integer_translates_exact")
.source(r#"
IDENTIFICATION DIVISION.
PROGRAM-ID. INT-TRANS-EXACT.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 OUT-VAL PIC 9(4) COMP.
PROCEDURE DIVISION.
MOVE FUNCTION INTEGER(214.0) TO OUT-VAL.
DISPLAY OUT-VAL.
STOP RUN.
"#)
.expect_output("214\n")
.run();
}
44 changes: 43 additions & 1 deletion crates/compiler/src/tests/io.rs
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ fn accept_str() {
CommonTestRunner::new("accept_str")
.source(r#"
IDENTIFICATION DIVISION.
PROGRAM-ID. DISPLAY-DATA-TEST.
PROGRAM-ID. ACCEPT-STR-TEST.
DATA DIVISION.
WORKING-STORAGE SECTION.
Expand All @@ -96,4 +96,46 @@ STOP RUN.
"#)
.expect_output_with_input("InitialVal\n", "InitialVal\n")
.run();
}

/// Tests that accepting an integer via. stdin works as expected.
#[test]
fn accept_int() {
CommonTestRunner::new("accept_int")
.source(r#"
IDENTIFICATION DIVISION.
PROGRAM-ID. ACCEPT-INT-TEST.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 INT-VAL PIC 9(4) COMP.
PROCEDURE DIVISION.
ACCEPT INT-VAL.
DISPLAY INT-VAL.
STOP RUN.
"#)
.expect_output_with_input("2024\n", "2024\n")
.run();
}

/// Tests that accepting a floating point value via. stdin works as expected.
#[test]
fn accept_float() {
CommonTestRunner::new("accept_float")
.source(r#"
IDENTIFICATION DIVISION.
PROGRAM-ID. ACCEPT-FLT-TEST.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 FLT-VAL PIC S9(4)P9(5) COMP.
PROCEDURE DIVISION.
ACCEPT FLT-VAL.
DISPLAY FLT-VAL.
STOP RUN.
"#)
.expect_output_with_input("-1234.5678\n", "-1234.5678\n")
.run();
}
Loading

0 comments on commit 7e7ccc2

Please sign in to comment.