From 83980058fc7bdb4ca1205378a038b118f4edf7ae Mon Sep 17 00:00:00 2001 From: squid-protocol Date: Wed, 7 Oct 2026 18:09:36 -0400 Subject: [PATCH 1/3] equivalence: cases for GenApp's front-end and test programs (#4270) Eleven GenApp programs whose only proof gap was 'no case': - the front ends LGACUS01, LGAPOL01, LGDPOL01, LGICUS01, LGIPOL01, LGUCUS01, LGUPOL01, each running its whole back-end chain (Db2 service, VSAM service, LGSTSQ) in the task, with the back-end cases' inputs plus the front end's own paths (no COMMAREA, short COMMAREA, wrong request id); - the BMS test transactions LGTESTP1-4 (SSMAP maps, twelve programs per task): inquire / add / delete / update, CLEAR, PF3, MAPFAIL, bad option. Harness / translator fixes, each with a test: - stage_copybooks no longer stages a .bms map source as .cpy (it shadowed the generated symbolic map COPY SSMAP means); - a program with no DFHCOMMAREA still gets EIBCALEN from the task's area (LGTESTP's IF EIBCALEN > 0 GO TO A-GAIN); - an integer literal compared with an alphanumeric item keeps its digits as written (ENP4CNOO Not = 0000000000); - each LINKed SQL program's GG-SQL-IDs start at the next free hundred (1000 x its place ran past PIC 9(4) at the tenth program); - ggsql.c refuses a statement the CLI fails in the client (-99999, Q10). LGTESTP4's successful add is left out: #4652 (C11). Co-Authored-By: Claude Opus 5.5 --- docs/language_status/oracle_assumptions.md | 11 + gitgalaxy/tools/cobol_to_java/det/expr.py | 14 +- gitgalaxy/tools/cobol_to_java/det/gen.py | 4 + gitgalaxy/tools/cobol_to_java/det/program.py | 13 + tests/cobol_mainframe/test_det_translate.py | 26 + .../cobol_mainframe/test_equivalence_cics.py | 12 + tests/cobol_mainframe/test_estate4_dbb.py | 13 + tests/equivalence/db2/ggsql.c | 4 + tests/equivalence/genapp-lgacus01/LICENSE | 277 ++++++ tests/equivalence/genapp-lgacus01/NOTICE | 12 + tests/equivalence/genapp-lgacus01/case.json | 126 +++ .../equivalence/genapp-lgacus01/ksdscust.txt | 10 + tests/equivalence/genapp-lgapol01/LICENSE | 277 ++++++ tests/equivalence/genapp-lgapol01/NOTICE | 12 + tests/equivalence/genapp-lgapol01/case.json | 133 +++ .../equivalence/genapp-lgapol01/ksdspoly.txt | 9 + tests/equivalence/genapp-lgdpol01/LICENSE | 277 ++++++ tests/equivalence/genapp-lgdpol01/NOTICE | 12 + tests/equivalence/genapp-lgdpol01/case.json | 189 ++++ .../equivalence/genapp-lgdpol01/ksdspoly.txt | 9 + tests/equivalence/genapp-lgicus01/LICENSE | 277 ++++++ tests/equivalence/genapp-lgicus01/NOTICE | 12 + tests/equivalence/genapp-lgicus01/case.json | 99 +++ tests/equivalence/genapp-lgipol01/LICENSE | 277 ++++++ tests/equivalence/genapp-lgipol01/NOTICE | 12 + tests/equivalence/genapp-lgipol01/case.json | 151 ++++ tests/equivalence/genapp-lgipol01/seed.sql | 836 ++++++++++++++++++ tests/equivalence/genapp-lgtestp1/LICENSE | 277 ++++++ tests/equivalence/genapp-lgtestp1/NOTICE | 12 + tests/equivalence/genapp-lgtestp1/case.json | 391 ++++++++ .../equivalence/genapp-lgtestp1/ksdspoly.txt | 10 + tests/equivalence/genapp-lgtestp2/LICENSE | 277 ++++++ tests/equivalence/genapp-lgtestp2/NOTICE | 12 + tests/equivalence/genapp-lgtestp2/case.json | 379 ++++++++ .../equivalence/genapp-lgtestp2/ksdspoly.txt | 10 + tests/equivalence/genapp-lgtestp3/LICENSE | 277 ++++++ tests/equivalence/genapp-lgtestp3/NOTICE | 12 + tests/equivalence/genapp-lgtestp3/case.json | 373 ++++++++ .../equivalence/genapp-lgtestp3/ksdspoly.txt | 10 + tests/equivalence/genapp-lgtestp4/LICENSE | 277 ++++++ tests/equivalence/genapp-lgtestp4/NOTICE | 12 + tests/equivalence/genapp-lgtestp4/case.json | 355 ++++++++ .../equivalence/genapp-lgtestp4/ksdspoly.txt | 10 + tests/equivalence/genapp-lgucus01/LICENSE | 277 ++++++ tests/equivalence/genapp-lgucus01/NOTICE | 12 + tests/equivalence/genapp-lgucus01/case.json | 111 +++ .../genapp-lgucus01/ksdscust-vsam-only.txt | 1 + .../equivalence/genapp-lgucus01/ksdscust.txt | 10 + tests/equivalence/genapp-lgupol01/LICENSE | 277 ++++++ tests/equivalence/genapp-lgupol01/NOTICE | 12 + tests/equivalence/genapp-lgupol01/case.json | 169 ++++ .../equivalence/genapp-lgupol01/ksdspoly.txt | 10 + tests/tools/equivalence_cics.py | 18 +- tests/tools/equivalence_common.py | 6 +- 54 files changed, 6693 insertions(+), 8 deletions(-) create mode 100644 tests/equivalence/genapp-lgacus01/LICENSE create mode 100644 tests/equivalence/genapp-lgacus01/NOTICE create mode 100644 tests/equivalence/genapp-lgacus01/case.json create mode 100644 tests/equivalence/genapp-lgacus01/ksdscust.txt create mode 100644 tests/equivalence/genapp-lgapol01/LICENSE create mode 100644 tests/equivalence/genapp-lgapol01/NOTICE create mode 100644 tests/equivalence/genapp-lgapol01/case.json create mode 100644 tests/equivalence/genapp-lgapol01/ksdspoly.txt create mode 100644 tests/equivalence/genapp-lgdpol01/LICENSE create mode 100644 tests/equivalence/genapp-lgdpol01/NOTICE create mode 100644 tests/equivalence/genapp-lgdpol01/case.json create mode 100644 tests/equivalence/genapp-lgdpol01/ksdspoly.txt create mode 100644 tests/equivalence/genapp-lgicus01/LICENSE create mode 100644 tests/equivalence/genapp-lgicus01/NOTICE create mode 100644 tests/equivalence/genapp-lgicus01/case.json create mode 100644 tests/equivalence/genapp-lgipol01/LICENSE create mode 100644 tests/equivalence/genapp-lgipol01/NOTICE create mode 100644 tests/equivalence/genapp-lgipol01/case.json create mode 100644 tests/equivalence/genapp-lgipol01/seed.sql create mode 100644 tests/equivalence/genapp-lgtestp1/LICENSE create mode 100644 tests/equivalence/genapp-lgtestp1/NOTICE create mode 100644 tests/equivalence/genapp-lgtestp1/case.json create mode 100644 tests/equivalence/genapp-lgtestp1/ksdspoly.txt create mode 100644 tests/equivalence/genapp-lgtestp2/LICENSE create mode 100644 tests/equivalence/genapp-lgtestp2/NOTICE create mode 100644 tests/equivalence/genapp-lgtestp2/case.json create mode 100644 tests/equivalence/genapp-lgtestp2/ksdspoly.txt create mode 100644 tests/equivalence/genapp-lgtestp3/LICENSE create mode 100644 tests/equivalence/genapp-lgtestp3/NOTICE create mode 100644 tests/equivalence/genapp-lgtestp3/case.json create mode 100644 tests/equivalence/genapp-lgtestp3/ksdspoly.txt create mode 100644 tests/equivalence/genapp-lgtestp4/LICENSE create mode 100644 tests/equivalence/genapp-lgtestp4/NOTICE create mode 100644 tests/equivalence/genapp-lgtestp4/case.json create mode 100644 tests/equivalence/genapp-lgtestp4/ksdspoly.txt create mode 100644 tests/equivalence/genapp-lgucus01/LICENSE create mode 100644 tests/equivalence/genapp-lgucus01/NOTICE create mode 100644 tests/equivalence/genapp-lgucus01/case.json create mode 100644 tests/equivalence/genapp-lgucus01/ksdscust-vsam-only.txt create mode 100644 tests/equivalence/genapp-lgucus01/ksdscust.txt create mode 100644 tests/equivalence/genapp-lgupol01/LICENSE create mode 100644 tests/equivalence/genapp-lgupol01/NOTICE create mode 100644 tests/equivalence/genapp-lgupol01/case.json create mode 100644 tests/equivalence/genapp-lgupol01/ksdspoly.txt diff --git a/docs/language_status/oracle_assumptions.md b/docs/language_status/oracle_assumptions.md index eefb96b73..4d94e12e2 100644 --- a/docs/language_status/oracle_assumptions.md +++ b/docs/language_status/oracle_assumptions.md @@ -116,6 +116,7 @@ verdict, but it limits what the proof says about inputs outside the scenarios. | Q7 | Db2 | `CCSID EBCDIC` tables hold Unicode text: string order differs | DIFFERS | no | | Q8 | Db2 | Positioned UPDATE / DELETE: the Java side by row id | MATCHED | yes (GenApp LGUPDB01) | | Q9 | Db2 | More host variables than columns: SQLWARN3, the rest untouched | MATCHED | yes (GenApp LGUPDB01) | +| Q10 | Db2 | A statement the driver fails with no Db2 SQLCODE (a blank timestamp host variable) | REFUSED (the task; an enumerated fault task not judged) | no (met by LGTESTP4's add, left out: #4652) | | J1 | Java | VSAM files on H2, not the target database | ASSUMED | — | | M1 | method | The scenarios are ours, not production traffic | — | — | | M2 | method | SQL faults: injected on both sides at a statement (#4173), the SQLCA as the stub sets it | MATCHED (ASSUMED SQLCA) | yes (17 Db2 cases) | @@ -316,6 +317,9 @@ verdict, but it limits what the proof says about inputs outside the scenarios. GnuCOBOL does not; the proofs differ on both inputs. - **Now.** Those inputs are not in the case, so the three COMEN01C survivors in the port's own digit test stay case gaps. A z/OS run (#4050) settles which side is right. +- **Also met (#4652).** GenApp LGTESTP4's add leaves CA-BROKERID / CA-PAYMENT (PIC 9) as spaces, which LGAPDB01 moves + to binary host variables: GnuCOBOL gives 931773840 / 707773840, the det port 0. The data is the program's own, so + genapp-lgtestp4 leaves that add out. ### C12. FUNCTION RANDOM — the numbers DIFFER from z/OS, the interface ASSUMED; refused where IBM does not allow the seed - **IBM** (Enterprise COBOL 6.4 Language Reference, RANDOM, @@ -1070,6 +1074,13 @@ The length READQ TS returns on ITEMERR or QIDERR is not documented, so it is not leaves the sixth as it was; both sides now do the same (the COBOL stub had reported an error, the Java side a NULL). +### Q10. A statement the driver fails with no Db2 SQLCODE — REFUSED (#4270) +- **What.** A host variable Db2 cannot take (GenApp LGAPDB01's INSERT COMMERCIAL with a blank CA-LASTCHANGED as its + REQUESTDATE, reached when the SELECT LASTCHANGED before it is faulted) fails in the client: Db2's CLI gives its own + native code -99999 (SQLSTATE 22007), IBM's JDBC driver its own -4220. What Db2 for z/OS answers is not known here, + so the COBOL stub stops the task by name ("the CLI failed it in the client") instead of passing -99999 on as an + SQLCODE: an enumerated fault task (M2) that reaches it is not judged; a declared scenario stops the case. + ## The Java side ### J1. Files on H2 — ASSUMED diff --git a/gitgalaxy/tools/cobol_to_java/det/expr.py b/gitgalaxy/tools/cobol_to_java/det/expr.py index 856f943f2..9279d05d7 100644 --- a/gitgalaxy/tools/cobol_to_java/det/expr.py +++ b/gitgalaxy/tools/cobol_to_java/det/expr.py @@ -32,6 +32,16 @@ class Lit: """A nonnumeric literal (text) or a numeric literal (Decimal).""" value: str | Decimal | bytes + # #4270: a numeric literal's digits as written. Compared with an alphanumeric item, an integer literal is the + # nonnumeric literal of its digits (IBM, "Comparison of numeric and alphanumeric operands"), leading zeros and all: + # GenApp's LGTESTP4 `ENP4CNOO Not = 0000000000` -- a Decimal keeps no leading zeros. + digits: str | None = field(default=None, compare=False) + + +def _digits(tok: str) -> str | None: + """An unsigned integer literal's digits as written (`0000000000`), else None.""" + t = tok.lstrip("+-") + return t if t.isdigit() else None @dataclass @@ -180,10 +190,10 @@ def operand(self) -> object: raise ExprError("NULL: pointers are not modelled") if _is_number(tok): self.i += 1 - return Lit(Decimal(tok.replace(",", ".") if tok.count(",") == 1 and "." not in tok else tok)) + return Lit(Decimal(tok.replace(",", ".") if tok.count(",") == 1 and "." not in tok else tok), _digits(tok)) if u in ("+", "-") and (nxt1 := self.peek(1)) is not None and _is_number(nxt1): self.i += 2 - return Lit(Decimal(u + self.t[self.i - 1])) + return Lit(Decimal(u + self.t[self.i - 1]), _digits(self.t[self.i - 1])) if u == "FUNCTION": self.i += 1 name = self.take().upper() diff --git a/gitgalaxy/tools/cobol_to_java/det/gen.py b/gitgalaxy/tools/cobol_to_java/det/gen.py index a8c850245..5dd22e790 100644 --- a/gitgalaxy/tools/cobol_to_java/det/gen.py +++ b/gitgalaxy/tools/cobol_to_java/det/gen.py @@ -881,6 +881,10 @@ def cmp(self, a: E.Ref, b, jop: str = "<") -> str: if isinstance(b, E.Ref): return f"Cobol.compare({fa}, {self.field_expr(b)}, CS{c})" if isinstance(b, E.Lit): + if isinstance(b.value, Decimal) and b.digits and not self.is_numeric(a): + # #4270: an integer literal against an alphanumeric item: the nonnumeric literal of its digits as + # written (`0000000000`, not the value's `0`) + return f"Cobol.compare({fa}, {jstr(b.digits)}, CS{c})" if isinstance(b.value, Decimal): return f"Cobol.compare({fa}, {self.const(b.value)}, CS{c})" return f"Cobol.compare({fa}, {self.text(b)}, CS{c})" diff --git a/gitgalaxy/tools/cobol_to_java/det/program.py b/gitgalaxy/tools/cobol_to_java/det/program.py index f4a02038c..c6d14240b 100644 --- a/gitgalaxy/tools/cobol_to_java/det/program.py +++ b/gitgalaxy/tools/cobol_to_java/det/program.py @@ -1252,6 +1252,19 @@ def _cics_parts(gen: G.Gen, records: list, roots: dict, proc: S.Procedure, " }", "", ] + else: + # #4270 (GenApp's LGTESTP1-4: no DFHCOMMAREA, `IF EIBCALEN > 0 GO TO A-GAIN`): a program with no LINKAGE + # COMMAREA still has EIBCALEN, the length of the area its task started with (the RETURN TRANSID COMMAREA it + # left) -- only no storage to address it through. Its length is the DTO's the task carries. + for cls in [x for x in dict.fromkeys([cx.gp.contract, *cx.gp.records.values()]) if x]: + try: + size = cx.gp.dto(cls).size + except (OSError, C.CicsError): + continue + kw = "if" if not ca_in else "} else if" + ca_in += [f" {kw} (ca instanceof {cls}) {{", f" calen = cx(task, {size});"] + if ca_in: + ca_in.append(" }") store_cases = [f' case "{n}" -> {e};' for n, e in cx.stores.items()] members = [ " private CicsTask task;", diff --git a/tests/cobol_mainframe/test_det_translate.py b/tests/cobol_mainframe/test_det_translate.py index c7c03ecbb..82021719c 100644 --- a/tests/cobol_mainframe/test_det_translate.py +++ b/tests/cobol_mainframe/test_det_translate.py @@ -2016,3 +2016,29 @@ def test_a_commarea_of_a_stated_length_is_all_dfhcommarea_holds(tmp_path): assert 'throw new DetCics.PastFrom("COMMAREA past EIBCALEN (" + calen + " bytes): not modelled");' in run assert "} finally { if (caWhole != null) { caWhole(caWhole); } }" in run assert "private void caWhole(byte[] whole) {" in r.java + + +def test_an_integer_literal_against_an_alphanumeric_item_keeps_its_leading_zeros(tmp_path): + """#4270 (GenApp LGTESTP4: `ENP4CNOO Not = 0000000000` on a map field of ten digits): compared with an + alphanumeric item, an integer literal is the nonnumeric literal of its digits as written (IBM, "Comparison of + numeric and alphanumeric operands"). As a value it is 0, whose text "0" made '0000000000' unequal to it.""" + pytest.importorskip("tree_sitter_language_pack") + from gitgalaxy.tools.cobol_to_java.det import program as P + + (tmp_path / "T5.cbl").write_text( + " IDENTIFICATION DIVISION.\n PROGRAM-ID. T5.\n DATA DIVISION.\n" + " WORKING-STORAGE SECTION.\n 01 REC.\n 05 WS-A PIC X(10).\n" + " 05 WS-B PIC X(2).\n 01 WS-N PIC 9(3) VALUE 7.\n" + " PROCEDURE DIVISION.\n MAIN-PARA.\n MOVE SPACES TO REC\n" + " IF WS-A NOT = 0000000000 AND WS-A NOT = 0\n MOVE 'Y' TO WS-B\n END-IF\n" + " IF WS-N = 007\n MOVE 'N' TO WS-B\n END-IF\n" + " EXEC CICS RETURN END-EXEC.\n", + encoding="utf-8", + ) + (tmp_path / "proj/src/main/java/com/x").mkdir(parents=True) + stub = "package com.x.service;\nimport com.x.cics.CicsTask;\npublic class T5Service {\n" \ + " public void runTask(CicsTask task) {}\n}\n" # fmt: skip + r = P.translate(tmp_path / "T5.cbl", [], stub, "com.x", {}, tmp_path / "proj") + assert r.stats["holes"] == [] + assert '_WS_A, "0000000000", CS) == 0' in r.java and '_WS_A, "0", CS) == 0' in r.java + assert '"007"' not in r.java # a numeric item against it: by value, as before diff --git a/tests/cobol_mainframe/test_equivalence_cics.py b/tests/cobol_mainframe/test_equivalence_cics.py index 7e031834c..af99b0c3d 100644 --- a/tests/cobol_mainframe/test_equivalence_cics.py +++ b/tests/cobol_mainframe/test_equivalence_cics.py @@ -1193,3 +1193,15 @@ def test_the_stub_starts_the_task_with_its_channel_and_writes_what_it_leaves(tmp run = subprocess.run([str(exe)], capture_output=True, text=True, env=env, check=False) # noqa: S603 assert run.stdout.splitlines()[:2] == ["get resp=0 len=4 into=0001", "put resp=0"] assert (o / "containers.out").read_text() == "CHANNEL MYCHANNEL\nINPUTCONTAINER 30303031\nOUT 393938\n" + + +def test_each_linked_sql_program_gets_the_next_free_ids_within_four_digits(): + """#4270: GG-SQL-ID is PIC 9(4). Twelve LINKed programs (GenApp's LGTESTP1) once took ranges of 1000 by their + place in "programs", and the tenth's 10000 lost its high digit (an unknown GG-SQL-ID); each program's statements + now start at the next hundred after the ids already taken.""" + assert ec.sql_first_id("") == 100 + table = ( + "S 1 SELECT1 1 1 - P 10\nI 0 X 1 0 0 0 0\nS 2 EXEC 1 0 - P 20\nS 100 OPEN 0 0 C Q 30\nS 117 FETCH 0 1 C Q 40\n" + ) + assert ec.sql_first_id(table) == 200 + assert ec.sql_first_id("S 199 EXEC 0 0 - P 1\n") == 200 diff --git a/tests/cobol_mainframe/test_estate4_dbb.py b/tests/cobol_mainframe/test_estate4_dbb.py index 8fc2d828e..fa23d7313 100644 --- a/tests/cobol_mainframe/test_estate4_dbb.py +++ b/tests/cobol_mainframe/test_estate4_dbb.py @@ -88,6 +88,19 @@ def test_a_lower_case_copybook_is_staged_under_its_member_name(tmp_path): assert sorted(p.name for p in src.iterdir()) == ["EPSNBRPM.cpy", "epsnbrpm.cpy"] +def test_a_bms_map_source_does_not_shadow_its_generated_symbolic_map(tmp_path): + # #4270: GenApp's base/src holds ssmap.bms beside the programs; COPY SSMAP means the symbolic map generated from + # it (@bms/SSMAP.cpy), not the assembler macros staged under the member's name + corpus = tmp_path / "corpus" + (corpus / "src").mkdir(parents=True) + (corpus / "src" / "ssmap.bms").write_text("SSMAP DFHMSD TYPE=MAP\n", encoding="utf-8") + (corpus / "src" / "lgcmarea.cpy").write_text(" 03 A PIC X.\n", encoding="utf-8") + src = tmp_path / "src" + src.mkdir() + common.stage_copybooks({"copy_dirs": ["src"]}, corpus, src) + assert sorted(p.name for p in src.iterdir()) == ["LGCMAREA.cpy", "lgcmarea.cpy"] + + def _undefined(commarea, cobol_value): cev = [{"event": "RETURN", "commarea": {"RETCODE": cobol_value, "IND": "3"}}] jev = [{"event": "RETURN", "commarea": {"RETCODE": 0, "IND": "3"}}] diff --git a/tests/equivalence/db2/ggsql.c b/tests/equivalence/db2/ggsql.c index 0dac2ff46..a324f0c16 100644 --- a/tests/equivalence/db2/ggsql.c +++ b/tests/equivalence/db2/ggsql.c @@ -162,6 +162,10 @@ static void diag(sqlca_t *c, SQLSMALLINT kind, SQLHANDLE h, SQLRETURN rc) { return; } if (SQLGetDiagRec(kind, h, 1, state, &native, msg, sizeof msg, &len) == SQL_SUCCESS) { + /* #4270 (Q10): -99999 is the CLI's own error, not Db2's (GenApp LGAPDB01's INSERT COMMERCIAL of a blank + CA-LASTCHANGED as REQUESTDATE: 22007 in the client). What Db2 for z/OS answers is not known here, and the + Java side's JDBC driver reports a client code of its own (-4220): refused by name, never compared */ + if (rc == SQL_ERROR && native == -99999) die("statement", "the CLI failed it in the client (no Db2 SQLCODE)"); c->sqlcode = native; memcpy(c->sqlstate, state, 5); if (rc == SQL_SUCCESS_WITH_INFO && native == 0) c->sqlcode = 0; /* a driver note, no Db2 warning */ diff --git a/tests/equivalence/genapp-lgacus01/LICENSE b/tests/equivalence/genapp-lgacus01/LICENSE new file mode 100644 index 000000000..d3087e4c5 --- /dev/null +++ b/tests/equivalence/genapp-lgacus01/LICENSE @@ -0,0 +1,277 @@ +Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + +"Contributor" means any person or entity that Distributes the Program. + +"Licensed Patents" mean patent claims licensable by a Contributor which +are necessarily infringed by the use or sale of its Contribution alone +or when combined with the Program. + +"Program" means the Contributions Distributed in accordance with this +Agreement. + +"Recipient" means anyone who receives the Program under this Agreement +or any Secondary License (as applicable), including Contributors. + +"Derivative Works" shall mean any work, whether in Source Code or other +form, that is based on (or derived from) the Program and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. + +"Modified Works" shall mean any work in Source Code or other form that +results from an addition to, deletion from, or modification of the +contents of the Program, including, for purposes of clarity any new file +in Source Code form that contains any contents of the Program. Modified +Works shall not include works that contain only declarations, +interfaces, types, classes, structures, or files of the Program solely +in each case in order to link to, bind by name, or subclass the Program +or Modified Works thereof. + +"Distribute" means the acts of a) distributing or b) making available +in any manner that enables the transfer of a copy. + +"Source Code" means the form of a Program preferred for making +modifications, including but not limited to software source code, +documentation source, and configuration files. + +"Secondary License" means either the GNU General Public License, +Version 2.0, or any later versions of that license, including any +exceptions or additional permissions as identified by the initial +Contributor. + +2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + +3. REQUIREMENTS + +3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + +3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + +3.3 Contributors may not remove or alter any copyright, patent, +trademark, attribution notices, disclaimers of warranty, or limitations +of liability ("notices") contained within the Program from any copy of +the Program which they Distribute, provided that Contributors may add +their own appropriate notices. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities +with respect to end users, business partners and the like. While this +license is intended to facilitate the commercial use of the Program, +the Contributor who includes the Program in a commercial product +offering should do so in a manner which does not create potential +liability for other Contributors. Therefore, if a Contributor includes +the Program in a commercial product offering, such Contributor +("Commercial Contributor") hereby agrees to defend and indemnify every +other Contributor ("Indemnified Contributor") against any losses, +damages and costs (collectively "Losses") arising from claims, lawsuits +and other legal actions brought by a third party against the Indemnified +Contributor to the extent caused by the acts or omissions of such +Commercial Contributor in connection with its distribution of the Program +in a commercial product offering. The obligations in this section do not +apply to any claims or Losses relating to any actual or alleged +intellectual property infringement. In order to qualify, an Indemnified +Contributor must: a) promptly notify the Commercial Contributor in +writing of such claim, and b) allow the Commercial Contributor to control, +and cooperate with the Commercial Contributor in, the defense and any +related settlement negotiations. The Indemnified Contributor may +participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial +product offering, Product X. That Contributor is then a Commercial +Contributor. If that Commercial Contributor then makes performance +claims, or offers warranties related to Product X, those performance +claims and warranties are such Commercial Contributor's responsibility +alone. Under this section, the Commercial Contributor would have to +defend claims against the other Contributors related to those performance +claims and warranties, and if a court requires any other Contributor to +pay any damages as a result, the Commercial Contributor must pay +those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" +BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF +TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR +PURPOSE. Each Recipient is solely responsible for determining the +appropriateness of using and distributing the Program and assumes all +risks associated with its exercise of rights under this Agreement, +including but not limited to the risks and costs of program errors, +compliance with applicable laws, damage to or loss of data, programs +or equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS +SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST +PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE +EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under +applicable law, it shall not affect the validity or enforceability of +the remainder of the terms of this Agreement, and without further +action by the parties hereto, such provision shall be reformed to the +minimum extent necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against any entity +(including a cross-claim or counterclaim in a lawsuit) alleging that the +Program itself (excluding combinations of the Program with other software +or hardware) infringes such Recipient's patent(s), then such Recipient's +rights granted under Section 2(b) shall terminate as of the date such +litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it +fails to comply with any of the material terms or conditions of this +Agreement and does not cure such failure in a reasonable period of +time after becoming aware of such noncompliance. If all Recipient's +rights under this Agreement terminate, Recipient agrees to cease use +and distribution of the Program as soon as reasonably practicable. +However, Recipient's obligations under this Agreement and any licenses +granted by Recipient relating to the Program shall continue and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, +but in order to avoid inconsistency the Agreement is copyrighted and +may only be modified in the following manner. The Agreement Steward +reserves the right to publish new versions (including revisions) of +this Agreement from time to time. No one other than the Agreement +Steward has the right to modify this Agreement. The Eclipse Foundation +is the initial Agreement Steward. The Eclipse Foundation may assign the +responsibility to serve as the Agreement Steward to a suitable separate +entity. Each new version of the Agreement will be given a distinguishing +version number. The Program (including Contributions) may always be +Distributed subject to the version of the Agreement under which it was +received. In addition, after a new version of the Agreement is published, +Contributor may elect to Distribute the Program (including its +Contributions) under the new version. + +Except as expressly stated in Sections 2(a) and 2(b) above, Recipient +receives no rights or licenses to the intellectual property of any +Contributor under this Agreement, whether expressly, by implication, +estoppel or otherwise. All rights in the Program not expressly granted +under this Agreement are reserved. Nothing in this Agreement is intended +to be enforceable by any entity that is not a Contributor or Recipient. +No third-party beneficiary rights are created under this Agreement. + +Exhibit A - Form of Secondary Licenses Notice + +"This Source Code may also be made available under the following +Secondary Licenses when the conditions for such availability set forth +in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), +version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. diff --git a/tests/equivalence/genapp-lgacus01/NOTICE b/tests/equivalence/genapp-lgacus01/NOTICE new file mode 100644 index 000000000..858dadbb8 --- /dev/null +++ b/tests/equivalence/genapp-lgacus01/NOTICE @@ -0,0 +1,12 @@ +CICS General Insurance Application (GenApp) +https://github.com/cicsdev/cics-genapp +(C) Copyright IBM Corp. 2011, 2020 + +Licensed under the Eclipse Public License - v 2.0 (see LICENSE, the corpus's +own licence file). The program under test, base/src/lgacus01.cbl, the +programs it runs in the same task (base/src/lgacdb01.cbl, base/src/lgacvs01.cbl, base/src/lgacdb02.cbl, base/src/lgstsq.cbl), +their copybooks and the Db2 DDL and rows (base/cntl/db2cre.jcl) are GenApp's, used +unmodified from the corpus. + +ksdscust.txt: the genapp-lgacdb01 case's (see its NOTICE). The scenarios in case.json are +written for this case, most from genapp-lgacdb01's. diff --git a/tests/equivalence/genapp-lgacus01/case.json b/tests/equivalence/genapp-lgacus01/case.json new file mode 100644 index 000000000..65998b810 --- /dev/null +++ b/tests/equivalence/genapp-lgacus01/case.json @@ -0,0 +1,126 @@ +{ + "kind": "cics", + "corpus": "cics-genapp", + "program": "LGACUS01", + "program_source": "base/src/lgacus01.cbl", + "copy_dirs": [ + "base/src" + ], + "transid": "LGAC", + "clock": "2026/10/01 10:30:15.00", + "programs": [ + { + "program": "LGACDB01", + "program_source": "base/src/lgacdb01.cbl" + }, + { + "program": "LGACVS01", + "program_source": "base/src/lgacvs01.cbl" + }, + { + "program": "LGACDB02", + "program_source": "base/src/lgacdb02.cbl" + }, + { + "program": "LGSTSQ", + "program_source": "base/src/lgstsq.cbl" + } + ], + "datasets": { + ".GENAPP.KSDSCUST": { + "input": "@case/ksdscust.txt", + "entity": "CaCustomerNum", + "copybook": "base/src/lgcmarea.cpy", + "record": "CA-CUSTOMER-NUM", + "vsam": { + "key_offset": 0, + "key_length": 10, + "reclen": 225, + "why": "base/cntl/adef121.jcl DEFINE1: DATA(... KEYS(10 0) RECORDSIZE(225 225)); the engine's facts do not read KEYS / RECORDSIZE inside the DATA component, so the case states them" + } + } + }, + "db2": { + "ddl": [ + "base/cntl/db2cre.jcl" + ], + "seed": "base/cntl/db2cre.jcl", + "symbols": { + "": "GENASA1" + }, + "qualifier": "GENASA1", + "compare": [ + "GENASA1.CUSTOMER", + "GENASA1.CUSTOMER_SECURE" + ] + }, + "commarea": { + "segments": [ + { + "copybook": "base/src/lgacus01.cbl", + "record": "DFHCOMMAREA" + } + ] + }, + "linked": true, + "screens": {}, + "region": { + "applid": "GENAREGN", + "sysid": "CICA" + }, + "scenarios": [ + { + "name": "add-with-counter", + "counters": { + "GENA/GENACUSTNUM": 1000011 + }, + "commarea": { + "CA-REQUEST-ID": "01ACUS", + "CA-CUSTOMER-NUM": "0", + "CA-REQUEST-SPECIFIC": "Ada Lovelace 1815-12-10Ockham Park 12 KT246HP 00007700900123 01483222111 ada@analytical.example " + }, + "why": "LGACDB01's scenario add-with-counter through LGACUS01: GET COUNTER GENA/GENACUSTNUM: NORMAL, 1000011 (the counter is then 1000012); INSERT CUSTOMER with that number; LINK LGACVS01 writes the VSAM copy; LINK LGACDB02 adds the CUSTOMER_SECURE row; CA-CUSTOMER-NUM 1000011, '00'" + }, + { + "name": "add-without-counter", + "counters": {}, + "commarea": { + "CA-REQUEST-ID": "01ACUS", + "CA-CUSTOMER-NUM": "0", + "CA-REQUEST-SPECIFIC": "Charles Babbage 1791-12-26Dorset Street 1 W1U6QN 000 cb@engine.example " + }, + "why": "LGACDB01's scenario add-without-counter through LGACUS01: no named counter (NOTFND): INSERT with DEFAULT, the identity gives 1000001 (START WITH, restarted each run), SET :H = IDENTITY_VAL_LOCAL() reads it back on the INSERT's own connection" + }, + { + "name": "add-blank-optional-fields", + "counters": { + "GENA/GENACUSTNUM": 1000020 + }, + "commarea": { + "CA-REQUEST-ID": "01ACUS", + "CA-CUSTOMER-NUM": "0", + "CA-REQUEST-SPECIFIC": "Grace Hopper 1906-12-09 000 " + }, + "why": "LGACDB01's scenario add-blank-optional-fields through LGACUS01: blank house name / number / phones / email stored as blanks (CHAR), not NULL" + }, + { + "name": "no-commarea", + "commarea": null, + "why": "EIBCALEN 0: LGACUS01 moves ' NO COMMAREA RECEIVED' to EM-VARIABLE, WRITE-ERROR-MESSAGE LINKs LGSTSQ with ERROR-MSG (TD CSMT and TS GENAERRS), IF EIBCALEN > 0 is false, then ABEND LGCA" + }, + { + "counters": { + "GENA/GENACUSTNUM": 1000011 + }, + "commarea": { + "CA-REQUEST-ID": "01ACUS", + "CA-CUSTOMER-NUM": "0", + "CA-REQUEST-SPECIFIC": "Ada Lovelace 1815-12-10Ockham Park 12 KT246HP 00007700900123 01483222111 ada@analytical.example " + }, + "name": "short-commarea", + "commarea_length": 60, + "why": "EIBCALEN 60 < WS-REQUIRED-CA-LEN 90 (18 + WS-CUSTOMER-LEN 72): CA-RETURN-CODE '98', RETURN before the LINK" + } + ], + "notes": "GenApp's add-customer front end (LGACUS01, LINKed with the 32500-byte LGCMAREA COMMAREA): it checks the COMMAREA and LINKs LGACDB01 (which LINKs LGACVS01 and LGACDB02) with it. The case runs every program of that chain in the same task (\"programs\"), LGSTSQ too (its error logger, \"region\" for its ASSIGN SYSID), with the back-end case's Db2 tables, VSAM file and data; the scenarios reuse genapp-lgacdb01's inputs (each \"why\" names its source) and add the front end's own paths: no-commarea (EIBCALEN 0: LGSTSQ, ABEND LGCA). short-commarea: EIBCALEN 60 < 90. MOVE '00' TO CA-NUM-POLICIES (bytes 91-93) runs before the length check, so a COMMAREA shorter than 93 bytes is written past EIBCALEN before line 112 is reached: the task is judged up to that reference (X23) and IF EIBCALEN IS LESS THAN WS-REQUIRED-CA-LEN true is unreachable without one (a GenApp defect). WRITE-ERROR-MESSAGE's IF EIBCALEN > 0 (and the IF EIBCALEN < 91 inside it) is never true: the paragraph is PERFORMed only when EIBCALEN is zero -- dead in practice, uncovered by every scenario. The SQL faults (M2) are the harness's, one per statement the tasks run. Derived from the CICS General Insurance Application (GenApp, github.com/cicsdev/cics-genapp; (C) Copyright IBM Corp. 2011, 2020), licensed under the Eclipse Public License 2.0: LICENSE here is the corpus's own, NOTICE names the source and what was derived." +} diff --git a/tests/equivalence/genapp-lgacus01/ksdscust.txt b/tests/equivalence/genapp-lgacus01/ksdscust.txt new file mode 100644 index 000000000..af72339eb --- /dev/null +++ b/tests/equivalence/genapp-lgacus01/ksdscust.txt @@ -0,0 +1,10 @@ +0000000001Andrew Pandy 1950-07-11 34 PI101OO 00107799 123456 01962 811234 A.Pandy@beebhouse.com +0000000002Scott Tracey 1965-09-30Tracey Island 1 TB14TV 001 001 911911 REFROOM@TBHOLDINGS.COM +0000000003John Noakes 1934-03-06 70 HX116BP 00109008 329855 0207 325656 Noaksey@beebhouse.com +0000000004Louis Pug 1969-09-06Picnic Basket 21 PP159DD 001 0208 344344 +0000000005Graham Cuthbert 1967-01-03 55 TR68BK 00201101 499787 0208 344344 A.Cut@CG.co.uk +0000000006Brian Cant 1933-07-12 58 IP221PL 001 01855 122134 CANT@beebhouse.com +0000000007Troy Tempest 1964-10-04The Ray 48 ST106RY 000 TROYT@BUSCOMM.COM +0000000008Johnny Morris 1961-06-20 72 BS83HA 0010345 245245 0345 245245 JM@ZOOLAND.CO.UK +0000000009Micky Murphy 1966-01-03 51 CA316RN 001 +0000000010Susan Stranks 1938-12-02 68 W1A4WW 001 0207 845845 diff --git a/tests/equivalence/genapp-lgapol01/LICENSE b/tests/equivalence/genapp-lgapol01/LICENSE new file mode 100644 index 000000000..d3087e4c5 --- /dev/null +++ b/tests/equivalence/genapp-lgapol01/LICENSE @@ -0,0 +1,277 @@ +Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + +"Contributor" means any person or entity that Distributes the Program. + +"Licensed Patents" mean patent claims licensable by a Contributor which +are necessarily infringed by the use or sale of its Contribution alone +or when combined with the Program. + +"Program" means the Contributions Distributed in accordance with this +Agreement. + +"Recipient" means anyone who receives the Program under this Agreement +or any Secondary License (as applicable), including Contributors. + +"Derivative Works" shall mean any work, whether in Source Code or other +form, that is based on (or derived from) the Program and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. + +"Modified Works" shall mean any work in Source Code or other form that +results from an addition to, deletion from, or modification of the +contents of the Program, including, for purposes of clarity any new file +in Source Code form that contains any contents of the Program. Modified +Works shall not include works that contain only declarations, +interfaces, types, classes, structures, or files of the Program solely +in each case in order to link to, bind by name, or subclass the Program +or Modified Works thereof. + +"Distribute" means the acts of a) distributing or b) making available +in any manner that enables the transfer of a copy. + +"Source Code" means the form of a Program preferred for making +modifications, including but not limited to software source code, +documentation source, and configuration files. + +"Secondary License" means either the GNU General Public License, +Version 2.0, or any later versions of that license, including any +exceptions or additional permissions as identified by the initial +Contributor. + +2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + +3. REQUIREMENTS + +3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + +3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + +3.3 Contributors may not remove or alter any copyright, patent, +trademark, attribution notices, disclaimers of warranty, or limitations +of liability ("notices") contained within the Program from any copy of +the Program which they Distribute, provided that Contributors may add +their own appropriate notices. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities +with respect to end users, business partners and the like. While this +license is intended to facilitate the commercial use of the Program, +the Contributor who includes the Program in a commercial product +offering should do so in a manner which does not create potential +liability for other Contributors. Therefore, if a Contributor includes +the Program in a commercial product offering, such Contributor +("Commercial Contributor") hereby agrees to defend and indemnify every +other Contributor ("Indemnified Contributor") against any losses, +damages and costs (collectively "Losses") arising from claims, lawsuits +and other legal actions brought by a third party against the Indemnified +Contributor to the extent caused by the acts or omissions of such +Commercial Contributor in connection with its distribution of the Program +in a commercial product offering. The obligations in this section do not +apply to any claims or Losses relating to any actual or alleged +intellectual property infringement. In order to qualify, an Indemnified +Contributor must: a) promptly notify the Commercial Contributor in +writing of such claim, and b) allow the Commercial Contributor to control, +and cooperate with the Commercial Contributor in, the defense and any +related settlement negotiations. The Indemnified Contributor may +participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial +product offering, Product X. That Contributor is then a Commercial +Contributor. If that Commercial Contributor then makes performance +claims, or offers warranties related to Product X, those performance +claims and warranties are such Commercial Contributor's responsibility +alone. Under this section, the Commercial Contributor would have to +defend claims against the other Contributors related to those performance +claims and warranties, and if a court requires any other Contributor to +pay any damages as a result, the Commercial Contributor must pay +those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" +BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF +TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR +PURPOSE. Each Recipient is solely responsible for determining the +appropriateness of using and distributing the Program and assumes all +risks associated with its exercise of rights under this Agreement, +including but not limited to the risks and costs of program errors, +compliance with applicable laws, damage to or loss of data, programs +or equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS +SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST +PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE +EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under +applicable law, it shall not affect the validity or enforceability of +the remainder of the terms of this Agreement, and without further +action by the parties hereto, such provision shall be reformed to the +minimum extent necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against any entity +(including a cross-claim or counterclaim in a lawsuit) alleging that the +Program itself (excluding combinations of the Program with other software +or hardware) infringes such Recipient's patent(s), then such Recipient's +rights granted under Section 2(b) shall terminate as of the date such +litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it +fails to comply with any of the material terms or conditions of this +Agreement and does not cure such failure in a reasonable period of +time after becoming aware of such noncompliance. If all Recipient's +rights under this Agreement terminate, Recipient agrees to cease use +and distribution of the Program as soon as reasonably practicable. +However, Recipient's obligations under this Agreement and any licenses +granted by Recipient relating to the Program shall continue and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, +but in order to avoid inconsistency the Agreement is copyrighted and +may only be modified in the following manner. The Agreement Steward +reserves the right to publish new versions (including revisions) of +this Agreement from time to time. No one other than the Agreement +Steward has the right to modify this Agreement. The Eclipse Foundation +is the initial Agreement Steward. The Eclipse Foundation may assign the +responsibility to serve as the Agreement Steward to a suitable separate +entity. Each new version of the Agreement will be given a distinguishing +version number. The Program (including Contributions) may always be +Distributed subject to the version of the Agreement under which it was +received. In addition, after a new version of the Agreement is published, +Contributor may elect to Distribute the Program (including its +Contributions) under the new version. + +Except as expressly stated in Sections 2(a) and 2(b) above, Recipient +receives no rights or licenses to the intellectual property of any +Contributor under this Agreement, whether expressly, by implication, +estoppel or otherwise. All rights in the Program not expressly granted +under this Agreement are reserved. Nothing in this Agreement is intended +to be enforceable by any entity that is not a Contributor or Recipient. +No third-party beneficiary rights are created under this Agreement. + +Exhibit A - Form of Secondary Licenses Notice + +"This Source Code may also be made available under the following +Secondary Licenses when the conditions for such availability set forth +in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), +version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. diff --git a/tests/equivalence/genapp-lgapol01/NOTICE b/tests/equivalence/genapp-lgapol01/NOTICE new file mode 100644 index 000000000..5128176a9 --- /dev/null +++ b/tests/equivalence/genapp-lgapol01/NOTICE @@ -0,0 +1,12 @@ +CICS General Insurance Application (GenApp) +https://github.com/cicsdev/cics-genapp +(C) Copyright IBM Corp. 2011, 2020 + +Licensed under the Eclipse Public License - v 2.0 (see LICENSE, the corpus's +own licence file). The program under test, base/src/lgapol01.cbl, the +programs it runs in the same task (base/src/lgapdb01.cbl, base/src/lgapvs01.cbl, base/src/lgstsq.cbl), +their copybooks and the Db2 DDL and rows (base/cntl/db2cre.jcl) are GenApp's, used +unmodified from the corpus. + +ksdspoly.txt: the genapp-lgapdb01 case's (see its NOTICE). The scenarios in case.json are +written for this case, most from genapp-lgapdb01's. diff --git a/tests/equivalence/genapp-lgapol01/case.json b/tests/equivalence/genapp-lgapol01/case.json new file mode 100644 index 000000000..aeb6b7a26 --- /dev/null +++ b/tests/equivalence/genapp-lgapol01/case.json @@ -0,0 +1,133 @@ +{ + "kind": "cics", + "corpus": "cics-genapp", + "program": "LGAPOL01", + "program_source": "base/src/lgapol01.cbl", + "copy_dirs": [ + "base/src" + ], + "transid": "LGAP", + "clock": "2026/10/01 10:30:15.00", + "programs": [ + { + "program": "LGAPDB01", + "program_source": "base/src/lgapdb01.cbl" + }, + { + "program": "LGAPVS01", + "program_source": "base/src/lgapvs01.cbl" + }, + { + "program": "LGSTSQ", + "program_source": "base/src/lgstsq.cbl" + } + ], + "datasets": { + ".GENAPP.KSDSPOLY": { + "input": "@case/ksdspoly.txt", + "entity": "WfPolicyInfo", + "copybook": "base/src/lgapvs01.cbl", + "record": "WF-POLICY-INFO", + "vsam": { + "key_offset": 0, + "key_length": 21, + "reclen": 64, + "why": "base/cntl/adef121.jcl DEFINE2: DATA(... KEYS(21 0) RECORDSIZE(64 64)); the engine's facts do not read KEYS / RECORDSIZE inside the DATA component, so the case states them" + } + } + }, + "db2": { + "ddl": [ + "base/cntl/db2cre.jcl" + ], + "seed": "base/cntl/db2cre.jcl", + "symbols": { + "": "GENASA1" + }, + "qualifier": "GENASA1", + "compare": [ + "GENASA1.POLICY", + "GENASA1.ENDOWMENT", + "GENASA1.HOUSE", + "GENASA1.MOTOR", + "GENASA1.COMMERCIAL" + ] + }, + "clock_fields": { + "db2": [ + "GENASA1.POLICY.LASTCHANGED", + "GENASA1.COMMERCIAL.REQUESTDATE" + ], + "commarea": [ + "CA-REQUEST-SPECIFIC(31:26)" + ] + }, + "commarea": { + "segments": [ + { + "copybook": "base/src/lgapol01.cbl", + "record": "DFHCOMMAREA" + } + ] + }, + "linked": true, + "screens": {}, + "region": { + "applid": "GENAREGN", + "sysid": "CICA" + }, + "scenarios": [ + { + "name": "add-house", + "commarea": { + "CA-REQUEST-ID": "01AHOU", + "CA-CUSTOMER-NUM": "4", + "CA-REQUEST-SPECIFIC": "00000000002026-01-012027-01-01 0000000007REF0000001001234COTTAGE 00300425000ROSE 12 SO211AA " + }, + "why": "LGAPDB01's scenario add-house through LGAPOL01: the house path: INSERT HOUSE" + }, + { + "name": "add-motor", + "commarea": { + "CA-REQUEST-ID": "01AMOT", + "CA-CUSTOMER-NUM": "2", + "CA-REQUEST-SPECIFIC": "00000000002026-01-012027-01-01 0000000007REF0000001001234FORD FIESTA 009500AB12CDEBLUE 12002019-05-01000450000001" + }, + "why": "LGAPDB01's scenario add-motor through LGAPOL01: the motor path: INSERT MOTOR" + }, + { + "name": "add-commercial", + "commarea": { + "CA-REQUEST-ID": "01ACOM", + "CA-CUSTOMER-NUM": "1", + "CA-REQUEST-SPECIFIC": "00000000002026-01-012027-01-01 0000000007REF00000010012341 High Street, Winchester SO231AA 51.0632N 1.3080W Acme Ltd WAREHOUSE 0002000015000001000008000003000022000001000003000000 " + }, + "why": "LGAPDB01's scenario add-commercial through LGAPOL01: the commercial path: INSERT COMMERCIAL (perils and premiums)" + }, + { + "name": "unknown-request", + "commarea": { + "CA-REQUEST-ID": "01AXXX", + "CA-CUSTOMER-NUM": "8", + "CA-REQUEST-SPECIFIC": "00000000002026-01-012027-01-01 0000000007REF0000001001234YNYGROWTH 25250000A. N. OTHER " + }, + "why": "LGAPDB01's scenario unknown-request through LGAPOL01: no WHEN for the request id: '99', RETURN before any INSERT or LINK" + }, + { + "name": "no-commarea", + "commarea": null, + "why": "EIBCALEN 0: LGAPOL01 moves ' NO COMMAREA RECEIVED' to EM-VARIABLE, WRITE-ERROR-MESSAGE LINKs LGSTSQ with ERROR-MSG (TD CSMT and TS GENAERRS), IF EIBCALEN > 0 is false, then ABEND LGCA" + }, + { + "commarea": { + "CA-REQUEST-ID": "01AHOU", + "CA-CUSTOMER-NUM": "4", + "CA-REQUEST-SPECIFIC": "00000000002026-01-012027-01-01 0000000007REF0000001001234COTTAGE 00300425000ROSE 12 SO211AA " + }, + "name": "short-commarea", + "commarea_length": 20, + "why": "EIBCALEN 20 < WS-CA-HEADER-LEN 28: CA-RETURN-CODE '98', RETURN before the LINK" + } + ], + "notes": "GenApp's add-policy front end (LGAPOL01, LINKed with the 32500-byte LGCMAREA COMMAREA): it checks the COMMAREA and LINKs LGAPDB01 (which LINKs LGAPVS01) with it. The case runs every program of that chain in the same task (\"programs\"), LGSTSQ too (its error logger, \"region\" for its ASSIGN SYSID), with the back-end case's Db2 tables, VSAM file and data; the scenarios reuse genapp-lgapdb01's inputs (each \"why\" names its source) and add the front end's own paths: no-commarea (EIBCALEN 0: LGSTSQ, ABEND LGCA). short-commarea: EIBCALEN 20 < 28: '98'. WRITE-ERROR-MESSAGE's IF EIBCALEN > 0 (and the IF EIBCALEN < 91 inside it) is never true: the paragraph is PERFORMed only when EIBCALEN is zero -- dead in practice, uncovered by every scenario. The SQL faults (M2) are the harness's, one per statement the tasks run. Derived from the CICS General Insurance Application (GenApp, github.com/cicsdev/cics-genapp; (C) Copyright IBM Corp. 2011, 2020), licensed under the Eclipse Public License 2.0: LICENSE here is the corpus's own, NOTICE names the source and what was derived." +} diff --git a/tests/equivalence/genapp-lgapol01/ksdspoly.txt b/tests/equivalence/genapp-lgapol01/ksdspoly.txt new file mode 100644 index 000000000..29977dc9b --- /dev/null +++ b/tests/equivalence/genapp-lgapol01/ksdspoly.txt @@ -0,0 +1,9 @@ +C00000000010000000010SO212JN 0001IBM +C00000000050000000009BB104BX 0001Burnley Football Club +E00000000030000000005NNNSHEPPA Shep +E00000000080000000004YYNLIONTMR J. MORRIS +H00000000040000000006HOUSE 00501500000SO211UP +H00000000090000000008FLAT 00100260000E15WW +M00000000020000000001FORD KA 008500LL60LOO +M00000000050000000003DENNIS ENGINE 023500FIRE1 +M00000000100000000002VOLKSWAGEN BEETLE 000600A567WWR diff --git a/tests/equivalence/genapp-lgdpol01/LICENSE b/tests/equivalence/genapp-lgdpol01/LICENSE new file mode 100644 index 000000000..d3087e4c5 --- /dev/null +++ b/tests/equivalence/genapp-lgdpol01/LICENSE @@ -0,0 +1,277 @@ +Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + +"Contributor" means any person or entity that Distributes the Program. + +"Licensed Patents" mean patent claims licensable by a Contributor which +are necessarily infringed by the use or sale of its Contribution alone +or when combined with the Program. + +"Program" means the Contributions Distributed in accordance with this +Agreement. + +"Recipient" means anyone who receives the Program under this Agreement +or any Secondary License (as applicable), including Contributors. + +"Derivative Works" shall mean any work, whether in Source Code or other +form, that is based on (or derived from) the Program and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. + +"Modified Works" shall mean any work in Source Code or other form that +results from an addition to, deletion from, or modification of the +contents of the Program, including, for purposes of clarity any new file +in Source Code form that contains any contents of the Program. Modified +Works shall not include works that contain only declarations, +interfaces, types, classes, structures, or files of the Program solely +in each case in order to link to, bind by name, or subclass the Program +or Modified Works thereof. + +"Distribute" means the acts of a) distributing or b) making available +in any manner that enables the transfer of a copy. + +"Source Code" means the form of a Program preferred for making +modifications, including but not limited to software source code, +documentation source, and configuration files. + +"Secondary License" means either the GNU General Public License, +Version 2.0, or any later versions of that license, including any +exceptions or additional permissions as identified by the initial +Contributor. + +2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + +3. REQUIREMENTS + +3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + +3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + +3.3 Contributors may not remove or alter any copyright, patent, +trademark, attribution notices, disclaimers of warranty, or limitations +of liability ("notices") contained within the Program from any copy of +the Program which they Distribute, provided that Contributors may add +their own appropriate notices. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities +with respect to end users, business partners and the like. While this +license is intended to facilitate the commercial use of the Program, +the Contributor who includes the Program in a commercial product +offering should do so in a manner which does not create potential +liability for other Contributors. Therefore, if a Contributor includes +the Program in a commercial product offering, such Contributor +("Commercial Contributor") hereby agrees to defend and indemnify every +other Contributor ("Indemnified Contributor") against any losses, +damages and costs (collectively "Losses") arising from claims, lawsuits +and other legal actions brought by a third party against the Indemnified +Contributor to the extent caused by the acts or omissions of such +Commercial Contributor in connection with its distribution of the Program +in a commercial product offering. The obligations in this section do not +apply to any claims or Losses relating to any actual or alleged +intellectual property infringement. In order to qualify, an Indemnified +Contributor must: a) promptly notify the Commercial Contributor in +writing of such claim, and b) allow the Commercial Contributor to control, +and cooperate with the Commercial Contributor in, the defense and any +related settlement negotiations. The Indemnified Contributor may +participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial +product offering, Product X. That Contributor is then a Commercial +Contributor. If that Commercial Contributor then makes performance +claims, or offers warranties related to Product X, those performance +claims and warranties are such Commercial Contributor's responsibility +alone. Under this section, the Commercial Contributor would have to +defend claims against the other Contributors related to those performance +claims and warranties, and if a court requires any other Contributor to +pay any damages as a result, the Commercial Contributor must pay +those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" +BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF +TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR +PURPOSE. Each Recipient is solely responsible for determining the +appropriateness of using and distributing the Program and assumes all +risks associated with its exercise of rights under this Agreement, +including but not limited to the risks and costs of program errors, +compliance with applicable laws, damage to or loss of data, programs +or equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS +SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST +PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE +EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under +applicable law, it shall not affect the validity or enforceability of +the remainder of the terms of this Agreement, and without further +action by the parties hereto, such provision shall be reformed to the +minimum extent necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against any entity +(including a cross-claim or counterclaim in a lawsuit) alleging that the +Program itself (excluding combinations of the Program with other software +or hardware) infringes such Recipient's patent(s), then such Recipient's +rights granted under Section 2(b) shall terminate as of the date such +litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it +fails to comply with any of the material terms or conditions of this +Agreement and does not cure such failure in a reasonable period of +time after becoming aware of such noncompliance. If all Recipient's +rights under this Agreement terminate, Recipient agrees to cease use +and distribution of the Program as soon as reasonably practicable. +However, Recipient's obligations under this Agreement and any licenses +granted by Recipient relating to the Program shall continue and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, +but in order to avoid inconsistency the Agreement is copyrighted and +may only be modified in the following manner. The Agreement Steward +reserves the right to publish new versions (including revisions) of +this Agreement from time to time. No one other than the Agreement +Steward has the right to modify this Agreement. The Eclipse Foundation +is the initial Agreement Steward. The Eclipse Foundation may assign the +responsibility to serve as the Agreement Steward to a suitable separate +entity. Each new version of the Agreement will be given a distinguishing +version number. The Program (including Contributions) may always be +Distributed subject to the version of the Agreement under which it was +received. In addition, after a new version of the Agreement is published, +Contributor may elect to Distribute the Program (including its +Contributions) under the new version. + +Except as expressly stated in Sections 2(a) and 2(b) above, Recipient +receives no rights or licenses to the intellectual property of any +Contributor under this Agreement, whether expressly, by implication, +estoppel or otherwise. All rights in the Program not expressly granted +under this Agreement are reserved. Nothing in this Agreement is intended +to be enforceable by any entity that is not a Contributor or Recipient. +No third-party beneficiary rights are created under this Agreement. + +Exhibit A - Form of Secondary Licenses Notice + +"This Source Code may also be made available under the following +Secondary Licenses when the conditions for such availability set forth +in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), +version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. diff --git a/tests/equivalence/genapp-lgdpol01/NOTICE b/tests/equivalence/genapp-lgdpol01/NOTICE new file mode 100644 index 000000000..7f734495f --- /dev/null +++ b/tests/equivalence/genapp-lgdpol01/NOTICE @@ -0,0 +1,12 @@ +CICS General Insurance Application (GenApp) +https://github.com/cicsdev/cics-genapp +(C) Copyright IBM Corp. 2011, 2020 + +Licensed under the Eclipse Public License - v 2.0 (see LICENSE, the corpus's +own licence file). The program under test, base/src/lgdpol01.cbl, the +programs it runs in the same task (base/src/lgdpdb01.cbl, base/src/lgdpvs01.cbl, base/src/lgstsq.cbl), +their copybooks and the Db2 DDL and rows (base/cntl/db2cre.jcl) are GenApp's, used +unmodified from the corpus. + +ksdspoly.txt: the genapp-lgdpdb01 case's (see its NOTICE). The scenarios in case.json are +written for this case, most from genapp-lgdpdb01's. diff --git a/tests/equivalence/genapp-lgdpol01/case.json b/tests/equivalence/genapp-lgdpol01/case.json new file mode 100644 index 000000000..33aefaeb2 --- /dev/null +++ b/tests/equivalence/genapp-lgdpol01/case.json @@ -0,0 +1,189 @@ +{ + "kind": "cics", + "corpus": "cics-genapp", + "program": "LGDPOL01", + "program_source": "base/src/lgdpol01.cbl", + "copy_dirs": [ + "base/src" + ], + "transid": "LGDP", + "clock": "2026/10/01 10:30:15.00", + "programs": [ + { + "program": "LGDPDB01", + "program_source": "base/src/lgdpdb01.cbl" + }, + { + "program": "LGDPVS01", + "program_source": "base/src/lgdpvs01.cbl" + }, + { + "program": "LGSTSQ", + "program_source": "base/src/lgstsq.cbl" + } + ], + "datasets": { + ".GENAPP.KSDSPOLY": { + "input": "@case/ksdspoly.txt", + "entity": "WfPolicyInfo", + "copybook": "base/src/lgdpvs01.cbl", + "record": "WF-POLICY-INFO", + "vsam": { + "key_offset": 0, + "key_length": 21, + "reclen": 64, + "why": "base/cntl/adef121.jcl DEFINE2: DATA(... KEYS(21 0) RECORDSIZE(64 64)); the engine's facts do not read KEYS / RECORDSIZE inside the DATA component, so the case states them" + } + } + }, + "db2": { + "ddl": [ + "base/cntl/db2cre.jcl" + ], + "seed": "base/cntl/db2cre.jcl", + "symbols": { + "": "GENASA1" + }, + "qualifier": "GENASA1", + "compare": [ + "GENASA1.CUSTOMER", + "GENASA1.CUSTOMER_SECURE", + "GENASA1.POLICY", + "GENASA1.ENDOWMENT", + "GENASA1.HOUSE", + "GENASA1.MOTOR", + "GENASA1.COMMERCIAL", + "GENASA1.CLAIM" + ] + }, + "commarea": { + "segments": [ + { + "copybook": "base/src/lgdpol01.cbl", + "record": "DFHCOMMAREA" + } + ] + }, + "linked": true, + "screens": {}, + "region": { + "applid": "GENAREGN", + "sysid": "CICA" + }, + "scenarios": [ + { + "name": "request-add-policy-id", + "commarea": { + "CA-REQUEST-ID": "01AEND", + "CA-RETURN-CODE": "00", + "CA-CUSTOMER-NUM": 3, + "CA-REQUEST-SPECIFIC": "0000000005" + }, + "why": "LGDPDB01's scenario request-add-policy-id through LGDPOL01: '01AEND' is none of 01DEND/01DHOU/01DCOM/01DMOT: '99', no DELETE (endowment policy 5 of customer 3 stays), no LINK" + }, + { + "name": "request-inquire-id", + "commarea": { + "CA-REQUEST-ID": "01IHOU", + "CA-RETURN-CODE": "00", + "CA-CUSTOMER-NUM": 4, + "CA-REQUEST-SPECIFIC": "0000000006" + }, + "why": "LGDPDB01's scenario request-inquire-id through LGDPOL01: an inquiry id: '99', house policy 6 untouched" + }, + { + "name": "request-lowercase", + "commarea": { + "CA-REQUEST-ID": "01dend", + "CA-RETURN-CODE": "00", + "CA-CUSTOMER-NUM": 3, + "CA-REQUEST-SPECIFIC": "0000000005" + }, + "why": "LGDPDB01's scenario request-lowercase through LGDPOL01: '01dend' is not '01DEND' (byte comparison): '99'" + }, + { + "name": "request-blank", + "commarea": { + "CA-REQUEST-ID": "", + "CA-RETURN-CODE": "77", + "CA-CUSTOMER-NUM": 1, + "CA-REQUEST-SPECIFIC": "0000000010" + }, + "why": "LGDPDB01's scenario request-blank through LGDPOL01: a blank request id: '99'; the '77' on entry was first reset to '00'" + }, + { + "name": "delete-endowment", + "commarea": { + "CA-REQUEST-ID": "01DEND", + "CA-RETURN-CODE": "00", + "CA-CUSTOMER-NUM": 3, + "CA-REQUEST-SPECIFIC": "0000000005 " + }, + "why": "LGDPDB01's scenario delete-endowment through LGDPOL01: endowment policy 5 of customer 3: DELETE FROM POLICY +0, the ENDOWMENT row goes with it (ON DELETE CASCADE), LINK LGDPVS01 deletes the VSAM record; '00'" + }, + { + "name": "delete-house", + "commarea": { + "CA-REQUEST-ID": "01DHOU", + "CA-RETURN-CODE": "00", + "CA-CUSTOMER-NUM": 4, + "CA-REQUEST-SPECIFIC": "0000000006 " + }, + "why": "LGDPDB01's scenario delete-house through LGDPOL01: house policy 6 of customer 4: the HOUSE row cascades" + }, + { + "name": "delete-motor", + "commarea": { + "CA-REQUEST-ID": "01DMOT", + "CA-RETURN-CODE": "00", + "CA-CUSTOMER-NUM": 2, + "CA-REQUEST-SPECIFIC": "0000000001 " + }, + "why": "LGDPDB01's scenario delete-motor through LGDPOL01: motor policy 1 of customer 2: the MOTOR row cascades" + }, + { + "name": "delete-commercial", + "commarea": { + "CA-REQUEST-ID": "01DCOM", + "CA-RETURN-CODE": "00", + "CA-CUSTOMER-NUM": 1, + "CA-REQUEST-SPECIFIC": "0000000010 " + }, + "why": "LGDPDB01's scenario delete-commercial through LGDPOL01: commercial policy 10 of customer 1: the COMMERCIAL row cascades" + }, + { + "name": "no-commarea", + "commarea": null, + "why": "EIBCALEN 0: LGDPOL01 moves ' NO COMMAREA RECEIVED' to EM-VARIABLE, WRITE-ERROR-MESSAGE LINKs LGSTSQ with ERROR-MSG (TD CSMT and TS GENAERRS), IF EIBCALEN > 0 is false, then ABEND LGCA" + }, + { + "commarea": { + "CA-REQUEST-ID": "01DHOU", + "CA-RETURN-CODE": "00", + "CA-CUSTOMER-NUM": 4, + "CA-REQUEST-SPECIFIC": "0000000006 " + }, + "name": "short-commarea", + "commarea_length": 20, + "why": "EIBCALEN 20 < WS-CA-HEADER-LEN 28: CA-RETURN-CODE '98', RETURN before the request-id check" + }, + { + "commarea": { + "CA-REQUEST-ID": "01DEND", + "CA-RETURN-CODE": "00", + "CA-CUSTOMER-NUM": 3, + "CA-REQUEST-SPECIFIC": "0000000005 " + }, + "name": "delete-fails", + "sql_faults": [ + { + "program": "LGDPDB01", + "line": 189, + "sqlcode": -904 + } + ], + "why": "LGDPDB01's DELETE fails (SQLCODE -904): it sets CA-RETURN-CODE '90' and LINKs LGSTSQ, whose WRITEQ is refused (X6): the task is judged up to it, so LGDPOL01's If CA-RETURN-CODE > 0 (line 127) is not reached" + } + ], + "notes": "GenApp's delete-policy front end (LGDPOL01, LINKed with the 32500-byte LGCMAREA COMMAREA): it checks the COMMAREA and LINKs LGDPDB01 (which LINKs LGDPVS01) with it. The case runs every program of that chain in the same task (\"programs\"), LGSTSQ too (its error logger, \"region\" for its ASSIGN SYSID), with the back-end case's Db2 tables, VSAM file and data; the scenarios reuse genapp-lgdpdb01's inputs (each \"why\" names its source) and add the front end's own paths: no-commarea (EIBCALEN 0: LGSTSQ, ABEND LGCA). The request id is upper-cased first (request-lowercase); an unknown one is '99' with no LINK. If CA-RETURN-CODE > 0 after the LINK (line 127) is reached only through LGDPDB01's / LGDPVS01's error paths, which LINK LGSTSQ and are judged up to its refused WRITEQ (X6): delete-fails shows the path, the branch is not counted. WRITE-ERROR-MESSAGE's IF EIBCALEN > 0 (and the IF EIBCALEN < 91 inside it) is never true: the paragraph is PERFORMed only when EIBCALEN is zero -- dead in practice, uncovered by every scenario. The SQL faults (M2) are the harness's, one per statement the tasks run. Derived from the CICS General Insurance Application (GenApp, github.com/cicsdev/cics-genapp; (C) Copyright IBM Corp. 2011, 2020), licensed under the Eclipse Public License 2.0: LICENSE here is the corpus's own, NOTICE names the source and what was derived." +} diff --git a/tests/equivalence/genapp-lgdpol01/ksdspoly.txt b/tests/equivalence/genapp-lgdpol01/ksdspoly.txt new file mode 100644 index 000000000..29977dc9b --- /dev/null +++ b/tests/equivalence/genapp-lgdpol01/ksdspoly.txt @@ -0,0 +1,9 @@ +C00000000010000000010SO212JN 0001IBM +C00000000050000000009BB104BX 0001Burnley Football Club +E00000000030000000005NNNSHEPPA Shep +E00000000080000000004YYNLIONTMR J. MORRIS +H00000000040000000006HOUSE 00501500000SO211UP +H00000000090000000008FLAT 00100260000E15WW +M00000000020000000001FORD KA 008500LL60LOO +M00000000050000000003DENNIS ENGINE 023500FIRE1 +M00000000100000000002VOLKSWAGEN BEETLE 000600A567WWR diff --git a/tests/equivalence/genapp-lgicus01/LICENSE b/tests/equivalence/genapp-lgicus01/LICENSE new file mode 100644 index 000000000..d3087e4c5 --- /dev/null +++ b/tests/equivalence/genapp-lgicus01/LICENSE @@ -0,0 +1,277 @@ +Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + +"Contributor" means any person or entity that Distributes the Program. + +"Licensed Patents" mean patent claims licensable by a Contributor which +are necessarily infringed by the use or sale of its Contribution alone +or when combined with the Program. + +"Program" means the Contributions Distributed in accordance with this +Agreement. + +"Recipient" means anyone who receives the Program under this Agreement +or any Secondary License (as applicable), including Contributors. + +"Derivative Works" shall mean any work, whether in Source Code or other +form, that is based on (or derived from) the Program and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. + +"Modified Works" shall mean any work in Source Code or other form that +results from an addition to, deletion from, or modification of the +contents of the Program, including, for purposes of clarity any new file +in Source Code form that contains any contents of the Program. Modified +Works shall not include works that contain only declarations, +interfaces, types, classes, structures, or files of the Program solely +in each case in order to link to, bind by name, or subclass the Program +or Modified Works thereof. + +"Distribute" means the acts of a) distributing or b) making available +in any manner that enables the transfer of a copy. + +"Source Code" means the form of a Program preferred for making +modifications, including but not limited to software source code, +documentation source, and configuration files. + +"Secondary License" means either the GNU General Public License, +Version 2.0, or any later versions of that license, including any +exceptions or additional permissions as identified by the initial +Contributor. + +2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + +3. REQUIREMENTS + +3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + +3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + +3.3 Contributors may not remove or alter any copyright, patent, +trademark, attribution notices, disclaimers of warranty, or limitations +of liability ("notices") contained within the Program from any copy of +the Program which they Distribute, provided that Contributors may add +their own appropriate notices. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities +with respect to end users, business partners and the like. While this +license is intended to facilitate the commercial use of the Program, +the Contributor who includes the Program in a commercial product +offering should do so in a manner which does not create potential +liability for other Contributors. Therefore, if a Contributor includes +the Program in a commercial product offering, such Contributor +("Commercial Contributor") hereby agrees to defend and indemnify every +other Contributor ("Indemnified Contributor") against any losses, +damages and costs (collectively "Losses") arising from claims, lawsuits +and other legal actions brought by a third party against the Indemnified +Contributor to the extent caused by the acts or omissions of such +Commercial Contributor in connection with its distribution of the Program +in a commercial product offering. The obligations in this section do not +apply to any claims or Losses relating to any actual or alleged +intellectual property infringement. In order to qualify, an Indemnified +Contributor must: a) promptly notify the Commercial Contributor in +writing of such claim, and b) allow the Commercial Contributor to control, +and cooperate with the Commercial Contributor in, the defense and any +related settlement negotiations. The Indemnified Contributor may +participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial +product offering, Product X. That Contributor is then a Commercial +Contributor. If that Commercial Contributor then makes performance +claims, or offers warranties related to Product X, those performance +claims and warranties are such Commercial Contributor's responsibility +alone. Under this section, the Commercial Contributor would have to +defend claims against the other Contributors related to those performance +claims and warranties, and if a court requires any other Contributor to +pay any damages as a result, the Commercial Contributor must pay +those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" +BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF +TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR +PURPOSE. Each Recipient is solely responsible for determining the +appropriateness of using and distributing the Program and assumes all +risks associated with its exercise of rights under this Agreement, +including but not limited to the risks and costs of program errors, +compliance with applicable laws, damage to or loss of data, programs +or equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS +SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST +PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE +EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under +applicable law, it shall not affect the validity or enforceability of +the remainder of the terms of this Agreement, and without further +action by the parties hereto, such provision shall be reformed to the +minimum extent necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against any entity +(including a cross-claim or counterclaim in a lawsuit) alleging that the +Program itself (excluding combinations of the Program with other software +or hardware) infringes such Recipient's patent(s), then such Recipient's +rights granted under Section 2(b) shall terminate as of the date such +litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it +fails to comply with any of the material terms or conditions of this +Agreement and does not cure such failure in a reasonable period of +time after becoming aware of such noncompliance. If all Recipient's +rights under this Agreement terminate, Recipient agrees to cease use +and distribution of the Program as soon as reasonably practicable. +However, Recipient's obligations under this Agreement and any licenses +granted by Recipient relating to the Program shall continue and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, +but in order to avoid inconsistency the Agreement is copyrighted and +may only be modified in the following manner. The Agreement Steward +reserves the right to publish new versions (including revisions) of +this Agreement from time to time. No one other than the Agreement +Steward has the right to modify this Agreement. The Eclipse Foundation +is the initial Agreement Steward. The Eclipse Foundation may assign the +responsibility to serve as the Agreement Steward to a suitable separate +entity. Each new version of the Agreement will be given a distinguishing +version number. The Program (including Contributions) may always be +Distributed subject to the version of the Agreement under which it was +received. In addition, after a new version of the Agreement is published, +Contributor may elect to Distribute the Program (including its +Contributions) under the new version. + +Except as expressly stated in Sections 2(a) and 2(b) above, Recipient +receives no rights or licenses to the intellectual property of any +Contributor under this Agreement, whether expressly, by implication, +estoppel or otherwise. All rights in the Program not expressly granted +under this Agreement are reserved. Nothing in this Agreement is intended +to be enforceable by any entity that is not a Contributor or Recipient. +No third-party beneficiary rights are created under this Agreement. + +Exhibit A - Form of Secondary Licenses Notice + +"This Source Code may also be made available under the following +Secondary Licenses when the conditions for such availability set forth +in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), +version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. diff --git a/tests/equivalence/genapp-lgicus01/NOTICE b/tests/equivalence/genapp-lgicus01/NOTICE new file mode 100644 index 000000000..c65e63c0b --- /dev/null +++ b/tests/equivalence/genapp-lgicus01/NOTICE @@ -0,0 +1,12 @@ +CICS General Insurance Application (GenApp) +https://github.com/cicsdev/cics-genapp +(C) Copyright IBM Corp. 2011, 2020 + +Licensed under the Eclipse Public License - v 2.0 (see LICENSE, the corpus's +own licence file). The program under test, base/src/lgicus01.cbl, the +programs it runs in the same task (base/src/lgicdb01.cbl, base/src/lgstsq.cbl), +their copybooks and the Db2 DDL and rows (base/cntl/db2cre.jcl) are GenApp's, used +unmodified from the corpus. + +The scenarios in case.json are +written for this case, most from genapp-lgicdb01's. diff --git a/tests/equivalence/genapp-lgicus01/case.json b/tests/equivalence/genapp-lgicus01/case.json new file mode 100644 index 000000000..1c6f20250 --- /dev/null +++ b/tests/equivalence/genapp-lgicus01/case.json @@ -0,0 +1,99 @@ +{ + "kind": "cics", + "corpus": "cics-genapp", + "program": "LGICUS01", + "program_source": "base/src/lgicus01.cbl", + "copy_dirs": [ + "base/src" + ], + "transid": "LGIC", + "clock": "2026/10/01 10:30:15.00", + "programs": [ + { + "program": "LGICDB01", + "program_source": "base/src/lgicdb01.cbl" + }, + { + "program": "LGSTSQ", + "program_source": "base/src/lgstsq.cbl" + } + ], + "db2": { + "ddl": [ + "base/cntl/db2cre.jcl" + ], + "seed": "base/cntl/db2cre.jcl", + "symbols": { + "": "GENASA1" + }, + "qualifier": "GENASA1", + "compare": [ + "GENASA1.CUSTOMER" + ], + "tables": [ + "GENASA1.CLAIM", + "GENASA1.COMMERCIAL", + "GENASA1.MOTOR", + "GENASA1.HOUSE", + "GENASA1.ENDOWMENT", + "GENASA1.POLICY", + "GENASA1.CUSTOMER_SECURE", + "GENASA1.CUSTOMER" + ] + }, + "commarea": { + "segments": [ + { + "copybook": "base/src/lgicus01.cbl", + "record": "DFHCOMMAREA" + } + ] + }, + "linked": true, + "screens": {}, + "region": { + "applid": "GENAREGN", + "sysid": "CICA" + }, + "scenarios": [ + { + "name": "customer-1", + "commarea": { + "CA-REQUEST-ID": "01ICUS", + "CA-CUSTOMER-NUM": 1 + }, + "why": "LGICDB01's scenario customer-1 through LGICUS01: SELECT INTO +0: '00'; HOUSENAME ' ' comes back as 20 blanks, DATEOFBIRTH as ISO text 1950-07-11" + }, + { + "name": "customer-7-no-phones", + "commarea": { + "CA-REQUEST-ID": "01ICUS", + "CA-CUSTOMER-NUM": 7 + }, + "why": "LGICDB01's scenario customer-7-no-phones through LGICUS01: both phone numbers blank, a 100-byte email column" + }, + { + "name": "customer-not-found", + "commarea": { + "CA-REQUEST-ID": "01ICUS", + "CA-CUSTOMER-NUM": 11 + }, + "why": "LGICDB01's scenario customer-not-found through LGICUS01: SQLCODE +100 (no customer 11): CA-RETURN-CODE '01', the customer fields untouched" + }, + { + "name": "no-commarea", + "commarea": null, + "why": "EIBCALEN 0: LGICUS01 moves ' NO COMMAREA RECEIVED' to EM-VARIABLE, WRITE-ERROR-MESSAGE LINKs LGSTSQ with ERROR-MSG (TD CSMT and TS GENAERRS), IF EIBCALEN > 0 is false, then ABEND LGCA" + }, + { + "commarea": { + "CA-REQUEST-ID": "01ICUS", + "CA-CUSTOMER-NUM": 1 + }, + "name": "short-commarea", + "commarea_length": 60, + "why": "EIBCALEN 60 < WS-REQUIRED-CA-LEN 90 (WS-CUSTOMER-LEN 72 + 18): CA-RETURN-CODE '98', RETURN before the LINK" + } + ], + "notes": "GenApp's inquire-customer front end (LGICUS01, LINKed with the 32500-byte LGCMAREA COMMAREA): it checks the COMMAREA and LINKs LGICDB01 with it. The case runs every program of that chain in the same task (\"programs\"), LGSTSQ too (its error logger, \"region\" for its ASSIGN SYSID), with the back-end case's Db2 tables, VSAM file and data; the scenarios reuse genapp-lgicdb01's inputs (each \"why\" names its source) and add the front end's own paths: no-commarea (EIBCALEN 0: LGSTSQ, ABEND LGCA). short-commarea: as LGACUS01, MOVE '00' TO CA-NUM-POLICIES (bytes 91-93) precedes the length check: judged up to the reference past EIBCALEN (X23); line 104 true is unreachable without one. WRITE-ERROR-MESSAGE's IF EIBCALEN > 0 (and the IF EIBCALEN < 91 inside it) is never true: the paragraph is PERFORMed only when EIBCALEN is zero -- dead in practice, uncovered by every scenario. The SQL faults (M2) are the harness's, one per statement the tasks run. Derived from the CICS General Insurance Application (GenApp, github.com/cicsdev/cics-genapp; (C) Copyright IBM Corp. 2011, 2020), licensed under the Eclipse Public License 2.0: LICENSE here is the corpus's own, NOTICE names the source and what was derived." +} diff --git a/tests/equivalence/genapp-lgipol01/LICENSE b/tests/equivalence/genapp-lgipol01/LICENSE new file mode 100644 index 000000000..d3087e4c5 --- /dev/null +++ b/tests/equivalence/genapp-lgipol01/LICENSE @@ -0,0 +1,277 @@ +Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + +"Contributor" means any person or entity that Distributes the Program. + +"Licensed Patents" mean patent claims licensable by a Contributor which +are necessarily infringed by the use or sale of its Contribution alone +or when combined with the Program. + +"Program" means the Contributions Distributed in accordance with this +Agreement. + +"Recipient" means anyone who receives the Program under this Agreement +or any Secondary License (as applicable), including Contributors. + +"Derivative Works" shall mean any work, whether in Source Code or other +form, that is based on (or derived from) the Program and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. + +"Modified Works" shall mean any work in Source Code or other form that +results from an addition to, deletion from, or modification of the +contents of the Program, including, for purposes of clarity any new file +in Source Code form that contains any contents of the Program. Modified +Works shall not include works that contain only declarations, +interfaces, types, classes, structures, or files of the Program solely +in each case in order to link to, bind by name, or subclass the Program +or Modified Works thereof. + +"Distribute" means the acts of a) distributing or b) making available +in any manner that enables the transfer of a copy. + +"Source Code" means the form of a Program preferred for making +modifications, including but not limited to software source code, +documentation source, and configuration files. + +"Secondary License" means either the GNU General Public License, +Version 2.0, or any later versions of that license, including any +exceptions or additional permissions as identified by the initial +Contributor. + +2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + +3. REQUIREMENTS + +3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + +3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + +3.3 Contributors may not remove or alter any copyright, patent, +trademark, attribution notices, disclaimers of warranty, or limitations +of liability ("notices") contained within the Program from any copy of +the Program which they Distribute, provided that Contributors may add +their own appropriate notices. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities +with respect to end users, business partners and the like. While this +license is intended to facilitate the commercial use of the Program, +the Contributor who includes the Program in a commercial product +offering should do so in a manner which does not create potential +liability for other Contributors. Therefore, if a Contributor includes +the Program in a commercial product offering, such Contributor +("Commercial Contributor") hereby agrees to defend and indemnify every +other Contributor ("Indemnified Contributor") against any losses, +damages and costs (collectively "Losses") arising from claims, lawsuits +and other legal actions brought by a third party against the Indemnified +Contributor to the extent caused by the acts or omissions of such +Commercial Contributor in connection with its distribution of the Program +in a commercial product offering. The obligations in this section do not +apply to any claims or Losses relating to any actual or alleged +intellectual property infringement. In order to qualify, an Indemnified +Contributor must: a) promptly notify the Commercial Contributor in +writing of such claim, and b) allow the Commercial Contributor to control, +and cooperate with the Commercial Contributor in, the defense and any +related settlement negotiations. The Indemnified Contributor may +participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial +product offering, Product X. That Contributor is then a Commercial +Contributor. If that Commercial Contributor then makes performance +claims, or offers warranties related to Product X, those performance +claims and warranties are such Commercial Contributor's responsibility +alone. Under this section, the Commercial Contributor would have to +defend claims against the other Contributors related to those performance +claims and warranties, and if a court requires any other Contributor to +pay any damages as a result, the Commercial Contributor must pay +those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" +BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF +TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR +PURPOSE. Each Recipient is solely responsible for determining the +appropriateness of using and distributing the Program and assumes all +risks associated with its exercise of rights under this Agreement, +including but not limited to the risks and costs of program errors, +compliance with applicable laws, damage to or loss of data, programs +or equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS +SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST +PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE +EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under +applicable law, it shall not affect the validity or enforceability of +the remainder of the terms of this Agreement, and without further +action by the parties hereto, such provision shall be reformed to the +minimum extent necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against any entity +(including a cross-claim or counterclaim in a lawsuit) alleging that the +Program itself (excluding combinations of the Program with other software +or hardware) infringes such Recipient's patent(s), then such Recipient's +rights granted under Section 2(b) shall terminate as of the date such +litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it +fails to comply with any of the material terms or conditions of this +Agreement and does not cure such failure in a reasonable period of +time after becoming aware of such noncompliance. If all Recipient's +rights under this Agreement terminate, Recipient agrees to cease use +and distribution of the Program as soon as reasonably practicable. +However, Recipient's obligations under this Agreement and any licenses +granted by Recipient relating to the Program shall continue and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, +but in order to avoid inconsistency the Agreement is copyrighted and +may only be modified in the following manner. The Agreement Steward +reserves the right to publish new versions (including revisions) of +this Agreement from time to time. No one other than the Agreement +Steward has the right to modify this Agreement. The Eclipse Foundation +is the initial Agreement Steward. The Eclipse Foundation may assign the +responsibility to serve as the Agreement Steward to a suitable separate +entity. Each new version of the Agreement will be given a distinguishing +version number. The Program (including Contributions) may always be +Distributed subject to the version of the Agreement under which it was +received. In addition, after a new version of the Agreement is published, +Contributor may elect to Distribute the Program (including its +Contributions) under the new version. + +Except as expressly stated in Sections 2(a) and 2(b) above, Recipient +receives no rights or licenses to the intellectual property of any +Contributor under this Agreement, whether expressly, by implication, +estoppel or otherwise. All rights in the Program not expressly granted +under this Agreement are reserved. Nothing in this Agreement is intended +to be enforceable by any entity that is not a Contributor or Recipient. +No third-party beneficiary rights are created under this Agreement. + +Exhibit A - Form of Secondary Licenses Notice + +"This Source Code may also be made available under the following +Secondary Licenses when the conditions for such availability set forth +in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), +version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. diff --git a/tests/equivalence/genapp-lgipol01/NOTICE b/tests/equivalence/genapp-lgipol01/NOTICE new file mode 100644 index 000000000..c76cedd69 --- /dev/null +++ b/tests/equivalence/genapp-lgipol01/NOTICE @@ -0,0 +1,12 @@ +CICS General Insurance Application (GenApp) +https://github.com/cicsdev/cics-genapp +(C) Copyright IBM Corp. 2011, 2020 + +Licensed under the Eclipse Public License - v 2.0 (see LICENSE, the corpus's +own licence file). The program under test, base/src/lgipol01.cbl, the +programs it runs in the same task (base/src/lgipdb01.cbl, base/src/lgstsq.cbl), +their copybooks and the Db2 DDL and rows (base/cntl/db2cre.jcl) are GenApp's, used +unmodified from the corpus. + +seed.sql: the genapp-lgipdb01 case's (see its NOTICE). The scenarios in case.json are +written for this case, most from genapp-lgipdb01's. diff --git a/tests/equivalence/genapp-lgipol01/case.json b/tests/equivalence/genapp-lgipol01/case.json new file mode 100644 index 000000000..9b8f511d8 --- /dev/null +++ b/tests/equivalence/genapp-lgipol01/case.json @@ -0,0 +1,151 @@ +{ + "kind": "cics", + "corpus": "cics-genapp", + "program": "LGIPOL01", + "program_source": "base/src/lgipol01.cbl", + "copy_dirs": [ + "base/src" + ], + "transid": "LGIP", + "clock": "2026/10/01 10:30:15.00", + "programs": [ + { + "program": "LGIPDB01", + "program_source": "base/src/lgipdb01.cbl" + }, + { + "program": "LGSTSQ", + "program_source": "base/src/lgstsq.cbl" + } + ], + "db2": { + "ddl": [ + "base/cntl/db2cre.jcl" + ], + "seed": "@case/seed.sql", + "symbols": { + "": "GENASA1" + }, + "qualifier": "GENASA1", + "compare": [ + "GENASA1.POLICY", + "GENASA1.ENDOWMENT", + "GENASA1.HOUSE", + "GENASA1.MOTOR", + "GENASA1.COMMERCIAL" + ], + "tables": [ + "GENASA1.CLAIM", + "GENASA1.COMMERCIAL", + "GENASA1.MOTOR", + "GENASA1.HOUSE", + "GENASA1.ENDOWMENT", + "GENASA1.POLICY", + "GENASA1.CUSTOMER_SECURE", + "GENASA1.CUSTOMER" + ] + }, + "commarea": { + "segments": [ + { + "copybook": "base/src/lgipol01.cbl", + "record": "DFHCOMMAREA" + } + ] + }, + "linked": true, + "screens": {}, + "region": { + "applid": "GENAREGN", + "sysid": "CICA" + }, + "scenarios": [ + { + "name": "endowment-3-5", + "commarea": { + "CA-REQUEST-ID": "01IEND", + "CA-CUSTOMER-NUM": 3, + "CA-REQUEST-SPECIFIC": "0000000005 " + }, + "why": "LGIPDB01's scenario endowment-3-5 through LGIPOL01: 01IEND, SELECT INTO on POLICY x ENDOWMENT +0: '00'; PADDINGDATA and LENGTH(PADDINGDATA) are NULL (indicators -1), so no padding is moved and 'FINAL' lands at CA-E-PADDING-DATA(1:5); brokerId 0 / payment 0 not NULL, moved to the 9(10)/9(6) fields" + }, + { + "name": "house-4-6", + "commarea": { + "CA-REQUEST-ID": "01IHOU", + "CA-CUSTOMER-NUM": 4, + "CA-REQUEST-SPECIFIC": "0000000006 " + }, + "why": "LGIPDB01's scenario house-4-6 through LGIPOL01: 01IHOU, POLICY x HOUSE +0: bedrooms SMALLINT and value INTEGER moved to 9(3)/9(8); house name ' '; 'FINAL' in CA-H-FILLER" + }, + { + "name": "motor-2-1", + "commarea": { + "CA-REQUEST-ID": "01IMOT", + "CA-CUSTOMER-NUM": 2, + "CA-REQUEST-SPECIFIC": "0000000001 " + }, + "why": "LGIPDB01's scenario motor-2-1 through LGIPOL01: 01IMOT, POLICY x MOTOR +0: CC, value, premium, accidents converted from binary; YEAROFMANUFACTURE (DATE) as ISO text; 'FINAL' in CA-M-FILLER" + }, + { + "name": "commercial-1-10", + "commarea": { + "CA-REQUEST-ID": "01ICOM", + "CA-CUSTOMER-NUM": 1, + "CA-REQUEST-SPECIFIC": "0000000010 " + }, + "why": "LGIPDB01's scenario commercial-1-10 through LGIPOL01: 01ICOM, POLICY x COMMERCIAL +0: REQUESTDATE (TIMESTAMP) into DB2-LASTCHANGED, STARTDATE/RENEWALDATE into issue/expiry; the 255-byte CHAR columns and nine SMALLINT/INTEGER perils, premiums and status into CA-COMMERCIAL; 'FINAL' in CA-B-FILLER" + }, + { + "name": "commercial-by-policy-10", + "commarea": { + "CA-REQUEST-ID": "02ICOM", + "CA-CUSTOMER-NUM": 7, + "CA-REQUEST-SPECIFIC": "0000000010 " + }, + "why": "LGIPDB01's scenario commercial-by-policy-10 through LGIPOL01: 02ICOM selects by policy number alone: +0, CA-CUSTOMER-NUM (7 on entry) replaced by the row's 1" + }, + { + "name": "customer-cursor-one-row", + "commarea": { + "CA-REQUEST-ID": "03ICOM", + "CA-CUSTOMER-NUM": 1, + "CA-REQUEST-SPECIFIC": "0000000000 " + }, + "why": "LGIPDB01's scenario customer-cursor-one-row through LGIPOL01: 03ICOM, Cust_Cursor: OPEN +0, one FETCH +0 (customer 1's policy 10: CA-CUSTOMER-NUM, CA-POLICY-NUM, common and commercial fields filled, ICOM-Record-Count 1), then FETCH +100 ends the loop, CLOSE +0, '00'" + }, + { + "name": "zip-cursor-so212jn", + "commarea": { + "CA-REQUEST-ID": "05ICOM", + "CA-CUSTOMER-NUM": 0, + "CA-REQUEST-SPECIFIC": "0000000000 SO212JN " + }, + "why": "LGIPDB01's scenario zip-cursor-so212jn through LGIPOL01: 05ICOM, Zip_Cursor on CA-B-POSTCODE 'SO212JN ' (host variable in the COMMAREA): one row, policy 10 / customer 1, then +100, CLOSE, '00'" + }, + { + "name": "unknown-request-id", + "commarea": { + "CA-REQUEST-ID": "01IXXX", + "CA-CUSTOMER-NUM": 3, + "CA-REQUEST-SPECIFIC": "0000000005 " + }, + "why": "LGIPDB01's scenario unknown-request-id through LGIPOL01: WHEN OTHER: '99', no SQL" + }, + { + "name": "house-not-found", + "commarea": { + "CA-REQUEST-ID": "01IHOU", + "CA-CUSTOMER-NUM": 3, + "CA-REQUEST-SPECIFIC": "0000000005 " + }, + "why": "LGIPDB01's scenario house-not-found through LGIPOL01: policy 5 is an endowment: +100, '01'" + }, + { + "name": "no-commarea", + "commarea": null, + "why": "EIBCALEN 0: LGIPOL01 moves ' NO COMMAREA RECEIVED' to EM-VARIABLE, WRITE-ERROR-MESSAGE LINKs LGSTSQ with ERROR-MSG (TD CSMT and TS GENAERRS), IF EIBCALEN > 0 is false, then ABEND LGCA" + } + ], + "notes": "GenApp's inquire-policy front end (LGIPOL01, LINKed with the 32500-byte LGCMAREA COMMAREA): it checks the COMMAREA and LINKs LGIPDB01 with it. The case runs every program of that chain in the same task (\"programs\"), LGSTSQ too (its error logger, \"region\" for its ASSIGN SYSID), with the back-end case's Db2 tables, VSAM file and data; the scenarios reuse genapp-lgipdb01's inputs (each \"why\" names its source) and add the front end's own paths: no-commarea (EIBCALEN 0: LGSTSQ, ABEND LGCA). LGIPOL01 checks no length and no request id itself. WRITE-ERROR-MESSAGE's IF EIBCALEN > 0 (and the IF EIBCALEN < 91 inside it) is never true: the paragraph is PERFORMed only when EIBCALEN is zero -- dead in practice, uncovered by every scenario. The SQL faults (M2) are the harness's, one per statement the tasks run. Derived from the CICS General Insurance Application (GenApp, github.com/cicsdev/cics-genapp; (C) Copyright IBM Corp. 2011, 2020), licensed under the Eclipse Public License 2.0: LICENSE here is the corpus's own, NOTICE names the source and what was derived." +} diff --git a/tests/equivalence/genapp-lgipol01/seed.sql b/tests/equivalence/genapp-lgipol01/seed.sql new file mode 100644 index 000000000..7cd36c115 --- /dev/null +++ b/tests/equivalence/genapp-lgipol01/seed.sql @@ -0,0 +1,836 @@ +Insert Into .customer ( + customerNumber , + firstName , + lastName , + dateOfBirth , + houseName , + houseNumber , + postcode , + phonehome , + phonemobile , + emailaddress) + Values ( + 1 , + 'Andrew' , + 'Pandy' , + '1950-07-11' , + ' ' , + '34' , + 'PI101OO' , + '01962 811234' , + '07799 123456' , + 'A.Pandy@beebhouse.com'); + +Insert Into .customer_secure ( + customerNumber , + customerPass , + state_indicator , + pass_changes) + Values ( + 1 , + '5732fec825535eeafb8fac50fee3a8aa' , + 'N' , + 0 ); + +Insert Into .customer ( + customerNumber , + firstName , + lastName , + dateOfBirth , + houseName , + houseNumber , + postcode , + phonehome , + phonemobile , + emailaddress) + Values ( + 2 , + 'Scott' , + 'Tracey' , + '1965-09-30' , + 'Tracey Island' , + '1' , + 'TB14TV' , + '001 911911' , + ' ' , + 'REFROOM@TBHOLDINGS.COM'); + +Insert Into .customer_secure ( + customerNumber , + customerPass , + state_indicator , + pass_changes) + Values ( + 2 , + '5732fec825535eeafb8fac50fee3a8aa' , + 'N' , + 0 ); + +Insert Into .customer ( + customerNumber , + firstName , + lastName , + dateOfBirth , + houseName , + houseNumber , + postcode , + phonehome , + phonemobile , + emailaddress) + Values ( + 3 , + 'John' , + 'Noakes' , + '1934-03-06' , + ' ' , + '70' , + 'HX116BP' , + '0207 325656' , + '09008 329855' , + 'Noaksey@beebhouse.com'); + +Insert Into .customer_secure ( + customerNumber , + customerPass , + state_indicator , + pass_changes) + Values ( + 3 , + '5732fec825535eeafb8fac50fee3a8aa' , + 'N' , + 0 ); + +Insert Into .customer ( + customerNumber , + firstName , + lastName , + dateOfBirth , + houseName , + houseNumber , + postcode , + phonehome , + phonemobile , + emailaddress) + Values ( + 4 , + 'Louis' , + 'Pug' , + '1969-09-06' , + 'Picnic Basket' , + '21' , + 'PP159DD' , + '0208 344344' , + ' ' , + ' ' ); + +Insert Into .customer_secure ( + customerNumber , + customerPass , + state_indicator , + pass_changes) + Values ( + 4 , + '5732fec825535eeafb8fac50fee3a8aa' , + 'N' , + 0 ); + +Insert Into .customer ( + customerNumber , + firstName , + lastName , + dateOfBirth , + houseName , + houseNumber , + postcode , + phonehome , + phonemobile , + emailaddress) + Values ( + 5 , + 'Graham' , + 'Cuthbert' , + '1967-01-03' , + ' ' , + '55' , + 'TR68BK' , + '0208 344344' , + '01101 499787' , + 'A.Cut@CG.co.uk'); + +Insert Into .customer_secure ( + customerNumber , + customerPass , + state_indicator , + pass_changes) + Values ( + 5 , + '5732fec825535eeafb8fac50fee3a8aa' , + 'N' , + 0 ); + +Insert Into .customer ( + customerNumber , + firstName , + lastName , + dateOfBirth , + houseName , + houseNumber , + postcode , + phonehome , + phonemobile , + emailaddress) + Values ( + 6 , + 'Brian' , + 'Cant' , + '1933-07-12' , + ' ' , + '58' , + 'IP221PL' , + '01855 122134' , + ' ' , + 'CANT@beebhouse.com'); + +Insert Into .customer_secure ( + customerNumber , + customerPass , + state_indicator , + pass_changes) + Values ( + 6 , + '5732fec825535eeafb8fac50fee3a8aa' , + 'N' , + 0 ); + +Insert Into .customer ( + customerNumber , + firstName , + lastName , + dateOfBirth , + houseName , + houseNumber , + postcode , + phonehome , + phonemobile , + emailaddress) + Values ( + 7 , + 'Troy' , + 'Tempest' , + '1964-10-04' , + 'The Ray' , + '48' , + 'ST106RY' , + ' ' , + ' ' , + 'TROYT@BUSCOMM.COM'); + +Insert Into .customer_secure ( + customerNumber , + customerPass , + state_indicator , + pass_changes) + Values ( + 7 , + '5732fec825535eeafb8fac50fee3a8aa' , + 'N' , + 0 ); + +Insert Into .customer ( + customerNumber , + firstName , + lastName , + dateOfBirth , + houseName , + houseNumber , + postcode , + phonehome , + phonemobile , + emailaddress) + Values ( + 8 , + 'Johnny' , + 'Morris' , + '1961-06-20' , + ' ' , + '72' , + 'BS83HA' , + '0345 245245' , + '0345 245245' , + 'JM@ZOOLAND.CO.UK'); + +Insert Into .customer_secure ( + customerNumber , + customerPass , + state_indicator , + pass_changes) + Values ( + 8 , + '5732fec825535eeafb8fac50fee3a8aa' , + 'N' , + 0 ); + +Insert Into .customer ( + customerNumber , + firstName , + lastName , + dateOfBirth , + houseName , + houseNumber , + postcode , + phonehome , + phonemobile , + emailaddress) + Values ( + 9 , + 'Micky' , + 'Murphy' , + '1966-01-03' , + ' ' , + '51' , + 'CA316RN' , + ' ' , + ' ' , + ' ' ); + +Insert Into .customer_secure ( + customerNumber , + customerPass , + state_indicator , + pass_changes) + Values ( + 9 , + '5732fec825535eeafb8fac50fee3a8aa' , + 'N' , + 0 ); + +Insert Into .customer ( + customerNumber , + firstName , + lastName , + dateOfBirth , + houseName , + houseNumber , + postcode , + phonehome , + phonemobile , + emailaddress) + Values ( + 10 , + 'Susan' , + 'Stranks' , + '1938-12-02' , + ' ' , + '68' , + 'W1A4WW' , + '0207 845845' , + ' ', + ' '); + +Insert Into .customer_secure ( + customerNumber , + customerPass , + state_indicator , + pass_changes) + Values ( + 10 , + '5732fec825535eeafb8fac50fee3a8aa' , + 'N' , + 0 ); + +Insert Into .policy ( + policyNumber , + customerNumber , + issueDate , + expiryDate , + policyType , + lastChanged , + brokerId , + brokersReference , + payment , + commission) + Values ( + 10 , + 1 , + '2011-08-22' , + '2012-08-21' , + 'C' , + '2011-08-22 12:13:01' , + 0 , + '' , + 0 , + 0 ); + +Insert Into .policy ( + policyNumber , + customerNumber , + issueDate , + expiryDate , + policyType , + lastChanged , + brokerId , + brokersReference , + payment , + commission) + Values ( + 9 , + 5 , + '2011-09-23' , + '2012-09-22' , + 'C' , + '2011-09-23 17:00:44' , + 0 , + '' , + 0 , + 0 ); + +Insert Into .policy ( + policyNumber , + customerNumber , + issueDate , + expiryDate , + policyType , + lastChanged , + brokerId , + brokersReference , + payment , + commission) + Values ( + 5 , + 3 , + '2011-10-01' , + '2012-09-30' , + 'E' , + '2011-10-01 09:31:22' , + 0 , + '' , + 0 , + 0 ); + +Insert Into .policy ( + policyNumber , + customerNumber , + issueDate , + expiryDate , + policyType , + lastChanged , + brokerId , + brokersReference , + payment , + commission) + Values ( + 4 , + 8 , + '2011-08-05' , + '2012-08-04' , + 'E' , + '2011-08-05 10:45:19' , + 0 , + '' , + 0 , + 0 ); + +Insert Into .policy ( + policyNumber , + customerNumber , + issueDate , + expiryDate , + policyType , + lastChanged , + brokerId , + brokersReference , + payment , + commission) + Values ( + 6 , + 4 , + '2011-09-01' , + '2011-12-31' , + 'H' , + '2011-09-01 22:32:42' , + 0 , + '' , + 0 , + 0 ); + +Insert Into .policy ( + policyNumber , + customerNumber , + issueDate , + expiryDate , + policyType , + lastChanged , + brokerId , + brokersReference , + payment , + commission) + Values ( + 7 , + 6 , + '2011-10-05' , + '2012-10-04' , + 'C' , + '2011-10-09 16:50:00' , + 0 , + '' , + 0 , + 0 ); + +Insert Into .policy ( + policyNumber , + customerNumber , + issueDate , + expiryDate , + policyType , + lastChanged , + brokerId , + brokersReference , + payment , + commission) + Values ( + 8 , + 9 , + '2011-08-12' , + '2012-08-11' , + 'H' , + '2011-08-12 11:11:01' , + 0 , + '' , + 0 , + 0 ); + +Insert Into .policy ( + policyNumber , + customerNumber , + issueDate , + expiryDate , + policyType , + lastChanged , + brokerId , + brokersReference , + payment , + commission) + Values ( + 1 , + 2 , + '2011-05-11' , + '2012-05-10' , + 'M' , + '2011-05-11 17:12:17' , + 0 , + '' , + 0 , + 0 ); + +Insert Into .policy ( + policyNumber , + customerNumber , + issueDate , + expiryDate , + policyType , + lastChanged , + brokerId , + brokersReference , + payment , + commission) + Values ( + 3 , + 5 , + '2011-09-08' , + '2012-09-07' , + 'M' , + '2011-09-08 13:14:45' , + 0 , + '' , + 0 , + 0 ); + +Insert Into .policy ( + policyNumber , + customerNumber , + issueDate , + expiryDate , + policyType , + lastChanged , + brokerId , + brokersReference , + payment , + commission) + Values ( + 2 , + 10 , + '2011-10-31' , + '2012-10-30' , + 'M' , + '2011-10-31 10:22:46' , + 0 , + '' , + 0 , + 0 ); + +Insert Into .endowment ( + policyNumber , + equities , + withProfits , + managedFund , + fundName , + term , + sumAssured , + lifeAssured) + Values ( + 5 , + 'N' , + 'N' , + 'N' , + 'SHEPPA' , + 10 , + 50000 , + 'Shep' ); + +Insert Into .endowment ( + policyNumber , + equities , + withProfits , + managedFund , + fundName , + term , + sumAssured , + lifeAssured) + Values ( + 4 , + 'Y' , + 'Y' , + 'N' , + 'LIONTMR' , + 5 , + 12500 , + 'J. MORRIS'); + +Insert Into .house( + policyNumber , + propertyType , + bedrooms , + value , + houseName , + houseNumber , + postcode) + Values ( + 6 , + 'HOUSE' , + 5 , + 1500000 , + ' ' , + ' 5' , + 'SO211UP' ); + +Insert Into .house( + policyNumber , + propertyType , + bedrooms , + value , + houseName , + houseNumber , + postcode) + Values ( + 7 , + 'FARM' , + 8 , + 3750000 , + 'HOME FARM' , + ' 4' , + 'SO529ED' ); + +Insert Into .house( + policyNumber , + propertyType , + bedrooms , + value , + houseName , + houseNumber , + postcode) + Values ( + 8 , + 'FLAT' , + 1 , + 260000 , + ' ' , + ' 12b' , + 'E15WW' ); + +Insert Into .motor( + policyNumber , + make , + model , + value , + regNumber , + colour , + cc , + yearOfManufacture , + premium , + accidents ) + Values ( + 1 , + 'FORD' , + 'KA' , + 8500 , + 'LL60LOO' , + 'ORANGE' , + 1000 , + '1999-07-19' , + 450 , + 0 ); + +Insert Into .motor( + policyNumber , + make , + model , + value , + regNumber , + colour , + cc , + yearOfManufacture , + premium , + accidents ) + Values ( + 3 , + 'DENNIS' , + 'ENGINE' , + 23500 , + 'FIRE1' , + 'RED' , + 5000 , + '1973-05-13' , + 2850 , + 12 ); + +Insert Into .motor( + policyNumber , + make , + model , + value , + regNumber , + colour , + cc , + yearOfManufacture , + premium , + accidents ) + Values ( + 2 , + 'VOLKSWAGEN' , + 'BEETLE' , + 600 , + 'A567WWR' , + 'PURPLE' , + 1200 , + '1968-10-31' , + 700 , + 1 ); + +Insert Into .COMMERCIAL( + PolicyNumber , + RequestDate , + StartDate , + RenewalDate , + Address , + Zipcode , + LatitudeN , + LongitudeW , + Customer , + PropertyType , + FirePeril , + FirePremium , + CrimePeril , + CrimePremium , + FloodPeril , + FloodPremium , + WeatherPeril , + WeatherPremium , + Status , + RejectionReason) + Values ( + 10 , + '2011-08-23 10:44:34' , + '2011-08-25' , + '2011-08-24' , + 'HURSLEY PARK' , + 'SO212JN' , + '51.026701' , + '-1.398903' , + 'IBM' , + 'OFFICES' , + 3 , + 8000 , + 3 , + 25000 , + 5 , + 2000 , + 4 , + 5000 , + 1 , + 'ACTIVE' ); + +Insert Into .COMMERCIAL( + PolicyNumber , + RequestDate , + StartDate , + RenewalDate , + Address , + Zipcode , + LatitudeN , + LongitudeW , + Customer , + PropertyType , + FirePeril , + FirePremium , + CrimePeril , + CrimePremium , + FloodPeril , + FloodPremium , + WeatherPeril , + WeatherPremium , + Status , + RejectionReason) + Values ( + 9 , + '2011-07-17 13:13:09' , + '2011-08-01' , + '2011-07-30' , + 'TURF MOOR' , + 'BB104BX' , + '53.78847' , + '-2.230325' , + 'Burnley Football Club' , + 'STADIUM' , + 1 , + 44000 , + 2 , + 25000 , + 3 , + 15000 , + 4 , + 6000 , + 1 , + 'ACTIVE' ); + +Insert Into .customer (customerNumber, firstName, lastName, dateOfBirth, houseName, houseNumber, postcode, + phonehome, phonemobile, emailaddress) + Values (11, 'Ada', 'Lovelace', '1815-12-10', 'Ockham Park', '12', 'KT246HP', '01483 222111', '07700 900123', + 'ada@analytical.example'); + +Insert Into .policy (policyNumber, customerNumber, issueDate, expiryDate, policyType, lastChanged, + brokerId, brokersReference, payment, commission) + Values (101, 11, '2026-01-05', '2036-01-04', 'E', '2026-01-05 09:00:00', NULL, 'NOBROKER', NULL, 0); +Insert Into .endowment (policyNumber, equities, withProfits, managedFund, fundName, term, sumAssured, + lifeAssured, paddingData) + Values (101, 'Y', 'N', 'Y', 'ANALYTIC', 10, 75000, 'Ada Lovelace', 'PADDING FROM A SEEDED ROW'); +Insert Into .policy (policyNumber, customerNumber, issueDate, expiryDate, policyType, lastChanged, + brokerId, brokersReference, payment, commission) + Values (102, 11, '2026-02-01', '2027-01-31', 'H', '2026-02-01 10:15:00', NULL, '', NULL, 5); +Insert Into .house (policyNumber, propertyType, bedrooms, value, houseName, houseNumber, postcode) + Values (102, 'MANOR', 9, 2750000, 'Ockham Park', ' 12', 'KT246HP'); +Insert Into .policy (policyNumber, customerNumber, issueDate, expiryDate, policyType, lastChanged, + brokerId, brokersReference, payment, commission) + Values (103, 11, '2026-03-10', '2027-03-09', 'M', '2026-03-10 14:30:00', NULL, '', NULL, 2); +Insert Into .motor (policyNumber, make, model, value, regNumber, colour, cc, yearOfManufacture, premium, + accidents) + Values (103, 'BABBAGE', 'ENGINE', 12000, 'AL15ADA', 'BRASS', 1815, '2015-12-10', 600, 1); diff --git a/tests/equivalence/genapp-lgtestp1/LICENSE b/tests/equivalence/genapp-lgtestp1/LICENSE new file mode 100644 index 000000000..d3087e4c5 --- /dev/null +++ b/tests/equivalence/genapp-lgtestp1/LICENSE @@ -0,0 +1,277 @@ +Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + +"Contributor" means any person or entity that Distributes the Program. + +"Licensed Patents" mean patent claims licensable by a Contributor which +are necessarily infringed by the use or sale of its Contribution alone +or when combined with the Program. + +"Program" means the Contributions Distributed in accordance with this +Agreement. + +"Recipient" means anyone who receives the Program under this Agreement +or any Secondary License (as applicable), including Contributors. + +"Derivative Works" shall mean any work, whether in Source Code or other +form, that is based on (or derived from) the Program and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. + +"Modified Works" shall mean any work in Source Code or other form that +results from an addition to, deletion from, or modification of the +contents of the Program, including, for purposes of clarity any new file +in Source Code form that contains any contents of the Program. Modified +Works shall not include works that contain only declarations, +interfaces, types, classes, structures, or files of the Program solely +in each case in order to link to, bind by name, or subclass the Program +or Modified Works thereof. + +"Distribute" means the acts of a) distributing or b) making available +in any manner that enables the transfer of a copy. + +"Source Code" means the form of a Program preferred for making +modifications, including but not limited to software source code, +documentation source, and configuration files. + +"Secondary License" means either the GNU General Public License, +Version 2.0, or any later versions of that license, including any +exceptions or additional permissions as identified by the initial +Contributor. + +2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + +3. REQUIREMENTS + +3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + +3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + +3.3 Contributors may not remove or alter any copyright, patent, +trademark, attribution notices, disclaimers of warranty, or limitations +of liability ("notices") contained within the Program from any copy of +the Program which they Distribute, provided that Contributors may add +their own appropriate notices. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities +with respect to end users, business partners and the like. While this +license is intended to facilitate the commercial use of the Program, +the Contributor who includes the Program in a commercial product +offering should do so in a manner which does not create potential +liability for other Contributors. Therefore, if a Contributor includes +the Program in a commercial product offering, such Contributor +("Commercial Contributor") hereby agrees to defend and indemnify every +other Contributor ("Indemnified Contributor") against any losses, +damages and costs (collectively "Losses") arising from claims, lawsuits +and other legal actions brought by a third party against the Indemnified +Contributor to the extent caused by the acts or omissions of such +Commercial Contributor in connection with its distribution of the Program +in a commercial product offering. The obligations in this section do not +apply to any claims or Losses relating to any actual or alleged +intellectual property infringement. In order to qualify, an Indemnified +Contributor must: a) promptly notify the Commercial Contributor in +writing of such claim, and b) allow the Commercial Contributor to control, +and cooperate with the Commercial Contributor in, the defense and any +related settlement negotiations. The Indemnified Contributor may +participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial +product offering, Product X. That Contributor is then a Commercial +Contributor. If that Commercial Contributor then makes performance +claims, or offers warranties related to Product X, those performance +claims and warranties are such Commercial Contributor's responsibility +alone. Under this section, the Commercial Contributor would have to +defend claims against the other Contributors related to those performance +claims and warranties, and if a court requires any other Contributor to +pay any damages as a result, the Commercial Contributor must pay +those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" +BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF +TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR +PURPOSE. Each Recipient is solely responsible for determining the +appropriateness of using and distributing the Program and assumes all +risks associated with its exercise of rights under this Agreement, +including but not limited to the risks and costs of program errors, +compliance with applicable laws, damage to or loss of data, programs +or equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS +SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST +PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE +EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under +applicable law, it shall not affect the validity or enforceability of +the remainder of the terms of this Agreement, and without further +action by the parties hereto, such provision shall be reformed to the +minimum extent necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against any entity +(including a cross-claim or counterclaim in a lawsuit) alleging that the +Program itself (excluding combinations of the Program with other software +or hardware) infringes such Recipient's patent(s), then such Recipient's +rights granted under Section 2(b) shall terminate as of the date such +litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it +fails to comply with any of the material terms or conditions of this +Agreement and does not cure such failure in a reasonable period of +time after becoming aware of such noncompliance. If all Recipient's +rights under this Agreement terminate, Recipient agrees to cease use +and distribution of the Program as soon as reasonably practicable. +However, Recipient's obligations under this Agreement and any licenses +granted by Recipient relating to the Program shall continue and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, +but in order to avoid inconsistency the Agreement is copyrighted and +may only be modified in the following manner. The Agreement Steward +reserves the right to publish new versions (including revisions) of +this Agreement from time to time. No one other than the Agreement +Steward has the right to modify this Agreement. The Eclipse Foundation +is the initial Agreement Steward. The Eclipse Foundation may assign the +responsibility to serve as the Agreement Steward to a suitable separate +entity. Each new version of the Agreement will be given a distinguishing +version number. The Program (including Contributions) may always be +Distributed subject to the version of the Agreement under which it was +received. In addition, after a new version of the Agreement is published, +Contributor may elect to Distribute the Program (including its +Contributions) under the new version. + +Except as expressly stated in Sections 2(a) and 2(b) above, Recipient +receives no rights or licenses to the intellectual property of any +Contributor under this Agreement, whether expressly, by implication, +estoppel or otherwise. All rights in the Program not expressly granted +under this Agreement are reserved. Nothing in this Agreement is intended +to be enforceable by any entity that is not a Contributor or Recipient. +No third-party beneficiary rights are created under this Agreement. + +Exhibit A - Form of Secondary Licenses Notice + +"This Source Code may also be made available under the following +Secondary Licenses when the conditions for such availability set forth +in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), +version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. diff --git a/tests/equivalence/genapp-lgtestp1/NOTICE b/tests/equivalence/genapp-lgtestp1/NOTICE new file mode 100644 index 000000000..9b51cc7b9 --- /dev/null +++ b/tests/equivalence/genapp-lgtestp1/NOTICE @@ -0,0 +1,12 @@ +CICS General Insurance Application (GenApp) +https://github.com/cicsdev/cics-genapp +(C) Copyright IBM Corp. 2011, 2020 + +Licensed under the Eclipse Public License - v 2.0 (see LICENSE, the corpus's +own licence file). The program under test, base/src/lgtestp1.cbl, the +programs it runs in the same task (base/src/lgipol01.cbl, base/src/lgipdb01.cbl, base/src/lgapol01.cbl, base/src/lgapdb01.cbl, base/src/lgapvs01.cbl, base/src/lgdpol01.cbl, base/src/lgdpdb01.cbl, base/src/lgdpvs01.cbl, base/src/lgupol01.cbl, base/src/lgupdb01.cbl, base/src/lgupvs01.cbl, base/src/lgstsq.cbl), +their copybooks, the BMS mapset (base/src/ssmap.bms) and the Db2 DDL and rows +(base/cntl/db2cre.jcl) are GenApp's, used unmodified from the corpus. + +ksdspoly.txt is the genapp-lgupdb01 case's (see its NOTICE). The scenarios in +case.json are written for this case. diff --git a/tests/equivalence/genapp-lgtestp1/case.json b/tests/equivalence/genapp-lgtestp1/case.json new file mode 100644 index 000000000..ef1a63ff2 --- /dev/null +++ b/tests/equivalence/genapp-lgtestp1/case.json @@ -0,0 +1,391 @@ +{ + "kind": "cics", + "corpus": "cics-genapp", + "program": "LGTESTP1", + "program_source": "base/src/lgtestp1.cbl", + "copy_dirs": [ + "base/src" + ], + "transid": "SSP1", + "clock": "2026/10/01 10:30:15.00", + "programs": [ + { + "program": "LGIPOL01", + "program_source": "base/src/lgipol01.cbl" + }, + { + "program": "LGIPDB01", + "program_source": "base/src/lgipdb01.cbl" + }, + { + "program": "LGAPOL01", + "program_source": "base/src/lgapol01.cbl" + }, + { + "program": "LGAPDB01", + "program_source": "base/src/lgapdb01.cbl" + }, + { + "program": "LGAPVS01", + "program_source": "base/src/lgapvs01.cbl" + }, + { + "program": "LGDPOL01", + "program_source": "base/src/lgdpol01.cbl" + }, + { + "program": "LGDPDB01", + "program_source": "base/src/lgdpdb01.cbl" + }, + { + "program": "LGDPVS01", + "program_source": "base/src/lgdpvs01.cbl" + }, + { + "program": "LGUPOL01", + "program_source": "base/src/lgupol01.cbl" + }, + { + "program": "LGUPDB01", + "program_source": "base/src/lgupdb01.cbl" + }, + { + "program": "LGUPVS01", + "program_source": "base/src/lgupvs01.cbl" + }, + { + "program": "LGSTSQ", + "program_source": "base/src/lgstsq.cbl" + } + ], + "datasets": { + ".GENAPP.KSDSPOLY": { + "input": "@case/ksdspoly.txt", + "entity": "WfPolicyInfo", + "copybook": "base/src/lgupvs01.cbl", + "record": "WF-POLICY-INFO", + "vsam": { + "key_offset": 0, + "key_length": 21, + "reclen": 64, + "why": "base/cntl/adef121.jcl DEFINE2: DATA(... KEYS(21 0) RECORDSIZE(64 64)); the engine's facts do not read KEYS / RECORDSIZE inside the DATA component, so the case states them" + } + } + }, + "db2": { + "ddl": [ + "base/cntl/db2cre.jcl" + ], + "seed": "base/cntl/db2cre.jcl", + "symbols": { + "": "GENASA1" + }, + "qualifier": "GENASA1", + "compare": [ + "GENASA1.POLICY", + "GENASA1.ENDOWMENT", + "GENASA1.HOUSE", + "GENASA1.MOTOR", + "GENASA1.COMMERCIAL" + ] + }, + "clock_fields": { + "db2": [ + "GENASA1.POLICY.LASTCHANGED", + "GENASA1.COMMERCIAL.REQUESTDATE" + ], + "commarea": [ + "CA-REQUEST-SPECIFIC(31:26)" + ] + }, + "commarea": { + "segments": [ + { + "copybook": "base/src/lgtestp1.cbl", + "record": "COMM-AREA" + } + ] + }, + "screens": { + "SSMAPP1": { + "copybook": "@bms/SSMAP.cpy", + "input": "SSMAPP1I", + "output": "SSMAPP1O" + } + }, + "region": { + "applid": "GENAREGN", + "sysid": "CICA" + }, + "scenarios": [ + { + "name": "first-entry-inquire", + "aid": "DFHENTER", + "commarea": null, + "receive": { + "SSMAPP1": { + "ENP1OPTI": "1", + "ENP1CNOI": "0000000002", + "ENP1PNOI": "0000000001" + } + }, + "why": "EIBCALEN 0: the map initialised and sent (ERASE), then the same task's RECEIVE (the operator's input): option 1 inquires motor policy 1 of customer 2 (LINK LGIPOL01 -> LGIPDB01); the policy shown, RETURN TRANSID('SSP{n}') with COMM-AREA" + }, + { + "name": "inquire", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP1": { + "ENP1OPTI": "1", + "ENP1CNOI": "0000000005", + "ENP1PNOI": "0000000003" + } + }, + "why": "option 1 on a returning task (EIBCALEN > 0: GO TO A-GAIN): motor policy 3 of customer 5" + }, + { + "name": "inquire-not-found", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP1": { + "ENP1OPTI": "1", + "ENP1CNOI": "0000000002", + "ENP1PNOI": "0000009999" + } + }, + "why": "option 1 for a policy the customer does not hold: LGIPDB01 sets CA-RETURN-CODE '01' -> NO-DATA ('No data was returned.'), ERROR-OUT sends the map and initialises the areas" + }, + { + "name": "delete", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP1": { + "ENP1OPTI": "3", + "ENP1CNOI": "0000000002", + "ENP1PNOI": "0000000001" + } + }, + "why": "option 3: LINK LGDPOL01 (01DMOT) deletes policy 1 of customer 2 (POLICY row, cascade, VSAM copy); the fields blanked, 'Motor Policy Deleted', SEND MAP twice" + }, + { + "name": "delete-fails", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP1": { + "ENP1OPTI": "3", + "ENP1CNOI": "0000000002", + "ENP1PNOI": "0000000001" + } + }, + "sql_faults": [ + { + "program": "LGDPDB01", + "line": 189, + "sqlcode": -913 + } + ], + "why": "option 3 with LGDPDB01's DELETE failing (SQLCODE -913): CA-RETURN-CODE '90' -> SYNCPOINT ROLLBACK, NO-DELETE; the back end LINKs LGSTSQ first, so the task is judged up to LGSTSQ's refused WRITEQ (X6) and the rest is not compared" + }, + { + "name": "bad-option", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP1": { + "ENP1OPTI": "9" + } + }, + "why": "option '9': WHEN OTHER -- 'Please enter a valid option', the option field's length -1 (cursor), SEND MAP ... CURSOR" + }, + { + "name": "clear", + "aid": "DFHCLEAR", + "commarea": {}, + "receive": { + "SSMAPP1": { + "ENP1OPTI": "1" + } + }, + "why": "CLEAR: HANDLE AID CLEAR(CLEARIT) -- the map sent MAPONLY, RETURN TRANSID" + }, + { + "name": "pf3", + "aid": "DFHPF3", + "commarea": {}, + "receive": { + "SSMAPP1": { + "ENP1OPTI": "1" + } + }, + "why": "PF3: HANDLE AID PF3(ENDIT) -- SEND TEXT 'Transaction ended' ERASE FREEKB, RETURN" + }, + { + "name": "mapfail", + "aid": "DFHENTER", + "commarea": {}, + "why": "ENTER with no input: the RECEIVE raises MAPFAIL, HANDLE CONDITION MAPFAIL(ENDIT)" + }, + { + "name": "add", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP1": { + "ENP1OPTI": "2", + "ENP1CNOI": "0000000003", + "ENP1IDAI": "2026-01-01", + "ENP1EDAI": "2027-01-01", + "ENP1CMKI": "FORD", + "ENP1CMOI": "FIESTA", + "ENP1VALI": "012000", + "ENP1REGI": "AB12CDE", + "ENP1COLI": "BLUE", + "ENP1CCI": "00001600", + "ENP1MANI": "2020-05-01", + "ENP1ACCI": "000001", + "ENP1PREI": "000450" + } + }, + "why": "option 2: LINK LGAPOL01 ('01AMOT') adds a motor policy for customer 3 (POLICY + its type's row, VSAM copy); the new numbers shown, 'New Motor Policy Inserted'" + }, + { + "name": "add-unknown-customer", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP1": { + "ENP1OPTI": "2", + "ENP1CNOI": "0000000999", + "ENP1IDAI": "2026-01-01", + "ENP1EDAI": "2027-01-01", + "ENP1CMKI": "FORD", + "ENP1CMOI": "FIESTA", + "ENP1VALI": "012000", + "ENP1REGI": "AB12CDE", + "ENP1COLI": "BLUE", + "ENP1CCI": "00001600", + "ENP1MANI": "2020-05-01", + "ENP1ACCI": "000001", + "ENP1PREI": "000450" + } + }, + "why": "option 2 for customer 999, who does not exist: LGAPDB01's INSERT into POLICY breaks its foreign key (SQLCODE -530) -> CA-RETURN-CODE '70', SYNCPOINT ROLLBACK, NO-ADD 'Customer does not exist'; the back end LINKs LGSTSQ first, so the task is judged up to LGSTSQ's refused WRITEQ (X6) and the rest is not compared" + }, + { + "name": "add-fails", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP1": { + "ENP1OPTI": "2", + "ENP1CNOI": "0000000003", + "ENP1IDAI": "2026-01-01", + "ENP1EDAI": "2027-01-01", + "ENP1CMKI": "FORD", + "ENP1CMOI": "FIESTA", + "ENP1VALI": "012000", + "ENP1REGI": "AB12CDE", + "ENP1COLI": "BLUE", + "ENP1CCI": "00001600", + "ENP1MANI": "2020-05-01", + "ENP1ACCI": "000001", + "ENP1PREI": "000450" + } + }, + "sql_faults": [ + { + "program": "LGAPDB01", + "table": "POLICY", + "verb": "INSERT", + "sqlcode": -913 + } + ], + "why": "option 2 with LGAPDB01's INSERT into POLICY failing (SQLCODE -913): CA-RETURN-CODE '90', SYNCPOINT ROLLBACK, NO-ADD WHEN OTHER 'Error Adding ... Policy'; the back end LINKs LGSTSQ first, so the task is judged up to LGSTSQ's refused WRITEQ (X6) and the rest is not compared" + }, + { + "name": "update", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP1": { + "ENP1OPTI": "4", + "ENP1CNOI": "0000000005", + "ENP1PNOI": "0000000003", + "ENP1IDAI": "2026-01-01", + "ENP1EDAI": "2027-01-01", + "ENP1CMKI": "FORD", + "ENP1CMOI": "FIESTA", + "ENP1VALI": "012000", + "ENP1REGI": "AB12CDE", + "ENP1COLI": "BLUE", + "ENP1CCI": "00001600", + "ENP1MANI": "2020-05-01", + "ENP1ACCI": "000001", + "ENP1PREI": "000450" + } + }, + "why": "option 4: inquire motor policy 3 of customer 5 (LGIPOL01), SEND MAP, RECEIVE MAP again (the harness gives a task one input per map: the second RECEIVE reads the same fields), then LINK LGUPOL01 ('01UMOT') with the fields typed and the inquiry's LASTCHANGED still in COMM-AREA: 'Motor Policy Updated'" + }, + { + "name": "update-not-found", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP1": { + "ENP1OPTI": "4", + "ENP1CNOI": "0000000005", + "ENP1PNOI": "0000009999", + "ENP1IDAI": "2026-01-01", + "ENP1EDAI": "2027-01-01", + "ENP1CMKI": "FORD", + "ENP1CMOI": "FIESTA", + "ENP1VALI": "012000", + "ENP1REGI": "AB12CDE", + "ENP1COLI": "BLUE", + "ENP1CCI": "00001600", + "ENP1MANI": "2020-05-01", + "ENP1ACCI": "000001", + "ENP1PREI": "000450" + } + }, + "why": "option 4 for a policy the customer does not hold: the inquiry returns '01' -> NO-DATA before any update" + }, + { + "name": "update-fails", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP1": { + "ENP1OPTI": "4", + "ENP1CNOI": "0000000005", + "ENP1PNOI": "0000000003", + "ENP1IDAI": "2026-01-01", + "ENP1EDAI": "2027-01-01", + "ENP1CMKI": "FORD", + "ENP1CMOI": "FIESTA", + "ENP1VALI": "012000", + "ENP1REGI": "AB12CDE", + "ENP1COLI": "BLUE", + "ENP1CCI": "00001600", + "ENP1MANI": "2020-05-01", + "ENP1ACCI": "000001", + "ENP1PREI": "000450" + } + }, + "sql_faults": [ + { + "program": "LGUPDB01", + "table": "MOTOR", + "verb": "UPDATE", + "sqlcode": -913 + } + ], + "why": "option 4 with LGUPDB01's UPDATE of the type's table failing (SQLCODE -913): CA-RETURN-CODE non-zero -> NO-UPD 'Error Updating ... Policy'; the back end LINKs LGSTSQ first, so the task is judged up to LGSTSQ's refused WRITEQ (X6) and the rest is not compared" + } + ], + "notes": "GenApp's motor policy test transaction (LGTESTP1, transid SSP1, BMS map SSMAPP1 of mapset SSMAP: the symbolic map is generated from base/src/ssmap.bms, @bms/SSMAP.cpy). A first task (EIBCALEN 0) sends the initialised map and RECEIVEs in the same task; a returning one (EIBCALEN > 0; the program has no DFHCOMMAREA, its own COMM-AREA goes back through RETURN TRANSID) goes straight to the RECEIVE. HANDLE AID CLEAR / PF3 and HANDLE CONDITION MAPFAIL are exercised; the option field picks inquire (1: LGIPOL01), add (2: LGAPOL01, a failure is SYNCPOINT ROLLBACK), delete (3: LGDPOL01), or inquire-then-update (4: LGIPOL01, SEND MAP, a second RECEIVE MAP -- the harness gives a task one input per map, so it reads the same fields -- then LGUPOL01). The case runs the whole chain in the task: the four front ends, their Db2 back ends, the VSAM services and LGSTSQ (twelve programs). The VSAM file is genapp-lgupdb01's; Db2 is db2cre.jcl's tables and rows. POLICY.LASTCHANGED, COMMERCIAL.REQUESTDATE and the COMMAREA's CA-LASTCHANGED are clock fields. Error paths in the back ends LINK LGSTSQ and are judged up to its refused WRITEQ (X6). Uncovered: IF CA-RETURN-CODE > 0 true after the add / delete / update LINKs, and NO-ADD / NO-DELETE / NO-UPD: every back-end failure LINKs LGSTSQ before it returns, and the task is judged up to LGSTSQ's refused WRITEQ (X6), so what follows is not compared or counted. Derived from the CICS General Insurance Application (GenApp, github.com/cicsdev/cics-genapp; (C) Copyright IBM Corp. 2011, 2020), licensed under the Eclipse Public License 2.0: LICENSE here is the corpus's own, NOTICE names the source and what was derived." +} diff --git a/tests/equivalence/genapp-lgtestp1/ksdspoly.txt b/tests/equivalence/genapp-lgtestp1/ksdspoly.txt new file mode 100644 index 000000000..2e75937c9 --- /dev/null +++ b/tests/equivalence/genapp-lgtestp1/ksdspoly.txt @@ -0,0 +1,10 @@ +900000000060000000007 +C00000000010000000010SO212JN 0001IBM +C00000000050000000009BB104BX 0001Burnley Football Club +E00000000030000000005NNNSHEPPA Shep +E00000000080000000004YYNLIONTMR J. MORRIS +H00000000040000000006HOUSE 00501500000SO211UP +H00000000090000000008FLAT 00100260000E15WW +M00000000020000000001FORD KA 008500LL60LOO +M00000000050000000003DENNIS ENGINE 023500FIRE1 +M00000000100000000002VOLKSWAGEN BEETLE 000600A567WWR diff --git a/tests/equivalence/genapp-lgtestp2/LICENSE b/tests/equivalence/genapp-lgtestp2/LICENSE new file mode 100644 index 000000000..d3087e4c5 --- /dev/null +++ b/tests/equivalence/genapp-lgtestp2/LICENSE @@ -0,0 +1,277 @@ +Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + +"Contributor" means any person or entity that Distributes the Program. + +"Licensed Patents" mean patent claims licensable by a Contributor which +are necessarily infringed by the use or sale of its Contribution alone +or when combined with the Program. + +"Program" means the Contributions Distributed in accordance with this +Agreement. + +"Recipient" means anyone who receives the Program under this Agreement +or any Secondary License (as applicable), including Contributors. + +"Derivative Works" shall mean any work, whether in Source Code or other +form, that is based on (or derived from) the Program and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. + +"Modified Works" shall mean any work in Source Code or other form that +results from an addition to, deletion from, or modification of the +contents of the Program, including, for purposes of clarity any new file +in Source Code form that contains any contents of the Program. Modified +Works shall not include works that contain only declarations, +interfaces, types, classes, structures, or files of the Program solely +in each case in order to link to, bind by name, or subclass the Program +or Modified Works thereof. + +"Distribute" means the acts of a) distributing or b) making available +in any manner that enables the transfer of a copy. + +"Source Code" means the form of a Program preferred for making +modifications, including but not limited to software source code, +documentation source, and configuration files. + +"Secondary License" means either the GNU General Public License, +Version 2.0, or any later versions of that license, including any +exceptions or additional permissions as identified by the initial +Contributor. + +2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + +3. REQUIREMENTS + +3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + +3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + +3.3 Contributors may not remove or alter any copyright, patent, +trademark, attribution notices, disclaimers of warranty, or limitations +of liability ("notices") contained within the Program from any copy of +the Program which they Distribute, provided that Contributors may add +their own appropriate notices. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities +with respect to end users, business partners and the like. While this +license is intended to facilitate the commercial use of the Program, +the Contributor who includes the Program in a commercial product +offering should do so in a manner which does not create potential +liability for other Contributors. Therefore, if a Contributor includes +the Program in a commercial product offering, such Contributor +("Commercial Contributor") hereby agrees to defend and indemnify every +other Contributor ("Indemnified Contributor") against any losses, +damages and costs (collectively "Losses") arising from claims, lawsuits +and other legal actions brought by a third party against the Indemnified +Contributor to the extent caused by the acts or omissions of such +Commercial Contributor in connection with its distribution of the Program +in a commercial product offering. The obligations in this section do not +apply to any claims or Losses relating to any actual or alleged +intellectual property infringement. In order to qualify, an Indemnified +Contributor must: a) promptly notify the Commercial Contributor in +writing of such claim, and b) allow the Commercial Contributor to control, +and cooperate with the Commercial Contributor in, the defense and any +related settlement negotiations. The Indemnified Contributor may +participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial +product offering, Product X. That Contributor is then a Commercial +Contributor. If that Commercial Contributor then makes performance +claims, or offers warranties related to Product X, those performance +claims and warranties are such Commercial Contributor's responsibility +alone. Under this section, the Commercial Contributor would have to +defend claims against the other Contributors related to those performance +claims and warranties, and if a court requires any other Contributor to +pay any damages as a result, the Commercial Contributor must pay +those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" +BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF +TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR +PURPOSE. Each Recipient is solely responsible for determining the +appropriateness of using and distributing the Program and assumes all +risks associated with its exercise of rights under this Agreement, +including but not limited to the risks and costs of program errors, +compliance with applicable laws, damage to or loss of data, programs +or equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS +SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST +PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE +EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under +applicable law, it shall not affect the validity or enforceability of +the remainder of the terms of this Agreement, and without further +action by the parties hereto, such provision shall be reformed to the +minimum extent necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against any entity +(including a cross-claim or counterclaim in a lawsuit) alleging that the +Program itself (excluding combinations of the Program with other software +or hardware) infringes such Recipient's patent(s), then such Recipient's +rights granted under Section 2(b) shall terminate as of the date such +litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it +fails to comply with any of the material terms or conditions of this +Agreement and does not cure such failure in a reasonable period of +time after becoming aware of such noncompliance. If all Recipient's +rights under this Agreement terminate, Recipient agrees to cease use +and distribution of the Program as soon as reasonably practicable. +However, Recipient's obligations under this Agreement and any licenses +granted by Recipient relating to the Program shall continue and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, +but in order to avoid inconsistency the Agreement is copyrighted and +may only be modified in the following manner. The Agreement Steward +reserves the right to publish new versions (including revisions) of +this Agreement from time to time. No one other than the Agreement +Steward has the right to modify this Agreement. The Eclipse Foundation +is the initial Agreement Steward. The Eclipse Foundation may assign the +responsibility to serve as the Agreement Steward to a suitable separate +entity. Each new version of the Agreement will be given a distinguishing +version number. The Program (including Contributions) may always be +Distributed subject to the version of the Agreement under which it was +received. In addition, after a new version of the Agreement is published, +Contributor may elect to Distribute the Program (including its +Contributions) under the new version. + +Except as expressly stated in Sections 2(a) and 2(b) above, Recipient +receives no rights or licenses to the intellectual property of any +Contributor under this Agreement, whether expressly, by implication, +estoppel or otherwise. All rights in the Program not expressly granted +under this Agreement are reserved. Nothing in this Agreement is intended +to be enforceable by any entity that is not a Contributor or Recipient. +No third-party beneficiary rights are created under this Agreement. + +Exhibit A - Form of Secondary Licenses Notice + +"This Source Code may also be made available under the following +Secondary Licenses when the conditions for such availability set forth +in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), +version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. diff --git a/tests/equivalence/genapp-lgtestp2/NOTICE b/tests/equivalence/genapp-lgtestp2/NOTICE new file mode 100644 index 000000000..83cf86862 --- /dev/null +++ b/tests/equivalence/genapp-lgtestp2/NOTICE @@ -0,0 +1,12 @@ +CICS General Insurance Application (GenApp) +https://github.com/cicsdev/cics-genapp +(C) Copyright IBM Corp. 2011, 2020 + +Licensed under the Eclipse Public License - v 2.0 (see LICENSE, the corpus's +own licence file). The program under test, base/src/lgtestp2.cbl, the +programs it runs in the same task (base/src/lgipol01.cbl, base/src/lgipdb01.cbl, base/src/lgapol01.cbl, base/src/lgapdb01.cbl, base/src/lgapvs01.cbl, base/src/lgdpol01.cbl, base/src/lgdpdb01.cbl, base/src/lgdpvs01.cbl, base/src/lgupol01.cbl, base/src/lgupdb01.cbl, base/src/lgupvs01.cbl, base/src/lgstsq.cbl), +their copybooks, the BMS mapset (base/src/ssmap.bms) and the Db2 DDL and rows +(base/cntl/db2cre.jcl) are GenApp's, used unmodified from the corpus. + +ksdspoly.txt is the genapp-lgupdb01 case's (see its NOTICE). The scenarios in +case.json are written for this case. diff --git a/tests/equivalence/genapp-lgtestp2/case.json b/tests/equivalence/genapp-lgtestp2/case.json new file mode 100644 index 000000000..4dc482094 --- /dev/null +++ b/tests/equivalence/genapp-lgtestp2/case.json @@ -0,0 +1,379 @@ +{ + "kind": "cics", + "corpus": "cics-genapp", + "program": "LGTESTP2", + "program_source": "base/src/lgtestp2.cbl", + "copy_dirs": [ + "base/src" + ], + "transid": "SSP2", + "clock": "2026/10/01 10:30:15.00", + "programs": [ + { + "program": "LGIPOL01", + "program_source": "base/src/lgipol01.cbl" + }, + { + "program": "LGIPDB01", + "program_source": "base/src/lgipdb01.cbl" + }, + { + "program": "LGAPOL01", + "program_source": "base/src/lgapol01.cbl" + }, + { + "program": "LGAPDB01", + "program_source": "base/src/lgapdb01.cbl" + }, + { + "program": "LGAPVS01", + "program_source": "base/src/lgapvs01.cbl" + }, + { + "program": "LGDPOL01", + "program_source": "base/src/lgdpol01.cbl" + }, + { + "program": "LGDPDB01", + "program_source": "base/src/lgdpdb01.cbl" + }, + { + "program": "LGDPVS01", + "program_source": "base/src/lgdpvs01.cbl" + }, + { + "program": "LGUPOL01", + "program_source": "base/src/lgupol01.cbl" + }, + { + "program": "LGUPDB01", + "program_source": "base/src/lgupdb01.cbl" + }, + { + "program": "LGUPVS01", + "program_source": "base/src/lgupvs01.cbl" + }, + { + "program": "LGSTSQ", + "program_source": "base/src/lgstsq.cbl" + } + ], + "datasets": { + ".GENAPP.KSDSPOLY": { + "input": "@case/ksdspoly.txt", + "entity": "WfPolicyInfo", + "copybook": "base/src/lgupvs01.cbl", + "record": "WF-POLICY-INFO", + "vsam": { + "key_offset": 0, + "key_length": 21, + "reclen": 64, + "why": "base/cntl/adef121.jcl DEFINE2: DATA(... KEYS(21 0) RECORDSIZE(64 64)); the engine's facts do not read KEYS / RECORDSIZE inside the DATA component, so the case states them" + } + } + }, + "db2": { + "ddl": [ + "base/cntl/db2cre.jcl" + ], + "seed": "base/cntl/db2cre.jcl", + "symbols": { + "": "GENASA1" + }, + "qualifier": "GENASA1", + "compare": [ + "GENASA1.POLICY", + "GENASA1.ENDOWMENT", + "GENASA1.HOUSE", + "GENASA1.MOTOR", + "GENASA1.COMMERCIAL" + ] + }, + "clock_fields": { + "db2": [ + "GENASA1.POLICY.LASTCHANGED", + "GENASA1.COMMERCIAL.REQUESTDATE" + ], + "commarea": [ + "CA-REQUEST-SPECIFIC(31:26)" + ] + }, + "commarea": { + "segments": [ + { + "copybook": "base/src/lgtestp2.cbl", + "record": "COMM-AREA" + } + ] + }, + "screens": { + "SSMAPP2": { + "copybook": "@bms/SSMAP.cpy", + "input": "SSMAPP2I", + "output": "SSMAPP2O" + } + }, + "region": { + "applid": "GENAREGN", + "sysid": "CICA" + }, + "scenarios": [ + { + "name": "first-entry-inquire", + "aid": "DFHENTER", + "commarea": null, + "receive": { + "SSMAPP2": { + "ENP2OPTI": "1", + "ENP2CNOI": "0000000003", + "ENP2PNOI": "0000000005" + } + }, + "why": "EIBCALEN 0: the map initialised and sent (ERASE), then the same task's RECEIVE (the operator's input): option 1 inquires endowment policy 5 of customer 3 (LINK LGIPOL01 -> LGIPDB01); the policy shown, RETURN TRANSID('SSP{n}') with COMM-AREA" + }, + { + "name": "inquire", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP2": { + "ENP2OPTI": "1", + "ENP2CNOI": "0000000008", + "ENP2PNOI": "0000000004" + } + }, + "why": "option 1 on a returning task (EIBCALEN > 0: GO TO A-GAIN): endowment policy 4 of customer 8" + }, + { + "name": "inquire-not-found", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP2": { + "ENP2OPTI": "1", + "ENP2CNOI": "0000000003", + "ENP2PNOI": "0000009999" + } + }, + "why": "option 1 for a policy the customer does not hold: LGIPDB01 sets CA-RETURN-CODE '01' -> NO-DATA ('No data was returned.'), ERROR-OUT sends the map and initialises the areas" + }, + { + "name": "delete", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP2": { + "ENP2OPTI": "3", + "ENP2CNOI": "0000000003", + "ENP2PNOI": "0000000005" + } + }, + "why": "option 3: LINK LGDPOL01 (01DEND) deletes policy 5 of customer 3 (POLICY row, cascade, VSAM copy); the fields blanked, 'Endowment Policy Deleted', SEND MAP twice" + }, + { + "name": "delete-fails", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP2": { + "ENP2OPTI": "3", + "ENP2CNOI": "0000000003", + "ENP2PNOI": "0000000005" + } + }, + "sql_faults": [ + { + "program": "LGDPDB01", + "line": 189, + "sqlcode": -913 + } + ], + "why": "option 3 with LGDPDB01's DELETE failing (SQLCODE -913): CA-RETURN-CODE '90' -> SYNCPOINT ROLLBACK, NO-DELETE; the back end LINKs LGSTSQ first, so the task is judged up to LGSTSQ's refused WRITEQ (X6) and the rest is not compared" + }, + { + "name": "bad-option", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP2": { + "ENP2OPTI": "9" + } + }, + "why": "option '9': WHEN OTHER -- 'Please enter a valid option', the option field's length -1 (cursor), SEND MAP ... CURSOR" + }, + { + "name": "clear", + "aid": "DFHCLEAR", + "commarea": {}, + "receive": { + "SSMAPP2": { + "ENP2OPTI": "1" + } + }, + "why": "CLEAR: HANDLE AID CLEAR(CLEARIT) -- the map sent MAPONLY, RETURN TRANSID" + }, + { + "name": "pf3", + "aid": "DFHPF3", + "commarea": {}, + "receive": { + "SSMAPP2": { + "ENP2OPTI": "1" + } + }, + "why": "PF3: HANDLE AID PF3(ENDIT) -- SEND TEXT 'Transaction ended' ERASE FREEKB, RETURN" + }, + { + "name": "mapfail", + "aid": "DFHENTER", + "commarea": {}, + "why": "ENTER with no input: the RECEIVE raises MAPFAIL, HANDLE CONDITION MAPFAIL(ENDIT)" + }, + { + "name": "add", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP2": { + "ENP2OPTI": "2", + "ENP2CNOI": "0000000003", + "ENP2IDAI": "2026-01-01", + "ENP2EDAI": "2051-01-01", + "ENP2FNMI": "GROWTH", + "ENP2TERI": "25", + "ENP2SUMI": "250000", + "ENP2LIFI": "A. N. OTHER", + "ENP2WPRI": "Y", + "ENP2EQUI": "N", + "ENP2MANI": "Y" + } + }, + "why": "option 2: LINK LGAPOL01 ('01AEND') adds a endowment policy for customer 3 (POLICY + its type's row, VSAM copy); the new numbers shown, 'New Endowment Policy Inserted'" + }, + { + "name": "add-unknown-customer", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP2": { + "ENP2OPTI": "2", + "ENP2CNOI": "0000000999", + "ENP2IDAI": "2026-01-01", + "ENP2EDAI": "2051-01-01", + "ENP2FNMI": "GROWTH", + "ENP2TERI": "25", + "ENP2SUMI": "250000", + "ENP2LIFI": "A. N. OTHER", + "ENP2WPRI": "Y", + "ENP2EQUI": "N", + "ENP2MANI": "Y" + } + }, + "why": "option 2 for customer 999, who does not exist: LGAPDB01's INSERT into POLICY breaks its foreign key (SQLCODE -530) -> CA-RETURN-CODE '70', SYNCPOINT ROLLBACK, NO-ADD 'Customer does not exist'; the back end LINKs LGSTSQ first, so the task is judged up to LGSTSQ's refused WRITEQ (X6) and the rest is not compared" + }, + { + "name": "add-fails", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP2": { + "ENP2OPTI": "2", + "ENP2CNOI": "0000000003", + "ENP2IDAI": "2026-01-01", + "ENP2EDAI": "2051-01-01", + "ENP2FNMI": "GROWTH", + "ENP2TERI": "25", + "ENP2SUMI": "250000", + "ENP2LIFI": "A. N. OTHER", + "ENP2WPRI": "Y", + "ENP2EQUI": "N", + "ENP2MANI": "Y" + } + }, + "sql_faults": [ + { + "program": "LGAPDB01", + "table": "POLICY", + "verb": "INSERT", + "sqlcode": -913 + } + ], + "why": "option 2 with LGAPDB01's INSERT into POLICY failing (SQLCODE -913): CA-RETURN-CODE '90', SYNCPOINT ROLLBACK, NO-ADD WHEN OTHER 'Error Adding ... Policy'; the back end LINKs LGSTSQ first, so the task is judged up to LGSTSQ's refused WRITEQ (X6) and the rest is not compared" + }, + { + "name": "update", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP2": { + "ENP2OPTI": "4", + "ENP2CNOI": "0000000008", + "ENP2PNOI": "0000000004", + "ENP2IDAI": "2026-01-01", + "ENP2EDAI": "2051-01-01", + "ENP2FNMI": "GROWTH", + "ENP2TERI": "25", + "ENP2SUMI": "250000", + "ENP2LIFI": "A. N. OTHER", + "ENP2WPRI": "Y", + "ENP2EQUI": "N", + "ENP2MANI": "Y" + } + }, + "why": "option 4: inquire endowment policy 4 of customer 8 (LGIPOL01), SEND MAP, RECEIVE MAP again (the harness gives a task one input per map: the second RECEIVE reads the same fields), then LINK LGUPOL01 ('01UEND') with the fields typed and the inquiry's LASTCHANGED still in COMM-AREA: 'Endowment Policy Updated'" + }, + { + "name": "update-not-found", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP2": { + "ENP2OPTI": "4", + "ENP2CNOI": "0000000008", + "ENP2PNOI": "0000009999", + "ENP2IDAI": "2026-01-01", + "ENP2EDAI": "2051-01-01", + "ENP2FNMI": "GROWTH", + "ENP2TERI": "25", + "ENP2SUMI": "250000", + "ENP2LIFI": "A. N. OTHER", + "ENP2WPRI": "Y", + "ENP2EQUI": "N", + "ENP2MANI": "Y" + } + }, + "why": "option 4 for a policy the customer does not hold: the inquiry returns '01' -> NO-DATA before any update" + }, + { + "name": "update-fails", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP2": { + "ENP2OPTI": "4", + "ENP2CNOI": "0000000008", + "ENP2PNOI": "0000000004", + "ENP2IDAI": "2026-01-01", + "ENP2EDAI": "2051-01-01", + "ENP2FNMI": "GROWTH", + "ENP2TERI": "25", + "ENP2SUMI": "250000", + "ENP2LIFI": "A. N. OTHER", + "ENP2WPRI": "Y", + "ENP2EQUI": "N", + "ENP2MANI": "Y" + } + }, + "sql_faults": [ + { + "program": "LGUPDB01", + "table": "ENDOWMENT", + "verb": "UPDATE", + "sqlcode": -913 + } + ], + "why": "option 4 with LGUPDB01's UPDATE of the type's table failing (SQLCODE -913): CA-RETURN-CODE non-zero -> NO-UPD 'Error Updating ... Policy'; the back end LINKs LGSTSQ first, so the task is judged up to LGSTSQ's refused WRITEQ (X6) and the rest is not compared" + } + ], + "notes": "GenApp's endowment policy test transaction (LGTESTP2, transid SSP2, BMS map SSMAPP2 of mapset SSMAP: the symbolic map is generated from base/src/ssmap.bms, @bms/SSMAP.cpy). A first task (EIBCALEN 0) sends the initialised map and RECEIVEs in the same task; a returning one (EIBCALEN > 0; the program has no DFHCOMMAREA, its own COMM-AREA goes back through RETURN TRANSID) goes straight to the RECEIVE. HANDLE AID CLEAR / PF3 and HANDLE CONDITION MAPFAIL are exercised; the option field picks inquire (1: LGIPOL01), add (2: LGAPOL01, a failure is SYNCPOINT ROLLBACK), delete (3: LGDPOL01), or inquire-then-update (4: LGIPOL01, SEND MAP, a second RECEIVE MAP -- the harness gives a task one input per map, so it reads the same fields -- then LGUPOL01). The case runs the whole chain in the task: the four front ends, their Db2 back ends, the VSAM services and LGSTSQ (twelve programs). The VSAM file is genapp-lgupdb01's; Db2 is db2cre.jcl's tables and rows. POLICY.LASTCHANGED, COMMERCIAL.REQUESTDATE and the COMMAREA's CA-LASTCHANGED are clock fields. Error paths in the back ends LINK LGSTSQ and are judged up to its refused WRITEQ (X6). Uncovered: IF CA-RETURN-CODE > 0 true after the add / delete / update LINKs, and NO-ADD / NO-DELETE / NO-UPD: every back-end failure LINKs LGSTSQ before it returns, and the task is judged up to LGSTSQ's refused WRITEQ (X6), so what follows is not compared or counted. Derived from the CICS General Insurance Application (GenApp, github.com/cicsdev/cics-genapp; (C) Copyright IBM Corp. 2011, 2020), licensed under the Eclipse Public License 2.0: LICENSE here is the corpus's own, NOTICE names the source and what was derived." +} diff --git a/tests/equivalence/genapp-lgtestp2/ksdspoly.txt b/tests/equivalence/genapp-lgtestp2/ksdspoly.txt new file mode 100644 index 000000000..2e75937c9 --- /dev/null +++ b/tests/equivalence/genapp-lgtestp2/ksdspoly.txt @@ -0,0 +1,10 @@ +900000000060000000007 +C00000000010000000010SO212JN 0001IBM +C00000000050000000009BB104BX 0001Burnley Football Club +E00000000030000000005NNNSHEPPA Shep +E00000000080000000004YYNLIONTMR J. MORRIS +H00000000040000000006HOUSE 00501500000SO211UP +H00000000090000000008FLAT 00100260000E15WW +M00000000020000000001FORD KA 008500LL60LOO +M00000000050000000003DENNIS ENGINE 023500FIRE1 +M00000000100000000002VOLKSWAGEN BEETLE 000600A567WWR diff --git a/tests/equivalence/genapp-lgtestp3/LICENSE b/tests/equivalence/genapp-lgtestp3/LICENSE new file mode 100644 index 000000000..d3087e4c5 --- /dev/null +++ b/tests/equivalence/genapp-lgtestp3/LICENSE @@ -0,0 +1,277 @@ +Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + +"Contributor" means any person or entity that Distributes the Program. + +"Licensed Patents" mean patent claims licensable by a Contributor which +are necessarily infringed by the use or sale of its Contribution alone +or when combined with the Program. + +"Program" means the Contributions Distributed in accordance with this +Agreement. + +"Recipient" means anyone who receives the Program under this Agreement +or any Secondary License (as applicable), including Contributors. + +"Derivative Works" shall mean any work, whether in Source Code or other +form, that is based on (or derived from) the Program and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. + +"Modified Works" shall mean any work in Source Code or other form that +results from an addition to, deletion from, or modification of the +contents of the Program, including, for purposes of clarity any new file +in Source Code form that contains any contents of the Program. Modified +Works shall not include works that contain only declarations, +interfaces, types, classes, structures, or files of the Program solely +in each case in order to link to, bind by name, or subclass the Program +or Modified Works thereof. + +"Distribute" means the acts of a) distributing or b) making available +in any manner that enables the transfer of a copy. + +"Source Code" means the form of a Program preferred for making +modifications, including but not limited to software source code, +documentation source, and configuration files. + +"Secondary License" means either the GNU General Public License, +Version 2.0, or any later versions of that license, including any +exceptions or additional permissions as identified by the initial +Contributor. + +2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + +3. REQUIREMENTS + +3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + +3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + +3.3 Contributors may not remove or alter any copyright, patent, +trademark, attribution notices, disclaimers of warranty, or limitations +of liability ("notices") contained within the Program from any copy of +the Program which they Distribute, provided that Contributors may add +their own appropriate notices. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities +with respect to end users, business partners and the like. While this +license is intended to facilitate the commercial use of the Program, +the Contributor who includes the Program in a commercial product +offering should do so in a manner which does not create potential +liability for other Contributors. Therefore, if a Contributor includes +the Program in a commercial product offering, such Contributor +("Commercial Contributor") hereby agrees to defend and indemnify every +other Contributor ("Indemnified Contributor") against any losses, +damages and costs (collectively "Losses") arising from claims, lawsuits +and other legal actions brought by a third party against the Indemnified +Contributor to the extent caused by the acts or omissions of such +Commercial Contributor in connection with its distribution of the Program +in a commercial product offering. The obligations in this section do not +apply to any claims or Losses relating to any actual or alleged +intellectual property infringement. In order to qualify, an Indemnified +Contributor must: a) promptly notify the Commercial Contributor in +writing of such claim, and b) allow the Commercial Contributor to control, +and cooperate with the Commercial Contributor in, the defense and any +related settlement negotiations. The Indemnified Contributor may +participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial +product offering, Product X. That Contributor is then a Commercial +Contributor. If that Commercial Contributor then makes performance +claims, or offers warranties related to Product X, those performance +claims and warranties are such Commercial Contributor's responsibility +alone. Under this section, the Commercial Contributor would have to +defend claims against the other Contributors related to those performance +claims and warranties, and if a court requires any other Contributor to +pay any damages as a result, the Commercial Contributor must pay +those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" +BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF +TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR +PURPOSE. Each Recipient is solely responsible for determining the +appropriateness of using and distributing the Program and assumes all +risks associated with its exercise of rights under this Agreement, +including but not limited to the risks and costs of program errors, +compliance with applicable laws, damage to or loss of data, programs +or equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS +SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST +PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE +EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under +applicable law, it shall not affect the validity or enforceability of +the remainder of the terms of this Agreement, and without further +action by the parties hereto, such provision shall be reformed to the +minimum extent necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against any entity +(including a cross-claim or counterclaim in a lawsuit) alleging that the +Program itself (excluding combinations of the Program with other software +or hardware) infringes such Recipient's patent(s), then such Recipient's +rights granted under Section 2(b) shall terminate as of the date such +litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it +fails to comply with any of the material terms or conditions of this +Agreement and does not cure such failure in a reasonable period of +time after becoming aware of such noncompliance. If all Recipient's +rights under this Agreement terminate, Recipient agrees to cease use +and distribution of the Program as soon as reasonably practicable. +However, Recipient's obligations under this Agreement and any licenses +granted by Recipient relating to the Program shall continue and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, +but in order to avoid inconsistency the Agreement is copyrighted and +may only be modified in the following manner. The Agreement Steward +reserves the right to publish new versions (including revisions) of +this Agreement from time to time. No one other than the Agreement +Steward has the right to modify this Agreement. The Eclipse Foundation +is the initial Agreement Steward. The Eclipse Foundation may assign the +responsibility to serve as the Agreement Steward to a suitable separate +entity. Each new version of the Agreement will be given a distinguishing +version number. The Program (including Contributions) may always be +Distributed subject to the version of the Agreement under which it was +received. In addition, after a new version of the Agreement is published, +Contributor may elect to Distribute the Program (including its +Contributions) under the new version. + +Except as expressly stated in Sections 2(a) and 2(b) above, Recipient +receives no rights or licenses to the intellectual property of any +Contributor under this Agreement, whether expressly, by implication, +estoppel or otherwise. All rights in the Program not expressly granted +under this Agreement are reserved. Nothing in this Agreement is intended +to be enforceable by any entity that is not a Contributor or Recipient. +No third-party beneficiary rights are created under this Agreement. + +Exhibit A - Form of Secondary Licenses Notice + +"This Source Code may also be made available under the following +Secondary Licenses when the conditions for such availability set forth +in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), +version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. diff --git a/tests/equivalence/genapp-lgtestp3/NOTICE b/tests/equivalence/genapp-lgtestp3/NOTICE new file mode 100644 index 000000000..03777fd9f --- /dev/null +++ b/tests/equivalence/genapp-lgtestp3/NOTICE @@ -0,0 +1,12 @@ +CICS General Insurance Application (GenApp) +https://github.com/cicsdev/cics-genapp +(C) Copyright IBM Corp. 2011, 2020 + +Licensed under the Eclipse Public License - v 2.0 (see LICENSE, the corpus's +own licence file). The program under test, base/src/lgtestp3.cbl, the +programs it runs in the same task (base/src/lgipol01.cbl, base/src/lgipdb01.cbl, base/src/lgapol01.cbl, base/src/lgapdb01.cbl, base/src/lgapvs01.cbl, base/src/lgdpol01.cbl, base/src/lgdpdb01.cbl, base/src/lgdpvs01.cbl, base/src/lgupol01.cbl, base/src/lgupdb01.cbl, base/src/lgupvs01.cbl, base/src/lgstsq.cbl), +their copybooks, the BMS mapset (base/src/ssmap.bms) and the Db2 DDL and rows +(base/cntl/db2cre.jcl) are GenApp's, used unmodified from the corpus. + +ksdspoly.txt is the genapp-lgupdb01 case's (see its NOTICE). The scenarios in +case.json are written for this case. diff --git a/tests/equivalence/genapp-lgtestp3/case.json b/tests/equivalence/genapp-lgtestp3/case.json new file mode 100644 index 000000000..7c44c422d --- /dev/null +++ b/tests/equivalence/genapp-lgtestp3/case.json @@ -0,0 +1,373 @@ +{ + "kind": "cics", + "corpus": "cics-genapp", + "program": "LGTESTP3", + "program_source": "base/src/lgtestp3.cbl", + "copy_dirs": [ + "base/src" + ], + "transid": "SSP3", + "clock": "2026/10/01 10:30:15.00", + "programs": [ + { + "program": "LGIPOL01", + "program_source": "base/src/lgipol01.cbl" + }, + { + "program": "LGIPDB01", + "program_source": "base/src/lgipdb01.cbl" + }, + { + "program": "LGAPOL01", + "program_source": "base/src/lgapol01.cbl" + }, + { + "program": "LGAPDB01", + "program_source": "base/src/lgapdb01.cbl" + }, + { + "program": "LGAPVS01", + "program_source": "base/src/lgapvs01.cbl" + }, + { + "program": "LGDPOL01", + "program_source": "base/src/lgdpol01.cbl" + }, + { + "program": "LGDPDB01", + "program_source": "base/src/lgdpdb01.cbl" + }, + { + "program": "LGDPVS01", + "program_source": "base/src/lgdpvs01.cbl" + }, + { + "program": "LGUPOL01", + "program_source": "base/src/lgupol01.cbl" + }, + { + "program": "LGUPDB01", + "program_source": "base/src/lgupdb01.cbl" + }, + { + "program": "LGUPVS01", + "program_source": "base/src/lgupvs01.cbl" + }, + { + "program": "LGSTSQ", + "program_source": "base/src/lgstsq.cbl" + } + ], + "datasets": { + ".GENAPP.KSDSPOLY": { + "input": "@case/ksdspoly.txt", + "entity": "WfPolicyInfo", + "copybook": "base/src/lgupvs01.cbl", + "record": "WF-POLICY-INFO", + "vsam": { + "key_offset": 0, + "key_length": 21, + "reclen": 64, + "why": "base/cntl/adef121.jcl DEFINE2: DATA(... KEYS(21 0) RECORDSIZE(64 64)); the engine's facts do not read KEYS / RECORDSIZE inside the DATA component, so the case states them" + } + } + }, + "db2": { + "ddl": [ + "base/cntl/db2cre.jcl" + ], + "seed": "base/cntl/db2cre.jcl", + "symbols": { + "": "GENASA1" + }, + "qualifier": "GENASA1", + "compare": [ + "GENASA1.POLICY", + "GENASA1.ENDOWMENT", + "GENASA1.HOUSE", + "GENASA1.MOTOR", + "GENASA1.COMMERCIAL" + ] + }, + "clock_fields": { + "db2": [ + "GENASA1.POLICY.LASTCHANGED", + "GENASA1.COMMERCIAL.REQUESTDATE" + ], + "commarea": [ + "CA-REQUEST-SPECIFIC(31:26)" + ] + }, + "commarea": { + "segments": [ + { + "copybook": "base/src/lgtestp3.cbl", + "record": "COMM-AREA" + } + ] + }, + "screens": { + "SSMAPP3": { + "copybook": "@bms/SSMAP.cpy", + "input": "SSMAPP3I", + "output": "SSMAPP3O" + } + }, + "region": { + "applid": "GENAREGN", + "sysid": "CICA" + }, + "scenarios": [ + { + "name": "first-entry-inquire", + "aid": "DFHENTER", + "commarea": null, + "receive": { + "SSMAPP3": { + "ENP3OPTI": "1", + "ENP3CNOI": "0000000004", + "ENP3PNOI": "0000000006" + } + }, + "why": "EIBCALEN 0: the map initialised and sent (ERASE), then the same task's RECEIVE (the operator's input): option 1 inquires house policy 6 of customer 4 (LINK LGIPOL01 -> LGIPDB01); the policy shown, RETURN TRANSID('SSP{n}') with COMM-AREA" + }, + { + "name": "inquire", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP3": { + "ENP3OPTI": "1", + "ENP3CNOI": "0000000009", + "ENP3PNOI": "0000000008" + } + }, + "why": "option 1 on a returning task (EIBCALEN > 0: GO TO A-GAIN): house policy 8 of customer 9" + }, + { + "name": "inquire-not-found", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP3": { + "ENP3OPTI": "1", + "ENP3CNOI": "0000000004", + "ENP3PNOI": "0000009999" + } + }, + "why": "option 1 for a policy the customer does not hold: LGIPDB01 sets CA-RETURN-CODE '01' -> NO-DATA ('No data was returned.'), ERROR-OUT sends the map and initialises the areas" + }, + { + "name": "delete", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP3": { + "ENP3OPTI": "3", + "ENP3CNOI": "0000000004", + "ENP3PNOI": "0000000006" + } + }, + "why": "option 3: LINK LGDPOL01 (01DHOU) deletes policy 6 of customer 4 (POLICY row, cascade, VSAM copy); the fields blanked, 'House Policy Deleted', SEND MAP twice" + }, + { + "name": "delete-fails", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP3": { + "ENP3OPTI": "3", + "ENP3CNOI": "0000000004", + "ENP3PNOI": "0000000006" + } + }, + "sql_faults": [ + { + "program": "LGDPDB01", + "line": 189, + "sqlcode": -913 + } + ], + "why": "option 3 with LGDPDB01's DELETE failing (SQLCODE -913): CA-RETURN-CODE '90' -> SYNCPOINT ROLLBACK, NO-DELETE; the back end LINKs LGSTSQ first, so the task is judged up to LGSTSQ's refused WRITEQ (X6) and the rest is not compared" + }, + { + "name": "bad-option", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP3": { + "ENP3OPTI": "9" + } + }, + "why": "option '9': WHEN OTHER -- 'Please enter a valid option', the option field's length -1 (cursor), SEND MAP ... CURSOR" + }, + { + "name": "clear", + "aid": "DFHCLEAR", + "commarea": {}, + "receive": { + "SSMAPP3": { + "ENP3OPTI": "1" + } + }, + "why": "CLEAR: HANDLE AID CLEAR(CLEARIT) -- the map sent MAPONLY, RETURN TRANSID" + }, + { + "name": "pf3", + "aid": "DFHPF3", + "commarea": {}, + "receive": { + "SSMAPP3": { + "ENP3OPTI": "1" + } + }, + "why": "PF3: HANDLE AID PF3(ENDIT) -- SEND TEXT 'Transaction ended' ERASE FREEKB, RETURN" + }, + { + "name": "mapfail", + "aid": "DFHENTER", + "commarea": {}, + "why": "ENTER with no input: the RECEIVE raises MAPFAIL, HANDLE CONDITION MAPFAIL(ENDIT)" + }, + { + "name": "add", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP3": { + "ENP3OPTI": "2", + "ENP3CNOI": "0000000003", + "ENP3IDAI": "2026-01-01", + "ENP3EDAI": "2027-01-01", + "ENP3TYPI": "DETACHED", + "ENP3BEDI": "004", + "ENP3VALI": "00350000", + "ENP3HNMI": "ROSE COTTAGE", + "ENP3HNOI": "12", + "ENP3HPCI": "SO212JN" + } + }, + "why": "option 2: LINK LGAPOL01 ('01AHOU') adds a house policy for customer 3 (POLICY + its type's row, VSAM copy); the new numbers shown, 'New House Policy Inserted'" + }, + { + "name": "add-unknown-customer", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP3": { + "ENP3OPTI": "2", + "ENP3CNOI": "0000000999", + "ENP3IDAI": "2026-01-01", + "ENP3EDAI": "2027-01-01", + "ENP3TYPI": "DETACHED", + "ENP3BEDI": "004", + "ENP3VALI": "00350000", + "ENP3HNMI": "ROSE COTTAGE", + "ENP3HNOI": "12", + "ENP3HPCI": "SO212JN" + } + }, + "why": "option 2 for customer 999, who does not exist: LGAPDB01's INSERT into POLICY breaks its foreign key (SQLCODE -530) -> CA-RETURN-CODE '70', SYNCPOINT ROLLBACK, NO-ADD 'Customer does not exist'; the back end LINKs LGSTSQ first, so the task is judged up to LGSTSQ's refused WRITEQ (X6) and the rest is not compared" + }, + { + "name": "add-fails", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP3": { + "ENP3OPTI": "2", + "ENP3CNOI": "0000000003", + "ENP3IDAI": "2026-01-01", + "ENP3EDAI": "2027-01-01", + "ENP3TYPI": "DETACHED", + "ENP3BEDI": "004", + "ENP3VALI": "00350000", + "ENP3HNMI": "ROSE COTTAGE", + "ENP3HNOI": "12", + "ENP3HPCI": "SO212JN" + } + }, + "sql_faults": [ + { + "program": "LGAPDB01", + "table": "POLICY", + "verb": "INSERT", + "sqlcode": -913 + } + ], + "why": "option 2 with LGAPDB01's INSERT into POLICY failing (SQLCODE -913): CA-RETURN-CODE '90', SYNCPOINT ROLLBACK, NO-ADD WHEN OTHER 'Error Adding ... Policy'; the back end LINKs LGSTSQ first, so the task is judged up to LGSTSQ's refused WRITEQ (X6) and the rest is not compared" + }, + { + "name": "update", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP3": { + "ENP3OPTI": "4", + "ENP3CNOI": "0000000009", + "ENP3PNOI": "0000000008", + "ENP3IDAI": "2026-01-01", + "ENP3EDAI": "2027-01-01", + "ENP3TYPI": "DETACHED", + "ENP3BEDI": "004", + "ENP3VALI": "00350000", + "ENP3HNMI": "ROSE COTTAGE", + "ENP3HNOI": "12", + "ENP3HPCI": "SO212JN" + } + }, + "why": "option 4: inquire house policy 8 of customer 9 (LGIPOL01), SEND MAP, RECEIVE MAP again (the harness gives a task one input per map: the second RECEIVE reads the same fields), then LINK LGUPOL01 ('01UHOU') with the fields typed and the inquiry's LASTCHANGED still in COMM-AREA: 'House Policy Updated'" + }, + { + "name": "update-not-found", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP3": { + "ENP3OPTI": "4", + "ENP3CNOI": "0000000009", + "ENP3PNOI": "0000009999", + "ENP3IDAI": "2026-01-01", + "ENP3EDAI": "2027-01-01", + "ENP3TYPI": "DETACHED", + "ENP3BEDI": "004", + "ENP3VALI": "00350000", + "ENP3HNMI": "ROSE COTTAGE", + "ENP3HNOI": "12", + "ENP3HPCI": "SO212JN" + } + }, + "why": "option 4 for a policy the customer does not hold: the inquiry returns '01' -> NO-DATA before any update" + }, + { + "name": "update-fails", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP3": { + "ENP3OPTI": "4", + "ENP3CNOI": "0000000009", + "ENP3PNOI": "0000000008", + "ENP3IDAI": "2026-01-01", + "ENP3EDAI": "2027-01-01", + "ENP3TYPI": "DETACHED", + "ENP3BEDI": "004", + "ENP3VALI": "00350000", + "ENP3HNMI": "ROSE COTTAGE", + "ENP3HNOI": "12", + "ENP3HPCI": "SO212JN" + } + }, + "sql_faults": [ + { + "program": "LGUPDB01", + "table": "HOUSE", + "verb": "UPDATE", + "sqlcode": -913 + } + ], + "why": "option 4 with LGUPDB01's UPDATE of the type's table failing (SQLCODE -913): CA-RETURN-CODE non-zero -> NO-UPD 'Error Updating ... Policy'; the back end LINKs LGSTSQ first, so the task is judged up to LGSTSQ's refused WRITEQ (X6) and the rest is not compared" + } + ], + "notes": "GenApp's house policy test transaction (LGTESTP3, transid SSP3, BMS map SSMAPP3 of mapset SSMAP: the symbolic map is generated from base/src/ssmap.bms, @bms/SSMAP.cpy). A first task (EIBCALEN 0) sends the initialised map and RECEIVEs in the same task; a returning one (EIBCALEN > 0; the program has no DFHCOMMAREA, its own COMM-AREA goes back through RETURN TRANSID) goes straight to the RECEIVE. HANDLE AID CLEAR / PF3 and HANDLE CONDITION MAPFAIL are exercised; the option field picks inquire (1: LGIPOL01), add (2: LGAPOL01, a failure is SYNCPOINT ROLLBACK), delete (3: LGDPOL01), or inquire-then-update (4: LGIPOL01, SEND MAP, a second RECEIVE MAP -- the harness gives a task one input per map, so it reads the same fields -- then LGUPOL01). The case runs the whole chain in the task: the four front ends, their Db2 back ends, the VSAM services and LGSTSQ (twelve programs). The VSAM file is genapp-lgupdb01's; Db2 is db2cre.jcl's tables and rows. POLICY.LASTCHANGED, COMMERCIAL.REQUESTDATE and the COMMAREA's CA-LASTCHANGED are clock fields. Error paths in the back ends LINK LGSTSQ and are judged up to its refused WRITEQ (X6). Uncovered: IF CA-RETURN-CODE > 0 true after the add / delete / update LINKs, and NO-ADD / NO-DELETE / NO-UPD: every back-end failure LINKs LGSTSQ before it returns, and the task is judged up to LGSTSQ's refused WRITEQ (X6), so what follows is not compared or counted. Derived from the CICS General Insurance Application (GenApp, github.com/cicsdev/cics-genapp; (C) Copyright IBM Corp. 2011, 2020), licensed under the Eclipse Public License 2.0: LICENSE here is the corpus's own, NOTICE names the source and what was derived." +} diff --git a/tests/equivalence/genapp-lgtestp3/ksdspoly.txt b/tests/equivalence/genapp-lgtestp3/ksdspoly.txt new file mode 100644 index 000000000..2e75937c9 --- /dev/null +++ b/tests/equivalence/genapp-lgtestp3/ksdspoly.txt @@ -0,0 +1,10 @@ +900000000060000000007 +C00000000010000000010SO212JN 0001IBM +C00000000050000000009BB104BX 0001Burnley Football Club +E00000000030000000005NNNSHEPPA Shep +E00000000080000000004YYNLIONTMR J. MORRIS +H00000000040000000006HOUSE 00501500000SO211UP +H00000000090000000008FLAT 00100260000E15WW +M00000000020000000001FORD KA 008500LL60LOO +M00000000050000000003DENNIS ENGINE 023500FIRE1 +M00000000100000000002VOLKSWAGEN BEETLE 000600A567WWR diff --git a/tests/equivalence/genapp-lgtestp4/LICENSE b/tests/equivalence/genapp-lgtestp4/LICENSE new file mode 100644 index 000000000..d3087e4c5 --- /dev/null +++ b/tests/equivalence/genapp-lgtestp4/LICENSE @@ -0,0 +1,277 @@ +Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + +"Contributor" means any person or entity that Distributes the Program. + +"Licensed Patents" mean patent claims licensable by a Contributor which +are necessarily infringed by the use or sale of its Contribution alone +or when combined with the Program. + +"Program" means the Contributions Distributed in accordance with this +Agreement. + +"Recipient" means anyone who receives the Program under this Agreement +or any Secondary License (as applicable), including Contributors. + +"Derivative Works" shall mean any work, whether in Source Code or other +form, that is based on (or derived from) the Program and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. + +"Modified Works" shall mean any work in Source Code or other form that +results from an addition to, deletion from, or modification of the +contents of the Program, including, for purposes of clarity any new file +in Source Code form that contains any contents of the Program. Modified +Works shall not include works that contain only declarations, +interfaces, types, classes, structures, or files of the Program solely +in each case in order to link to, bind by name, or subclass the Program +or Modified Works thereof. + +"Distribute" means the acts of a) distributing or b) making available +in any manner that enables the transfer of a copy. + +"Source Code" means the form of a Program preferred for making +modifications, including but not limited to software source code, +documentation source, and configuration files. + +"Secondary License" means either the GNU General Public License, +Version 2.0, or any later versions of that license, including any +exceptions or additional permissions as identified by the initial +Contributor. + +2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + +3. REQUIREMENTS + +3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + +3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + +3.3 Contributors may not remove or alter any copyright, patent, +trademark, attribution notices, disclaimers of warranty, or limitations +of liability ("notices") contained within the Program from any copy of +the Program which they Distribute, provided that Contributors may add +their own appropriate notices. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities +with respect to end users, business partners and the like. While this +license is intended to facilitate the commercial use of the Program, +the Contributor who includes the Program in a commercial product +offering should do so in a manner which does not create potential +liability for other Contributors. Therefore, if a Contributor includes +the Program in a commercial product offering, such Contributor +("Commercial Contributor") hereby agrees to defend and indemnify every +other Contributor ("Indemnified Contributor") against any losses, +damages and costs (collectively "Losses") arising from claims, lawsuits +and other legal actions brought by a third party against the Indemnified +Contributor to the extent caused by the acts or omissions of such +Commercial Contributor in connection with its distribution of the Program +in a commercial product offering. The obligations in this section do not +apply to any claims or Losses relating to any actual or alleged +intellectual property infringement. In order to qualify, an Indemnified +Contributor must: a) promptly notify the Commercial Contributor in +writing of such claim, and b) allow the Commercial Contributor to control, +and cooperate with the Commercial Contributor in, the defense and any +related settlement negotiations. The Indemnified Contributor may +participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial +product offering, Product X. That Contributor is then a Commercial +Contributor. If that Commercial Contributor then makes performance +claims, or offers warranties related to Product X, those performance +claims and warranties are such Commercial Contributor's responsibility +alone. Under this section, the Commercial Contributor would have to +defend claims against the other Contributors related to those performance +claims and warranties, and if a court requires any other Contributor to +pay any damages as a result, the Commercial Contributor must pay +those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" +BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF +TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR +PURPOSE. Each Recipient is solely responsible for determining the +appropriateness of using and distributing the Program and assumes all +risks associated with its exercise of rights under this Agreement, +including but not limited to the risks and costs of program errors, +compliance with applicable laws, damage to or loss of data, programs +or equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS +SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST +PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE +EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under +applicable law, it shall not affect the validity or enforceability of +the remainder of the terms of this Agreement, and without further +action by the parties hereto, such provision shall be reformed to the +minimum extent necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against any entity +(including a cross-claim or counterclaim in a lawsuit) alleging that the +Program itself (excluding combinations of the Program with other software +or hardware) infringes such Recipient's patent(s), then such Recipient's +rights granted under Section 2(b) shall terminate as of the date such +litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it +fails to comply with any of the material terms or conditions of this +Agreement and does not cure such failure in a reasonable period of +time after becoming aware of such noncompliance. If all Recipient's +rights under this Agreement terminate, Recipient agrees to cease use +and distribution of the Program as soon as reasonably practicable. +However, Recipient's obligations under this Agreement and any licenses +granted by Recipient relating to the Program shall continue and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, +but in order to avoid inconsistency the Agreement is copyrighted and +may only be modified in the following manner. The Agreement Steward +reserves the right to publish new versions (including revisions) of +this Agreement from time to time. No one other than the Agreement +Steward has the right to modify this Agreement. The Eclipse Foundation +is the initial Agreement Steward. The Eclipse Foundation may assign the +responsibility to serve as the Agreement Steward to a suitable separate +entity. Each new version of the Agreement will be given a distinguishing +version number. The Program (including Contributions) may always be +Distributed subject to the version of the Agreement under which it was +received. In addition, after a new version of the Agreement is published, +Contributor may elect to Distribute the Program (including its +Contributions) under the new version. + +Except as expressly stated in Sections 2(a) and 2(b) above, Recipient +receives no rights or licenses to the intellectual property of any +Contributor under this Agreement, whether expressly, by implication, +estoppel or otherwise. All rights in the Program not expressly granted +under this Agreement are reserved. Nothing in this Agreement is intended +to be enforceable by any entity that is not a Contributor or Recipient. +No third-party beneficiary rights are created under this Agreement. + +Exhibit A - Form of Secondary Licenses Notice + +"This Source Code may also be made available under the following +Secondary Licenses when the conditions for such availability set forth +in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), +version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. diff --git a/tests/equivalence/genapp-lgtestp4/NOTICE b/tests/equivalence/genapp-lgtestp4/NOTICE new file mode 100644 index 000000000..4c2d3f8e0 --- /dev/null +++ b/tests/equivalence/genapp-lgtestp4/NOTICE @@ -0,0 +1,12 @@ +CICS General Insurance Application (GenApp) +https://github.com/cicsdev/cics-genapp +(C) Copyright IBM Corp. 2011, 2020 + +Licensed under the Eclipse Public License - v 2.0 (see LICENSE, the corpus's +own licence file). The program under test, base/src/lgtestp4.cbl, the +programs it runs in the same task (base/src/lgipol01.cbl, base/src/lgipdb01.cbl, base/src/lgapol01.cbl, base/src/lgapdb01.cbl, base/src/lgapvs01.cbl, base/src/lgdpol01.cbl, base/src/lgdpdb01.cbl, base/src/lgdpvs01.cbl, base/src/lgupol01.cbl, base/src/lgupdb01.cbl, base/src/lgupvs01.cbl, base/src/lgstsq.cbl), +their copybooks, the BMS mapset (base/src/ssmap.bms) and the Db2 DDL and rows +(base/cntl/db2cre.jcl) are GenApp's, used unmodified from the corpus. + +ksdspoly.txt is the genapp-lgupdb01 case's (see its NOTICE). The scenarios in +case.json are written for this case. diff --git a/tests/equivalence/genapp-lgtestp4/case.json b/tests/equivalence/genapp-lgtestp4/case.json new file mode 100644 index 000000000..45d3c1789 --- /dev/null +++ b/tests/equivalence/genapp-lgtestp4/case.json @@ -0,0 +1,355 @@ +{ + "kind": "cics", + "corpus": "cics-genapp", + "program": "LGTESTP4", + "program_source": "base/src/lgtestp4.cbl", + "copy_dirs": [ + "base/src" + ], + "transid": "SSP4", + "clock": "2026/10/01 10:30:15.00", + "programs": [ + { + "program": "LGIPOL01", + "program_source": "base/src/lgipol01.cbl" + }, + { + "program": "LGIPDB01", + "program_source": "base/src/lgipdb01.cbl" + }, + { + "program": "LGAPOL01", + "program_source": "base/src/lgapol01.cbl" + }, + { + "program": "LGAPDB01", + "program_source": "base/src/lgapdb01.cbl" + }, + { + "program": "LGAPVS01", + "program_source": "base/src/lgapvs01.cbl" + }, + { + "program": "LGDPOL01", + "program_source": "base/src/lgdpol01.cbl" + }, + { + "program": "LGDPDB01", + "program_source": "base/src/lgdpdb01.cbl" + }, + { + "program": "LGDPVS01", + "program_source": "base/src/lgdpvs01.cbl" + }, + { + "program": "LGUPOL01", + "program_source": "base/src/lgupol01.cbl" + }, + { + "program": "LGUPDB01", + "program_source": "base/src/lgupdb01.cbl" + }, + { + "program": "LGUPVS01", + "program_source": "base/src/lgupvs01.cbl" + }, + { + "program": "LGSTSQ", + "program_source": "base/src/lgstsq.cbl" + } + ], + "datasets": { + ".GENAPP.KSDSPOLY": { + "input": "@case/ksdspoly.txt", + "entity": "WfPolicyInfo", + "copybook": "base/src/lgupvs01.cbl", + "record": "WF-POLICY-INFO", + "vsam": { + "key_offset": 0, + "key_length": 21, + "reclen": 64, + "why": "base/cntl/adef121.jcl DEFINE2: DATA(... KEYS(21 0) RECORDSIZE(64 64)); the engine's facts do not read KEYS / RECORDSIZE inside the DATA component, so the case states them" + } + } + }, + "db2": { + "ddl": [ + "base/cntl/db2cre.jcl" + ], + "seed": "base/cntl/db2cre.jcl", + "symbols": { + "": "GENASA1" + }, + "qualifier": "GENASA1", + "compare": [ + "GENASA1.POLICY", + "GENASA1.ENDOWMENT", + "GENASA1.HOUSE", + "GENASA1.MOTOR", + "GENASA1.COMMERCIAL" + ] + }, + "clock_fields": { + "db2": [ + "GENASA1.POLICY.LASTCHANGED", + "GENASA1.COMMERCIAL.REQUESTDATE" + ], + "commarea": [ + "CA-REQUEST-SPECIFIC(31:26)" + ] + }, + "commarea": { + "segments": [ + { + "copybook": "base/src/lgtestp4.cbl", + "record": "COMM-AREA" + } + ] + }, + "screens": { + "SSMAPP4": { + "copybook": "@bms/SSMAP.cpy", + "input": "SSMAPP4I", + "output": "SSMAPP4O" + } + }, + "region": { + "applid": "GENAREGN", + "sysid": "CICA" + }, + "scenarios": [ + { + "name": "first-entry-inquire", + "aid": "DFHENTER", + "commarea": null, + "receive": { + "SSMAPP4": { + "ENP4OPTI": "1", + "ENP4CNOI": "0000000001", + "ENP4PNOI": "0000000010" + } + }, + "why": "EIBCALEN 0: the map initialised and sent (ERASE), then the same task's RECEIVE (the operator's input): option 1 inquires commercial policy 10 of customer 1 (LINK LGIPOL01 -> LGIPDB01); the policy shown, RETURN TRANSID('SSP{n}') with COMM-AREA" + }, + { + "name": "inquire", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP4": { + "ENP4OPTI": "1", + "ENP4CNOI": "0000000005", + "ENP4PNOI": "0000000009" + } + }, + "why": "option 1 on a returning task (EIBCALEN > 0: GO TO A-GAIN): commercial policy 9 of customer 5" + }, + { + "name": "inquire-not-found", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP4": { + "ENP4OPTI": "1", + "ENP4CNOI": "0000000001", + "ENP4PNOI": "0000009999" + } + }, + "why": "option 1 for a policy the customer does not hold: LGIPDB01 sets CA-RETURN-CODE '01' -> NO-DATA ('No data was returned.'), ERROR-OUT sends the map and initialises the areas" + }, + { + "name": "delete", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP4": { + "ENP4OPTI": "3", + "ENP4CNOI": "0000000001", + "ENP4PNOI": "0000000010" + } + }, + "why": "option 3: LINK LGDPOL01 (01DCOM) deletes policy 10 of customer 1 (POLICY row, cascade, VSAM copy); the fields blanked, 'Commercial Policy Deleted', SEND MAP twice" + }, + { + "name": "delete-fails", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP4": { + "ENP4OPTI": "3", + "ENP4CNOI": "0000000001", + "ENP4PNOI": "0000000010" + } + }, + "sql_faults": [ + { + "program": "LGDPDB01", + "line": 189, + "sqlcode": -913 + } + ], + "why": "option 3 with LGDPDB01's DELETE failing (SQLCODE -913): CA-RETURN-CODE '90' -> SYNCPOINT ROLLBACK, NO-DELETE; the back end LINKs LGSTSQ first, so the task is judged up to LGSTSQ's refused WRITEQ (X6) and the rest is not compared" + }, + { + "name": "bad-option", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP4": { + "ENP4OPTI": "9" + } + }, + "why": "option '9': WHEN OTHER -- 'Please enter a valid option', the option field's length -1 (cursor), SEND MAP ... CURSOR" + }, + { + "name": "clear", + "aid": "DFHCLEAR", + "commarea": {}, + "receive": { + "SSMAPP4": { + "ENP4OPTI": "1" + } + }, + "why": "CLEAR: HANDLE AID CLEAR(CLEARIT) -- the map sent MAPONLY, RETURN TRANSID" + }, + { + "name": "pf3", + "aid": "DFHPF3", + "commarea": {}, + "receive": { + "SSMAPP4": { + "ENP4OPTI": "1" + } + }, + "why": "PF3: HANDLE AID PF3(ENDIT) -- SEND TEXT 'Transaction ended' ERASE FREEKB, RETURN" + }, + { + "name": "mapfail", + "aid": "DFHENTER", + "commarea": {}, + "why": "ENTER with no input: the RECEIVE raises MAPFAIL, HANDLE CONDITION MAPFAIL(ENDIT)" + }, + { + "name": "add-unknown-customer", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP4": { + "ENP4OPTI": "2", + "ENP4CNOI": "0000000999", + "ENP4IDAI": "2026-01-01", + "ENP4EDAI": "2027-01-01", + "ENP4ADDI": "1 HIGH STREET", + "ENP4HPCI": "SO212JN", + "ENP4LATI": "51.0123456", + "ENP4LONI": "-1.2345678", + "ENP4CUSI": "ACME WIDGETS LTD", + "ENP4PTYI": "OFFICE", + "ENP4FPEI": "0001", + "ENP4FPRI": "00000100", + "ENP4CPEI": "0002", + "ENP4CPRI": "00000200", + "ENP4XPEI": "0003", + "ENP4XPRI": "00000300", + "ENP4WPEI": "0004", + "ENP4WPRI": "00000400", + "ENP4STAI": "0000", + "ENP4REJI": "" + } + }, + "why": "option 2 for customer 999, who does not exist: LGAPDB01's INSERT into POLICY breaks its foreign key (SQLCODE -530) -> CA-RETURN-CODE '70', SYNCPOINT ROLLBACK, NO-ADD 'Customer does not exist'; the back end LINKs LGSTSQ first, so the task is judged up to LGSTSQ's refused WRITEQ (X6) and the rest is not compared" + }, + { + "name": "add-fails", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP4": { + "ENP4OPTI": "2", + "ENP4CNOI": "0000000003", + "ENP4IDAI": "2026-01-01", + "ENP4EDAI": "2027-01-01", + "ENP4ADDI": "1 HIGH STREET", + "ENP4HPCI": "SO212JN", + "ENP4LATI": "51.0123456", + "ENP4LONI": "-1.2345678", + "ENP4CUSI": "ACME WIDGETS LTD", + "ENP4PTYI": "OFFICE", + "ENP4FPEI": "0001", + "ENP4FPRI": "00000100", + "ENP4CPEI": "0002", + "ENP4CPRI": "00000200", + "ENP4XPEI": "0003", + "ENP4XPRI": "00000300", + "ENP4WPEI": "0004", + "ENP4WPRI": "00000400", + "ENP4STAI": "0000", + "ENP4REJI": "" + } + }, + "sql_faults": [ + { + "program": "LGAPDB01", + "table": "POLICY", + "verb": "INSERT", + "sqlcode": -913 + } + ], + "why": "option 2 with LGAPDB01's INSERT into POLICY failing (SQLCODE -913): CA-RETURN-CODE '90', SYNCPOINT ROLLBACK, NO-ADD WHEN OTHER 'Error Adding ... Policy'; the back end LINKs LGSTSQ first, so the task is judged up to LGSTSQ's refused WRITEQ (X6) and the rest is not compared" + }, + { + "name": "inquire-by-policy", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP4": { + "ENP4OPTI": "1", + "ENP4CNOI": "0000000000", + "ENP4PNOI": "0000000009" + } + }, + "why": "option 1 with only a policy number: '02ICOM' (the commercial policy by number)" + }, + { + "name": "inquire-by-customer", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP4": { + "ENP4OPTI": "1", + "ENP4CNOI": "0000000001", + "ENP4PNOI": "0000000000" + } + }, + "why": "option 1 with only a customer number: '03ICOM' (the customer's commercial policies)" + }, + { + "name": "inquire-by-postcode", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP4": { + "ENP4OPTI": "1", + "ENP4CNOI": "0000000000", + "ENP4PNOI": "0000000000", + "ENP4HPCI": "SO212JN " + } + }, + "why": "option 1 with neither number, a postcode: '05ICOM' (the policies at that postcode)" + }, + { + "name": "inquire-nothing", + "aid": "DFHENTER", + "commarea": {}, + "receive": { + "SSMAPP4": { + "ENP4OPTI": "1", + "ENP4CNOI": "0000000000", + "ENP4PNOI": "0000000000" + } + }, + "why": "option 1 with no number and no postcode: no request id is set (COMM-AREA's own, spaces) and LGIPOL01 is LINKed with it" + } + ], + "notes": "GenApp's commercial policy test transaction (LGTESTP4, transid SSP4, BMS map SSMAPP4 of mapset SSMAP: the symbolic map is generated from base/src/ssmap.bms, @bms/SSMAP.cpy). A first task (EIBCALEN 0) sends the initialised map and RECEIVEs in the same task; a returning one (EIBCALEN > 0; the program has no DFHCOMMAREA, its own COMM-AREA goes back through RETURN TRANSID) goes straight to the RECEIVE. HANDLE AID CLEAR / PF3 and HANDLE CONDITION MAPFAIL are exercised; the option field picks inquire (1: LGIPOL01), add (2: LGAPOL01, a failure is SYNCPOINT ROLLBACK), delete (3: LGDPOL01); option 1 builds the request from what is typed: both numbers (01ICOM), the policy (02ICOM), the customer (03ICOM), a postcode (05ICOM), or nothing. The case runs the whole chain in the task: the four front ends, their Db2 back ends, the VSAM services and LGSTSQ (twelve programs). The VSAM file is genapp-lgupdb01's; Db2 is db2cre.jcl's tables and rows. POLICY.LASTCHANGED, COMMERCIAL.REQUESTDATE and the COMMAREA's CA-LASTCHANGED are clock fields. Error paths in the back ends LINK LGSTSQ and are judged up to its refused WRITEQ (X6). LGTESTP4's option 2 sets no CA-BROKERID / CA-PAYMENT (LGTESTP1-3 MOVE 0 to them): they hold the spaces INITIALIZE leaves in CA-REQUEST-SPECIFIC, and LGAPDB01 MOVEs them to binary host variables -- a non-digit in a numeric DISPLAY item (C11): GnuCOBOL INSERTs BROKERID 931773840, the port 0, IBM documents no result. The successful add is therefore left out (#4652) and WHEN '2''s success path is not covered; the failing adds (an unknown customer, a faulted INSERT) are proven. An add whose SELECT LASTCHANGED is faulted would INSERT a blank CA-LASTCHANGED as COMMERCIAL.REQUESTDATE, which the Db2 client rejects with no Db2 SQLCODE (Q10). Uncovered: IF CA-RETURN-CODE > 0 true after the add / delete / update LINKs, and NO-ADD / NO-DELETE / NO-UPD: every back-end failure LINKs LGSTSQ before it returns, and the task is judged up to LGSTSQ's refused WRITEQ (X6), so what follows is not compared or counted. Derived from the CICS General Insurance Application (GenApp, github.com/cicsdev/cics-genapp; (C) Copyright IBM Corp. 2011, 2020), licensed under the Eclipse Public License 2.0: LICENSE here is the corpus's own, NOTICE names the source and what was derived." +} diff --git a/tests/equivalence/genapp-lgtestp4/ksdspoly.txt b/tests/equivalence/genapp-lgtestp4/ksdspoly.txt new file mode 100644 index 000000000..2e75937c9 --- /dev/null +++ b/tests/equivalence/genapp-lgtestp4/ksdspoly.txt @@ -0,0 +1,10 @@ +900000000060000000007 +C00000000010000000010SO212JN 0001IBM +C00000000050000000009BB104BX 0001Burnley Football Club +E00000000030000000005NNNSHEPPA Shep +E00000000080000000004YYNLIONTMR J. MORRIS +H00000000040000000006HOUSE 00501500000SO211UP +H00000000090000000008FLAT 00100260000E15WW +M00000000020000000001FORD KA 008500LL60LOO +M00000000050000000003DENNIS ENGINE 023500FIRE1 +M00000000100000000002VOLKSWAGEN BEETLE 000600A567WWR diff --git a/tests/equivalence/genapp-lgucus01/LICENSE b/tests/equivalence/genapp-lgucus01/LICENSE new file mode 100644 index 000000000..d3087e4c5 --- /dev/null +++ b/tests/equivalence/genapp-lgucus01/LICENSE @@ -0,0 +1,277 @@ +Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + +"Contributor" means any person or entity that Distributes the Program. + +"Licensed Patents" mean patent claims licensable by a Contributor which +are necessarily infringed by the use or sale of its Contribution alone +or when combined with the Program. + +"Program" means the Contributions Distributed in accordance with this +Agreement. + +"Recipient" means anyone who receives the Program under this Agreement +or any Secondary License (as applicable), including Contributors. + +"Derivative Works" shall mean any work, whether in Source Code or other +form, that is based on (or derived from) the Program and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. + +"Modified Works" shall mean any work in Source Code or other form that +results from an addition to, deletion from, or modification of the +contents of the Program, including, for purposes of clarity any new file +in Source Code form that contains any contents of the Program. Modified +Works shall not include works that contain only declarations, +interfaces, types, classes, structures, or files of the Program solely +in each case in order to link to, bind by name, or subclass the Program +or Modified Works thereof. + +"Distribute" means the acts of a) distributing or b) making available +in any manner that enables the transfer of a copy. + +"Source Code" means the form of a Program preferred for making +modifications, including but not limited to software source code, +documentation source, and configuration files. + +"Secondary License" means either the GNU General Public License, +Version 2.0, or any later versions of that license, including any +exceptions or additional permissions as identified by the initial +Contributor. + +2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + +3. REQUIREMENTS + +3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + +3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + +3.3 Contributors may not remove or alter any copyright, patent, +trademark, attribution notices, disclaimers of warranty, or limitations +of liability ("notices") contained within the Program from any copy of +the Program which they Distribute, provided that Contributors may add +their own appropriate notices. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities +with respect to end users, business partners and the like. While this +license is intended to facilitate the commercial use of the Program, +the Contributor who includes the Program in a commercial product +offering should do so in a manner which does not create potential +liability for other Contributors. Therefore, if a Contributor includes +the Program in a commercial product offering, such Contributor +("Commercial Contributor") hereby agrees to defend and indemnify every +other Contributor ("Indemnified Contributor") against any losses, +damages and costs (collectively "Losses") arising from claims, lawsuits +and other legal actions brought by a third party against the Indemnified +Contributor to the extent caused by the acts or omissions of such +Commercial Contributor in connection with its distribution of the Program +in a commercial product offering. The obligations in this section do not +apply to any claims or Losses relating to any actual or alleged +intellectual property infringement. In order to qualify, an Indemnified +Contributor must: a) promptly notify the Commercial Contributor in +writing of such claim, and b) allow the Commercial Contributor to control, +and cooperate with the Commercial Contributor in, the defense and any +related settlement negotiations. The Indemnified Contributor may +participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial +product offering, Product X. That Contributor is then a Commercial +Contributor. If that Commercial Contributor then makes performance +claims, or offers warranties related to Product X, those performance +claims and warranties are such Commercial Contributor's responsibility +alone. Under this section, the Commercial Contributor would have to +defend claims against the other Contributors related to those performance +claims and warranties, and if a court requires any other Contributor to +pay any damages as a result, the Commercial Contributor must pay +those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" +BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF +TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR +PURPOSE. Each Recipient is solely responsible for determining the +appropriateness of using and distributing the Program and assumes all +risks associated with its exercise of rights under this Agreement, +including but not limited to the risks and costs of program errors, +compliance with applicable laws, damage to or loss of data, programs +or equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS +SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST +PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE +EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under +applicable law, it shall not affect the validity or enforceability of +the remainder of the terms of this Agreement, and without further +action by the parties hereto, such provision shall be reformed to the +minimum extent necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against any entity +(including a cross-claim or counterclaim in a lawsuit) alleging that the +Program itself (excluding combinations of the Program with other software +or hardware) infringes such Recipient's patent(s), then such Recipient's +rights granted under Section 2(b) shall terminate as of the date such +litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it +fails to comply with any of the material terms or conditions of this +Agreement and does not cure such failure in a reasonable period of +time after becoming aware of such noncompliance. If all Recipient's +rights under this Agreement terminate, Recipient agrees to cease use +and distribution of the Program as soon as reasonably practicable. +However, Recipient's obligations under this Agreement and any licenses +granted by Recipient relating to the Program shall continue and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, +but in order to avoid inconsistency the Agreement is copyrighted and +may only be modified in the following manner. The Agreement Steward +reserves the right to publish new versions (including revisions) of +this Agreement from time to time. No one other than the Agreement +Steward has the right to modify this Agreement. The Eclipse Foundation +is the initial Agreement Steward. The Eclipse Foundation may assign the +responsibility to serve as the Agreement Steward to a suitable separate +entity. Each new version of the Agreement will be given a distinguishing +version number. The Program (including Contributions) may always be +Distributed subject to the version of the Agreement under which it was +received. In addition, after a new version of the Agreement is published, +Contributor may elect to Distribute the Program (including its +Contributions) under the new version. + +Except as expressly stated in Sections 2(a) and 2(b) above, Recipient +receives no rights or licenses to the intellectual property of any +Contributor under this Agreement, whether expressly, by implication, +estoppel or otherwise. All rights in the Program not expressly granted +under this Agreement are reserved. Nothing in this Agreement is intended +to be enforceable by any entity that is not a Contributor or Recipient. +No third-party beneficiary rights are created under this Agreement. + +Exhibit A - Form of Secondary Licenses Notice + +"This Source Code may also be made available under the following +Secondary Licenses when the conditions for such availability set forth +in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), +version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. diff --git a/tests/equivalence/genapp-lgucus01/NOTICE b/tests/equivalence/genapp-lgucus01/NOTICE new file mode 100644 index 000000000..a4b8fca3b --- /dev/null +++ b/tests/equivalence/genapp-lgucus01/NOTICE @@ -0,0 +1,12 @@ +CICS General Insurance Application (GenApp) +https://github.com/cicsdev/cics-genapp +(C) Copyright IBM Corp. 2011, 2020 + +Licensed under the Eclipse Public License - v 2.0 (see LICENSE, the corpus's +own licence file). The program under test, base/src/lgucus01.cbl, the +programs it runs in the same task (base/src/lgucdb01.cbl, base/src/lgucvs01.cbl, base/src/lgstsq.cbl), +their copybooks and the Db2 DDL and rows (base/cntl/db2cre.jcl) are GenApp's, used +unmodified from the corpus. + +ksdscust-vsam-only.txt, ksdscust.txt: the genapp-lgucdb01 case's (see its NOTICE). The scenarios in case.json are +written for this case, most from genapp-lgucdb01's. diff --git a/tests/equivalence/genapp-lgucus01/case.json b/tests/equivalence/genapp-lgucus01/case.json new file mode 100644 index 000000000..87a713713 --- /dev/null +++ b/tests/equivalence/genapp-lgucus01/case.json @@ -0,0 +1,111 @@ +{ + "kind": "cics", + "corpus": "cics-genapp", + "program": "LGUCUS01", + "program_source": "base/src/lgucus01.cbl", + "copy_dirs": [ + "base/src" + ], + "transid": "LGUC", + "clock": "2026/10/01 10:30:15.00", + "programs": [ + { + "program": "LGUCDB01", + "program_source": "base/src/lgucdb01.cbl" + }, + { + "program": "LGUCVS01", + "program_source": "base/src/lgucvs01.cbl" + }, + { + "program": "LGSTSQ", + "program_source": "base/src/lgstsq.cbl" + } + ], + "datasets": { + ".GENAPP.KSDSCUST": { + "input": "@case/ksdscust.txt", + "entity": "CaCustomerNum", + "copybook": "base/src/lgcmarea.cpy", + "record": "CA-CUSTOMER-NUM", + "vsam": { + "key_offset": 0, + "key_length": 10, + "reclen": 225, + "why": "base/cntl/adef121.jcl DEFINE1: DATA(... KEYS(10 0) RECORDSIZE(225 225)); the engine's facts do not read KEYS / RECORDSIZE inside the DATA component, so the case states them" + }, + "append": "@case/ksdscust-vsam-only.txt" + } + }, + "db2": { + "ddl": [ + "base/cntl/db2cre.jcl" + ], + "seed": "base/cntl/db2cre.jcl", + "symbols": { + "": "GENASA1" + }, + "qualifier": "GENASA1", + "compare": [ + "GENASA1.CUSTOMER" + ] + }, + "commarea": { + "segments": [ + { + "copybook": "base/src/lgucus01.cbl", + "record": "DFHCOMMAREA" + } + ] + }, + "linked": true, + "screens": {}, + "region": { + "applid": "GENAREGN", + "sysid": "CICA" + }, + "scenarios": [ + { + "name": "update-customer-5", + "commarea": { + "CA-REQUEST-ID": "01UCUS", + "CA-CUSTOMER-NUM": "5", + "CA-REQUEST-SPECIFIC": "Graham Cuthbert 1967-01-03 55 TR68BK 00007700100100 02083443444 g.cuthbert@new.example " + }, + "why": "LGUCDB01's scenario update-customer-5 through LGUCUS01: UPDATE CUSTOMER +0 (every column from the COMMAREA), LINK LGUCVS01 rewrites the VSAM copy; '00'" + }, + { + "name": "update-customer-1-all-fields", + "commarea": { + "CA-REQUEST-ID": "01UCUS", + "CA-CUSTOMER-NUM": "1", + "CA-REQUEST-SPECIFIC": "Andrew Pandy 1950-07-11The Grange 34 PI101O 00007799123456 01962811234 a.pandy@example.com " + }, + "why": "LGUCDB01's scenario update-customer-1-all-fields through LGUCUS01: all nine columns replaced, house name set" + }, + { + "name": "update-customer-11-vsam-only", + "commarea": { + "CA-REQUEST-ID": "01UCUS", + "CA-CUSTOMER-NUM": "11", + "CA-REQUEST-SPECIFIC": "Ada Lovelace 1815-12-10Ockham Park 12 KT246HP 00007700900999 01483222111 ada@engine.example " + }, + "why": "LGUCDB01's scenario update-customer-11-vsam-only through LGUCUS01: customer 11 is on KSDSCUST (ksdscust-vsam-only.txt, appended) but not in Db2's CUSTOMER: the UPDATE is +100 (l.173 true), CA-RETURN-CODE '01', no '90' and no WRITE-ERROR-MESSAGE; LGUCVS01 is still LINKed and its READ UPDATE / REWRITE of customer 11 are NORMAL -- the two stores out of step, as GenApp's design allows" + }, + { + "name": "no-commarea", + "commarea": null, + "why": "EIBCALEN 0: LGUCUS01 moves ' NO COMMAREA RECEIVED' to EM-VARIABLE, WRITE-ERROR-MESSAGE LINKs LGSTSQ with ERROR-MSG (TD CSMT and TS GENAERRS), IF EIBCALEN > 0 is false, then ABEND LGCA" + }, + { + "commarea": { + "CA-REQUEST-ID": "01ICUS", + "CA-CUSTOMER-NUM": "5", + "CA-REQUEST-SPECIFIC": "Graham Cuthbert 1967-01-03 55 TR68BK 00007700100100 02083443444 g.cuthbert@new.example " + }, + "name": "wrong-request-id", + "why": "CA-REQUEST-ID '01ICUS' is not '01UCUS': CA-RETURN-CODE '99', GO TO END-PROGRAM (no LINK)" + } + ], + "notes": "GenApp's update-customer front end (LGUCUS01, LINKed with the 32500-byte LGCMAREA COMMAREA): it checks the COMMAREA and LINKs LGUCDB01 (which LINKs LGUCVS01) with it. The case runs every program of that chain in the same task (\"programs\"), LGSTSQ too (its error logger, \"region\" for its ASSIGN SYSID), with the back-end case's Db2 tables, VSAM file and data; the scenarios reuse genapp-lgucdb01's inputs (each \"why\" names its source) and add the front end's own paths: no-commarea (EIBCALEN 0: LGSTSQ, ABEND LGCA). wrong-request-id: anything but '01UCUS' is '99' and GO TO END-PROGRAM. WRITE-ERROR-MESSAGE's IF EIBCALEN > 0 (and the IF EIBCALEN < 91 inside it) is never true: the paragraph is PERFORMed only when EIBCALEN is zero -- dead in practice, uncovered by every scenario. The SQL faults (M2) are the harness's, one per statement the tasks run. Derived from the CICS General Insurance Application (GenApp, github.com/cicsdev/cics-genapp; (C) Copyright IBM Corp. 2011, 2020), licensed under the Eclipse Public License 2.0: LICENSE here is the corpus's own, NOTICE names the source and what was derived." +} diff --git a/tests/equivalence/genapp-lgucus01/ksdscust-vsam-only.txt b/tests/equivalence/genapp-lgucus01/ksdscust-vsam-only.txt new file mode 100644 index 000000000..be0420c1e --- /dev/null +++ b/tests/equivalence/genapp-lgucus01/ksdscust-vsam-only.txt @@ -0,0 +1 @@ +0000000011Ada Lovelace 1815-12-10Ockham Park 12 KT246HP 00007700 900123 01483 222111 ada@analytical.example diff --git a/tests/equivalence/genapp-lgucus01/ksdscust.txt b/tests/equivalence/genapp-lgucus01/ksdscust.txt new file mode 100644 index 000000000..af72339eb --- /dev/null +++ b/tests/equivalence/genapp-lgucus01/ksdscust.txt @@ -0,0 +1,10 @@ +0000000001Andrew Pandy 1950-07-11 34 PI101OO 00107799 123456 01962 811234 A.Pandy@beebhouse.com +0000000002Scott Tracey 1965-09-30Tracey Island 1 TB14TV 001 001 911911 REFROOM@TBHOLDINGS.COM +0000000003John Noakes 1934-03-06 70 HX116BP 00109008 329855 0207 325656 Noaksey@beebhouse.com +0000000004Louis Pug 1969-09-06Picnic Basket 21 PP159DD 001 0208 344344 +0000000005Graham Cuthbert 1967-01-03 55 TR68BK 00201101 499787 0208 344344 A.Cut@CG.co.uk +0000000006Brian Cant 1933-07-12 58 IP221PL 001 01855 122134 CANT@beebhouse.com +0000000007Troy Tempest 1964-10-04The Ray 48 ST106RY 000 TROYT@BUSCOMM.COM +0000000008Johnny Morris 1961-06-20 72 BS83HA 0010345 245245 0345 245245 JM@ZOOLAND.CO.UK +0000000009Micky Murphy 1966-01-03 51 CA316RN 001 +0000000010Susan Stranks 1938-12-02 68 W1A4WW 001 0207 845845 diff --git a/tests/equivalence/genapp-lgupol01/LICENSE b/tests/equivalence/genapp-lgupol01/LICENSE new file mode 100644 index 000000000..d3087e4c5 --- /dev/null +++ b/tests/equivalence/genapp-lgupol01/LICENSE @@ -0,0 +1,277 @@ +Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + +"Contributor" means any person or entity that Distributes the Program. + +"Licensed Patents" mean patent claims licensable by a Contributor which +are necessarily infringed by the use or sale of its Contribution alone +or when combined with the Program. + +"Program" means the Contributions Distributed in accordance with this +Agreement. + +"Recipient" means anyone who receives the Program under this Agreement +or any Secondary License (as applicable), including Contributors. + +"Derivative Works" shall mean any work, whether in Source Code or other +form, that is based on (or derived from) the Program and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. + +"Modified Works" shall mean any work in Source Code or other form that +results from an addition to, deletion from, or modification of the +contents of the Program, including, for purposes of clarity any new file +in Source Code form that contains any contents of the Program. Modified +Works shall not include works that contain only declarations, +interfaces, types, classes, structures, or files of the Program solely +in each case in order to link to, bind by name, or subclass the Program +or Modified Works thereof. + +"Distribute" means the acts of a) distributing or b) making available +in any manner that enables the transfer of a copy. + +"Source Code" means the form of a Program preferred for making +modifications, including but not limited to software source code, +documentation source, and configuration files. + +"Secondary License" means either the GNU General Public License, +Version 2.0, or any later versions of that license, including any +exceptions or additional permissions as identified by the initial +Contributor. + +2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + +3. REQUIREMENTS + +3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + +3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + +3.3 Contributors may not remove or alter any copyright, patent, +trademark, attribution notices, disclaimers of warranty, or limitations +of liability ("notices") contained within the Program from any copy of +the Program which they Distribute, provided that Contributors may add +their own appropriate notices. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities +with respect to end users, business partners and the like. While this +license is intended to facilitate the commercial use of the Program, +the Contributor who includes the Program in a commercial product +offering should do so in a manner which does not create potential +liability for other Contributors. Therefore, if a Contributor includes +the Program in a commercial product offering, such Contributor +("Commercial Contributor") hereby agrees to defend and indemnify every +other Contributor ("Indemnified Contributor") against any losses, +damages and costs (collectively "Losses") arising from claims, lawsuits +and other legal actions brought by a third party against the Indemnified +Contributor to the extent caused by the acts or omissions of such +Commercial Contributor in connection with its distribution of the Program +in a commercial product offering. The obligations in this section do not +apply to any claims or Losses relating to any actual or alleged +intellectual property infringement. In order to qualify, an Indemnified +Contributor must: a) promptly notify the Commercial Contributor in +writing of such claim, and b) allow the Commercial Contributor to control, +and cooperate with the Commercial Contributor in, the defense and any +related settlement negotiations. The Indemnified Contributor may +participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial +product offering, Product X. That Contributor is then a Commercial +Contributor. If that Commercial Contributor then makes performance +claims, or offers warranties related to Product X, those performance +claims and warranties are such Commercial Contributor's responsibility +alone. Under this section, the Commercial Contributor would have to +defend claims against the other Contributors related to those performance +claims and warranties, and if a court requires any other Contributor to +pay any damages as a result, the Commercial Contributor must pay +those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" +BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF +TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR +PURPOSE. Each Recipient is solely responsible for determining the +appropriateness of using and distributing the Program and assumes all +risks associated with its exercise of rights under this Agreement, +including but not limited to the risks and costs of program errors, +compliance with applicable laws, damage to or loss of data, programs +or equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS +SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST +PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE +EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under +applicable law, it shall not affect the validity or enforceability of +the remainder of the terms of this Agreement, and without further +action by the parties hereto, such provision shall be reformed to the +minimum extent necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against any entity +(including a cross-claim or counterclaim in a lawsuit) alleging that the +Program itself (excluding combinations of the Program with other software +or hardware) infringes such Recipient's patent(s), then such Recipient's +rights granted under Section 2(b) shall terminate as of the date such +litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it +fails to comply with any of the material terms or conditions of this +Agreement and does not cure such failure in a reasonable period of +time after becoming aware of such noncompliance. If all Recipient's +rights under this Agreement terminate, Recipient agrees to cease use +and distribution of the Program as soon as reasonably practicable. +However, Recipient's obligations under this Agreement and any licenses +granted by Recipient relating to the Program shall continue and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, +but in order to avoid inconsistency the Agreement is copyrighted and +may only be modified in the following manner. The Agreement Steward +reserves the right to publish new versions (including revisions) of +this Agreement from time to time. No one other than the Agreement +Steward has the right to modify this Agreement. The Eclipse Foundation +is the initial Agreement Steward. The Eclipse Foundation may assign the +responsibility to serve as the Agreement Steward to a suitable separate +entity. Each new version of the Agreement will be given a distinguishing +version number. The Program (including Contributions) may always be +Distributed subject to the version of the Agreement under which it was +received. In addition, after a new version of the Agreement is published, +Contributor may elect to Distribute the Program (including its +Contributions) under the new version. + +Except as expressly stated in Sections 2(a) and 2(b) above, Recipient +receives no rights or licenses to the intellectual property of any +Contributor under this Agreement, whether expressly, by implication, +estoppel or otherwise. All rights in the Program not expressly granted +under this Agreement are reserved. Nothing in this Agreement is intended +to be enforceable by any entity that is not a Contributor or Recipient. +No third-party beneficiary rights are created under this Agreement. + +Exhibit A - Form of Secondary Licenses Notice + +"This Source Code may also be made available under the following +Secondary Licenses when the conditions for such availability set forth +in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), +version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. diff --git a/tests/equivalence/genapp-lgupol01/NOTICE b/tests/equivalence/genapp-lgupol01/NOTICE new file mode 100644 index 000000000..2ff8416af --- /dev/null +++ b/tests/equivalence/genapp-lgupol01/NOTICE @@ -0,0 +1,12 @@ +CICS General Insurance Application (GenApp) +https://github.com/cicsdev/cics-genapp +(C) Copyright IBM Corp. 2011, 2020 + +Licensed under the Eclipse Public License - v 2.0 (see LICENSE, the corpus's +own licence file). The program under test, base/src/lgupol01.cbl, the +programs it runs in the same task (base/src/lgupdb01.cbl, base/src/lgupvs01.cbl, base/src/lgstsq.cbl), +their copybooks and the Db2 DDL and rows (base/cntl/db2cre.jcl) are GenApp's, used +unmodified from the corpus. + +ksdspoly.txt: the genapp-lgupdb01 case's (see its NOTICE). The scenarios in case.json are +written for this case, most from genapp-lgupdb01's. diff --git a/tests/equivalence/genapp-lgupol01/case.json b/tests/equivalence/genapp-lgupol01/case.json new file mode 100644 index 000000000..d87c1112e --- /dev/null +++ b/tests/equivalence/genapp-lgupol01/case.json @@ -0,0 +1,169 @@ +{ + "kind": "cics", + "corpus": "cics-genapp", + "program": "LGUPOL01", + "program_source": "base/src/lgupol01.cbl", + "copy_dirs": [ + "base/src" + ], + "transid": "LGUP", + "clock": "2026/10/01 10:30:15.00", + "programs": [ + { + "program": "LGUPDB01", + "program_source": "base/src/lgupdb01.cbl" + }, + { + "program": "LGUPVS01", + "program_source": "base/src/lgupvs01.cbl" + }, + { + "program": "LGSTSQ", + "program_source": "base/src/lgstsq.cbl" + } + ], + "datasets": { + ".GENAPP.KSDSPOLY": { + "input": "@case/ksdspoly.txt", + "entity": "WfPolicyInfo", + "copybook": "base/src/lgupvs01.cbl", + "record": "WF-POLICY-INFO", + "vsam": { + "key_offset": 0, + "key_length": 21, + "reclen": 64, + "why": "base/cntl/adef121.jcl DEFINE2: DATA(... KEYS(21 0) RECORDSIZE(64 64)); the engine's facts do not read KEYS / RECORDSIZE inside the DATA component, so the case states them" + } + } + }, + "db2": { + "ddl": [ + "base/cntl/db2cre.jcl" + ], + "seed": "base/cntl/db2cre.jcl", + "symbols": { + "": "GENASA1" + }, + "qualifier": "GENASA1", + "compare": [ + "GENASA1.POLICY", + "GENASA1.ENDOWMENT", + "GENASA1.HOUSE", + "GENASA1.MOTOR" + ] + }, + "clock_fields": { + "db2": [ + "GENASA1.POLICY.LASTCHANGED" + ], + "commarea": [ + "CA-REQUEST-SPECIFIC(31:26)" + ] + }, + "commarea": { + "segments": [ + { + "copybook": "base/src/lgupol01.cbl", + "record": "DFHCOMMAREA" + } + ] + }, + "linked": true, + "screens": {}, + "region": { + "applid": "GENAREGN", + "sysid": "CICA" + }, + "scenarios": [ + { + "name": "update-endowment", + "commarea": { + "CA-REQUEST-ID": "01UEND", + "CA-CUSTOMER-NUM": "8", + "CA-REQUEST-SPECIFIC": "00000000042026-01-012027-01-012011-08-05-10.45.19.0000000000000007REF0000001001234YNYGROWTH 25250000A. N. OTHER " + }, + "why": "LGUPDB01's scenario update-endowment through LGUPOL01: LASTCHANGED matches: UPDATE ENDOWMENT, the positioned UPDATE POLICY (LASTCHANGED = CURRENT TIMESTAMP), its SELECT back into CA-LASTCHANGED, LINK LGUPVS01 rewrites the VSAM record; '00'" + }, + { + "name": "update-house", + "commarea": { + "CA-REQUEST-ID": "01UHOU", + "CA-CUSTOMER-NUM": "4", + "CA-REQUEST-SPECIFIC": "00000000062026-01-012027-01-012011-09-01-22.32.42.0000000000000007REF0000001001234COTTAGE 00300425000ROSE 12 SO21 1AA" + }, + "why": "LGUPDB01's scenario update-house through LGUPOL01: the house path" + }, + { + "name": "update-motor", + "commarea": { + "CA-REQUEST-ID": "01UMOT", + "CA-CUSTOMER-NUM": "2", + "CA-REQUEST-SPECIFIC": "00000000012026-01-012027-01-012011-05-11-17.12.17.0000000000000007REF0000001001234FORD FIESTA 009500AB12CDEBLUE 12002019-05-01000450000001" + }, + "why": "LGUPDB01's scenario update-motor through LGUPOL01: the motor path" + }, + { + "name": "stale-lastchanged", + "commarea": { + "CA-REQUEST-ID": "01UEND", + "CA-CUSTOMER-NUM": "8", + "CA-REQUEST-SPECIFIC": "00000000042026-01-012027-01-012011-08-05-10.45.18.0000000000000007REF0000001001234YNYGROWTH 25250000A. N. OTHER " + }, + "why": "LGUPDB01's scenario stale-lastchanged through LGUPOL01: CA-LASTCHANGED differs from the row's (another update came first): '02', nothing changed" + }, + { + "name": "house-request-for-endowment", + "commarea": { + "CA-REQUEST-ID": "01UHOU", + "CA-CUSTOMER-NUM": "8", + "CA-REQUEST-SPECIFIC": "00000000042026-01-012027-01-012011-08-05-10.45.19.0000000000000007REF0000001001234COTTAGE 00300425000ROSE 12 SO21 1AA" + }, + "why": "LGUPDB01's scenario house-request-for-endowment through LGUPOL01: a house update of an endowment policy: UPDATE HOUSE finds no row (+100)" + }, + { + "name": "no-commarea", + "commarea": null, + "why": "EIBCALEN 0: LGUPOL01 moves ' NO COMMAREA RECEIVED' to EM-VARIABLE, WRITE-ERROR-MESSAGE LINKs LGSTSQ with ERROR-MSG (TD CSMT and TS GENAERRS), IF EIBCALEN > 0 is false, then ABEND LGCA" + }, + { + "commarea": { + "CA-REQUEST-ID": "01UEND", + "CA-CUSTOMER-NUM": "8", + "CA-REQUEST-SPECIFIC": "00000000042026-01-012027-01-012011-08-05-10.45.19.0000000000000007REF0000001001234YNYGROWTH 25250000A. N. OTHER " + }, + "name": "short-commarea-end", + "commarea_length": 100, + "why": "01UEND: EIBCALEN 100 < WS-REQUIRED-CA-LEN 152: CA-RETURN-CODE '98', RETURN before the LINK" + }, + { + "commarea": { + "CA-REQUEST-ID": "01UHOU", + "CA-CUSTOMER-NUM": "4", + "CA-REQUEST-SPECIFIC": "00000000062026-01-012027-01-012011-09-01-22.32.42.0000000000000007REF0000001001234COTTAGE 00300425000ROSE 12 SO21 1AA" + }, + "name": "short-commarea-hou", + "commarea_length": 140, + "why": "01UHOU: EIBCALEN 140 < WS-REQUIRED-CA-LEN 158: CA-RETURN-CODE '98', RETURN before the LINK" + }, + { + "commarea": { + "CA-REQUEST-ID": "01UMOT", + "CA-CUSTOMER-NUM": "2", + "CA-REQUEST-SPECIFIC": "00000000012026-01-012027-01-012011-05-11-17.12.17.0000000000000007REF0000001001234FORD FIESTA 009500AB12CDEBLUE 12002019-05-01000450000001" + }, + "name": "short-commarea-mot", + "commarea_length": 150, + "why": "01UMOT: EIBCALEN 150 < WS-REQUIRED-CA-LEN 165: CA-RETURN-CODE '98', RETURN before the LINK" + }, + { + "commarea": { + "CA-REQUEST-ID": "01UCOM", + "CA-CUSTOMER-NUM": "4", + "CA-REQUEST-SPECIFIC": "00000000062026-01-012027-01-012011-09-01-22.32.42.0000000000000007REF0000001001234COTTAGE 00300425000ROSE 12 SO21 1AA" + }, + "name": "unknown-request-id", + "why": "CA-REQUEST-ID '01UCOM' (no WHEN): CA-RETURN-CODE '99', and the EVALUATE falls through to PERFORM UPDATE-POLICY-DB2-INFO all the same: LGUPDB01 runs with the request" + } + ], + "notes": "GenApp's update-policy front end (LGUPOL01, LINKed with the 32500-byte LGCMAREA COMMAREA): it checks the COMMAREA and LINKs LGUPDB01 (which LINKs LGUPVS01) with it. The case runs every program of that chain in the same task (\"programs\"), LGSTSQ too (its error logger, \"region\" for its ASSIGN SYSID), with the back-end case's Db2 tables, VSAM file and data; the scenarios reuse genapp-lgupdb01's inputs (each \"why\" names its source) and add the front end's own paths: no-commarea (EIBCALEN 0: LGSTSQ, ABEND LGCA). Each request id's own length check ('98'); WHEN OTHER sets '99' and still falls through to the LINK (unknown-request-id: LGUPDB01 then fails it and LINKs LGSTSQ, judged up to X6). WRITE-ERROR-MESSAGE's IF EIBCALEN > 0 (and the IF EIBCALEN < 91 inside it) is never true: the paragraph is PERFORMed only when EIBCALEN is zero -- dead in practice, uncovered by every scenario. The SQL faults (M2) are the harness's, one per statement the tasks run. Derived from the CICS General Insurance Application (GenApp, github.com/cicsdev/cics-genapp; (C) Copyright IBM Corp. 2011, 2020), licensed under the Eclipse Public License 2.0: LICENSE here is the corpus's own, NOTICE names the source and what was derived." +} diff --git a/tests/equivalence/genapp-lgupol01/ksdspoly.txt b/tests/equivalence/genapp-lgupol01/ksdspoly.txt new file mode 100644 index 000000000..2e75937c9 --- /dev/null +++ b/tests/equivalence/genapp-lgupol01/ksdspoly.txt @@ -0,0 +1,10 @@ +900000000060000000007 +C00000000010000000010SO212JN 0001IBM +C00000000050000000009BB104BX 0001Burnley Football Club +E00000000030000000005NNNSHEPPA Shep +E00000000080000000004YYNLIONTMR J. MORRIS +H00000000040000000006HOUSE 00501500000SO211UP +H00000000090000000008FLAT 00100260000E15WW +M00000000020000000001FORD KA 008500LL60LOO +M00000000050000000003DENNIS ENGINE 023500FIRE1 +M00000000100000000002VOLKSWAGEN BEETLE 000600A567WWR diff --git a/tests/tools/equivalence_cics.py b/tests/tools/equivalence_cics.py index 9e7f8c6b0..f2824f21b 100644 --- a/tests/tools/equivalence_cics.py +++ b/tests/tools/equivalence_cics.py @@ -1449,6 +1449,14 @@ def fault_lines(sc: dict[str, Any]) -> list[str]: return out +def sql_first_id(table: str) -> int: + """#4270: the first GG-SQL-ID (PIC 9(4)) of the next program's statements in a task's shared table: the next + hundred after the ids already taken. A range per program by its place in "programs" (1000 x its index) ran past + 9999 at the tenth program (GenApp's LGTESTP1 LINKs twelve), and the id MOVEd into 9(4) lost its high digit.""" + ids = [int(ln.split()[1]) for ln in table.splitlines() if ln.startswith("S ")] + return (max(ids, default=0) // 100 + 1) * 100 + + RECOVER: dict[str, Any] = {} # #4173: a COBOL work area -> its coverage recomputed for the tasks judged @@ -1523,14 +1531,16 @@ def run_cobol_cics(case: dict[str, Any], corpus: Path, work: Path, files: list[d if not db2: raise Unsupported(f'{extra["program"]}: EXEC SQL in a case with no "db2" section') x_dirs = [corpus / d for d in [*case.get("copy_dirs", []), *db2.get("include_dirs", [])]] + stmts_file = work / "stmts.txt" + have = stmts_file.read_text(encoding="latin-1") + first = sql_first_id(have) try: x_source, x_table = equivalence_sql.precompile(x_source, x_dirs, corpus / extra["program_source"], - first_id=1000 * (len(linked) + 1), - program=extra["program"]) # fmt: skip + first_id=first, program=extra["program"]) # fmt: skip except equivalence_sql.Unsupported as e: raise Unsupported(f"{extra['program']}: EXEC SQL: {e}", ["EXEC SQL"]) from e - stmts_file = work / "stmts.txt" - have = stmts_file.read_text(encoding="latin-1") + if any(int(ln.split()[1]) > 9999 for ln in x_table.splitlines() if ln.startswith("S ")): + raise Unsupported(f"{extra['program']}: EXEC SQL: the task's statements outnumber GG-SQL-ID's 4 digits") ours = {ln.split()[5] for ln in have.splitlines() if ln.startswith("S ") and ln.split()[5] != "-"} theirs = {ln.split()[5] for ln in x_table.splitlines() if ln.startswith("S ") and ln.split()[5] != "-"} if ours & theirs: diff --git a/tests/tools/equivalence_common.py b/tests/tools/equivalence_common.py index 9e453657d..a8eadadcc 100644 --- a/tests/tools/equivalence_common.py +++ b/tests/tools/equivalence_common.py @@ -193,10 +193,12 @@ def stage_copybooks(case: dict[str, Any], corpus: Path, src: Path) -> None: """The case's copy_dirs into the GnuCOBOL source directory. A z/OS library member's name is upper-case and COPY names are not case-sensitive, so each file is also staged under its upper-case name: COPY COACTVW finds COACTVW.cpy, and COPY EPSNBRPM finds IBM DBB's lower-case epsnbrpm.cpy. A case whose screens name generated - symbolic maps (`@bms/...`) also gets them, after the estate's own copybooks (a member the estate ships wins).""" + symbolic maps (`@bms/...`) also gets them, after the estate's own copybooks (a member the estate ships wins). + A BMS map source (`.bms`, assembler macros) is no COPY member: GenApp keeps ssmap.bms beside its programs, and + staged as SSMAP.cpy it would shadow the generated symbolic map that `COPY SSMAP` means (#4270).""" for cpy in case.get("copy_dirs", []): for p in (corpus / cpy).iterdir(): - if p.is_file(): + if p.is_file() and p.suffix.lower() != ".bms": shutil.copy(p, src / p.name) shutil.copy(p, src / (p.stem.upper() + ".cpy")) if any(str(s.get("copybook", "")).startswith("@bms/") for s in (case.get("screens") or {}).values()): From a35058b1cc3dcf19a0dabd6a3884e136fb7ae5ac Mon Sep 17 00:00:00 2001 From: squid-protocol Date: Wed, 7 Oct 2026 18:24:37 -0400 Subject: [PATCH 2/3] equivalence: coverage ledger and evidence report for the GenApp front-end cases (#4270) Co-Authored-By: Claude Opus 5.5 --- .../evidence_report/cics-genapp/report.json | 1270 ++++++++++++++++- .../evidence_report/cics-genapp/report.md | 217 ++- tests/equivalence/det_sweep_coverage.json | 187 +++ 3 files changed, 1589 insertions(+), 85 deletions(-) diff --git a/docs/language_status/evidence_report/cics-genapp/report.json b/docs/language_status/evidence_report/cics-genapp/report.json index 03b3da1fc..2189f45b9 100644 --- a/docs/language_status/evidence_report/cics-genapp/report.json +++ b/docs/language_status/evidence_report/cics-genapp/report.json @@ -1366,6 +1366,19 @@ "record": null, "role": "linked" }, + { + "case": "genapp-lgacus01", + "case_scenarios": 5, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, { "case": "genapp-lgacvs01", "case_scenarios": 4, @@ -1629,6 +1642,19 @@ "record": null, "role": "linked" }, + { + "case": "genapp-lgapol01", + "case_scenarios": 6, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, { "case": "genapp-lgapvs01", "case_scenarios": 8, @@ -1677,6 +1703,58 @@ "verdict": "all equal" }, "role": "program" + }, + { + "case": "genapp-lgtestp1", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp2", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp3", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp4", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" } ], "chosen": { @@ -1949,6 +2027,19 @@ "record": null, "role": "linked" }, + { + "case": "genapp-lgdpol01", + "case_scenarios": 11, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, { "case": "genapp-lgdpvs01", "case_scenarios": 5, @@ -1959,6 +2050,58 @@ }, "record": null, "role": "program" + }, + { + "case": "genapp-lgtestp1", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp2", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp3", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp4", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" } ], "chosen": { @@ -2206,6 +2349,19 @@ "record": null, "role": "linked" }, + { + "case": "genapp-lgucus01", + "case_scenarios": 5, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, { "case": "genapp-lgucvs01", "case_scenarios": 5, @@ -2484,6 +2640,58 @@ }, "equivalence": { "cases": [ + { + "case": "genapp-lgtestp1", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp2", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp3", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp4", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, { "case": "genapp-lgupdb01", "case_scenarios": 5, @@ -2552,6 +2760,19 @@ }, "role": "linked" }, + { + "case": "genapp-lgupol01", + "case_scenarios": 10, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, { "case": "genapp-lgupvs01", "case_scenarios": 6, @@ -2831,6 +3052,19 @@ }, "record": null, "role": "program" + }, + { + "case": "genapp-lgacus01", + "case_scenarios": 5, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" } ], "chosen": { @@ -3100,6 +3334,19 @@ }, "record": null, "role": "program" + }, + { + "case": "genapp-lgacus01", + "case_scenarios": 5, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" } ], "chosen": { @@ -3334,15 +3581,41 @@ "uncovered_paragraphs": "not recorded" }, "equivalence": { - "cases": [], - "chosen": null + "cases": [ + { + "case": "genapp-lgacus01", + "case_scenarios": 5, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "program" + } + ], + "chosen": { + "case": "genapp-lgacus01", + "case_scenarios": 5, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "program" + } }, "level": "L1", "mutation": { "det_port": "not yet measured (#4628)" }, "next": [ - "an equivalence case that runs it" + "its det port equal on every scenario of genapp-lgacus01: a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" ], "oracle_backing": [ { @@ -3568,19 +3841,84 @@ }, "record": null, "role": "program" - } - ], - "chosen": { - "case": "genapp-lgapdb01", - "case_scenarios": 4, - "db2": true, - "det": { - "state": "not run", - "why": [ - "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" - ] }, - "record": null, + { + "case": "genapp-lgapol01", + "case_scenarios": 6, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp1", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp2", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp3", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp4", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + } + ], + "chosen": { + "case": "genapp-lgapdb01", + "case_scenarios": 4, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, "role": "program" } }, @@ -3802,15 +4140,93 @@ "uncovered_paragraphs": "not recorded" }, "equivalence": { - "cases": [], - "chosen": null + "cases": [ + { + "case": "genapp-lgapol01", + "case_scenarios": 6, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "program" + }, + { + "case": "genapp-lgtestp1", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp2", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp3", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp4", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + } + ], + "chosen": { + "case": "genapp-lgapol01", + "case_scenarios": 6, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "program" + } }, "level": "L1", "mutation": { "det_port": "not yet measured (#4628)" }, "next": [ - "an equivalence case that runs it" + "its det port equal on every scenario of genapp-lgapol01: a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" ], "oracle_backing": [ { @@ -4036,6 +4452,71 @@ }, "record": null, "role": "program" + }, + { + "case": "genapp-lgdpol01", + "case_scenarios": 11, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp1", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp2", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp3", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp4", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" } ], "chosen": { @@ -4270,15 +4751,93 @@ "uncovered_paragraphs": "not recorded" }, "equivalence": { - "cases": [], - "chosen": null + "cases": [ + { + "case": "genapp-lgdpol01", + "case_scenarios": 11, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "program" + }, + { + "case": "genapp-lgtestp1", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp2", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp3", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp4", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + } + ], + "chosen": { + "case": "genapp-lgdpol01", + "case_scenarios": 11, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "program" + } }, "level": "L1", "mutation": { "det_port": "not yet measured (#4628)" }, "next": [ - "an equivalence case that runs it" + "its det port equal on every scenario of genapp-lgdpol01: a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" ], "oracle_backing": [ { @@ -4546,6 +5105,19 @@ "verdict": "all equal" }, "role": "program" + }, + { + "case": "genapp-lgicus01", + "case_scenarios": 5, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" } ], "chosen": { @@ -4822,15 +5394,41 @@ "uncovered_paragraphs": "not recorded" }, "equivalence": { - "cases": [], - "chosen": null + "cases": [ + { + "case": "genapp-lgicus01", + "case_scenarios": 5, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "program" + } + ], + "chosen": { + "case": "genapp-lgicus01", + "case_scenarios": 5, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "program" + } }, "level": "L1", "mutation": { "det_port": "not yet measured (#4628)" }, "next": [ - "an equivalence case that runs it" + "its det port equal on every scenario of genapp-lgicus01: a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" ], "oracle_backing": [ { @@ -5045,8 +5643,34 @@ "equivalence": { "cases": [ { - "case": "genapp-lgipdb01", - "case_scenarios": 46, + "case": "genapp-lgipdb01", + "case_scenarios": 46, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "program" + }, + { + "case": "genapp-lgipol01", + "case_scenarios": 10, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp1", + "case_scenarios": 15, "db2": true, "det": { "state": "not run", @@ -5055,7 +5679,46 @@ ] }, "record": null, - "role": "program" + "role": "linked" + }, + { + "case": "genapp-lgtestp2", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp3", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp4", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" } ], "chosen": { @@ -5290,15 +5953,93 @@ "uncovered_paragraphs": "not recorded" }, "equivalence": { - "cases": [], - "chosen": null + "cases": [ + { + "case": "genapp-lgipol01", + "case_scenarios": 10, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "program" + }, + { + "case": "genapp-lgtestp1", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp2", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp3", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp4", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + } + ], + "chosen": { + "case": "genapp-lgipol01", + "case_scenarios": 10, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "program" + } }, "level": "L1", "mutation": { "det_port": "not yet measured (#4628)" }, "next": [ - "an equivalence case that runs it" + "its det port equal on every scenario of genapp-lgipol01: a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" ], "oracle_backing": [ { @@ -5560,6 +6301,32 @@ "record": null, "role": "linked" }, + { + "case": "genapp-lgacus01", + "case_scenarios": 5, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgapol01", + "case_scenarios": 6, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, { "case": "genapp-lgdpdb01", "case_scenarios": 11, @@ -5573,6 +6340,32 @@ "record": null, "role": "linked" }, + { + "case": "genapp-lgdpol01", + "case_scenarios": 11, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgicus01", + "case_scenarios": 5, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, { "case": "genapp-lgipdb01", "case_scenarios": 46, @@ -5586,6 +6379,71 @@ "record": null, "role": "linked" }, + { + "case": "genapp-lgipol01", + "case_scenarios": 10, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp1", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp2", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp3", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp4", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, { "case": "genapp-lgucdb01", "case_scenarios": 6, @@ -5598,6 +6456,32 @@ }, "record": null, "role": "linked" + }, + { + "case": "genapp-lgucus01", + "case_scenarios": 5, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgupol01", + "case_scenarios": 10, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" } ], "chosen": { @@ -6027,15 +6911,41 @@ "uncovered_paragraphs": "not recorded" }, "equivalence": { - "cases": [], - "chosen": null + "cases": [ + { + "case": "genapp-lgtestp1", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "program" + } + ], + "chosen": { + "case": "genapp-lgtestp1", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "program" + } }, "level": "L1", "mutation": { "det_port": "not yet measured (#4628)" }, "next": [ - "an equivalence case that runs it" + "its det port equal on every scenario of genapp-lgtestp1: a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" ], "oracle_backing": [ { @@ -6450,15 +7360,41 @@ "uncovered_paragraphs": "not recorded" }, "equivalence": { - "cases": [], - "chosen": null + "cases": [ + { + "case": "genapp-lgtestp2", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "program" + } + ], + "chosen": { + "case": "genapp-lgtestp2", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "program" + } }, "level": "L1", "mutation": { "det_port": "not yet measured (#4628)" }, "next": [ - "an equivalence case that runs it" + "its det port equal on every scenario of genapp-lgtestp2: a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" ], "oracle_backing": [ { @@ -6873,15 +7809,41 @@ "uncovered_paragraphs": "not recorded" }, "equivalence": { - "cases": [], - "chosen": null + "cases": [ + { + "case": "genapp-lgtestp3", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "program" + } + ], + "chosen": { + "case": "genapp-lgtestp3", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "program" + } }, "level": "L1", "mutation": { "det_port": "not yet measured (#4628)" }, "next": [ - "an equivalence case that runs it" + "its det port equal on every scenario of genapp-lgtestp3: a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" ], "oracle_backing": [ { @@ -7296,15 +8258,41 @@ "uncovered_paragraphs": "not recorded" }, "equivalence": { - "cases": [], - "chosen": null + "cases": [ + { + "case": "genapp-lgtestp4", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "program" + } + ], + "chosen": { + "case": "genapp-lgtestp4", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "program" + } }, "level": "L1", "mutation": { "det_port": "not yet measured (#4628)" }, "next": [ - "an equivalence case that runs it" + "its det port equal on every scenario of genapp-lgtestp4: a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" ], "oracle_backing": [ { @@ -7715,6 +8703,19 @@ }, "record": null, "role": "program" + }, + { + "case": "genapp-lgucus01", + "case_scenarios": 5, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" } ], "chosen": { @@ -7949,15 +8950,41 @@ "uncovered_paragraphs": "not recorded" }, "equivalence": { - "cases": [], - "chosen": null + "cases": [ + { + "case": "genapp-lgucus01", + "case_scenarios": 5, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "program" + } + ], + "chosen": { + "case": "genapp-lgucus01", + "case_scenarios": 5, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "program" + } }, "level": "L1", "mutation": { "det_port": "not yet measured (#4628)" }, "next": [ - "an equivalence case that runs it" + "its det port equal on every scenario of genapp-lgucus01: a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" ], "oracle_backing": [ { @@ -8178,6 +9205,58 @@ }, "equivalence": { "cases": [ + { + "case": "genapp-lgtestp1", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp2", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp3", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp4", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, { "case": "genapp-lgupdb01", "case_scenarios": 5, @@ -8245,6 +9324,19 @@ "verdict": "all equal" }, "role": "program" + }, + { + "case": "genapp-lgupol01", + "case_scenarios": 10, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" } ], "chosen": { @@ -8545,15 +9637,93 @@ "uncovered_paragraphs": "not recorded" }, "equivalence": { - "cases": [], - "chosen": null + "cases": [ + { + "case": "genapp-lgtestp1", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp2", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp3", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgtestp4", + "case_scenarios": 15, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "linked" + }, + { + "case": "genapp-lgupol01", + "case_scenarios": 10, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "program" + } + ], + "chosen": { + "case": "genapp-lgupol01", + "case_scenarios": 10, + "db2": true, + "det": { + "state": "not run", + "why": [ + "a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" + ] + }, + "record": null, + "role": "program" + } }, "level": "L1", "mutation": { "det_port": "not yet measured (#4628)" }, "next": [ - "an equivalence case that runs it" + "its det port equal on every scenario of genapp-lgupol01: a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given" ], "oracle_backing": [ { @@ -11196,7 +12366,7 @@ "python tests/tools/cics_census.py survey --baseline --sha 3bcbb8c62397b338307563c40618297d54c38100", "python tests/tools/evidence_report.py cics-genapp --baseline --sha 3bcbb8c62397b338307563c40618297d54c38100", "python tests/tools/evidence_report.py --refresh", - "python tests/tools/proof_sweep.py --det-only --work DIR --cases genapp-lgacdb01,genapp-lgacdb02,genapp-lgacvs01,genapp-lgapdb01,genapp-lgapvs01,genapp-lgdpdb01,genapp-lgdpvs01,genapp-lgicdb01,genapp-lgicvs01,genapp-lgipdb01,genapp-lgucdb01,genapp-lgucvs01,genapp-lgupdb01,genapp-lgupvs01 # Db2 cases (8) need the Db2 container", + "python tests/tools/proof_sweep.py --det-only --work DIR --cases genapp-lgacdb01,genapp-lgacdb02,genapp-lgacus01,genapp-lgacvs01,genapp-lgapdb01,genapp-lgapol01,genapp-lgapvs01,genapp-lgdpdb01,genapp-lgdpol01,genapp-lgdpvs01,genapp-lgicdb01,genapp-lgicus01,genapp-lgicvs01,genapp-lgipdb01,genapp-lgipol01,genapp-lgtestp1,genapp-lgtestp2,genapp-lgtestp3,genapp-lgtestp4,genapp-lgucdb01,genapp-lgucus01,genapp-lgucvs01,genapp-lgupdb01,genapp-lgupol01,genapp-lgupvs01 # Db2 cases (19) need the Db2 container", "python tests/tools/evidence.py prove genapp-lgapvs01 genapp-lgicdb01 genapp-lgupdb01", "python tests/tools/cics_crucible.py # the hand-traced CICS cases, at the crucible pin" ], @@ -11240,7 +12410,7 @@ "refused_whole": 0, "source_unread": 0, "translated_whole": 25, - "with_case": 15, + "with_case": 26, "with_record": 3 } } diff --git a/docs/language_status/evidence_report/cics-genapp/report.md b/docs/language_status/evidence_report/cics-genapp/report.md index feceb52b7..ef5cf34c8 100644 --- a/docs/language_status/evidence_report/cics-genapp/report.md +++ b/docs/language_status/evidence_report/cics-genapp/report.md @@ -43,7 +43,7 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 - programs: 31 (with an EXEC CICS command: 31; source not read: 0) - translated whole: 25; refused whole: 0; holes left: 123 -- with an equivalence case: 15; det port equal on its case: 6; with an evidence record: 3; record current at build: 0 +- with an equivalence case: 26; det port equal on its case: 6; with an evidence record: 3; record current at build: 0 ## Programs @@ -56,24 +56,24 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 | base/src/lgupvs01.cbl | L2 | 55/55 | 0 | genapp-lgupvs01 | equal | 6 | none | not measured | not measured | not measured | not yet measured (#4628) | 3/7 | | base/src/lgacdb01.cbl | L1 | 61/61 | 0 | genapp-lgacdb01 | not run | 6 | none | not measured | not measured | not measured | not yet measured (#4628) | 3/6 | | base/src/lgacdb02.cbl | L1 | 39/39 | 0 | genapp-lgacdb02 | not run | 10 | none | not measured | not measured | not measured | not yet measured (#4628) | 3/5 | -| base/src/lgacus01.cbl | L1 | 34/34 | 0 | — | — | — | — | not measured | not measured | not measured | not yet measured (#4628) | 3/5 | +| base/src/lgacus01.cbl | L1 | 34/34 | 0 | genapp-lgacus01 | not run | 5 | none | not measured | not measured | not measured | not yet measured (#4628) | 3/5 | | base/src/lgapdb01.cbl | L1 | 124/124 | 0 | genapp-lgapdb01 | not run | 4 | none | not measured | not measured | not measured | not yet measured (#4628) | 3/5 | -| base/src/lgapol01.cbl | L1 | 30/30 | 0 | — | — | — | — | not measured | not measured | not measured | not yet measured (#4628) | 3/5 | +| base/src/lgapol01.cbl | L1 | 30/30 | 0 | genapp-lgapol01 | not run | 6 | none | not measured | not measured | not measured | not yet measured (#4628) | 3/5 | | base/src/lgdpdb01.cbl | L1 | 45/45 | 0 | genapp-lgdpdb01 | not run | 11 | none | not measured | not measured | not measured | not yet measured (#4628) | 3/5 | -| base/src/lgdpol01.cbl | L1 | 36/36 | 0 | — | — | — | — | not measured | not measured | not measured | not yet measured (#4628) | 3/5 | +| base/src/lgdpol01.cbl | L1 | 36/36 | 0 | genapp-lgdpol01 | not run | 11 | none | not measured | not measured | not measured | not yet measured (#4628) | 3/5 | | base/src/lgicdb01.cbl | L1 | 44/44 | 0 | genapp-lgicdb01 | not run | 12 | stale | not measured | not measured | not measured | not yet measured (#4628) | 3/5 | -| base/src/lgicus01.cbl | L1 | 34/34 | 0 | — | — | — | — | not measured | not measured | not measured | not yet measured (#4628) | 3/5 | +| base/src/lgicus01.cbl | L1 | 34/34 | 0 | genapp-lgicus01 | not run | 5 | none | not measured | not measured | not measured | not yet measured (#4628) | 3/5 | | base/src/lgipdb01.cbl | L1 | 238/238 | 0 | genapp-lgipdb01 | not run | 46 | none | not measured | not measured | not measured | not yet measured (#4628) | 3/5 | -| base/src/lgipol01.cbl | L1 | 26/26 | 0 | — | — | — | — | not measured | not measured | not measured | not yet measured (#4628) | 3/5 | +| base/src/lgipol01.cbl | L1 | 26/26 | 0 | genapp-lgipol01 | not run | 10 | none | not measured | not measured | not measured | not yet measured (#4628) | 3/5 | | base/src/lgstsq.cbl | L1 | 26/26 | 0 | genapp-lgacdb01 | not run | 6 | none | not measured | not measured | not measured | not yet measured (#4628) | 5/6 | -| base/src/lgtestp1.cbl | L1 | 152/152 | 0 | — | — | — | — | not measured | not measured | not measured | not yet measured (#4628) | 7/8 | -| base/src/lgtestp2.cbl | L1 | 140/140 | 0 | — | — | — | — | not measured | not measured | not measured | not yet measured (#4628) | 7/8 | -| base/src/lgtestp3.cbl | L1 | 137/137 | 0 | — | — | — | — | not measured | not measured | not measured | not yet measured (#4628) | 7/8 | -| base/src/lgtestp4.cbl | L1 | 144/144 | 0 | — | — | — | — | not measured | not measured | not measured | not yet measured (#4628) | 7/8 | +| base/src/lgtestp1.cbl | L1 | 152/152 | 0 | genapp-lgtestp1 | not run | 15 | none | not measured | not measured | not measured | not yet measured (#4628) | 7/8 | +| base/src/lgtestp2.cbl | L1 | 140/140 | 0 | genapp-lgtestp2 | not run | 15 | none | not measured | not measured | not measured | not yet measured (#4628) | 7/8 | +| base/src/lgtestp3.cbl | L1 | 137/137 | 0 | genapp-lgtestp3 | not run | 15 | none | not measured | not measured | not measured | not yet measured (#4628) | 7/8 | +| base/src/lgtestp4.cbl | L1 | 144/144 | 0 | genapp-lgtestp4 | not run | 15 | none | not measured | not measured | not measured | not yet measured (#4628) | 7/8 | | base/src/lgucdb01.cbl | L1 | 39/39 | 0 | genapp-lgucdb01 | not run | 6 | none | not measured | not measured | not measured | not yet measured (#4628) | 3/5 | -| base/src/lgucus01.cbl | L1 | 32/32 | 0 | — | — | — | — | not measured | not measured | not measured | not yet measured (#4628) | 3/5 | +| base/src/lgucus01.cbl | L1 | 32/32 | 0 | genapp-lgucus01 | not run | 5 | none | not measured | not measured | not measured | not yet measured (#4628) | 3/5 | | base/src/lgupdb01.cbl | L1 | 116/116 | 0 | genapp-lgupdb01 | not run | 5 | stale | not measured | not measured | not measured | not yet measured (#4628) | 3/6 | -| base/src/lgupol01.cbl | L1 | 45/45 | 0 | — | — | — | — | not measured | not measured | not measured | not yet measured (#4628) | 3/5 | +| base/src/lgupol01.cbl | L1 | 45/45 | 0 | genapp-lgupol01 | not run | 10 | none | not measured | not measured | not measured | not yet measured (#4628) | 3/5 | | base/src/lgastat1.cbl | L0 | 29/30 | 1 | — | — | — | — | not measured | not measured | not measured | not yet measured (#4628) | 3/7 | | base/src/lgicvs01.cbl | L0 | 50/51 | 1 | genapp-lgicvs01 | equal | 4 | none | not measured | not measured | not measured | not yet measured (#4628) | 6/9 | | base/src/lgipvs01.cbl | L0 | 30/31 | 1 | — | — | — | — | not measured | not measured | not measured | not yet measured (#4628) | 4/5 | @@ -90,6 +90,8 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 - **Translation:** 25/25 statements, 0 holes; whole: yes - **Executed equivalence** (genapp-lgacdb01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) - evidence record: none (6 scenarios in case.json) +- **Executed equivalence** (genapp-lgacus01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (5 scenarios in case.json) - **Executed equivalence** (genapp-lgacvs01, program, the case this report judges): det port equal (CI det-sweep ratchet on main) - evidence record: none (4 scenarios in case.json) - **Coverage:** not measured @@ -115,8 +117,18 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 - **Translation:** 47/47 statements, 0 holes; whole: yes - **Executed equivalence** (genapp-lgapdb01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) - evidence record: none (4 scenarios in case.json) +- **Executed equivalence** (genapp-lgapol01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (6 scenarios in case.json) - **Executed equivalence** (genapp-lgapvs01, program, the case this report judges): det port equal (CI det-sweep ratchet on main) - evidence record (the case's committed port): stale (stale on harness, oracle, generator); its proof: all equal, 8/8 scenarios equal, 16/16 records equal, 8 runs (0 fault runs); through its deployed entry points 8/8 +- **Executed equivalence** (genapp-lgtestp1, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp2, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp3, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp4, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) - **Coverage:** not measured - **Oracle backing** (a column, not a level; per CICS command; DIFFERS assumptions reached: not measured): @@ -139,8 +151,18 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 - **Translation:** 28/28 statements, 0 holes; whole: yes - **Executed equivalence** (genapp-lgdpdb01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) - evidence record: none (11 scenarios in case.json) +- **Executed equivalence** (genapp-lgdpol01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (11 scenarios in case.json) - **Executed equivalence** (genapp-lgdpvs01, program, the case this report judges): det port equal (CI det-sweep ratchet on main) - evidence record: none (5 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp1, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp2, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp3, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp4, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) - **Coverage:** not measured - **Oracle backing** (a column, not a level; per CICS command; DIFFERS assumptions reached: not measured): @@ -163,6 +185,8 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 - **Translation:** 32/32 statements, 0 holes; whole: yes - **Executed equivalence** (genapp-lgucdb01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) - evidence record: none (6 scenarios in case.json) +- **Executed equivalence** (genapp-lgucus01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (5 scenarios in case.json) - **Executed equivalence** (genapp-lgucvs01, program, the case this report judges): det port equal (CI det-sweep ratchet on main) - evidence record: none (5 scenarios in case.json) - **Coverage:** not measured @@ -187,8 +211,18 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 - **Executed equivalent** on the 6 scenarios of genapp-lgupvs01 against GnuCOBOL + the gitgalaxy CICS stub (det port: CI det-sweep ratchet on main), given the assumptions below - **Next level needs:** paragraph coverage >= 100.0 (coverage not measured: no fresh det-sweep ledger entry and no local sweep) - **Translation:** 55/55 statements, 0 holes; whole: yes +- **Executed equivalence** (genapp-lgtestp1, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp2, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp3, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp4, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) - **Executed equivalence** (genapp-lgupdb01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) - evidence record (the case's committed port): stale (stale on harness, oracle, generator); its proof: all equal, 5/5 scenarios equal, 18/18 records equal, 5 runs (0 fault runs); through its deployed entry points 5/5 +- **Executed equivalence** (genapp-lgupol01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (10 scenarios in case.json) - **Executed equivalence** (genapp-lgupvs01, program, the case this report judges): det port equal (CI det-sweep ratchet on main) - evidence record: none (6 scenarios in case.json) - **Coverage:** not measured @@ -214,6 +248,8 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 - **Translation:** 61/61 statements, 0 holes; whole: yes - **Executed equivalence** (genapp-lgacdb01, program, Db2, the case this report judges): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) - evidence record: none (6 scenarios in case.json) +- **Executed equivalence** (genapp-lgacus01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (5 scenarios in case.json) - **Coverage:** not measured - **Oracle backing** (a column, not a level; per CICS command; DIFFERS assumptions reached: not measured): @@ -239,6 +275,8 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 - evidence record: none (6 scenarios in case.json) - **Executed equivalence** (genapp-lgacdb02, program, Db2, the case this report judges): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) - evidence record: none (10 scenarios in case.json) +- **Executed equivalence** (genapp-lgacus01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (5 scenarios in case.json) - **Coverage:** not measured - **Oracle backing** (a column, not a level; per CICS command; DIFFERS assumptions reached: not measured): @@ -257,9 +295,10 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 ### base/src/lgacus01.cbl -- L1 -- **Next level needs:** an equivalence case that runs it +- **Next level needs:** its det port equal on every scenario of genapp-lgacus01: a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given - **Translation:** 34/34 statements, 0 holes; whole: yes -- **Executed equivalence:** no equivalence case runs it +- **Executed equivalence** (genapp-lgacus01, program, Db2, the case this report judges): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (5 scenarios in case.json) - **Coverage:** not measured - **Oracle backing** (a column, not a level; per CICS command; DIFFERS assumptions reached: not measured): @@ -282,6 +321,16 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 - **Translation:** 124/124 statements, 0 holes; whole: yes - **Executed equivalence** (genapp-lgapdb01, program, Db2, the case this report judges): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) - evidence record: none (4 scenarios in case.json) +- **Executed equivalence** (genapp-lgapol01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (6 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp1, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp2, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp3, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp4, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) - **Coverage:** not measured - **Oracle backing** (a column, not a level; per CICS command; DIFFERS assumptions reached: not measured): @@ -300,9 +349,18 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 ### base/src/lgapol01.cbl -- L1 -- **Next level needs:** an equivalence case that runs it +- **Next level needs:** its det port equal on every scenario of genapp-lgapol01: a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given - **Translation:** 30/30 statements, 0 holes; whole: yes -- **Executed equivalence:** no equivalence case runs it +- **Executed equivalence** (genapp-lgapol01, program, Db2, the case this report judges): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (6 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp1, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp2, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp3, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp4, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) - **Coverage:** not measured - **Oracle backing** (a column, not a level; per CICS command; DIFFERS assumptions reached: not measured): @@ -325,6 +383,16 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 - **Translation:** 45/45 statements, 0 holes; whole: yes - **Executed equivalence** (genapp-lgdpdb01, program, Db2, the case this report judges): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) - evidence record: none (11 scenarios in case.json) +- **Executed equivalence** (genapp-lgdpol01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (11 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp1, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp2, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp3, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp4, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) - **Coverage:** not measured - **Oracle backing** (a column, not a level; per CICS command; DIFFERS assumptions reached: not measured): @@ -343,9 +411,18 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 ### base/src/lgdpol01.cbl -- L1 -- **Next level needs:** an equivalence case that runs it +- **Next level needs:** its det port equal on every scenario of genapp-lgdpol01: a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given - **Translation:** 36/36 statements, 0 holes; whole: yes -- **Executed equivalence:** no equivalence case runs it +- **Executed equivalence** (genapp-lgdpol01, program, Db2, the case this report judges): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (11 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp1, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp2, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp3, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp4, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) - **Coverage:** not measured - **Oracle backing** (a column, not a level; per CICS command; DIFFERS assumptions reached: not measured): @@ -368,6 +445,8 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 - **Translation:** 44/44 statements, 0 holes; whole: yes - **Executed equivalence** (genapp-lgicdb01, program, Db2, the case this report judges): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) - evidence record (the case's committed port): stale (stale on harness, oracle, generator); its proof: all equal, 12/12 scenarios equal, 24/24 records equal, 12 runs (0 fault runs); through its deployed entry points 12/12 +- **Executed equivalence** (genapp-lgicus01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (5 scenarios in case.json) - **Coverage:** not measured - **Oracle backing** (a column, not a level; per CICS command; DIFFERS assumptions reached: not measured): @@ -386,9 +465,10 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 ### base/src/lgicus01.cbl -- L1 -- **Next level needs:** an equivalence case that runs it +- **Next level needs:** its det port equal on every scenario of genapp-lgicus01: a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given - **Translation:** 34/34 statements, 0 holes; whole: yes -- **Executed equivalence:** no equivalence case runs it +- **Executed equivalence** (genapp-lgicus01, program, Db2, the case this report judges): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (5 scenarios in case.json) - **Coverage:** not measured - **Oracle backing** (a column, not a level; per CICS command; DIFFERS assumptions reached: not measured): @@ -411,6 +491,16 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 - **Translation:** 238/238 statements, 0 holes; whole: yes - **Executed equivalence** (genapp-lgipdb01, program, Db2, the case this report judges): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) - evidence record: none (46 scenarios in case.json) +- **Executed equivalence** (genapp-lgipol01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (10 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp1, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp2, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp3, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp4, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) - **Coverage:** not measured - **Oracle backing** (a column, not a level; per CICS command; DIFFERS assumptions reached: not measured): @@ -429,9 +519,18 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 ### base/src/lgipol01.cbl -- L1 -- **Next level needs:** an equivalence case that runs it +- **Next level needs:** its det port equal on every scenario of genapp-lgipol01: a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given - **Translation:** 26/26 statements, 0 holes; whole: yes -- **Executed equivalence:** no equivalence case runs it +- **Executed equivalence** (genapp-lgipol01, program, Db2, the case this report judges): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (10 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp1, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp2, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp3, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp4, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) - **Coverage:** not measured - **Oracle backing** (a column, not a level; per CICS command; DIFFERS assumptions reached: not measured): @@ -456,12 +555,34 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 - evidence record: none (6 scenarios in case.json) - **Executed equivalence** (genapp-lgacdb02, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) - evidence record: none (10 scenarios in case.json) +- **Executed equivalence** (genapp-lgacus01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (5 scenarios in case.json) +- **Executed equivalence** (genapp-lgapol01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (6 scenarios in case.json) - **Executed equivalence** (genapp-lgdpdb01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) - evidence record: none (11 scenarios in case.json) +- **Executed equivalence** (genapp-lgdpol01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (11 scenarios in case.json) +- **Executed equivalence** (genapp-lgicus01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (5 scenarios in case.json) - **Executed equivalence** (genapp-lgipdb01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) - evidence record: none (46 scenarios in case.json) +- **Executed equivalence** (genapp-lgipol01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (10 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp1, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp2, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp3, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp4, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) - **Executed equivalence** (genapp-lgucdb01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) - evidence record: none (6 scenarios in case.json) +- **Executed equivalence** (genapp-lgucus01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (5 scenarios in case.json) +- **Executed equivalence** (genapp-lgupol01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (10 scenarios in case.json) - **Coverage:** not measured - **Oracle backing** (a column, not a level; per CICS command; DIFFERS assumptions reached: not measured): @@ -481,9 +602,10 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 ### base/src/lgtestp1.cbl -- L1 -- **Next level needs:** an equivalence case that runs it +- **Next level needs:** its det port equal on every scenario of genapp-lgtestp1: a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given - **Translation:** 152/152 statements, 0 holes; whole: yes -- **Executed equivalence:** no equivalence case runs it +- **Executed equivalence** (genapp-lgtestp1, program, Db2, the case this report judges): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) - **Coverage:** not measured - **Oracle backing** (a column, not a level; per CICS command; DIFFERS assumptions reached: not measured): @@ -504,9 +626,10 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 ### base/src/lgtestp2.cbl -- L1 -- **Next level needs:** an equivalence case that runs it +- **Next level needs:** its det port equal on every scenario of genapp-lgtestp2: a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given - **Translation:** 140/140 statements, 0 holes; whole: yes -- **Executed equivalence:** no equivalence case runs it +- **Executed equivalence** (genapp-lgtestp2, program, Db2, the case this report judges): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) - **Coverage:** not measured - **Oracle backing** (a column, not a level; per CICS command; DIFFERS assumptions reached: not measured): @@ -527,9 +650,10 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 ### base/src/lgtestp3.cbl -- L1 -- **Next level needs:** an equivalence case that runs it +- **Next level needs:** its det port equal on every scenario of genapp-lgtestp3: a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given - **Translation:** 137/137 statements, 0 holes; whole: yes -- **Executed equivalence:** no equivalence case runs it +- **Executed equivalence** (genapp-lgtestp3, program, Db2, the case this report judges): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) - **Coverage:** not measured - **Oracle backing** (a column, not a level; per CICS command; DIFFERS assumptions reached: not measured): @@ -550,9 +674,10 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 ### base/src/lgtestp4.cbl -- L1 -- **Next level needs:** an equivalence case that runs it +- **Next level needs:** its det port equal on every scenario of genapp-lgtestp4: a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given - **Translation:** 144/144 statements, 0 holes; whole: yes -- **Executed equivalence:** no equivalence case runs it +- **Executed equivalence** (genapp-lgtestp4, program, Db2, the case this report judges): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) - **Coverage:** not measured - **Oracle backing** (a column, not a level; per CICS command; DIFFERS assumptions reached: not measured): @@ -577,6 +702,8 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 - **Translation:** 39/39 statements, 0 holes; whole: yes - **Executed equivalence** (genapp-lgucdb01, program, Db2, the case this report judges): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) - evidence record: none (6 scenarios in case.json) +- **Executed equivalence** (genapp-lgucus01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (5 scenarios in case.json) - **Coverage:** not measured - **Oracle backing** (a column, not a level; per CICS command; DIFFERS assumptions reached: not measured): @@ -595,9 +722,10 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 ### base/src/lgucus01.cbl -- L1 -- **Next level needs:** an equivalence case that runs it +- **Next level needs:** its det port equal on every scenario of genapp-lgucus01: a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given - **Translation:** 32/32 statements, 0 holes; whole: yes -- **Executed equivalence:** no equivalence case runs it +- **Executed equivalence** (genapp-lgucus01, program, Db2, the case this report judges): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (5 scenarios in case.json) - **Coverage:** not measured - **Oracle backing** (a column, not a level; per CICS command; DIFFERS assumptions reached: not measured): @@ -618,8 +746,18 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 - **Next level needs:** its det port equal on every scenario of genapp-lgupdb01: a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given - **Translation:** 116/116 statements, 0 holes; whole: yes +- **Executed equivalence** (genapp-lgtestp1, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp2, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp3, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp4, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) - **Executed equivalence** (genapp-lgupdb01, program, Db2, the case this report judges): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) - evidence record (the case's committed port): stale (stale on harness, oracle, generator); its proof: all equal, 5/5 scenarios equal, 18/18 records equal, 5 runs (0 fault runs); through its deployed entry points 5/5 +- **Executed equivalence** (genapp-lgupol01, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (10 scenarios in case.json) - **Coverage:** not measured - **Oracle backing** (a column, not a level; per CICS command; DIFFERS assumptions reached: not measured): @@ -639,9 +777,18 @@ Translation measured by `cics_census.py survey` at translator commit `3bcbb8c623 ### base/src/lgupol01.cbl -- L1 -- **Next level needs:** an equivalence case that runs it +- **Next level needs:** its det port equal on every scenario of genapp-lgupol01: a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given - **Translation:** 45/45 statements, 0 holes; whole: yes -- **Executed equivalence:** no equivalence case runs it +- **Executed equivalence** (genapp-lgtestp1, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp2, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp3, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgtestp4, linked, Db2): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (15 scenarios in case.json) +- **Executed equivalence** (genapp-lgupol01, program, Db2, the case this report judges): det port not run (a Db2 case: CI's det-sweep skips Db2 cases and no local sweep was given) + - evidence record: none (10 scenarios in case.json) - **Coverage:** not measured - **Oracle backing** (a column, not a level; per CICS command; DIFFERS assumptions reached: not measured): @@ -850,7 +997,7 @@ Regenerate this report and re-run its proofs: python tests/tools/cics_census.py survey --baseline --sha 3bcbb8c62397b338307563c40618297d54c38100 python tests/tools/evidence_report.py cics-genapp --baseline --sha 3bcbb8c62397b338307563c40618297d54c38100 python tests/tools/evidence_report.py --refresh -python tests/tools/proof_sweep.py --det-only --work DIR --cases genapp-lgacdb01,genapp-lgacdb02,genapp-lgacvs01,genapp-lgapdb01,genapp-lgapvs01,genapp-lgdpdb01,genapp-lgdpvs01,genapp-lgicdb01,genapp-lgicvs01,genapp-lgipdb01,genapp-lgucdb01,genapp-lgucvs01,genapp-lgupdb01,genapp-lgupvs01 # Db2 cases (8) need the Db2 container +python tests/tools/proof_sweep.py --det-only --work DIR --cases genapp-lgacdb01,genapp-lgacdb02,genapp-lgacus01,genapp-lgacvs01,genapp-lgapdb01,genapp-lgapol01,genapp-lgapvs01,genapp-lgdpdb01,genapp-lgdpol01,genapp-lgdpvs01,genapp-lgicdb01,genapp-lgicus01,genapp-lgicvs01,genapp-lgipdb01,genapp-lgipol01,genapp-lgtestp1,genapp-lgtestp2,genapp-lgtestp3,genapp-lgtestp4,genapp-lgucdb01,genapp-lgucus01,genapp-lgucvs01,genapp-lgupdb01,genapp-lgupol01,genapp-lgupvs01 # Db2 cases (19) need the Db2 container python tests/tools/evidence.py prove genapp-lgapvs01 genapp-lgicdb01 genapp-lgupdb01 python tests/tools/cics_crucible.py # the hand-traced CICS cases, at the crucible pin ``` diff --git a/tests/equivalence/det_sweep_coverage.json b/tests/equivalence/det_sweep_coverage.json index ff8cf4459..99fd87e5d 100644 --- a/tests/equivalence/det_sweep_coverage.json +++ b/tests/equivalence/det_sweep_coverage.json @@ -648,6 +648,23 @@ "oracle": "812e95beccb670c5b2c432f18ec0c4656c1857c4c69d13aa88b1224635c58ab9" } }, + "genapp-lgacus01": { + "scenarios": 8, + "paragraphs": { + "covered": 3, + "live": 3 + }, + "branches": { + "covered": 4, + "total": 8 + }, + "inputs": { + "case": "3ca0c670a530b01f7f2f0018df4b4c95412ffff6e96260e796b6cefbc6cadac9", + "corpus": "c5e4d52071fad96bed24e9ba06f30417340bfc5e998e7c1cd5f2383be73d6ff6", + "harness": "8e1a37f41a49d303e5dbc03582896a74b8be5d5b4c4c1bb59b64ace818f7a4fb", + "oracle": "50428237857791301984d778088fcd587c5af1e3b39ca83702e0c60c6a86c124" + } + }, "genapp-lgacvs01": { "scenarios": 4, "paragraphs": { @@ -682,6 +699,23 @@ "oracle": "812e95beccb670c5b2c432f18ec0c4656c1857c4c69d13aa88b1224635c58ab9" } }, + "genapp-lgapol01": { + "scenarios": 11, + "paragraphs": { + "covered": 2, + "live": 2 + }, + "branches": { + "covered": 5, + "total": 8 + }, + "inputs": { + "case": "ffc47517d1d74e993655996224e0b849723352d24c4dfd1599a6654ea5a26e37", + "corpus": "c5e4d52071fad96bed24e9ba06f30417340bfc5e998e7c1cd5f2383be73d6ff6", + "harness": "8e1a37f41a49d303e5dbc03582896a74b8be5d5b4c4c1bb59b64ace818f7a4fb", + "oracle": "50428237857791301984d778088fcd587c5af1e3b39ca83702e0c60c6a86c124" + } + }, "genapp-lgapvs01": { "scenarios": 8, "paragraphs": { @@ -716,6 +750,23 @@ "oracle": "812e95beccb670c5b2c432f18ec0c4656c1857c4c69d13aa88b1224635c58ab9" } }, + "genapp-lgdpol01": { + "scenarios": 12, + "paragraphs": { + "covered": 3, + "live": 3 + }, + "branches": { + "covered": 8, + "total": 12 + }, + "inputs": { + "case": "67788f130859e7133e38afd28040067b4991bd82dd85899af68c5f83ddd087f4", + "corpus": "c5e4d52071fad96bed24e9ba06f30417340bfc5e998e7c1cd5f2383be73d6ff6", + "harness": "8e1a37f41a49d303e5dbc03582896a74b8be5d5b4c4c1bb59b64ace818f7a4fb", + "oracle": "50428237857791301984d778088fcd587c5af1e3b39ca83702e0c60c6a86c124" + } + }, "genapp-lgdpvs01": { "scenarios": 5, "paragraphs": { @@ -750,6 +801,23 @@ "oracle": "812e95beccb670c5b2c432f18ec0c4656c1857c4c69d13aa88b1224635c58ab9" } }, + "genapp-lgicus01": { + "scenarios": 6, + "paragraphs": { + "covered": 4, + "live": 4 + }, + "branches": { + "covered": 4, + "total": 8 + }, + "inputs": { + "case": "074288471e471cf90c5472bf9ea5d5596fb609263f6525077b0780f52abac6d1", + "corpus": "c5e4d52071fad96bed24e9ba06f30417340bfc5e998e7c1cd5f2383be73d6ff6", + "harness": "8e1a37f41a49d303e5dbc03582896a74b8be5d5b4c4c1bb59b64ace818f7a4fb", + "oracle": "50428237857791301984d778088fcd587c5af1e3b39ca83702e0c60c6a86c124" + } + }, "genapp-lgicvs01": { "scenarios": 4, "paragraphs": { @@ -784,6 +852,91 @@ "oracle": "812e95beccb670c5b2c432f18ec0c4656c1857c4c69d13aa88b1224635c58ab9" } }, + "genapp-lgipol01": { + "scenarios": 19, + "paragraphs": { + "covered": 2, + "live": 2 + }, + "branches": { + "covered": 3, + "total": 6 + }, + "inputs": { + "case": "3170aa8e78add78f126b840b0f53b97b972b8256152628fcaa96cd3b4cb09542", + "corpus": "c5e4d52071fad96bed24e9ba06f30417340bfc5e998e7c1cd5f2383be73d6ff6", + "harness": "8e1a37f41a49d303e5dbc03582896a74b8be5d5b4c4c1bb59b64ace818f7a4fb", + "oracle": "50428237857791301984d778088fcd587c5af1e3b39ca83702e0c60c6a86c124" + } + }, + "genapp-lgtestp1": { + "scenarios": 25, + "paragraphs": { + "covered": 7, + "live": 10 + }, + "branches": { + "covered": 14, + "total": 19 + }, + "inputs": { + "case": "279bec374666eb6c9efa433944623c1d7d27b875beaeedff3481b353029753f2", + "corpus": "c5e4d52071fad96bed24e9ba06f30417340bfc5e998e7c1cd5f2383be73d6ff6", + "harness": "8e1a37f41a49d303e5dbc03582896a74b8be5d5b4c4c1bb59b64ace818f7a4fb", + "oracle": "50428237857791301984d778088fcd587c5af1e3b39ca83702e0c60c6a86c124" + } + }, + "genapp-lgtestp2": { + "scenarios": 25, + "paragraphs": { + "covered": 7, + "live": 10 + }, + "branches": { + "covered": 14, + "total": 19 + }, + "inputs": { + "case": "ce7930ab323b0e2402f4bf45e91652c05d865f610b10e483f7bd6dd69c6e4077", + "corpus": "c5e4d52071fad96bed24e9ba06f30417340bfc5e998e7c1cd5f2383be73d6ff6", + "harness": "8e1a37f41a49d303e5dbc03582896a74b8be5d5b4c4c1bb59b64ace818f7a4fb", + "oracle": "50428237857791301984d778088fcd587c5af1e3b39ca83702e0c60c6a86c124" + } + }, + "genapp-lgtestp3": { + "scenarios": 25, + "paragraphs": { + "covered": 7, + "live": 10 + }, + "branches": { + "covered": 14, + "total": 19 + }, + "inputs": { + "case": "d03feebada23dc73a38c5d1531661b89898a25737670736cf7566ee05c35c07b", + "corpus": "c5e4d52071fad96bed24e9ba06f30417340bfc5e998e7c1cd5f2383be73d6ff6", + "harness": "8e1a37f41a49d303e5dbc03582896a74b8be5d5b4c4c1bb59b64ace818f7a4fb", + "oracle": "50428237857791301984d778088fcd587c5af1e3b39ca83702e0c60c6a86c124" + } + }, + "genapp-lgtestp4": { + "scenarios": 23, + "paragraphs": { + "covered": 7, + "live": 9 + }, + "branches": { + "covered": 17, + "total": 22 + }, + "inputs": { + "case": "e39153488ab27f46ead2cdae18d95b03944d92d49e158f7b4af618cd226b3db6", + "corpus": "c5e4d52071fad96bed24e9ba06f30417340bfc5e998e7c1cd5f2383be73d6ff6", + "harness": "8e1a37f41a49d303e5dbc03582896a74b8be5d5b4c4c1bb59b64ace818f7a4fb", + "oracle": "50428237857791301984d778088fcd587c5af1e3b39ca83702e0c60c6a86c124" + } + }, "genapp-lgucdb01": { "scenarios": 7, "paragraphs": { @@ -801,6 +954,23 @@ "oracle": "812e95beccb670c5b2c432f18ec0c4656c1857c4c69d13aa88b1224635c58ab9" } }, + "genapp-lgucus01": { + "scenarios": 6, + "paragraphs": { + "covered": 4, + "live": 4 + }, + "branches": { + "covered": 5, + "total": 8 + }, + "inputs": { + "case": "b0924415e4f8a1139a9e1683cc4095d4ac68c4e29d023be30f74d871be9ffeb8", + "corpus": "c5e4d52071fad96bed24e9ba06f30417340bfc5e998e7c1cd5f2383be73d6ff6", + "harness": "8e1a37f41a49d303e5dbc03582896a74b8be5d5b4c4c1bb59b64ace818f7a4fb", + "oracle": "50428237857791301984d778088fcd587c5af1e3b39ca83702e0c60c6a86c124" + } + }, "genapp-lgucvs01": { "scenarios": 5, "paragraphs": { @@ -835,6 +1005,23 @@ "oracle": "812e95beccb670c5b2c432f18ec0c4656c1857c4c69d13aa88b1224635c58ab9" } }, + "genapp-lgupol01": { + "scenarios": 17, + "paragraphs": { + "covered": 4, + "live": 4 + }, + "branches": { + "covered": 13, + "total": 16 + }, + "inputs": { + "case": "7d3d9ff7153e409cae28bc1c0c4e9b3c0c548d6050d7c31b378bfffaebe84bbc", + "corpus": "c5e4d52071fad96bed24e9ba06f30417340bfc5e998e7c1cd5f2383be73d6ff6", + "harness": "8e1a37f41a49d303e5dbc03582896a74b8be5d5b4c4c1bb59b64ace818f7a4fb", + "oracle": "50428237857791301984d778088fcd587c5af1e3b39ca83702e0c60c6a86c124" + } + }, "genapp-lgupvs01": { "scenarios": 6, "paragraphs": { From f5f9ecda62faae63bbb392f334d716bc626201d2 Mon Sep 17 00:00:00 2001 From: squid-protocol Date: Wed, 7 Oct 2026 20:59:08 -0400 Subject: [PATCH 3/3] equivalence: refresh the det-sweep coverage ledger after rebasing onto #4647 (#4270) Co-Authored-By: Claude Opus 5.5 --- tests/equivalence/det_sweep_coverage.json | 44 +++++++++++------------ 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/tests/equivalence/det_sweep_coverage.json b/tests/equivalence/det_sweep_coverage.json index 99fd87e5d..487bcf467 100644 --- a/tests/equivalence/det_sweep_coverage.json +++ b/tests/equivalence/det_sweep_coverage.json @@ -661,8 +661,8 @@ "inputs": { "case": "3ca0c670a530b01f7f2f0018df4b4c95412ffff6e96260e796b6cefbc6cadac9", "corpus": "c5e4d52071fad96bed24e9ba06f30417340bfc5e998e7c1cd5f2383be73d6ff6", - "harness": "8e1a37f41a49d303e5dbc03582896a74b8be5d5b4c4c1bb59b64ace818f7a4fb", - "oracle": "50428237857791301984d778088fcd587c5af1e3b39ca83702e0c60c6a86c124" + "harness": "ca2f53c6533b4c53dd057b91298c6490ae32b0626559353fc1ef35f7f36ac878", + "oracle": "34e4374b3f771d8a11ed9471e6ec942784f1f5435a723bdd080f8567eda4171c" } }, "genapp-lgacvs01": { @@ -712,8 +712,8 @@ "inputs": { "case": "ffc47517d1d74e993655996224e0b849723352d24c4dfd1599a6654ea5a26e37", "corpus": "c5e4d52071fad96bed24e9ba06f30417340bfc5e998e7c1cd5f2383be73d6ff6", - "harness": "8e1a37f41a49d303e5dbc03582896a74b8be5d5b4c4c1bb59b64ace818f7a4fb", - "oracle": "50428237857791301984d778088fcd587c5af1e3b39ca83702e0c60c6a86c124" + "harness": "ca2f53c6533b4c53dd057b91298c6490ae32b0626559353fc1ef35f7f36ac878", + "oracle": "34e4374b3f771d8a11ed9471e6ec942784f1f5435a723bdd080f8567eda4171c" } }, "genapp-lgapvs01": { @@ -763,8 +763,8 @@ "inputs": { "case": "67788f130859e7133e38afd28040067b4991bd82dd85899af68c5f83ddd087f4", "corpus": "c5e4d52071fad96bed24e9ba06f30417340bfc5e998e7c1cd5f2383be73d6ff6", - "harness": "8e1a37f41a49d303e5dbc03582896a74b8be5d5b4c4c1bb59b64ace818f7a4fb", - "oracle": "50428237857791301984d778088fcd587c5af1e3b39ca83702e0c60c6a86c124" + "harness": "ca2f53c6533b4c53dd057b91298c6490ae32b0626559353fc1ef35f7f36ac878", + "oracle": "34e4374b3f771d8a11ed9471e6ec942784f1f5435a723bdd080f8567eda4171c" } }, "genapp-lgdpvs01": { @@ -814,8 +814,8 @@ "inputs": { "case": "074288471e471cf90c5472bf9ea5d5596fb609263f6525077b0780f52abac6d1", "corpus": "c5e4d52071fad96bed24e9ba06f30417340bfc5e998e7c1cd5f2383be73d6ff6", - "harness": "8e1a37f41a49d303e5dbc03582896a74b8be5d5b4c4c1bb59b64ace818f7a4fb", - "oracle": "50428237857791301984d778088fcd587c5af1e3b39ca83702e0c60c6a86c124" + "harness": "ca2f53c6533b4c53dd057b91298c6490ae32b0626559353fc1ef35f7f36ac878", + "oracle": "34e4374b3f771d8a11ed9471e6ec942784f1f5435a723bdd080f8567eda4171c" } }, "genapp-lgicvs01": { @@ -865,8 +865,8 @@ "inputs": { "case": "3170aa8e78add78f126b840b0f53b97b972b8256152628fcaa96cd3b4cb09542", "corpus": "c5e4d52071fad96bed24e9ba06f30417340bfc5e998e7c1cd5f2383be73d6ff6", - "harness": "8e1a37f41a49d303e5dbc03582896a74b8be5d5b4c4c1bb59b64ace818f7a4fb", - "oracle": "50428237857791301984d778088fcd587c5af1e3b39ca83702e0c60c6a86c124" + "harness": "ca2f53c6533b4c53dd057b91298c6490ae32b0626559353fc1ef35f7f36ac878", + "oracle": "34e4374b3f771d8a11ed9471e6ec942784f1f5435a723bdd080f8567eda4171c" } }, "genapp-lgtestp1": { @@ -882,8 +882,8 @@ "inputs": { "case": "279bec374666eb6c9efa433944623c1d7d27b875beaeedff3481b353029753f2", "corpus": "c5e4d52071fad96bed24e9ba06f30417340bfc5e998e7c1cd5f2383be73d6ff6", - "harness": "8e1a37f41a49d303e5dbc03582896a74b8be5d5b4c4c1bb59b64ace818f7a4fb", - "oracle": "50428237857791301984d778088fcd587c5af1e3b39ca83702e0c60c6a86c124" + "harness": "ca2f53c6533b4c53dd057b91298c6490ae32b0626559353fc1ef35f7f36ac878", + "oracle": "34e4374b3f771d8a11ed9471e6ec942784f1f5435a723bdd080f8567eda4171c" } }, "genapp-lgtestp2": { @@ -899,8 +899,8 @@ "inputs": { "case": "ce7930ab323b0e2402f4bf45e91652c05d865f610b10e483f7bd6dd69c6e4077", "corpus": "c5e4d52071fad96bed24e9ba06f30417340bfc5e998e7c1cd5f2383be73d6ff6", - "harness": "8e1a37f41a49d303e5dbc03582896a74b8be5d5b4c4c1bb59b64ace818f7a4fb", - "oracle": "50428237857791301984d778088fcd587c5af1e3b39ca83702e0c60c6a86c124" + "harness": "ca2f53c6533b4c53dd057b91298c6490ae32b0626559353fc1ef35f7f36ac878", + "oracle": "34e4374b3f771d8a11ed9471e6ec942784f1f5435a723bdd080f8567eda4171c" } }, "genapp-lgtestp3": { @@ -916,8 +916,8 @@ "inputs": { "case": "d03feebada23dc73a38c5d1531661b89898a25737670736cf7566ee05c35c07b", "corpus": "c5e4d52071fad96bed24e9ba06f30417340bfc5e998e7c1cd5f2383be73d6ff6", - "harness": "8e1a37f41a49d303e5dbc03582896a74b8be5d5b4c4c1bb59b64ace818f7a4fb", - "oracle": "50428237857791301984d778088fcd587c5af1e3b39ca83702e0c60c6a86c124" + "harness": "ca2f53c6533b4c53dd057b91298c6490ae32b0626559353fc1ef35f7f36ac878", + "oracle": "34e4374b3f771d8a11ed9471e6ec942784f1f5435a723bdd080f8567eda4171c" } }, "genapp-lgtestp4": { @@ -933,8 +933,8 @@ "inputs": { "case": "e39153488ab27f46ead2cdae18d95b03944d92d49e158f7b4af618cd226b3db6", "corpus": "c5e4d52071fad96bed24e9ba06f30417340bfc5e998e7c1cd5f2383be73d6ff6", - "harness": "8e1a37f41a49d303e5dbc03582896a74b8be5d5b4c4c1bb59b64ace818f7a4fb", - "oracle": "50428237857791301984d778088fcd587c5af1e3b39ca83702e0c60c6a86c124" + "harness": "ca2f53c6533b4c53dd057b91298c6490ae32b0626559353fc1ef35f7f36ac878", + "oracle": "34e4374b3f771d8a11ed9471e6ec942784f1f5435a723bdd080f8567eda4171c" } }, "genapp-lgucdb01": { @@ -967,8 +967,8 @@ "inputs": { "case": "b0924415e4f8a1139a9e1683cc4095d4ac68c4e29d023be30f74d871be9ffeb8", "corpus": "c5e4d52071fad96bed24e9ba06f30417340bfc5e998e7c1cd5f2383be73d6ff6", - "harness": "8e1a37f41a49d303e5dbc03582896a74b8be5d5b4c4c1bb59b64ace818f7a4fb", - "oracle": "50428237857791301984d778088fcd587c5af1e3b39ca83702e0c60c6a86c124" + "harness": "ca2f53c6533b4c53dd057b91298c6490ae32b0626559353fc1ef35f7f36ac878", + "oracle": "34e4374b3f771d8a11ed9471e6ec942784f1f5435a723bdd080f8567eda4171c" } }, "genapp-lgucvs01": { @@ -1018,8 +1018,8 @@ "inputs": { "case": "7d3d9ff7153e409cae28bc1c0c4e9b3c0c548d6050d7c31b378bfffaebe84bbc", "corpus": "c5e4d52071fad96bed24e9ba06f30417340bfc5e998e7c1cd5f2383be73d6ff6", - "harness": "8e1a37f41a49d303e5dbc03582896a74b8be5d5b4c4c1bb59b64ace818f7a4fb", - "oracle": "50428237857791301984d778088fcd587c5af1e3b39ca83702e0c60c6a86c124" + "harness": "ca2f53c6533b4c53dd057b91298c6490ae32b0626559353fc1ef35f7f36ac878", + "oracle": "34e4374b3f771d8a11ed9471e6ec942784f1f5435a723bdd080f8567eda4171c" } }, "genapp-lgupvs01": {