From 55f40683306ba1b81aa7c75982499a07c54b22dc Mon Sep 17 00:00:00 2001 From: Kral Date: Mon, 5 Oct 2026 19:25:09 +0200 Subject: [PATCH] STRU and exception tasks accepted; G6 cascade fix, exception class mutants, RTTI unit notes Co-Authored-By: Claude Sonnet 5.5 --- harness/generator.py | 6 +- harness/mutation.py | 7 +- harness/runner.py | 7 + .../G1140/faulty/m0_oil_report.prog.abap | 105 + .../G1140/faulty/m1_oil_report.prog.abap | 105 + tasks_gen/train/G1140/generation.json | 34 + .../train/G1140/hidden/mill_hidden.clas.abap | 42 +- tasks_gen/train/G1140/mutation.json | 26 +- .../G1903/faulty/m0_audit_info.ddls.asddls | 6 + .../G1903/faulty/m2_audit_info.ddls.asddls | 6 + .../G1903/faulty/m3_stock_line.ddls.asddls | 10 + .../G1903/faulty/m4_audit_info.ddls.asddls | 6 + tasks_gen/train/G1903/generation.json | 29 + .../train/G1903/hidden/t16_hidden.clas.abap | 177 + tasks_gen/train/G1903/mutation.json | 55 + .../G1903/reference/audit_info.ddls.asddls | 6 + .../G1903/reference/stock_line.ddls.asddls | 10 + .../train/G1903/reference/t16_test.clas.abap | 68 + tasks_gen/train/G1903/seed/stock.tabl.asabap | 14 + tasks_gen/train/G1903/spec.md | 59 + tasks_gen/train/G1903/task.json | 74 + tasks_gen/train/G1904/generation.json | 45 + .../train/G1904/hidden/d02_hidden.clas.abap | 259 ++ tasks_gen/train/G1904/mutation.json | 36 + .../G1904/reference/cx_issue_error.clas.abap | 73 + .../reference/cx_issue_error.testclasses.abap | 81 + .../G1904/seed/if_issue_error_info.intf.abap | 12 + tasks_gen/train/G1904/spec.md | 58 + tasks_gen/train/G1904/task.json | 50 + tasks_gen/train/_logs/G1140.json | 36 + tasks_gen/train/_logs/G1900.json | 31 + tasks_gen/train/_logs/G1901.json | 21 + tasks_gen/train/_logs/G1902.json | 26 + tasks_gen/train/_logs/G1903.json | 31 + tasks_gen/train/_logs/G1904.json | 47 + tasks_gen/train/plan2.json | 3756 +++++++++++++++++ 36 files changed, 5380 insertions(+), 34 deletions(-) create mode 100644 tasks_gen/train/G1140/faulty/m0_oil_report.prog.abap create mode 100644 tasks_gen/train/G1140/faulty/m1_oil_report.prog.abap create mode 100644 tasks_gen/train/G1140/generation.json create mode 100644 tasks_gen/train/G1903/faulty/m0_audit_info.ddls.asddls create mode 100644 tasks_gen/train/G1903/faulty/m2_audit_info.ddls.asddls create mode 100644 tasks_gen/train/G1903/faulty/m3_stock_line.ddls.asddls create mode 100644 tasks_gen/train/G1903/faulty/m4_audit_info.ddls.asddls create mode 100644 tasks_gen/train/G1903/generation.json create mode 100644 tasks_gen/train/G1903/hidden/t16_hidden.clas.abap create mode 100644 tasks_gen/train/G1903/mutation.json create mode 100644 tasks_gen/train/G1903/reference/audit_info.ddls.asddls create mode 100644 tasks_gen/train/G1903/reference/stock_line.ddls.asddls create mode 100644 tasks_gen/train/G1903/reference/t16_test.clas.abap create mode 100644 tasks_gen/train/G1903/seed/stock.tabl.asabap create mode 100644 tasks_gen/train/G1903/spec.md create mode 100644 tasks_gen/train/G1903/task.json create mode 100644 tasks_gen/train/G1904/generation.json create mode 100644 tasks_gen/train/G1904/hidden/d02_hidden.clas.abap create mode 100644 tasks_gen/train/G1904/mutation.json create mode 100644 tasks_gen/train/G1904/reference/cx_issue_error.clas.abap create mode 100644 tasks_gen/train/G1904/reference/cx_issue_error.testclasses.abap create mode 100644 tasks_gen/train/G1904/seed/if_issue_error_info.intf.abap create mode 100644 tasks_gen/train/G1904/spec.md create mode 100644 tasks_gen/train/G1904/task.json create mode 100644 tasks_gen/train/_logs/G1140.json create mode 100644 tasks_gen/train/_logs/G1900.json create mode 100644 tasks_gen/train/_logs/G1901.json create mode 100644 tasks_gen/train/_logs/G1902.json create mode 100644 tasks_gen/train/_logs/G1903.json create mode 100644 tasks_gen/train/_logs/G1904.json create mode 100644 tasks_gen/train/plan2.json diff --git a/harness/generator.py b/harness/generator.py index d6cc90a..a8b1434 100644 --- a/harness/generator.py +++ b/harness/generator.py @@ -74,7 +74,7 @@ needs an amount or a quantity, the reference field needs a reference annotation abap.cuky in the same table; @Semantics.quantity.unitOfMeasure : '{{p}}ord.unit' with unit : abap.unit(3)); a reference without the table name fails with "Annotation with reference to unit code ... is uncomplete". Reference: the DDL file and ONE global own-test class (type CLAS). Hidden tests (one global class): RTTI on the table: cast cl_abap_typedescr=>describe_by_name( '{{P}}ORD' ) to -cl_abap_structdescr and check get_ddic_field_list( ) (field names, key flags, lengths, decimals, types), and a +cl_abap_structdescr and check get_ddic_field_list( ) (field names, key flags, LENG in characters, decimals, types; cl_abap_elemdescr->length is in BYTES: 2 per character), and a cl_osql_test_environment test (create( i_dependency_list = VALUE #( ( '{{P}}ORD' ) ) ), insert, select back; a second INSERT with the same key gives sy-subrc = 4). No seed is needed.""", "STRU": """The model must create a DDIC STRUCTURE (type STRU) as the main contract object. DDL source: annotations @@ -83,7 +83,9 @@ INSERT with the same key gives sy-subrc = 4). No seed is needed.""", "include {{p}}other;" when the spec asks). Contract entry: {"type": "STRU", "name": "{{P}}NAME", "fields": [...]} (the field names in lower case). The Business rules list every field with data type and length. Reference: the DDL file and ONE global own-test class (type CLAS). Hidden tests (one global class): RTTI: cl_abap_typedescr=>describe_by_name( -'{{P}}NAME' ) cast to cl_abap_structdescr; check components (names, length, decimals, type kind) and the order.""", +'{{P}}NAME' ) cast to cl_abap_structdescr; check components (names, length, decimals, type kind) and the order. RTTI units: cl_abap_elemdescr->length is in BYTES +(2 bytes per character in Unicode), so a char(10) field has length 20; compare characters with output_length or with +LENG of cl_abap_structdescr=>get_ddic_field_list( ) (characters), and decimals with ->decimals.""", "MSAG": """The model must create a MESSAGE CLASS (type MSAG) as the main contract object. The name has at most 20 characters including the prefix. A message class has NO source file. In task.json the reference entry has no "file": {"type": "MSAG", "name": "{{P}}MSG", "description": "...", "messages": [{"msgno": "001", "text": "Order &1 is blocked"}, ...]} diff --git a/harness/mutation.py b/harness/mutation.py index 0312c07..d4887a4 100644 --- a/harness/mutation.py +++ b/harness/mutation.py @@ -169,6 +169,8 @@ def decl_mutants(src, otype, seed, n=MAX_MUTANTS): for m in re.finditer(r"^(\s*)key(\s+)(?!client\b)(\w+\s*:)", src, re.I | re.M): add("key", m, f"{m.group(1)}{m.group(3)}") if otype == "INTF": + for m in re.finditer(r"(\bmsgno\s*=\s*')(\d+)(')", src, re.I): # message number of an exception text id + add("msgno", m, f"{m.group(1)}{str(int(m.group(2)) + 1).zfill(len(m.group(2)))}{m.group(3)}") for m in re.finditer(r"(\bVALUE\s+)(\d+)(?=\s*\.)", src, re.I): add("const", m, f"{m.group(1)}{int(m.group(2)) + 1}") for m in re.finditer(r"(\bVALUE\s+)'([^'\n]{1,20})'", src, re.I): @@ -236,7 +238,10 @@ def check_task(pool_root, task_id, run_base, n=MAX_MUTANTS, keep=False): src = open(os.path.join(task_dir, o["file"])).read() if o["type"] in ("TABL", "STRU", "INTF"): return decl_mutants(src, o["type"], f"{task_id}:{o['name']}", n) - return mutants(src, o["type"], f"{task_id}:{o['name']}", n) + ms = mutants(src, o["type"], f"{task_id}:{o['name']}", n) + if o["type"] == "CLAS" and len(ms) < n: # exception classes: constants, message numbers, texts + ms += decl_mutants(src, "INTF", f"{task_id}:{o['name']}", n - len(ms)) + return ms cand = [[(o, d, m) for d, m in _muts(o)] for o in targets] plan = [] while len(plan) < n and any(cand): diff --git a/harness/runner.py b/harness/runner.py index 25997bf..08ea75d 100644 --- a/harness/runner.py +++ b/harness/runner.py @@ -426,8 +426,15 @@ class Runner: contract_files = {f"{c['name'].lower()}.{c['type'].lower()}.abap" for c in contract} # abaplint does not know standard superclasses (CX_STATIC_CHECK ...); an exception hierarchy # then gives "Super class ... not found or contains errors". A4H activation (G1) covers this. + # Cascade: a class that uses such an exception class gets "Definition for X not found in scope" (X is + # the exception class abaplint could not build). Messages that name a broken class are not counted. + broken = {re.sub(r"\.(clas|intf)\.abap$", "", i["file"]).upper() for i in issues + if re.match(r"Super class .* not found or contains errors", i["msg"] or "")} + def _cascade(msg): + return any(re.search(rf"\b{re.escape(b)}\b", msg or "", re.I) for b in broken) g["G6_release"] = not any(i["rule"] == "check_syntax" and i["file"] in contract_files and not re.match(r"Super class .* not found or contains errors", i["msg"] or "") + and not _cascade(i["msg"]) for i in issues) # 8 score diff --git a/tasks_gen/train/G1140/faulty/m0_oil_report.prog.abap b/tasks_gen/train/G1140/faulty/m0_oil_report.prog.abap new file mode 100644 index 0000000..63658ca --- /dev/null +++ b/tasks_gen/train/G1140/faulty/m0_oil_report.prog.abap @@ -0,0 +1,105 @@ +REPORT {{p}}oil_report. + +DATA gv_region TYPE {{p}}grove-region. + +PARAMETERS p_from TYPE d OBLIGATORY. +SELECT-OPTIONS s_reg FOR gv_region. + +CLASS lcl_report DEFINITION FINAL. + PUBLIC SECTION. + TYPES: + BEGIN OF ty_line, + region TYPE {{p}}grove-region, + litres TYPE {{p}}press-litres, + kilos TYPE {{p}}press-kilos, + END OF ty_line, + tt_line TYPE STANDARD TABLE OF ty_line WITH EMPTY KEY. + TYPES tt_region TYPE RANGE OF {{p}}grove-region. + METHODS collect + IMPORTING iv_from TYPE d + it_region TYPE tt_region + RETURNING VALUE(rt_lines) TYPE tt_line. + METHODS show + CHANGING ct_lines TYPE tt_line. +ENDCLASS. + +CLASS lcl_report IMPLEMENTATION. + METHOD collect. + SELECT gr~region, + SUM( pr~litres ) AS litres, + SUM( pr~kilos ) AS kilos + FROM {{p}}press AS pr + INNER JOIN {{p}}grove AS gr ON gr~grove_id = pr~grove_id + WHERE pr~press_date < @iv_from + AND gr~region IN @it_region + GROUP BY gr~region + ORDER BY litres DESCENDING + INTO CORRESPONDING FIELDS OF TABLE @rt_lines. + ENDMETHOD. + + METHOD show. + TRY. + cl_salv_table=>factory( IMPORTING r_salv_table = DATA(lo_alv) + CHANGING t_table = ct_lines ). + lo_alv->display( ). + CATCH cx_salv_msg INTO DATA(lx_error). + MESSAGE lx_error TYPE 'I' DISPLAY LIKE 'E'. + ENDTRY. + ENDMETHOD. +ENDCLASS. + +START-OF-SELECTION. + DATA(go_report) = NEW lcl_report( ). + DATA(gt_lines) = go_report->collect( iv_from = p_from it_region = s_reg[] ). + go_report->show( CHANGING ct_lines = gt_lines ). + +CLASS ltc_report DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. + PRIVATE SECTION. + CLASS-DATA go_env TYPE REF TO if_osql_test_environment. + CLASS-METHODS class_setup. + CLASS-METHODS class_teardown. + METHODS litres_per_region FOR TESTING. + METHODS region_filter FOR TESTING. +ENDCLASS. + +CLASS ltc_report IMPLEMENTATION. + METHOD class_setup. + go_env = cl_osql_test_environment=>create( + i_dependency_list = VALUE #( ( '{{P}}GROVE' ) ( '{{P}}PRESS' ) ) ). + DATA lt_grove TYPE STANDARD TABLE OF {{p}}grove WITH EMPTY KEY. + lt_grove = VALUE #( ( grove_id = 1 grove_name = 'A' region = 'NORTH' variety = 'ARBEQ' ) + ( grove_id = 2 grove_name = 'B' region = 'NORTH' variety = 'ARBEQ' ) + ( grove_id = 3 grove_name = 'C' region = 'SOUTH' variety = 'PICUA' ) ). + go_env->insert_test_data( lt_grove ). + DATA lt_press TYPE STANDARD TABLE OF {{p}}press WITH EMPTY KEY. + lt_press = VALUE #( ( press_id = 1 grove_id = 1 press_date = '20260110' kilos = 1000 litres = '200.00' ) + ( press_id = 2 grove_id = 2 press_date = '20260111' kilos = 500 litres = '90.00' ) + ( press_id = 3 grove_id = 3 press_date = '20260112' kilos = 800 litres = '150.00' ) ). + go_env->insert_test_data( lt_press ). + ENDMETHOD. + + METHOD class_teardown. + go_env->destroy( ). + ENDMETHOD. + + METHOD litres_per_region. + DATA lv_expected TYPE {{p}}press-litres. + lv_expected = '290.00'. + DATA(lt_lines) = NEW lcl_report( )->collect( + iv_from = '20260101' it_region = VALUE #( ) ). + cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_lines ) ). + cl_abap_unit_assert=>assert_equals( exp = 'NORTH' act = lt_lines[ 1 ]-region ). + cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lt_lines[ 1 ]-litres ). + cl_abap_unit_assert=>assert_equals( exp = 1500 act = lt_lines[ 1 ]-kilos ). + ENDMETHOD. + + METHOD region_filter. + DATA lv_expected TYPE {{p}}press-litres. + lv_expected = '150.00'. + DATA(lt_lines) = NEW lcl_report( )->collect( + iv_from = '20260101' + it_region = VALUE #( ( sign = 'I' option = 'EQ' low = 'SOUTH' ) ) ). + cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_lines ) ). + cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lt_lines[ 1 ]-litres ). + ENDMETHOD. +ENDCLASS. diff --git a/tasks_gen/train/G1140/faulty/m1_oil_report.prog.abap b/tasks_gen/train/G1140/faulty/m1_oil_report.prog.abap new file mode 100644 index 0000000..0e0996a --- /dev/null +++ b/tasks_gen/train/G1140/faulty/m1_oil_report.prog.abap @@ -0,0 +1,105 @@ +REPORT {{p}}oil_report. + +DATA gv_region TYPE {{p}}grove-region. + +PARAMETERS p_from TYPE d OBLIGATORY. +SELECT-OPTIONS s_reg FOR gv_region. + +CLASS lcl_report DEFINITION FINAL. + PUBLIC SECTION. + TYPES: + BEGIN OF ty_line, + region TYPE {{p}}grove-region, + litres TYPE {{p}}press-litres, + kilos TYPE {{p}}press-kilos, + END OF ty_line, + tt_line TYPE STANDARD TABLE OF ty_line WITH EMPTY KEY. + TYPES tt_region TYPE RANGE OF {{p}}grove-region. + METHODS collect + IMPORTING iv_from TYPE d + it_region TYPE tt_region + RETURNING VALUE(rt_lines) TYPE tt_line. + METHODS show + CHANGING ct_lines TYPE tt_line. +ENDCLASS. + +CLASS lcl_report IMPLEMENTATION. + METHOD collect. + SELECT gr~region, + SUM( pr~litres ) AS litres, + SUM( pr~kilos ) AS kilos + FROM {{p}}press AS pr + INNER JOIN {{p}}grove AS gr ON gr~grove_id = pr~grove_id + WHERE pr~press_date >= @iv_from + OR gr~region IN @it_region + GROUP BY gr~region + ORDER BY litres DESCENDING + INTO CORRESPONDING FIELDS OF TABLE @rt_lines. + ENDMETHOD. + + METHOD show. + TRY. + cl_salv_table=>factory( IMPORTING r_salv_table = DATA(lo_alv) + CHANGING t_table = ct_lines ). + lo_alv->display( ). + CATCH cx_salv_msg INTO DATA(lx_error). + MESSAGE lx_error TYPE 'I' DISPLAY LIKE 'E'. + ENDTRY. + ENDMETHOD. +ENDCLASS. + +START-OF-SELECTION. + DATA(go_report) = NEW lcl_report( ). + DATA(gt_lines) = go_report->collect( iv_from = p_from it_region = s_reg[] ). + go_report->show( CHANGING ct_lines = gt_lines ). + +CLASS ltc_report DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. + PRIVATE SECTION. + CLASS-DATA go_env TYPE REF TO if_osql_test_environment. + CLASS-METHODS class_setup. + CLASS-METHODS class_teardown. + METHODS litres_per_region FOR TESTING. + METHODS region_filter FOR TESTING. +ENDCLASS. + +CLASS ltc_report IMPLEMENTATION. + METHOD class_setup. + go_env = cl_osql_test_environment=>create( + i_dependency_list = VALUE #( ( '{{P}}GROVE' ) ( '{{P}}PRESS' ) ) ). + DATA lt_grove TYPE STANDARD TABLE OF {{p}}grove WITH EMPTY KEY. + lt_grove = VALUE #( ( grove_id = 1 grove_name = 'A' region = 'NORTH' variety = 'ARBEQ' ) + ( grove_id = 2 grove_name = 'B' region = 'NORTH' variety = 'ARBEQ' ) + ( grove_id = 3 grove_name = 'C' region = 'SOUTH' variety = 'PICUA' ) ). + go_env->insert_test_data( lt_grove ). + DATA lt_press TYPE STANDARD TABLE OF {{p}}press WITH EMPTY KEY. + lt_press = VALUE #( ( press_id = 1 grove_id = 1 press_date = '20260110' kilos = 1000 litres = '200.00' ) + ( press_id = 2 grove_id = 2 press_date = '20260111' kilos = 500 litres = '90.00' ) + ( press_id = 3 grove_id = 3 press_date = '20260112' kilos = 800 litres = '150.00' ) ). + go_env->insert_test_data( lt_press ). + ENDMETHOD. + + METHOD class_teardown. + go_env->destroy( ). + ENDMETHOD. + + METHOD litres_per_region. + DATA lv_expected TYPE {{p}}press-litres. + lv_expected = '290.00'. + DATA(lt_lines) = NEW lcl_report( )->collect( + iv_from = '20260101' it_region = VALUE #( ) ). + cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_lines ) ). + cl_abap_unit_assert=>assert_equals( exp = 'NORTH' act = lt_lines[ 1 ]-region ). + cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lt_lines[ 1 ]-litres ). + cl_abap_unit_assert=>assert_equals( exp = 1500 act = lt_lines[ 1 ]-kilos ). + ENDMETHOD. + + METHOD region_filter. + DATA lv_expected TYPE {{p}}press-litres. + lv_expected = '150.00'. + DATA(lt_lines) = NEW lcl_report( )->collect( + iv_from = '20260101' + it_region = VALUE #( ( sign = 'I' option = 'EQ' low = 'SOUTH' ) ) ). + cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_lines ) ). + cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lt_lines[ 1 ]-litres ). + ENDMETHOD. +ENDCLASS. diff --git a/tasks_gen/train/G1140/generation.json b/tasks_gen/train/G1140/generation.json new file mode 100644 index 0000000..4f3d716 --- /dev/null +++ b/tasks_gen/train/G1140/generation.json @@ -0,0 +1,34 @@ +{ + "id": "G1140", + "pool": "train", + "object_type": "PROG", + "category": "B", + "attempts": [ + { + "stage": "bundle", + "errors": [ + "Too close to task G0020 (similarity spec 0.67, rules 0.49, names 1.00). Choose a different business topic and different object names.", + "Too close to task G0183 (similarity spec 0.60, rules 0.00, names 1.00). Choose a different business topic and different object names." + ], + "by_check": { + "extra": 2 + } + }, + { + "stage": "validate", + "oracle": 86.7, + "null": 0 + }, + { + "stage": "validate", + "oracle": 100.0, + "null": 0, + "mutation": { + "valid": 2, + "killed": 2, + "ok": true + } + } + ], + "accepted": true +} \ No newline at end of file diff --git a/tasks_gen/train/G1140/hidden/mill_hidden.clas.abap b/tasks_gen/train/G1140/hidden/mill_hidden.clas.abap index 2a8b923..31f1b03 100644 --- a/tasks_gen/train/G1140/hidden/mill_hidden.clas.abap +++ b/tasks_gen/train/G1140/hidden/mill_hidden.clas.abap @@ -15,7 +15,7 @@ CLASS {{p}}mill_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC IMPORTING ir_data TYPE REF TO data iv_row TYPE i iv_col TYPE string - RETURNING VALUE(rv_value) TYPE string. + RETURNING VALUE(rv_value) TYPE {{p}}press-litres. METHODS lines_of IMPORTING ir_data TYPE REF TO data RETURNING VALUE(rv_lines) TYPE i. @@ -60,9 +60,12 @@ CLASS {{p}}mill_hidden IMPLEMENTATION. ENDMETHOD. METHOD amount_of. - DATA lv_amount TYPE p LENGTH 15 DECIMALS 2. - lv_amount = value_of( ir_data = ir_data iv_row = iv_row iv_col = iv_col ). - rv_value = CONV string( lv_amount ). + FIELD-SYMBOLS TYPE STANDARD TABLE. + ASSIGN ir_data->* TO . + ASSIGN [ iv_row ] TO FIELD-SYMBOL(). + ASSIGN COMPONENT iv_col OF STRUCTURE TO FIELD-SYMBOL(). + cl_abap_unit_assert=>assert_subrc( exp = 0 msg = |Column { iv_col } missing| ). + rv_value = . ENDMETHOD. METHOD all_regions. @@ -70,29 +73,40 @@ CLASS {{p}}mill_hidden IMPLEMENTATION. ENDMETHOD. METHOD sorted_by_litres. - DATA(lr_data) = run( '20260101' ). + DATA lr_data TYPE REF TO data. + lr_data = run( '20260101' ). cl_abap_unit_assert=>assert_equals( exp = `NORTH` act = value_of( ir_data = lr_data iv_row = 1 iv_col = `REGION` ) ). cl_abap_unit_assert=>assert_equals( exp = `SOUTH` act = value_of( ir_data = lr_data iv_row = 2 iv_col = `REGION` ) ). cl_abap_unit_assert=>assert_equals( exp = `WEST` act = value_of( ir_data = lr_data iv_row = 3 iv_col = `REGION` ) ). ENDMETHOD. METHOD litres_and_kilos. - DATA(lr_data) = run( '20260101' ). - cl_abap_unit_assert=>assert_equals( exp = `290.00` act = amount_of( ir_data = lr_data iv_row = 1 iv_col = `LITRES` ) ). - cl_abap_unit_assert=>assert_equals( exp = `1500` act = value_of( ir_data = lr_data iv_row = 1 iv_col = `KILOS` ) ). + DATA lr_data TYPE REF TO data. + DATA lv_expected TYPE {{p}}press-litres. + lr_data = run( '20260101' ). + lv_expected = '290.00'. + cl_abap_unit_assert=>assert_equals( exp = lv_expected + act = amount_of( ir_data = lr_data iv_row = 1 iv_col = `LITRES` ) ). + cl_abap_unit_assert=>assert_equals( exp = `1500` + act = value_of( ir_data = lr_data iv_row = 1 iv_col = `KILOS` ) ). ENDMETHOD. METHOD region_filter. - DATA(lr_data) = run( iv_from = '20260101' - it_region = VALUE #( ( sign = 'I' option = 'EQ' low = 'SOUTH' ) ) ). + DATA lr_data TYPE REF TO data. + DATA lv_expected TYPE {{p}}press-litres. + lr_data = run( iv_from = '20260101' + it_region = VALUE #( ( sign = 'I' option = 'EQ' low = 'SOUTH' ) ) ). + lv_expected = '150.00'. cl_abap_unit_assert=>assert_equals( exp = 1 act = lines_of( lr_data ) ). - cl_abap_unit_assert=>assert_equals( exp = `150.00` act = amount_of( ir_data = lr_data iv_row = 1 iv_col = `LITRES` ) ). + cl_abap_unit_assert=>assert_equals( exp = lv_expected + act = amount_of( ir_data = lr_data iv_row = 1 iv_col = `LITRES` ) ). ENDMETHOD. METHOD two_region_filter. - DATA(lr_data) = run( iv_from = '20260101' - it_region = VALUE #( ( sign = 'I' option = 'EQ' low = 'WEST' ) - ( sign = 'I' option = 'EQ' low = 'SOUTH' ) ) ). + DATA lr_data TYPE REF TO data. + lr_data = run( iv_from = '20260101' + it_region = VALUE #( ( sign = 'I' option = 'EQ' low = 'WEST' ) + ( sign = 'I' option = 'EQ' low = 'SOUTH' ) ) ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lines_of( lr_data ) ). cl_abap_unit_assert=>assert_equals( exp = `SOUTH` act = value_of( ir_data = lr_data iv_row = 1 iv_col = `REGION` ) ). cl_abap_unit_assert=>assert_equals( exp = `WEST` act = value_of( ir_data = lr_data iv_row = 2 iv_col = `REGION` ) ). diff --git a/tasks_gen/train/G1140/mutation.json b/tasks_gen/train/G1140/mutation.json index e3722be..d9f1bc8 100644 --- a/tasks_gen/train/G1140/mutation.json +++ b/tasks_gen/train/G1140/mutation.json @@ -1,5 +1,5 @@ { - "task": "T50", + "task": "G1140", "mutants": [ { "object": "{{P}}OIL_REPORT", @@ -8,37 +8,29 @@ "hidden": "0/6", "failed_tests": [ "ALL_REGIONS", - "SORTED_BY_LITRES", + "DATE_FILTER", "LITRES_AND_KILOS", "REGION_FILTER", - "TWO_REGION_FILTER", - "DATE_FILTER" + "SORTED_BY_LITRES", + "TWO_REGION_FILTER" ] }, { "object": "{{P}}OIL_REPORT", "mutant": "line 34: AND -> OR (logic)", "status": "killed", - "hidden": "3/6", + "hidden": "1/6", "failed_tests": [ + "ALL_REGIONS", + "DATE_FILTER", "REGION_FILTER", - "TWO_REGION_FILTER", - "DATE_FILTER" - ] - }, - { - "object": "{{P}}OIL_REPORT", - "mutant": "line 36: DESCENDING -> ASCENDING (order)", - "status": "killed", - "hidden": "4/6", - "failed_tests": [ "SORTED_BY_LITRES", "TWO_REGION_FILTER" ] } ], - "valid": 3, - "killed": 3, + "valid": 2, + "killed": 2, "kill_rate": 1.0, "ok": true } \ No newline at end of file diff --git a/tasks_gen/train/G1903/faulty/m0_audit_info.ddls.asddls b/tasks_gen/train/G1903/faulty/m0_audit_info.ddls.asddls new file mode 100644 index 0000000..2a61811 --- /dev/null +++ b/tasks_gen/train/G1903/faulty/m0_audit_info.ddls.asddls @@ -0,0 +1,6 @@ +@EndUserText.label : 'Audit information' +@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE +define structure {{p}}audit_info { + created_by : abap.char(11); + created_on : abap.dats; +} diff --git a/tasks_gen/train/G1903/faulty/m2_audit_info.ddls.asddls b/tasks_gen/train/G1903/faulty/m2_audit_info.ddls.asddls new file mode 100644 index 0000000..4649e5a --- /dev/null +++ b/tasks_gen/train/G1903/faulty/m2_audit_info.ddls.asddls @@ -0,0 +1,6 @@ +@EndUserText.label : 'Audit information' +@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE +define structure {{p}}audit_info { + created_by : abap.numc(12); + created_on : abap.dats; +} diff --git a/tasks_gen/train/G1903/faulty/m3_stock_line.ddls.asddls b/tasks_gen/train/G1903/faulty/m3_stock_line.ddls.asddls new file mode 100644 index 0000000..5dcd40a --- /dev/null +++ b/tasks_gen/train/G1903/faulty/m3_stock_line.ddls.asddls @@ -0,0 +1,10 @@ +@EndUserText.label : 'Stock position line' +@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE +define structure {{p}}stock_line { + material : abap.char(18); + plant : abap.char(4); + net_amount : abap.dec(9,3); + currency : abap.char(5); + created_by : abap.char(12); + created_on : abap.dats; +} diff --git a/tasks_gen/train/G1903/faulty/m4_audit_info.ddls.asddls b/tasks_gen/train/G1903/faulty/m4_audit_info.ddls.asddls new file mode 100644 index 0000000..2c7d7eb --- /dev/null +++ b/tasks_gen/train/G1903/faulty/m4_audit_info.ddls.asddls @@ -0,0 +1,6 @@ +@EndUserText.label : 'Audit information' +@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE +define structure {{p}}audit_info { + created_by : abap.char(12); + created_on : abap.tims; +} diff --git a/tasks_gen/train/G1903/generation.json b/tasks_gen/train/G1903/generation.json new file mode 100644 index 0000000..2cb91d7 --- /dev/null +++ b/tasks_gen/train/G1903/generation.json @@ -0,0 +1,29 @@ +{ + "id": "G1903", + "pool": "train", + "object_type": "STRU", + "category": "B", + "attempts": [ + { + "stage": "validate", + "oracle": 0, + "null": 0 + }, + { + "stage": "validate", + "oracle": 0, + "null": 0 + }, + { + "stage": "validate", + "oracle": 100.0, + "null": 0, + "mutation": { + "valid": 4, + "killed": 4, + "ok": true + } + } + ], + "accepted": true +} \ No newline at end of file diff --git a/tasks_gen/train/G1903/hidden/t16_hidden.clas.abap b/tasks_gen/train/G1903/hidden/t16_hidden.clas.abap new file mode 100644 index 0000000..1df45cd --- /dev/null +++ b/tasks_gen/train/G1903/hidden/t16_hidden.clas.abap @@ -0,0 +1,177 @@ +CLASS {{p}}t16_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC + FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. + + PRIVATE SECTION. + CLASS-DATA go_env TYPE REF TO if_osql_test_environment. + + CLASS-METHODS class_setup. + CLASS-METHODS class_teardown. + METHODS setup. + + METHODS six_components FOR TESTING. + METHODS component_order FOR TESTING. + METHODS char_lengths FOR TESTING. + METHODS amount_type FOR TESTING. + METHODS date_type FOR TESTING. + METHODS flat_structure FOR TESTING. + METHODS audit_structure FOR TESTING. + METHODS audit_matches FOR TESTING. + METHODS read_stock_row FOR TESTING. +ENDCLASS. + + +CLASS {{p}}t16_hidden IMPLEMENTATION. + + METHOD class_setup. + go_env = cl_osql_test_environment=>create( + i_dependency_list = VALUE #( ( '{{P}}STOCK' ) ) ). + ENDMETHOD. + + METHOD class_teardown. + go_env->destroy( ). + ENDMETHOD. + + METHOD setup. + go_env->clear_doubles( ). + DATA lt_stock TYPE STANDARD TABLE OF {{p}}stock WITH EMPTY KEY. + lt_stock = VALUE #( + ( material = 'MAT-1' plant = 'P001' net_amount = '123.45' + currency = 'EUR' created_by = 'USER1' created_on = '20240115' ) + ( material = 'MAT-2' plant = 'P001' net_amount = '10.00' + currency = 'EUR' created_by = 'USER2' created_on = '20240116' ) + ( material = 'MAT-3' plant = 'P002' net_amount = '5.50' + currency = 'USD' created_by = 'USER1' created_on = '20240117' ) ). + go_env->insert_test_data( lt_stock ). + ENDMETHOD. + + METHOD six_components. + DATA(lo_struct) = CAST cl_abap_structdescr( + cl_abap_typedescr=>describe_by_name( '{{P}}STOCK_LINE' ) ). + DATA(lt_fields) = lo_struct->get_ddic_field_list( ). + cl_abap_unit_assert=>assert_equals( exp = 6 act = lines( lt_fields ) ). + ENDMETHOD. + + METHOD component_order. + DATA(lo_struct) = CAST cl_abap_structdescr( + cl_abap_typedescr=>describe_by_name( '{{P}}STOCK_LINE' ) ). + DATA(lt_comp) = lo_struct->get_components( ). + cl_abap_unit_assert=>assert_equals( exp = 6 act = lines( lt_comp ) ). + DATA(lv_index) = 0. + LOOP AT lt_comp INTO DATA(ls_comp). + lv_index = lv_index + 1. + CASE lv_index. + WHEN 1. + cl_abap_unit_assert=>assert_equals( exp = 'MATERIAL' act = ls_comp-name ). + WHEN 2. + cl_abap_unit_assert=>assert_equals( exp = 'PLANT' act = ls_comp-name ). + WHEN 3. + cl_abap_unit_assert=>assert_equals( exp = 'NET_AMOUNT' act = ls_comp-name ). + WHEN 4. + cl_abap_unit_assert=>assert_equals( exp = 'CURRENCY' act = ls_comp-name ). + WHEN 5. + cl_abap_unit_assert=>assert_equals( exp = 'CREATED_BY' act = ls_comp-name ). + WHEN 6. + cl_abap_unit_assert=>assert_equals( exp = 'CREATED_ON' act = ls_comp-name ). + ENDCASE. + ENDLOOP. + ENDMETHOD. + + METHOD char_lengths. + DATA(lo_struct) = CAST cl_abap_structdescr( + cl_abap_typedescr=>describe_by_name( '{{P}}STOCK_LINE' ) ). + DATA(lt_fields) = lo_struct->get_ddic_field_list( ). + READ TABLE lt_fields INTO DATA(ls_field) WITH KEY fieldname = 'MATERIAL'. + cl_abap_unit_assert=>assert_subrc( exp = 0 msg = 'Component MATERIAL is missing' ). + cl_abap_unit_assert=>assert_equals( exp = 18 act = CONV i( ls_field-leng ) ). + READ TABLE lt_fields INTO ls_field WITH KEY fieldname = 'PLANT'. + cl_abap_unit_assert=>assert_subrc( exp = 0 msg = 'Component PLANT is missing' ). + cl_abap_unit_assert=>assert_equals( exp = 4 act = CONV i( ls_field-leng ) ). + READ TABLE lt_fields INTO ls_field WITH KEY fieldname = 'CURRENCY'. + cl_abap_unit_assert=>assert_subrc( exp = 0 msg = 'Component CURRENCY is missing' ). + cl_abap_unit_assert=>assert_equals( exp = 5 act = CONV i( ls_field-leng ) ). + READ TABLE lt_fields INTO ls_field WITH KEY fieldname = 'CREATED_BY'. + cl_abap_unit_assert=>assert_subrc( exp = 0 msg = 'Component CREATED_BY is missing' ). + cl_abap_unit_assert=>assert_equals( exp = 12 act = CONV i( ls_field-leng ) ). + ENDMETHOD. + + METHOD amount_type. + DATA(lo_struct) = CAST cl_abap_structdescr( + cl_abap_typedescr=>describe_by_name( '{{P}}STOCK_LINE' ) ). + DATA(lt_fields) = lo_struct->get_ddic_field_list( ). + READ TABLE lt_fields INTO DATA(ls_field) WITH KEY fieldname = 'NET_AMOUNT'. + cl_abap_unit_assert=>assert_subrc( exp = 0 msg = 'Component NET_AMOUNT is missing' ). + cl_abap_unit_assert=>assert_equals( exp = 'DEC' act = ls_field-datatype ). + cl_abap_unit_assert=>assert_equals( exp = 9 act = CONV i( ls_field-leng ) ). + cl_abap_unit_assert=>assert_equals( exp = 2 act = CONV i( ls_field-decimals ) ). + ENDMETHOD. + + METHOD date_type. + DATA(lo_struct) = CAST cl_abap_structdescr( + cl_abap_typedescr=>describe_by_name( '{{P}}STOCK_LINE' ) ). + DATA(lt_fields) = lo_struct->get_ddic_field_list( ). + READ TABLE lt_fields INTO DATA(ls_field) WITH KEY fieldname = 'CREATED_ON'. + cl_abap_unit_assert=>assert_subrc( exp = 0 msg = 'Component CREATED_ON is missing' ). + cl_abap_unit_assert=>assert_equals( exp = 'DATS' act = ls_field-datatype ). + cl_abap_unit_assert=>assert_equals( exp = 8 act = CONV i( ls_field-leng ) ). + ENDMETHOD. + + METHOD flat_structure. + DATA(lo_struct) = CAST cl_abap_structdescr( + cl_abap_typedescr=>describe_by_name( '{{P}}STOCK_LINE' ) ). + DATA(lt_comp) = lo_struct->get_components( ). + LOOP AT lt_comp INTO DATA(ls_comp). + cl_abap_unit_assert=>assert_equals( + exp = cl_abap_typedescr=>kind_elem + act = ls_comp-type->kind + msg = |Component { ls_comp-name } is not elementary| ). + ENDLOOP. + ENDMETHOD. + + METHOD audit_structure. + DATA(lo_struct) = CAST cl_abap_structdescr( + cl_abap_typedescr=>describe_by_name( '{{P}}AUDIT_INFO' ) ). + DATA(lt_fields) = lo_struct->get_ddic_field_list( ). + cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_fields ) ). + READ TABLE lt_fields INTO DATA(ls_field) WITH KEY fieldname = 'CREATED_BY'. + cl_abap_unit_assert=>assert_subrc( exp = 0 msg = 'Component CREATED_BY is missing' ). + cl_abap_unit_assert=>assert_equals( exp = 'CHAR' act = ls_field-datatype ). + cl_abap_unit_assert=>assert_equals( exp = 12 act = CONV i( ls_field-leng ) ). + READ TABLE lt_fields INTO ls_field WITH KEY fieldname = 'CREATED_ON'. + cl_abap_unit_assert=>assert_subrc( exp = 0 msg = 'Component CREATED_ON is missing' ). + cl_abap_unit_assert=>assert_equals( exp = 'DATS' act = ls_field-datatype ). + cl_abap_unit_assert=>assert_equals( exp = 8 act = CONV i( ls_field-leng ) ). + ENDMETHOD. + + METHOD audit_matches. + DATA(lo_line) = CAST cl_abap_structdescr( + cl_abap_typedescr=>describe_by_name( '{{P}}STOCK_LINE' ) ). + DATA(lo_audit) = CAST cl_abap_structdescr( + cl_abap_typedescr=>describe_by_name( '{{P}}AUDIT_INFO' ) ). + DATA(lt_line) = lo_line->get_ddic_field_list( ). + DATA(lt_audit) = lo_audit->get_ddic_field_list( ). + LOOP AT lt_audit INTO DATA(ls_audit). + READ TABLE lt_line INTO DATA(ls_line) WITH KEY fieldname = ls_audit-fieldname. + cl_abap_unit_assert=>assert_subrc( + exp = 0 msg = |Component { ls_audit-fieldname } is missing| ). + cl_abap_unit_assert=>assert_equals( exp = ls_audit-leng act = ls_line-leng ). + cl_abap_unit_assert=>assert_equals( exp = ls_audit-datatype act = ls_line-datatype ). + ENDLOOP. + ENDMETHOD. + + METHOD read_stock_row. + DATA ls_line TYPE {{p}}stock_line. + SELECT SINGLE material, plant, net_amount, currency, created_by, created_on + FROM {{p}}stock + INTO @ls_line + WHERE material = 'MAT-1' AND plant = 'P001'. + cl_abap_unit_assert=>assert_equals( exp = 'MAT-1' act = ls_line-material ). + cl_abap_unit_assert=>assert_equals( exp = 'P001' act = ls_line-plant ). + cl_abap_unit_assert=>assert_equals( exp = 'EUR' act = ls_line-currency ). + cl_abap_unit_assert=>assert_equals( exp = 'USER1' act = ls_line-created_by ). + cl_abap_unit_assert=>assert_equals( + exp = CONV d( '20240115' ) act = ls_line-created_on ). + cl_abap_unit_assert=>assert_equals( + exp = CONV decfloat34( '123.45' ) + act = CONV decfloat34( ls_line-net_amount ) ). + ENDMETHOD. +ENDCLASS. diff --git a/tasks_gen/train/G1903/mutation.json b/tasks_gen/train/G1903/mutation.json new file mode 100644 index 0000000..699c327 --- /dev/null +++ b/tasks_gen/train/G1903/mutation.json @@ -0,0 +1,55 @@ +{ + "task": "G1903", + "mutants": [ + { + "object": "{{P}}AUDIT_INFO", + "mutant": "line 4: abap.char(12) -> abap.char(11) (length)", + "status": "killed", + "hidden": "7/9", + "failed_tests": [ + "AUDIT_MATCHES", + "AUDIT_STRUCTURE" + ] + }, + { + "object": "{{P}}STOCK_LINE", + "mutant": "line 4: abap.char(18) -> abap.numc(18) (type)", + "status": "invalid", + "hidden": "0/0", + "failed_tests": [] + }, + { + "object": "{{P}}AUDIT_INFO", + "mutant": "line 4: abap.char(12) -> abap.numc(12) (type)", + "status": "killed", + "hidden": "7/9", + "failed_tests": [ + "AUDIT_MATCHES", + "AUDIT_STRUCTURE" + ] + }, + { + "object": "{{P}}STOCK_LINE", + "mutant": "line 6: abap.dec(9,2) -> abap.dec(9,3) (decimals)", + "status": "killed", + "hidden": "8/9", + "failed_tests": [ + "AMOUNT_TYPE" + ] + }, + { + "object": "{{P}}AUDIT_INFO", + "mutant": "line 5: abap.dats -> abap.tims (type)", + "status": "killed", + "hidden": "7/9", + "failed_tests": [ + "AUDIT_MATCHES", + "AUDIT_STRUCTURE" + ] + } + ], + "valid": 4, + "killed": 4, + "kill_rate": 1.0, + "ok": true +} \ No newline at end of file diff --git a/tasks_gen/train/G1903/reference/audit_info.ddls.asddls b/tasks_gen/train/G1903/reference/audit_info.ddls.asddls new file mode 100644 index 0000000..08ba1e8 --- /dev/null +++ b/tasks_gen/train/G1903/reference/audit_info.ddls.asddls @@ -0,0 +1,6 @@ +@EndUserText.label : 'Audit information' +@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE +define structure {{p}}audit_info { + created_by : abap.char(12); + created_on : abap.dats; +} diff --git a/tasks_gen/train/G1903/reference/stock_line.ddls.asddls b/tasks_gen/train/G1903/reference/stock_line.ddls.asddls new file mode 100644 index 0000000..bd66089 --- /dev/null +++ b/tasks_gen/train/G1903/reference/stock_line.ddls.asddls @@ -0,0 +1,10 @@ +@EndUserText.label : 'Stock position line' +@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE +define structure {{p}}stock_line { + material : abap.char(18); + plant : abap.char(4); + net_amount : abap.dec(9,2); + currency : abap.char(5); + created_by : abap.char(12); + created_on : abap.dats; +} diff --git a/tasks_gen/train/G1903/reference/t16_test.clas.abap b/tasks_gen/train/G1903/reference/t16_test.clas.abap new file mode 100644 index 0000000..7b8cc82 --- /dev/null +++ b/tasks_gen/train/G1903/reference/t16_test.clas.abap @@ -0,0 +1,68 @@ +CLASS {{p}}t16_test DEFINITION PUBLIC FINAL CREATE PUBLIC + FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. + + PRIVATE SECTION. + CLASS-DATA go_env TYPE REF TO if_osql_test_environment. + + CLASS-METHODS class_setup. + CLASS-METHODS class_teardown. + METHODS setup. + + METHODS six_components FOR TESTING. + METHODS reads_stock_line FOR TESTING. + METHODS audit_matches FOR TESTING. +ENDCLASS. + + +CLASS {{p}}t16_test IMPLEMENTATION. + + METHOD class_setup. + go_env = cl_osql_test_environment=>create( + i_dependency_list = VALUE #( ( '{{P}}STOCK' ) ) ). + ENDMETHOD. + + METHOD class_teardown. + go_env->destroy( ). + ENDMETHOD. + + METHOD setup. + go_env->clear_doubles( ). + DATA lt_stock TYPE STANDARD TABLE OF {{p}}stock WITH EMPTY KEY. + lt_stock = VALUE #( + ( material = 'MAT-1' plant = 'P001' net_amount = '123.45' + currency = 'EUR' created_by = 'USER1' created_on = '20240115' ) ). + go_env->insert_test_data( lt_stock ). + ENDMETHOD. + + METHOD six_components. + DATA(lo_struct) = CAST cl_abap_structdescr( + cl_abap_typedescr=>describe_by_name( '{{P}}STOCK_LINE' ) ). + DATA(lt_fields) = lo_struct->get_ddic_field_list( ). + cl_abap_unit_assert=>assert_equals( exp = 6 act = lines( lt_fields ) ). + ENDMETHOD. + + METHOD reads_stock_line. + DATA ls_line TYPE {{p}}stock_line. + SELECT SINGLE material, plant, net_amount, currency, created_by, created_on + FROM {{p}}stock + INTO @ls_line + WHERE material = 'MAT-1'. + cl_abap_unit_assert=>assert_equals( exp = 'MAT-1' act = ls_line-material ). + cl_abap_unit_assert=>assert_equals( exp = 'EUR' act = ls_line-currency ). + ENDMETHOD. + + METHOD audit_matches. + DATA(lo_line) = CAST cl_abap_structdescr( + cl_abap_typedescr=>describe_by_name( '{{P}}STOCK_LINE' ) ). + DATA(lo_audit) = CAST cl_abap_structdescr( + cl_abap_typedescr=>describe_by_name( '{{P}}AUDIT_INFO' ) ). + DATA(lt_line) = lo_line->get_ddic_field_list( ). + DATA(lt_audit) = lo_audit->get_ddic_field_list( ). + LOOP AT lt_audit INTO DATA(ls_audit). + READ TABLE lt_line INTO DATA(ls_line) WITH KEY fieldname = ls_audit-fieldname. + cl_abap_unit_assert=>assert_subrc( + exp = 0 msg = |Component { ls_audit-fieldname } is missing| ). + cl_abap_unit_assert=>assert_equals( exp = ls_audit-leng act = ls_line-leng ). + ENDLOOP. + ENDMETHOD. +ENDCLASS. diff --git a/tasks_gen/train/G1903/seed/stock.tabl.asabap b/tasks_gen/train/G1903/seed/stock.tabl.asabap new file mode 100644 index 0000000..660fd69 --- /dev/null +++ b/tasks_gen/train/G1903/seed/stock.tabl.asabap @@ -0,0 +1,14 @@ +@EndUserText.label : 'Stock position' +@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE +@AbapCatalog.tableCategory : #TRANSPARENT +@AbapCatalog.deliveryClass : #A +@AbapCatalog.dataMaintenance : #RESTRICTED +define table {{p}}stock { + key client : abap.clnt not null; + key material : abap.char(18) not null; + key plant : abap.char(4) not null; + net_amount : abap.dec(9,2); + currency : abap.char(5); + created_by : abap.char(12); + created_on : abap.dats; +} diff --git a/tasks_gen/train/G1903/spec.md b/tasks_gen/train/G1903/spec.md new file mode 100644 index 0000000..f9f2f95 --- /dev/null +++ b/tasks_gen/train/G1903/spec.md @@ -0,0 +1,59 @@ +# 1. Goal +A stock report and an OData service must use the same line type for warehouse +stock positions. Create the DDIC structure {{P}}STOCK_LINE and the DDIC +structure {{P}}AUDIT_INFO in package $TMP. + +# 2. Open questions +None. + +# 3. Context +- The table {{P}}STOCK exists in package $TMP. Its columns are, in this order: + MATERIAL (CHAR 18), PLANT (CHAR 4), NET_AMOUNT (DEC 9,2), CURRENCY (CHAR 5), + CREATED_BY (CHAR 12), CREATED_ON (DATS). The key is CLIENT, MATERIAL and + PLANT. +- The table {{P}}STOCK is empty. Test data comes from test doubles. +- {{P}}AUDIT_INFO is the audit part that other objects use, for example a + change log view and a service. {{P}}STOCK_LINE must carry the same audit + part. +- Both structures are used as line types in ABAP SQL and in an OData service. + +# 4. Contract +- Create the DDIC structure {{P}}STOCK_LINE in package $TMP. + Components, in this order: material (CHAR 18), plant (CHAR 4), + net_amount (DEC 9,2), currency (CHAR 5), created_by (CHAR 12), + created_on (DATS). +- Create the DDIC structure {{P}}AUDIT_INFO in package $TMP. + Components, in this order: created_by (CHAR 12), created_on (DATS). +- {{P}}STOCK_LINE contains all six components itself. It does not use a DDIC + include. + +# 5. Business rules +1. {{P}}STOCK_LINE has exactly six components. +2. The components of {{P}}STOCK_LINE are, in this order: material, plant, + net_amount, currency, created_by, created_on. +3. material is a character field of 18 characters. +4. plant is a character field of 4 characters. +5. net_amount is a packed number with 9 digits and 2 decimal places. +6. currency is a character field of 5 characters. +7. created_by is a character field of 12 characters. +8. created_on is a date field of type DATS. +9. {{P}}AUDIT_INFO has exactly two components, in this order: created_by + (CHAR 12) and created_on (DATS). +10. Every component of {{P}}STOCK_LINE is elementary. {{P}}STOCK_LINE is a + flat structure. +11. The components created_by and created_on of {{P}}STOCK_LINE have the same + data type and the same length as the components of {{P}}AUDIT_INFO. +12. A row of {{P}}STOCK can be read into a work area of type {{P}}STOCK_LINE + with ABAP SQL. + +# 6. Constraints +- Release target: SAP_BASIS 816 (ABAP Platform 2025). +- Package $TMP. Do not use transports. +- Coding standards: Clean ABAP. No ATC priority 1 or 2 findings. +- Out of scope: do not change the table {{P}}STOCK. + +# 7. Acceptance +- Both structures are active and have no syntax error. +- The hidden tests pass. +- Write ABAP Unit tests with CL_OSQL_TEST_ENVIRONMENT in a global test class + (for example {{P}}T16_TEST). The tests must prove rules 1 to 12. diff --git a/tasks_gen/train/G1903/task.json b/tasks_gen/train/G1903/task.json new file mode 100644 index 0000000..f4c9150 --- /dev/null +++ b/tasks_gen/train/G1903/task.json @@ -0,0 +1,74 @@ +{ + "id": "G1903", + "category": "B", + "object_type": "STRU", + "difficulty": 2, + "release_target": "v816", + "expected_outcome": "implement", + "budget": { + "max_tool_calls": 60, + "max_activations": 15 + }, + "seed": [ + { + "type": "TABL", + "name": "{{P}}STOCK", + "file": "seed/stock.tabl.asabap", + "description": "Stock positions" + } + ], + "contract": [ + { + "type": "STRU", + "name": "{{P}}STOCK_LINE", + "fields": [ + "material", + "plant", + "net_amount", + "currency", + "created_by", + "created_on" + ] + }, + { + "type": "STRU", + "name": "{{P}}AUDIT_INFO", + "fields": [ + "created_by", + "created_on" + ] + } + ], + "out_of_scope": [ + "{{P}}STOCK" + ], + "hidden_tests": [ + { + "type": "CLAS", + "name": "{{P}}T16_HIDDEN", + "file": "hidden/t16_hidden.clas.abap", + "description": "T16 hidden tests" + } + ], + "reference": [ + { + "type": "STRU", + "name": "{{P}}AUDIT_INFO", + "file": "reference/audit_info.ddls.asddls", + "description": "Audit information structure" + }, + { + "type": "STRU", + "name": "{{P}}STOCK_LINE", + "file": "reference/stock_line.ddls.asddls", + "description": "Stock line structure" + }, + { + "type": "CLAS", + "name": "{{P}}T16_TEST", + "file": "reference/t16_test.clas.abap", + "description": "T16 own tests" + } + ], + "craft_checks": [] +} \ No newline at end of file diff --git a/tasks_gen/train/G1904/generation.json b/tasks_gen/train/G1904/generation.json new file mode 100644 index 0000000..e99b0cb --- /dev/null +++ b/tasks_gen/train/G1904/generation.json @@ -0,0 +1,45 @@ +{ + "id": "G1904", + "pool": "train", + "object_type": "CLAS", + "category": "D", + "attempts": [ + { + "stage": "validate", + "oracle": 100.0, + "null": 0, + "mutation": { + "valid": 0, + "killed": 0, + "ok": false + } + }, + { + "stage": "validate", + "oracle": 100.0, + "null": 0, + "mutation": { + "valid": 0, + "killed": 0, + "ok": false + } + }, + { + "stage": "validate", + "oracle": 0, + "null": 0 + }, + { + "stage": "validate", + "oracle": 100.0, + "null": 0, + "mutation": { + "valid": 0, + "killed": 0, + "ok": false + } + } + ], + "accepted": true, + "note": "mutation check rerun after exception-class mutants were added (3 of 3 killed)" +} \ No newline at end of file diff --git a/tasks_gen/train/G1904/hidden/d02_hidden.clas.abap b/tasks_gen/train/G1904/hidden/d02_hidden.clas.abap new file mode 100644 index 0000000..59ead79 --- /dev/null +++ b/tasks_gen/train/G1904/hidden/d02_hidden.clas.abap @@ -0,0 +1,259 @@ +CLASS {{p}}d02_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC + FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. + PRIVATE SECTION. + METHODS unknown_material_text FOR TESTING. + METHODS zero_quantity_text FOR TESTING. + METHODS over_limit_text FOR TESTING. + METHODS default_text_cases FOR TESTING. + METHODS context_of_each_case FOR TESTING. + METHODS unknown_case_keeps_data FOR TESTING. + METHODS text_via_cx_root FOR TESTING. + METHODS case_constant_values FOR TESTING. + METHODS is_static_check_exception FOR TESTING. + METHODS instances_keep_own_data FOR TESTING. + METHODS same_data_different_case FOR TESTING. + METHODS text_exact_length FOR TESTING. + METHODS caught_error + IMPORTING iv_case TYPE {{p}}if_issue_error_info=>ty_case + iv_material TYPE string + iv_quantity TYPE i + iv_limit TYPE i + RETURNING VALUE(ro_error) TYPE REF TO {{p}}cx_issue_error. +ENDCLASS. + + +CLASS {{p}}d02_hidden IMPLEMENTATION. + + METHOD caught_error. + TRY. + RAISE EXCEPTION TYPE {{p}}cx_issue_error + EXPORTING + iv_case = iv_case + iv_material = iv_material + iv_quantity = iv_quantity + iv_limit = iv_limit. + CATCH {{p}}cx_issue_error INTO ro_error. + ENDTRY. + ENDMETHOD. + + METHOD unknown_material_text. + DATA(lo_error) = caught_error( iv_case = {{p}}cx_issue_error=>c_case-unknown_material + iv_material = 'MAT-1' + iv_quantity = 5 + iv_limit = 100 ). + cl_abap_unit_assert=>assert_equals( exp = `Material MAT-1 is not known` + act = lo_error->get_text( ) ). + ENDMETHOD. + + METHOD zero_quantity_text. + DATA(lo_error) = caught_error( iv_case = {{p}}cx_issue_error=>c_case-zero_quantity + iv_material = 'MAT-2' + iv_quantity = 0 + iv_limit = 50 ). + cl_abap_unit_assert=>assert_equals( exp = `Quantity must not be zero for material MAT-2` + act = lo_error->get_text( ) ). + ENDMETHOD. + + METHOD over_limit_text. + DATA(lo_error) = caught_error( iv_case = {{p}}cx_issue_error=>c_case-over_limit + iv_material = 'MAT-3' + iv_quantity = 120 + iv_limit = 100 ). + cl_abap_unit_assert=>assert_equals( exp = `Quantity 120 exceeds limit 100 for material MAT-3` + act = lo_error->get_text( ) ). + + DATA(lo_big) = caught_error( iv_case = {{p}}cx_issue_error=>c_case-over_limit + iv_material = 'M-BIG' + iv_quantity = 12345 + iv_limit = 67890 ). + cl_abap_unit_assert=>assert_equals( exp = `Quantity 12345 exceeds limit 67890 for material M-BIG` + act = lo_big->get_text( ) ). + ENDMETHOD. + + METHOD default_text_cases. + DATA(lo_other) = caught_error( iv_case = 'SOMETHING_ELSE' + iv_material = 'MAT-4' + iv_quantity = 7 + iv_limit = 70 ). + cl_abap_unit_assert=>assert_equals( exp = `Stock issue failed for material MAT-4` + act = lo_other->get_text( ) ). + + DATA(lo_empty) = caught_error( iv_case = '' + iv_material = 'MAT-5' + iv_quantity = 1 + iv_limit = 10 ). + cl_abap_unit_assert=>assert_equals( exp = `Stock issue failed for material MAT-5` + act = lo_empty->get_text( ) ). + ENDMETHOD. + + METHOD context_of_each_case. + DATA(lo_unknown) = caught_error( iv_case = {{p}}cx_issue_error=>c_case-unknown_material + iv_material = 'M-1' + iv_quantity = 11 + iv_limit = 111 ). + DATA(lo_zero) = caught_error( iv_case = {{p}}cx_issue_error=>c_case-zero_quantity + iv_material = 'M-2' + iv_quantity = 0 + iv_limit = 222 ). + DATA(lo_over) = caught_error( iv_case = {{p}}cx_issue_error=>c_case-over_limit + iv_material = 'M-3' + iv_quantity = 33 + iv_limit = 333 ). + DATA lo_info TYPE REF TO {{p}}if_issue_error_info. + + lo_info = lo_unknown. + cl_abap_unit_assert=>assert_equals( exp = {{p}}cx_issue_error=>c_case-unknown_material + act = lo_info->get_case( ) ). + cl_abap_unit_assert=>assert_equals( exp = `M-1` act = lo_info->get_material( ) ). + cl_abap_unit_assert=>assert_equals( exp = 11 act = lo_info->get_quantity( ) ). + cl_abap_unit_assert=>assert_equals( exp = 111 act = lo_info->get_limit( ) ). + + lo_info = lo_zero. + cl_abap_unit_assert=>assert_equals( exp = {{p}}cx_issue_error=>c_case-zero_quantity + act = lo_info->get_case( ) ). + cl_abap_unit_assert=>assert_equals( exp = `M-2` act = lo_info->get_material( ) ). + cl_abap_unit_assert=>assert_equals( exp = 0 act = lo_info->get_quantity( ) ). + cl_abap_unit_assert=>assert_equals( exp = 222 act = lo_info->get_limit( ) ). + + lo_info = lo_over. + cl_abap_unit_assert=>assert_equals( exp = {{p}}cx_issue_error=>c_case-over_limit + act = lo_info->get_case( ) ). + cl_abap_unit_assert=>assert_equals( exp = `M-3` act = lo_info->get_material( ) ). + cl_abap_unit_assert=>assert_equals( exp = 33 act = lo_info->get_quantity( ) ). + cl_abap_unit_assert=>assert_equals( exp = 333 act = lo_info->get_limit( ) ). + ENDMETHOD. + + METHOD unknown_case_keeps_data. + DATA(lo_error) = caught_error( iv_case = 'SOMETHING_ELSE' + iv_material = 'M-X' + iv_quantity = 55 + iv_limit = 66 ). + DATA lo_info TYPE REF TO {{p}}if_issue_error_info. + lo_info = lo_error. + cl_abap_unit_assert=>assert_equals( exp = 'SOMETHING_ELSE' act = lo_info->get_case( ) ). + cl_abap_unit_assert=>assert_equals( exp = `M-X` act = lo_info->get_material( ) ). + cl_abap_unit_assert=>assert_equals( exp = 55 act = lo_info->get_quantity( ) ). + cl_abap_unit_assert=>assert_equals( exp = 66 act = lo_info->get_limit( ) ). + cl_abap_unit_assert=>assert_equals( exp = `Stock issue failed for material M-X` + act = lo_error->get_text( ) ). + ENDMETHOD. + + METHOD text_via_cx_root. + DATA(lo_error) = caught_error( iv_case = {{p}}cx_issue_error=>c_case-zero_quantity + iv_material = 'MAT-6' + iv_quantity = 0 + iv_limit = 60 ). + DATA lo_root TYPE REF TO cx_root. + lo_root = lo_error. + cl_abap_unit_assert=>assert_equals( exp = `Quantity must not be zero for material MAT-6` + act = lo_root->get_text( ) ). + ENDMETHOD. + + METHOD case_constant_values. + cl_abap_unit_assert=>assert_equals( exp = 'UNKNOWN_MATERIAL' + act = {{p}}cx_issue_error=>c_case-unknown_material ). + cl_abap_unit_assert=>assert_equals( exp = 'ZERO_QUANTITY' + act = {{p}}cx_issue_error=>c_case-zero_quantity ). + cl_abap_unit_assert=>assert_equals( exp = 'OVER_LIMIT' + act = {{p}}cx_issue_error=>c_case-over_limit ). + ENDMETHOD. + + METHOD is_static_check_exception. + DATA lo_caught TYPE REF TO cx_static_check. + TRY. + RAISE EXCEPTION TYPE {{p}}cx_issue_error + EXPORTING + iv_case = {{p}}cx_issue_error=>c_case-unknown_material + iv_material = 'MAT-7' + iv_quantity = 3 + iv_limit = 30. + CATCH cx_static_check INTO lo_caught. + ENDTRY. + cl_abap_unit_assert=>assert_bound( act = lo_caught ). + ENDMETHOD. + + METHOD instances_keep_own_data. + DATA(lo_first) = caught_error( iv_case = {{p}}cx_issue_error=>c_case-unknown_material + iv_material = 'FIRST' + iv_quantity = 1 + iv_limit = 10 ). + DATA(lo_second) = caught_error( iv_case = {{p}}cx_issue_error=>c_case-over_limit + iv_material = 'SECOND' + iv_quantity = 2 + iv_limit = 20 ). + DATA lo_info TYPE REF TO {{p}}if_issue_error_info. + + lo_info = lo_first. + cl_abap_unit_assert=>assert_equals( exp = `FIRST` act = lo_info->get_material( ) ). + cl_abap_unit_assert=>assert_equals( exp = `Material FIRST is not known` + act = lo_first->get_text( ) ). + + lo_info = lo_second. + cl_abap_unit_assert=>assert_equals( exp = `SECOND` act = lo_info->get_material( ) ). + cl_abap_unit_assert=>assert_equals( exp = `Quantity 2 exceeds limit 20 for material SECOND` + act = lo_second->get_text( ) ). + + lo_info = lo_first. + cl_abap_unit_assert=>assert_equals( exp = `FIRST` act = lo_info->get_material( ) ). + cl_abap_unit_assert=>assert_equals( exp = 1 act = lo_info->get_quantity( ) ). + ENDMETHOD. + + METHOD same_data_different_case. + DATA lv_material TYPE string. + DATA lv_quantity TYPE i. + DATA lv_limit TYPE i. + lv_material = 'MAT-S'. + lv_quantity = 5. + lv_limit = 10. + + DATA(lo_unknown) = caught_error( iv_case = {{p}}cx_issue_error=>c_case-unknown_material + iv_material = lv_material + iv_quantity = lv_quantity + iv_limit = lv_limit ). + DATA(lo_zero) = caught_error( iv_case = {{p}}cx_issue_error=>c_case-zero_quantity + iv_material = lv_material + iv_quantity = lv_quantity + iv_limit = lv_limit ). + DATA(lo_over) = caught_error( iv_case = {{p}}cx_issue_error=>c_case-over_limit + iv_material = lv_material + iv_quantity = lv_quantity + iv_limit = lv_limit ). + + cl_abap_unit_assert=>assert_equals( exp = `Material MAT-S is not known` + act = lo_unknown->get_text( ) ). + cl_abap_unit_assert=>assert_equals( exp = `Quantity must not be zero for material MAT-S` + act = lo_zero->get_text( ) ). + cl_abap_unit_assert=>assert_equals( exp = `Quantity 5 exceeds limit 10 for material MAT-S` + act = lo_over->get_text( ) ). + ENDMETHOD. + + METHOD text_exact_length. + DATA(lo_unknown) = caught_error( iv_case = {{p}}cx_issue_error=>c_case-unknown_material + iv_material = 'MAT-1' + iv_quantity = 5 + iv_limit = 100 ). + DATA(lo_zero) = caught_error( iv_case = {{p}}cx_issue_error=>c_case-zero_quantity + iv_material = 'MAT-2' + iv_quantity = 0 + iv_limit = 50 ). + DATA(lo_over) = caught_error( iv_case = {{p}}cx_issue_error=>c_case-over_limit + iv_material = 'MAT-3' + iv_quantity = 120 + iv_limit = 100 ). + + DATA lv_unknown TYPE string. + DATA lv_zero TYPE string. + DATA lv_over TYPE string. + lv_unknown = `Material MAT-1 is not known`. + lv_zero = `Quantity must not be zero for material MAT-2`. + lv_over = `Quantity 120 exceeds limit 100 for material MAT-3`. + + cl_abap_unit_assert=>assert_equals( exp = strlen( lv_unknown ) + act = strlen( lo_unknown->get_text( ) ) ). + cl_abap_unit_assert=>assert_equals( exp = strlen( lv_zero ) + act = strlen( lo_zero->get_text( ) ) ). + cl_abap_unit_assert=>assert_equals( exp = strlen( lv_over ) + act = strlen( lo_over->get_text( ) ) ). + ENDMETHOD. + +ENDCLASS. diff --git a/tasks_gen/train/G1904/mutation.json b/tasks_gen/train/G1904/mutation.json new file mode 100644 index 0000000..0ba68ea --- /dev/null +++ b/tasks_gen/train/G1904/mutation.json @@ -0,0 +1,36 @@ +{ + "task": "G1904", + "mutants": [ + { + "object": "{{P}}CX_ISSUE_ERROR", + "mutant": "line 12: VALUE 'UNKNOWN_MATERIAL' -> VALUE 'ZNKNOWN_MATERIAL' (lit)", + "status": "killed", + "hidden": "11/12", + "failed_tests": [ + "CASE_CONSTANT_VALUES" + ] + }, + { + "object": "{{P}}CX_ISSUE_ERROR", + "mutant": "line 13: VALUE 'ZERO_QUANTITY' -> VALUE 'YERO_QUANTITY' (lit)", + "status": "killed", + "hidden": "11/12", + "failed_tests": [ + "CASE_CONSTANT_VALUES" + ] + }, + { + "object": "{{P}}CX_ISSUE_ERROR", + "mutant": "line 14: VALUE 'OVER_LIMIT' -> VALUE 'ZVER_LIMIT' (lit)", + "status": "killed", + "hidden": "11/12", + "failed_tests": [ + "CASE_CONSTANT_VALUES" + ] + } + ], + "valid": 3, + "killed": 3, + "kill_rate": 1.0, + "ok": true +} \ No newline at end of file diff --git a/tasks_gen/train/G1904/reference/cx_issue_error.clas.abap b/tasks_gen/train/G1904/reference/cx_issue_error.clas.abap new file mode 100644 index 0000000..4a4a029 --- /dev/null +++ b/tasks_gen/train/G1904/reference/cx_issue_error.clas.abap @@ -0,0 +1,73 @@ +CLASS {{p}}cx_issue_error DEFINITION + PUBLIC + INHERITING FROM cx_static_check + FINAL + CREATE PUBLIC. + + PUBLIC SECTION. + INTERFACES {{p}}if_issue_error_info. + + CONSTANTS: + BEGIN OF c_case, + unknown_material TYPE {{p}}if_issue_error_info=>ty_case VALUE 'UNKNOWN_MATERIAL', + zero_quantity TYPE {{p}}if_issue_error_info=>ty_case VALUE 'ZERO_QUANTITY', + over_limit TYPE {{p}}if_issue_error_info=>ty_case VALUE 'OVER_LIMIT', + END OF c_case. + + METHODS constructor + IMPORTING + iv_case TYPE {{p}}if_issue_error_info=>ty_case + iv_material TYPE string + iv_quantity TYPE i + iv_limit TYPE i. + + METHODS get_text REDEFINITION. + + PRIVATE SECTION. + DATA mv_case TYPE {{p}}if_issue_error_info=>ty_case. + DATA mv_material TYPE string. + DATA mv_quantity TYPE i. + DATA mv_limit TYPE i. +ENDCLASS. + + +CLASS {{p}}cx_issue_error IMPLEMENTATION. + + METHOD constructor. + super->constructor( ). + mv_case = iv_case. + mv_material = iv_material. + mv_quantity = iv_quantity. + mv_limit = iv_limit. + ENDMETHOD. + + METHOD {{p}}if_issue_error_info~get_case. + rv_case = mv_case. + ENDMETHOD. + + METHOD {{p}}if_issue_error_info~get_material. + rv_material = mv_material. + ENDMETHOD. + + METHOD {{p}}if_issue_error_info~get_quantity. + rv_quantity = mv_quantity. + ENDMETHOD. + + METHOD {{p}}if_issue_error_info~get_limit. + rv_limit = mv_limit. + ENDMETHOD. + + METHOD get_text. + CASE mv_case. + WHEN c_case-unknown_material. + result = |Material { mv_material } is not known|. + WHEN c_case-zero_quantity. + result = |Quantity must not be zero for material { mv_material }|. + WHEN c_case-over_limit. + result = |Quantity { mv_quantity } exceeds limit { mv_limit } for material { mv_material }|. + WHEN OTHERS. + result = |Stock issue failed for material { mv_material }|. + ENDCASE. + ENDMETHOD. + +ENDCLASS. diff --git a/tasks_gen/train/G1904/reference/cx_issue_error.testclasses.abap b/tasks_gen/train/G1904/reference/cx_issue_error.testclasses.abap new file mode 100644 index 0000000..8de7063 --- /dev/null +++ b/tasks_gen/train/G1904/reference/cx_issue_error.testclasses.abap @@ -0,0 +1,81 @@ +CLASS ltc_issue_error DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. + PRIVATE SECTION. + METHODS unknown_material_text FOR TESTING. + METHODS zero_quantity_text FOR TESTING. + METHODS over_limit_text FOR TESTING. + METHODS default_text FOR TESTING. + METHODS keeps_context_data FOR TESTING. + METHODS caught_error + IMPORTING iv_case TYPE {{p}}if_issue_error_info=>ty_case + iv_material TYPE string + iv_quantity TYPE i + iv_limit TYPE i + RETURNING VALUE(ro_error) TYPE REF TO {{p}}cx_issue_error. +ENDCLASS. + + +CLASS ltc_issue_error IMPLEMENTATION. + + METHOD caught_error. + TRY. + RAISE EXCEPTION TYPE {{p}}cx_issue_error + EXPORTING + iv_case = iv_case + iv_material = iv_material + iv_quantity = iv_quantity + iv_limit = iv_limit. + CATCH {{p}}cx_issue_error INTO ro_error. + ENDTRY. + ENDMETHOD. + + METHOD unknown_material_text. + DATA(lo_error) = caught_error( iv_case = {{p}}cx_issue_error=>c_case-unknown_material + iv_material = 'MAT-A' + iv_quantity = 1 + iv_limit = 10 ). + cl_abap_unit_assert=>assert_equals( exp = `Material MAT-A is not known` + act = lo_error->get_text( ) ). + ENDMETHOD. + + METHOD zero_quantity_text. + DATA(lo_error) = caught_error( iv_case = {{p}}cx_issue_error=>c_case-zero_quantity + iv_material = 'MAT-B' + iv_quantity = 0 + iv_limit = 20 ). + cl_abap_unit_assert=>assert_equals( exp = `Quantity must not be zero for material MAT-B` + act = lo_error->get_text( ) ). + ENDMETHOD. + + METHOD over_limit_text. + DATA(lo_error) = caught_error( iv_case = {{p}}cx_issue_error=>c_case-over_limit + iv_material = 'MAT-C' + iv_quantity = 30 + iv_limit = 20 ). + cl_abap_unit_assert=>assert_equals( exp = `Quantity 30 exceeds limit 20 for material MAT-C` + act = lo_error->get_text( ) ). + ENDMETHOD. + + METHOD default_text. + DATA(lo_error) = caught_error( iv_case = 'OTHER' + iv_material = 'MAT-D' + iv_quantity = 5 + iv_limit = 50 ). + cl_abap_unit_assert=>assert_equals( exp = `Stock issue failed for material MAT-D` + act = lo_error->get_text( ) ). + ENDMETHOD. + + METHOD keeps_context_data. + DATA(lo_error) = caught_error( iv_case = {{p}}cx_issue_error=>c_case-over_limit + iv_material = 'MAT-E' + iv_quantity = 99 + iv_limit = 90 ). + DATA lo_info TYPE REF TO {{p}}if_issue_error_info. + lo_info = lo_error. + cl_abap_unit_assert=>assert_equals( exp = {{p}}cx_issue_error=>c_case-over_limit + act = lo_info->get_case( ) ). + cl_abap_unit_assert=>assert_equals( exp = 'MAT-E' act = lo_info->get_material( ) ). + cl_abap_unit_assert=>assert_equals( exp = 99 act = lo_info->get_quantity( ) ). + cl_abap_unit_assert=>assert_equals( exp = 90 act = lo_info->get_limit( ) ). + ENDMETHOD. + +ENDCLASS. diff --git a/tasks_gen/train/G1904/seed/if_issue_error_info.intf.abap b/tasks_gen/train/G1904/seed/if_issue_error_info.intf.abap new file mode 100644 index 0000000..1d1699c --- /dev/null +++ b/tasks_gen/train/G1904/seed/if_issue_error_info.intf.abap @@ -0,0 +1,12 @@ +INTERFACE {{p}}if_issue_error_info PUBLIC. + TYPES ty_case TYPE c LENGTH 20. + + METHODS get_case + RETURNING VALUE(rv_case) TYPE ty_case. + METHODS get_material + RETURNING VALUE(rv_material) TYPE string. + METHODS get_quantity + RETURNING VALUE(rv_quantity) TYPE i. + METHODS get_limit + RETURNING VALUE(rv_limit) TYPE i. +ENDINTERFACE. diff --git a/tasks_gen/train/G1904/spec.md b/tasks_gen/train/G1904/spec.md new file mode 100644 index 0000000..438bdec --- /dev/null +++ b/tasks_gen/train/G1904/spec.md @@ -0,0 +1,58 @@ +# 1. Goal +A stock issue program must stop with a clear reason when it cannot issue a +quantity of a material. The caller needs one exception class that carries the +reason and the data of the failed issue. + +# 2. Open questions +None. + +# 3. Context +- The interface {{P}}IF_ISSUE_ERROR_INFO exists in package $TMP. It is active. +- The interface has the type TY_CASE (CHAR 20) and the methods GET_CASE, + GET_MATERIAL, GET_QUANTITY and GET_LIMIT. +- The exception class {{P}}CX_ISSUE_ERROR is raised by the stock issue program + and caught by the caller. + +# 4. Contract +- Create the class {{P}}CX_ISSUE_ERROR in package $TMP. +- The class inherits from CX_STATIC_CHECK. +- The class is public, final, and has a public constructor. +- The class implements {{P}}IF_ISSUE_ERROR_INFO. +- The class has the constant structure C_CASE. Its components are + UNKNOWN_MATERIAL, ZERO_QUANTITY and OVER_LIMIT. The type of each component is + {{P}}IF_ISSUE_ERROR_INFO=>TY_CASE. The value of each component is its name. +- The constructor has these importing parameters, in this order: + IV_CASE (type {{P}}IF_ISSUE_ERROR_INFO=>TY_CASE), IV_MATERIAL (type STRING), + IV_QUANTITY (type I), IV_LIMIT (type I). +- The class redefines the inherited method GET_TEXT. GET_TEXT has no importing + parameter and returns the text as a string. +- Do not add other public methods. + +# 5. Business rules +1. The constructor stores IV_CASE, IV_MATERIAL, IV_QUANTITY and IV_LIMIT. +2. {{P}}IF_ISSUE_ERROR_INFO~GET_CASE returns the stored case, ~GET_MATERIAL the + stored material, ~GET_QUANTITY the stored quantity and ~GET_LIMIT the stored + limit. +3. GET_TEXT returns one text that depends on the stored case: + - C_CASE-UNKNOWN_MATERIAL: 'Material is not known' + - C_CASE-ZERO_QUANTITY: 'Quantity must not be zero for material ' + - C_CASE-OVER_LIMIT: 'Quantity exceeds limit for material + ' + - any other case, including an empty case: 'Stock issue failed for material + ' + , and are the stored values. Write the quantity + and the limit as plain digits, for example 120 and 100. The text has no + leading and no trailing blanks. +4. The class is a static check exception. A caller must handle it or declare it + in the RAISING clause. + +# 6. Constraints +- Release target: SAP_BASIS 816. +- Coding standards: Clean ABAP. Method length below 40 statements. No global + variables. No comment that restates the code. +- Out of scope: do not change {{P}}IF_ISSUE_ERROR_INFO. + +# 7. Acceptance +- The class is active and has no syntax error. +- The hidden tests pass. +- Write your own ABAP Unit tests for the class. diff --git a/tasks_gen/train/G1904/task.json b/tasks_gen/train/G1904/task.json new file mode 100644 index 0000000..12d696a --- /dev/null +++ b/tasks_gen/train/G1904/task.json @@ -0,0 +1,50 @@ +{ + "id": "G1904", + "category": "D", + "object_type": "CLAS", + "difficulty": 2, + "release_target": "v816", + "expected_outcome": "implement", + "budget": { + "max_tool_calls": 60, + "max_activations": 15 + }, + "seed": [ + { + "type": "INTF", + "name": "{{P}}IF_ISSUE_ERROR_INFO", + "file": "seed/if_issue_error_info.intf.abap", + "description": "Contract interface with the case type and the getters of the issue error" + } + ], + "contract": [ + { + "type": "CLAS", + "name": "{{P}}CX_ISSUE_ERROR", + "implements": "{{P}}IF_ISSUE_ERROR_INFO" + } + ], + "out_of_scope": [ + "{{P}}IF_ISSUE_ERROR_INFO" + ], + "hidden_tests": [ + { + "type": "CLAS", + "name": "{{P}}D02_HIDDEN", + "file": "hidden/d02_hidden.clas.abap", + "description": "D02 hidden tests for the issue error exception class" + } + ], + "reference": [ + { + "type": "CLAS", + "name": "{{P}}CX_ISSUE_ERROR", + "file": "reference/cx_issue_error.clas.abap", + "description": "Exception class with case constants, context data and a redefined GET_TEXT", + "testclasses_file": "reference/cx_issue_error.testclasses.abap" + } + ], + "craft_checks": [ + "method_length" + ] +} \ No newline at end of file diff --git a/tasks_gen/train/_logs/G1140.json b/tasks_gen/train/_logs/G1140.json new file mode 100644 index 0000000..50a5e85 --- /dev/null +++ b/tasks_gen/train/_logs/G1140.json @@ -0,0 +1,36 @@ +{ + "id": "G1140", + "pool": "train", + "object_type": "PROG", + "category": "B", + "attempts": [ + { + "stage": "bundle", + "errors": [ + "Too close to task G0020 (similarity spec 0.67, rules 0.49, names 1.00). Choose a different business topic and different object names.", + "Too close to task G0183 (similarity spec 0.60, rules 0.00, names 1.00). Choose a different business topic and different object names." + ], + "by_check": { + "extra": 2 + } + }, + { + "stage": "validate", + "oracle": 86.7, + "null": 0 + }, + { + "stage": "validate", + "oracle": 100.0, + "null": 0, + "mutation": { + "valid": 2, + "killed": 2, + "ok": true + } + } + ], + "accepted": true, + "error_kind": null, + "spent_total": 94.615 +} \ No newline at end of file diff --git a/tasks_gen/train/_logs/G1900.json b/tasks_gen/train/_logs/G1900.json new file mode 100644 index 0000000..abc5b82 --- /dev/null +++ b/tasks_gen/train/_logs/G1900.json @@ -0,0 +1,31 @@ +{ + "id": "G1900", + "pool": "train", + "object_type": "INTF", + "category": "A", + "attempts": [ + { + "stage": "validate", + "oracle": 0, + "null": 0 + }, + { + "stage": "validate", + "oracle": 80.6, + "null": 0 + }, + { + "stage": "validate", + "oracle": 100.0, + "null": 0, + "mutation": { + "valid": 5, + "killed": 5, + "ok": true + } + } + ], + "accepted": true, + "kind": "INTF", + "difficulty": 2 +} \ No newline at end of file diff --git a/tasks_gen/train/_logs/G1901.json b/tasks_gen/train/_logs/G1901.json new file mode 100644 index 0000000..42adf83 --- /dev/null +++ b/tasks_gen/train/_logs/G1901.json @@ -0,0 +1,21 @@ +{ + "id": "G1901", + "pool": "train", + "object_type": "TABL", + "category": "B", + "attempts": [ + { + "stage": "validate", + "oracle": 100.0, + "null": 0, + "mutation": { + "valid": 4, + "killed": 4, + "ok": true + } + } + ], + "accepted": true, + "kind": "TABL", + "difficulty": 2 +} \ No newline at end of file diff --git a/tasks_gen/train/_logs/G1902.json b/tasks_gen/train/_logs/G1902.json new file mode 100644 index 0000000..e8461e8 --- /dev/null +++ b/tasks_gen/train/_logs/G1902.json @@ -0,0 +1,26 @@ +{ + "id": "G1902", + "pool": "train", + "object_type": "MSAG", + "category": "D", + "attempts": [ + { + "stage": "validate", + "oracle": 85.0, + "null": 0 + }, + { + "stage": "validate", + "oracle": 100.0, + "null": 0, + "mutation": { + "valid": 5, + "killed": 5, + "ok": true + } + } + ], + "accepted": true, + "kind": "MSAG", + "difficulty": 2 +} \ No newline at end of file diff --git a/tasks_gen/train/_logs/G1903.json b/tasks_gen/train/_logs/G1903.json new file mode 100644 index 0000000..50ac95f --- /dev/null +++ b/tasks_gen/train/_logs/G1903.json @@ -0,0 +1,31 @@ +{ + "id": "G1903", + "pool": "train", + "object_type": "STRU", + "category": "B", + "attempts": [ + { + "stage": "validate", + "oracle": 0, + "null": 0 + }, + { + "stage": "validate", + "oracle": 0, + "null": 0 + }, + { + "stage": "validate", + "oracle": 100.0, + "null": 0, + "mutation": { + "valid": 4, + "killed": 4, + "ok": true + } + } + ], + "accepted": true, + "kind": "STRU", + "difficulty": 2 +} \ No newline at end of file diff --git a/tasks_gen/train/_logs/G1904.json b/tasks_gen/train/_logs/G1904.json new file mode 100644 index 0000000..e1ea90c --- /dev/null +++ b/tasks_gen/train/_logs/G1904.json @@ -0,0 +1,47 @@ +{ + "id": "G1904", + "pool": "train", + "object_type": "CLAS", + "category": "D", + "attempts": [ + { + "stage": "validate", + "oracle": 100.0, + "null": 0, + "mutation": { + "valid": 0, + "killed": 0, + "ok": false + } + }, + { + "stage": "validate", + "oracle": 100.0, + "null": 0, + "mutation": { + "valid": 0, + "killed": 0, + "ok": false + } + }, + { + "stage": "validate", + "oracle": 0, + "null": 0 + }, + { + "stage": "validate", + "oracle": 100.0, + "null": 0, + "mutation": { + "valid": 0, + "killed": 0, + "ok": false + } + } + ], + "accepted": true, + "note": "mutation check rerun after exception-class mutants were added (3 of 3 killed)", + "kind": "EXC", + "difficulty": 2 +} \ No newline at end of file diff --git a/tasks_gen/train/plan2.json b/tasks_gen/train/plan2.json new file mode 100644 index 0000000..0573413 --- /dev/null +++ b/tasks_gen/train/plan2.json @@ -0,0 +1,3756 @@ +{ + "slots": [ + { + "category": "B", + "object_type": "DDLS", + "topic": "CASE, cast and built-in functions", + "id": "G1400", + "run_base": 100000 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1401", + "run_base": 100040, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1402", + "run_base": 100080 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": null, + "id": "G1403", + "run_base": 100120 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": null, + "id": "G1404", + "run_base": 100160, + "difficulty": 3 + }, + { + "category": "F", + "object_type": "CLAS", + "topic": null, + "id": "G1405", + "run_base": 100200 + }, + { + "category": "G", + "object_type": "FUNC", + "topic": "release target v702", + "id": "G1406", + "run_base": 100240 + }, + { + "category": "H", + "object_type": "CLAS", + "topic": "missing rule for a boundary value", + "id": "G1407", + "run_base": 100280 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "association used from ABAP SQL with a path expression", + "id": "G1408", + "run_base": 100320 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1409", + "run_base": 100360 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1410", + "run_base": 100400, + "difficulty": 3 + }, + { + "category": "I", + "object_type": "DDLS", + "topic": "wrong join condition", + "id": "G1411", + "run_base": 100440 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": null, + "id": "G1412", + "run_base": 100480 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": null, + "id": "G1413", + "run_base": 100520, + "difficulty": 3 + }, + { + "category": "F", + "object_type": "CLAS", + "topic": null, + "id": "G1414", + "run_base": 100560 + }, + { + "category": "G", + "object_type": "FUNC", + "topic": "release target v740sp05", + "id": "G1415", + "run_base": 100600 + }, + { + "category": "H", + "object_type": "CLAS", + "topic": "two rules contradict for one case", + "id": "G1416", + "run_base": 100640 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "aggregation with HAVING", + "id": "G1417", + "run_base": 100680 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1418", + "run_base": 100720 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1419", + "run_base": 100760, + "difficulty": 3 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "CASE, cast and built-in functions", + "id": "G1420", + "run_base": 100800 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1421", + "run_base": 100840 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1422", + "run_base": 100880, + "difficulty": 3 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": null, + "id": "G1423", + "run_base": 100920 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": null, + "id": "G1424", + "run_base": 100960 + }, + { + "category": "F", + "object_type": "CLAS", + "topic": null, + "id": "G1425", + "run_base": 101000, + "difficulty": 3 + }, + { + "category": "G", + "object_type": "FUNC", + "topic": "release target v702", + "id": "G1426", + "run_base": 101040 + }, + { + "category": "H", + "object_type": "CLAS", + "topic": "missing rounding rule", + "id": "G1427", + "run_base": 101080 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "association used from ABAP SQL with a path expression", + "id": "G1428", + "run_base": 101120, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1429", + "run_base": 101160 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1430", + "run_base": 101200 + }, + { + "category": "I", + "object_type": "DDLS", + "topic": "wrong aggregation level", + "id": "G1431", + "run_base": 101240, + "difficulty": 3 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": null, + "id": "G1432", + "run_base": 101280 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": null, + "id": "G1433", + "run_base": 101320 + }, + { + "category": "F", + "object_type": "CLAS", + "topic": null, + "id": "G1434", + "run_base": 101360, + "difficulty": 3 + }, + { + "category": "G", + "object_type": "FUNC", + "topic": "release target v740sp05", + "id": "G1435", + "run_base": 101400 + }, + { + "category": "H", + "object_type": "CLAS", + "topic": "missing rule for an empty input", + "id": "G1436", + "run_base": 101440 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "aggregation with HAVING", + "id": "G1437", + "run_base": 101480, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1438", + "run_base": 101520 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1439", + "run_base": 101560 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "CASE, cast and built-in functions", + "id": "G1440", + "run_base": 101600, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1441", + "run_base": 101640 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1442", + "run_base": 101680 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": null, + "id": "G1443", + "run_base": 101720, + "difficulty": 3 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": null, + "id": "G1444", + "run_base": 101760 + }, + { + "category": "F", + "object_type": "CLAS", + "topic": null, + "id": "G1445", + "run_base": 101800 + }, + { + "category": "G", + "object_type": "FUNC", + "topic": "release target v702", + "id": "G1446", + "run_base": 101840, + "difficulty": 3 + }, + { + "category": "H", + "object_type": "CLAS", + "topic": "missing rule for a boundary value", + "id": "G1447", + "run_base": 101880 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "association used from ABAP SQL with a path expression", + "id": "G1448", + "run_base": 101920 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1449", + "run_base": 101960, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1450", + "run_base": 102000 + }, + { + "category": "I", + "object_type": "DDLS", + "topic": "wrong join condition", + "id": "G1451", + "run_base": 102040 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": null, + "id": "G1452", + "run_base": 102080, + "difficulty": 3 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": null, + "id": "G1453", + "run_base": 102120 + }, + { + "category": "F", + "object_type": "CLAS", + "topic": null, + "id": "G1454", + "run_base": 102160 + }, + { + "category": "G", + "object_type": "FUNC", + "topic": "release target v740sp05", + "id": "G1455", + "run_base": 102200, + "difficulty": 3 + }, + { + "category": "H", + "object_type": "CLAS", + "topic": "two rules contradict for one case", + "id": "G1456", + "run_base": 102240 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "aggregation with HAVING", + "id": "G1457", + "run_base": 102280 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1458", + "run_base": 102320, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1459", + "run_base": 102360 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "CASE, cast and built-in functions", + "id": "G1460", + "run_base": 102400 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1461", + "run_base": 102440, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1462", + "run_base": 102480 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": null, + "id": "G1463", + "run_base": 102520 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": null, + "id": "G1464", + "run_base": 102560, + "difficulty": 3 + }, + { + "category": "F", + "object_type": "CLAS", + "topic": null, + "id": "G1465", + "run_base": 102600 + }, + { + "category": "G", + "object_type": "FUNC", + "topic": "release target v702", + "id": "G1466", + "run_base": 102640 + }, + { + "category": "H", + "object_type": "CLAS", + "topic": "missing rounding rule", + "id": "G1467", + "run_base": 102680 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "association used from ABAP SQL with a path expression", + "id": "G1468", + "run_base": 102720 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1469", + "run_base": 102760 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1470", + "run_base": 102800, + "difficulty": 3 + }, + { + "category": "I", + "object_type": "DDLS", + "topic": "wrong aggregation level", + "id": "G1471", + "run_base": 102840 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": null, + "id": "G1472", + "run_base": 102880 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": null, + "id": "G1473", + "run_base": 102920, + "difficulty": 3 + }, + { + "category": "F", + "object_type": "CLAS", + "topic": null, + "id": "G1474", + "run_base": 102960 + }, + { + "category": "G", + "object_type": "FUNC", + "topic": "release target v740sp05", + "id": "G1475", + "run_base": 103000 + }, + { + "category": "H", + "object_type": "CLAS", + "topic": "missing rule for an empty input", + "id": "G1476", + "run_base": 103040 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "aggregation with HAVING", + "id": "G1477", + "run_base": 103080 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1478", + "run_base": 103120 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1479", + "run_base": 103160, + "difficulty": 3 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "CASE, cast and built-in functions", + "id": "G1480", + "run_base": 103200 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1481", + "run_base": 103240 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1482", + "run_base": 103280, + "difficulty": 3 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": null, + "id": "G1483", + "run_base": 103320 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": null, + "id": "G1484", + "run_base": 103360 + }, + { + "category": "F", + "object_type": "CLAS", + "topic": null, + "id": "G1485", + "run_base": 103400, + "difficulty": 3 + }, + { + "category": "G", + "object_type": "FUNC", + "topic": "release target v702", + "id": "G1486", + "run_base": 103440 + }, + { + "category": "H", + "object_type": "CLAS", + "topic": "missing rule for a boundary value", + "id": "G1487", + "run_base": 103480 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "association used from ABAP SQL with a path expression", + "id": "G1488", + "run_base": 103520, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1489", + "run_base": 103560 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1490", + "run_base": 103600 + }, + { + "category": "I", + "object_type": "DDLS", + "topic": "wrong join condition", + "id": "G1491", + "run_base": 103640, + "difficulty": 3 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": null, + "id": "G1492", + "run_base": 103680 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": null, + "id": "G1493", + "run_base": 103720 + }, + { + "category": "F", + "object_type": "CLAS", + "topic": null, + "id": "G1494", + "run_base": 103760, + "difficulty": 3 + }, + { + "category": "G", + "object_type": "FUNC", + "topic": "release target v740sp05", + "id": "G1495", + "run_base": 103800 + }, + { + "category": "H", + "object_type": "CLAS", + "topic": "two rules contradict for one case", + "id": "G1496", + "run_base": 103840 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "aggregation with HAVING", + "id": "G1497", + "run_base": 103880, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1498", + "run_base": 103920 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1499", + "run_base": 103960 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "CASE, cast and built-in functions", + "id": "G1500", + "run_base": 104000, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1501", + "run_base": 104040 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1502", + "run_base": 104080 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": null, + "id": "G1503", + "run_base": 104120, + "difficulty": 3 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": null, + "id": "G1504", + "run_base": 104160 + }, + { + "category": "F", + "object_type": "CLAS", + "topic": null, + "id": "G1505", + "run_base": 104200 + }, + { + "category": "G", + "object_type": "FUNC", + "topic": "release target v702", + "id": "G1506", + "run_base": 104240, + "difficulty": 3 + }, + { + "category": "H", + "object_type": "CLAS", + "topic": "missing rounding rule", + "id": "G1507", + "run_base": 104280 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "association used from ABAP SQL with a path expression", + "id": "G1508", + "run_base": 104320 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1509", + "run_base": 104360, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1510", + "run_base": 104400 + }, + { + "category": "I", + "object_type": "DDLS", + "topic": "wrong aggregation level", + "id": "G1511", + "run_base": 104440 + }, + { + "category": "A", + "object_type": "FUNC", + "topic": null, + "id": "G1512", + "run_base": 104480, + "difficulty": 3 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": null, + "id": "G1513", + "run_base": 104520 + }, + { + "category": "F", + "object_type": "CLAS", + "topic": null, + "id": "G1514", + "run_base": 104560 + }, + { + "category": "G", + "object_type": "FUNC", + "topic": "release target v740sp05", + "id": "G1515", + "run_base": 104600, + "difficulty": 3 + }, + { + "category": "H", + "object_type": "CLAS", + "topic": "missing rule for an empty input", + "id": "G1516", + "run_base": 104640 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "aggregation with HAVING", + "id": "G1517", + "run_base": 104680 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1518", + "run_base": 104720, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1519", + "run_base": 104760 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "CASE, cast and built-in functions", + "id": "G1520", + "run_base": 104800 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1521", + "run_base": 104840, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1522", + "run_base": 104880 + }, + { + "category": "A", + "object_type": "FUNC", + "topic": null, + "id": "G1523", + "run_base": 104920 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": null, + "id": "G1524", + "run_base": 104960, + "difficulty": 3 + }, + { + "category": "F", + "object_type": "CLAS", + "topic": null, + "id": "G1525", + "run_base": 105000 + }, + { + "category": "G", + "object_type": "FUNC", + "topic": "release target v702", + "id": "G1526", + "run_base": 105040 + }, + { + "category": "H", + "object_type": "CLAS", + "topic": "missing rule for a boundary value", + "id": "G1527", + "run_base": 105080 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "association used from ABAP SQL with a path expression", + "id": "G1528", + "run_base": 105120 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1529", + "run_base": 105160 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1530", + "run_base": 105200, + "difficulty": 3 + }, + { + "category": "I", + "object_type": "DDLS", + "topic": "wrong join condition", + "id": "G1531", + "run_base": 105240 + }, + { + "category": "A", + "object_type": "FUNC", + "topic": null, + "id": "G1532", + "run_base": 105280 + }, + { + "category": "D", + "object_type": "FUNC", + "topic": null, + "id": "G1533", + "run_base": 105320, + "difficulty": 3 + }, + { + "category": "F", + "object_type": "CLAS", + "topic": null, + "id": "G1534", + "run_base": 105360 + }, + { + "category": "G", + "object_type": "FUNC", + "topic": "release target v740sp05", + "id": "G1535", + "run_base": 105400 + }, + { + "category": "H", + "object_type": "CLAS", + "topic": "two rules contradict for one case", + "id": "G1536", + "run_base": 105440 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "aggregation with HAVING", + "id": "G1537", + "run_base": 105480 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1538", + "run_base": 105520 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1539", + "run_base": 105560, + "difficulty": 3 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "CASE, cast and built-in functions", + "id": "G1540", + "run_base": 105600 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1541", + "run_base": 105640 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1542", + "run_base": 105680, + "difficulty": 3 + }, + { + "category": "A", + "object_type": "FUNC", + "topic": null, + "id": "G1543", + "run_base": 105720 + }, + { + "category": "D", + "object_type": "FUNC", + "topic": null, + "id": "G1544", + "run_base": 105760 + }, + { + "category": "F", + "object_type": "CLAS", + "topic": null, + "id": "G1545", + "run_base": 105800, + "difficulty": 3 + }, + { + "category": "G", + "object_type": "FUNC", + "topic": "release target v702", + "id": "G1546", + "run_base": 105840 + }, + { + "category": "H", + "object_type": "CLAS", + "topic": "missing rounding rule", + "id": "G1547", + "run_base": 105880 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "association used from ABAP SQL with a path expression", + "id": "G1548", + "run_base": 105920, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1549", + "run_base": 105960 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1550", + "run_base": 106000 + }, + { + "category": "I", + "object_type": "DDLS", + "topic": "wrong aggregation level", + "id": "G1551", + "run_base": 106040, + "difficulty": 3 + }, + { + "category": "A", + "object_type": "FUNC", + "topic": null, + "id": "G1552", + "run_base": 106080 + }, + { + "category": "D", + "object_type": "FUNC", + "topic": null, + "id": "G1553", + "run_base": 106120 + }, + { + "category": "F", + "object_type": "CLAS", + "topic": null, + "id": "G1554", + "run_base": 106160, + "difficulty": 3 + }, + { + "category": "G", + "object_type": "FUNC", + "topic": "release target v740sp05", + "id": "G1555", + "run_base": 106200 + }, + { + "category": "H", + "object_type": "CLAS", + "topic": "missing rule for an empty input", + "id": "G1556", + "run_base": 106240 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "aggregation with HAVING", + "id": "G1557", + "run_base": 106280, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1558", + "run_base": 106320 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1559", + "run_base": 106360 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "CASE, cast and built-in functions", + "id": "G1560", + "run_base": 106400, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1561", + "run_base": 106440 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1562", + "run_base": 106480 + }, + { + "category": "A", + "object_type": "FUNC", + "topic": null, + "id": "G1563", + "run_base": 106520, + "difficulty": 3 + }, + { + "category": "D", + "object_type": "FUNC", + "topic": null, + "id": "G1564", + "run_base": 106560 + }, + { + "category": "F", + "object_type": "CLAS", + "topic": null, + "id": "G1565", + "run_base": 106600 + }, + { + "category": "G", + "object_type": "FUNC", + "topic": "release target v702", + "id": "G1566", + "run_base": 106640, + "difficulty": 3 + }, + { + "category": "H", + "object_type": "CLAS", + "topic": "missing rule for a boundary value", + "id": "G1567", + "run_base": 106680 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "association used from ABAP SQL with a path expression", + "id": "G1568", + "run_base": 106720 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": null, + "id": "G1569", + "run_base": 106760, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1570", + "run_base": 106800 + }, + { + "category": "I", + "object_type": "DDLS", + "topic": "wrong join condition", + "id": "G1571", + "run_base": 106840 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1572", + "run_base": 106880, + "difficulty": 3 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1573", + "run_base": 106920 + }, + { + "category": "F", + "object_type": "CLAS", + "topic": null, + "id": "G1574", + "run_base": 106960 + }, + { + "category": "G", + "object_type": "FUNC", + "topic": "release target v740sp05", + "id": "G1575", + "run_base": 107000, + "difficulty": 3 + }, + { + "category": "H", + "object_type": "CLAS", + "topic": "two rules contradict for one case", + "id": "G1576", + "run_base": 107040 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "aggregation with HAVING", + "id": "G1577", + "run_base": 107080 + }, + { + "category": "C", + "object_type": "FUNC", + "topic": null, + "id": "G1578", + "run_base": 107120, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1579", + "run_base": 107160 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "CASE, cast and built-in functions", + "id": "G1580", + "run_base": 107200 + }, + { + "category": "C", + "object_type": "FUNC", + "topic": null, + "id": "G1581", + "run_base": 107240, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1582", + "run_base": 107280 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1583", + "run_base": 107320 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1584", + "run_base": 107360, + "difficulty": 3 + }, + { + "category": "F", + "object_type": "CLAS", + "topic": null, + "id": "G1585", + "run_base": 107400 + }, + { + "category": "G", + "object_type": "FUNC", + "topic": "release target v702", + "id": "G1586", + "run_base": 107440 + }, + { + "category": "H", + "object_type": "CLAS", + "topic": "missing rounding rule", + "id": "G1587", + "run_base": 107480 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "association used from ABAP SQL with a path expression", + "id": "G1588", + "run_base": 107520 + }, + { + "category": "C", + "object_type": "FUNC", + "topic": null, + "id": "G1589", + "run_base": 107560 + }, + { + "category": "E", + "object_type": "CLAS", + "topic": null, + "id": "G1590", + "run_base": 107600, + "difficulty": 3 + }, + { + "category": "I", + "object_type": "DDLS", + "topic": "wrong aggregation level", + "id": "G1591", + "run_base": 107640 + }, + { + "category": "A", + "object_type": "FUNC", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1592", + "run_base": 107680 + }, + { + "category": "D", + "object_type": "FUNC", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1593", + "run_base": 107720, + "difficulty": 3 + }, + { + "category": "F", + "object_type": "FUNC", + "topic": null, + "id": "G1594", + "run_base": 107760 + }, + { + "category": "G", + "object_type": "FUNC", + "topic": "release target v740sp05", + "id": "G1595", + "run_base": 107800 + }, + { + "category": "H", + "object_type": "CLAS", + "topic": "missing rule for an empty input", + "id": "G1596", + "run_base": 107840 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "aggregation with HAVING", + "id": "G1597", + "run_base": 107880 + }, + { + "category": "C", + "object_type": "FUNC", + "topic": null, + "id": "G1598", + "run_base": 107920 + }, + { + "category": "E", + "object_type": "PROG", + "topic": null, + "id": "G1599", + "run_base": 107960, + "difficulty": 3 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "CASE, cast and built-in functions", + "id": "G1600", + "run_base": 108000 + }, + { + "category": "C", + "object_type": "FUNC", + "topic": null, + "id": "G1601", + "run_base": 108040 + }, + { + "category": "E", + "object_type": "PROG", + "topic": null, + "id": "G1602", + "run_base": 108080, + "difficulty": 3 + }, + { + "category": "A", + "object_type": "DDLS", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1603", + "run_base": 108120 + }, + { + "category": "D", + "object_type": "DDLS", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1604", + "run_base": 108160 + }, + { + "category": "F", + "object_type": "FUNC", + "topic": null, + "id": "G1605", + "run_base": 108200, + "difficulty": 3 + }, + { + "category": "G", + "object_type": "FUNC", + "topic": "release target v702", + "id": "G1606", + "run_base": 108240 + }, + { + "category": "H", + "object_type": "FUNC", + "topic": "missing rule for an unknown code", + "id": "G1607", + "run_base": 108280 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "association used from ABAP SQL with a path expression", + "id": "G1608", + "run_base": 108320, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "FUNC", + "topic": null, + "id": "G1609", + "run_base": 108360 + }, + { + "category": "E", + "object_type": "PROG", + "topic": null, + "id": "G1610", + "run_base": 108400 + }, + { + "category": "I", + "object_type": "DDLS", + "topic": "wrong join condition", + "id": "G1611", + "run_base": 108440, + "difficulty": 3 + }, + { + "category": "A", + "object_type": "PROG", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1612", + "run_base": 108480 + }, + { + "category": "D", + "object_type": "PROG", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1613", + "run_base": 108520 + }, + { + "category": "F", + "object_type": "FUNC", + "topic": null, + "id": "G1614", + "run_base": 108560, + "difficulty": 3 + }, + { + "category": "G", + "object_type": "FUNC", + "topic": "release target v740sp05", + "id": "G1615", + "run_base": 108600 + }, + { + "category": "H", + "object_type": "FUNC", + "topic": "contradicting priority of two rules", + "id": "G1616", + "run_base": 108640 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "aggregation with HAVING", + "id": "G1617", + "run_base": 108680, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "FUNC", + "topic": null, + "id": "G1618", + "run_base": 108720 + }, + { + "category": "E", + "object_type": "PROG", + "topic": null, + "id": "G1619", + "run_base": 108760 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "CASE, cast and built-in functions", + "id": "G1620", + "run_base": 108800, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "FUNC", + "topic": null, + "id": "G1621", + "run_base": 108840 + }, + { + "category": "E", + "object_type": "PROG", + "topic": null, + "id": "G1622", + "run_base": 108880 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1623", + "run_base": 108920, + "difficulty": 3 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1624", + "run_base": 108960 + }, + { + "category": "F", + "object_type": "FUNC", + "topic": null, + "id": "G1625", + "run_base": 109000 + }, + { + "category": "G", + "object_type": "PROG", + "topic": "release target v702", + "id": "G1626", + "run_base": 109040, + "difficulty": 3 + }, + { + "category": "H", + "object_type": "FUNC", + "topic": "missing rule for an unknown code", + "id": "G1627", + "run_base": 109080 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "association used from ABAP SQL with a path expression", + "id": "G1628", + "run_base": 109120 + }, + { + "category": "C", + "object_type": "FUNC", + "topic": null, + "id": "G1629", + "run_base": 109160, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "PROG", + "topic": null, + "id": "G1630", + "run_base": 109200 + }, + { + "category": "I", + "object_type": "DDLS", + "topic": "wrong aggregation level", + "id": "G1631", + "run_base": 109240 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1632", + "run_base": 109280, + "difficulty": 3 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1633", + "run_base": 109320 + }, + { + "category": "F", + "object_type": "FUNC", + "topic": null, + "id": "G1634", + "run_base": 109360 + }, + { + "category": "G", + "object_type": "PROG", + "topic": "release target v740sp05", + "id": "G1635", + "run_base": 109400, + "difficulty": 3 + }, + { + "category": "H", + "object_type": "FUNC", + "topic": "contradicting priority of two rules", + "id": "G1636", + "run_base": 109440 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "aggregation with HAVING", + "id": "G1637", + "run_base": 109480 + }, + { + "category": "C", + "object_type": "FUNC", + "topic": null, + "id": "G1638", + "run_base": 109520, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "PROG", + "topic": null, + "id": "G1639", + "run_base": 109560 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "CASE, cast and built-in functions", + "id": "G1640", + "run_base": 109600 + }, + { + "category": "C", + "object_type": "PROG", + "topic": null, + "id": "G1641", + "run_base": 109640, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "PROG", + "topic": null, + "id": "G1642", + "run_base": 109680 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1643", + "run_base": 109720 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1644", + "run_base": 109760, + "difficulty": 3 + }, + { + "category": "F", + "object_type": "FUNC", + "topic": null, + "id": "G1645", + "run_base": 109800 + }, + { + "category": "G", + "object_type": "PROG", + "topic": "release target v702", + "id": "G1646", + "run_base": 109840 + }, + { + "category": "H", + "object_type": "FUNC", + "topic": "missing rule for an unknown code", + "id": "G1647", + "run_base": 109880 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "association used from ABAP SQL with a path expression", + "id": "G1648", + "run_base": 109920 + }, + { + "category": "C", + "object_type": "PROG", + "topic": null, + "id": "G1649", + "run_base": 109960 + }, + { + "category": "E", + "object_type": "PROG", + "topic": null, + "id": "G1650", + "run_base": 110000, + "difficulty": 3 + }, + { + "category": "I", + "object_type": "DDLS", + "topic": "wrong join condition", + "id": "G1651", + "run_base": 110040 + }, + { + "category": "A", + "object_type": "FUNC", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1652", + "run_base": 110080 + }, + { + "category": "D", + "object_type": "FUNC", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1653", + "run_base": 110120, + "difficulty": 3 + }, + { + "category": "F", + "object_type": "FUNC", + "topic": null, + "id": "G1654", + "run_base": 110160 + }, + { + "category": "G", + "object_type": "PROG", + "topic": "release target v740sp05", + "id": "G1655", + "run_base": 110200 + }, + { + "category": "H", + "object_type": "FUNC", + "topic": "contradicting priority of two rules", + "id": "G1656", + "run_base": 110240 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "aggregation with HAVING", + "id": "G1657", + "run_base": 110280 + }, + { + "category": "C", + "object_type": "PROG", + "topic": null, + "id": "G1658", + "run_base": 110320 + }, + { + "category": "E", + "object_type": "PROG", + "topic": null, + "id": "G1659", + "run_base": 110360, + "difficulty": 3 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "CASE, cast and built-in functions", + "id": "G1660", + "run_base": 110400 + }, + { + "category": "C", + "object_type": "PROG", + "topic": null, + "id": "G1661", + "run_base": 110440 + }, + { + "category": "E", + "object_type": "PROG", + "topic": null, + "id": "G1662", + "run_base": 110480, + "difficulty": 3 + }, + { + "category": "A", + "object_type": "DDLS", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1663", + "run_base": 110520 + }, + { + "category": "D", + "object_type": "DDLS", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1664", + "run_base": 110560 + }, + { + "category": "F", + "object_type": "FUNC", + "topic": null, + "id": "G1665", + "run_base": 110600, + "difficulty": 3 + }, + { + "category": "G", + "object_type": "PROG", + "topic": "release target v702", + "id": "G1666", + "run_base": 110640 + }, + { + "category": "H", + "object_type": "FUNC", + "topic": "missing rule for an unknown code", + "id": "G1667", + "run_base": 110680 + }, + { + "category": "I", + "object_type": "DDLS", + "topic": "wrong aggregation level", + "id": "G1668", + "run_base": 110720, + "difficulty": 3 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "association used from ABAP SQL with a path expression", + "id": "G1669", + "run_base": 110760 + }, + { + "category": "C", + "object_type": "PROG", + "topic": null, + "id": "G1670", + "run_base": 110800 + }, + { + "category": "E", + "object_type": "PROG", + "topic": null, + "id": "G1671", + "run_base": 110840, + "difficulty": 3 + }, + { + "category": "A", + "object_type": "PROG", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1672", + "run_base": 110880 + }, + { + "category": "D", + "object_type": "PROG", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1673", + "run_base": 110920 + }, + { + "category": "F", + "object_type": "FUNC", + "topic": null, + "id": "G1674", + "run_base": 110960, + "difficulty": 3 + }, + { + "category": "G", + "object_type": "PROG", + "topic": "release target v740sp05", + "id": "G1675", + "run_base": 111000 + }, + { + "category": "H", + "object_type": "FUNC", + "topic": "contradicting priority of two rules", + "id": "G1676", + "run_base": 111040 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "aggregation with HAVING", + "id": "G1677", + "run_base": 111080, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "PROG", + "topic": null, + "id": "G1678", + "run_base": 111120 + }, + { + "category": "E", + "object_type": "PROG", + "topic": null, + "id": "G1679", + "run_base": 111160 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "CASE, cast and built-in functions", + "id": "G1680", + "run_base": 111200, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1681", + "run_base": 111240 + }, + { + "category": "E", + "object_type": "PROG", + "topic": null, + "id": "G1682", + "run_base": 111280 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1683", + "run_base": 111320, + "difficulty": 3 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1684", + "run_base": 111360 + }, + { + "category": "F", + "object_type": "FUNC", + "topic": null, + "id": "G1685", + "run_base": 111400 + }, + { + "category": "G", + "object_type": "PROG", + "topic": "release target v702", + "id": "G1686", + "run_base": 111440, + "difficulty": 3 + }, + { + "category": "H", + "object_type": "FUNC", + "topic": "missing rule for an unknown code", + "id": "G1687", + "run_base": 111480 + }, + { + "category": "I", + "object_type": "DDLS", + "topic": "wrong join condition", + "id": "G1688", + "run_base": 111520 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "association used from ABAP SQL with a path expression", + "id": "G1689", + "run_base": 111560, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1690", + "run_base": 111600 + }, + { + "category": "E", + "object_type": "PROG", + "topic": null, + "id": "G1691", + "run_base": 111640 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1692", + "run_base": 111680, + "difficulty": 3 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1693", + "run_base": 111720 + }, + { + "category": "F", + "object_type": "FUNC", + "topic": null, + "id": "G1694", + "run_base": 111760 + }, + { + "category": "G", + "object_type": "PROG", + "topic": "release target v740sp05", + "id": "G1695", + "run_base": 111800, + "difficulty": 3 + }, + { + "category": "H", + "object_type": "FUNC", + "topic": "contradicting priority of two rules", + "id": "G1696", + "run_base": 111840 + }, + { + "category": "B", + "object_type": "DDLS", + "topic": "aggregation with HAVING", + "id": "G1697", + "run_base": 111880 + }, + { + "category": "C", + "object_type": "FUNC", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1698", + "run_base": 111920, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "PROG", + "topic": null, + "id": "G1699", + "run_base": 111960 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1700", + "run_base": 112000 + }, + { + "category": "C", + "object_type": "DDLS", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1701", + "run_base": 112040, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "PROG", + "topic": null, + "id": "G1702", + "run_base": 112080 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1703", + "run_base": 112120 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1704", + "run_base": 112160, + "difficulty": 3 + }, + { + "category": "F", + "object_type": "FUNC", + "topic": null, + "id": "G1705", + "run_base": 112200 + }, + { + "category": "G", + "object_type": "PROG", + "topic": "release target v702", + "id": "G1706", + "run_base": 112240 + }, + { + "category": "H", + "object_type": "PROG", + "topic": "missing sort order or grouping rule", + "id": "G1707", + "run_base": 112280 + }, + { + "category": "I", + "object_type": "DDLS", + "topic": "wrong aggregation level", + "id": "G1708", + "run_base": 112320 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1709", + "run_base": 112360 + }, + { + "category": "C", + "object_type": "PROG", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1710", + "run_base": 112400, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "FUNC", + "topic": null, + "id": "G1711", + "run_base": 112440 + }, + { + "category": "A", + "object_type": "FUNC", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1712", + "run_base": 112480 + }, + { + "category": "D", + "object_type": "FUNC", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1713", + "run_base": 112520, + "difficulty": 3 + }, + { + "category": "F", + "object_type": "DDLS", + "topic": "view on a seed table with unknown field names", + "id": "G1714", + "run_base": 112560 + }, + { + "category": "G", + "object_type": "PROG", + "topic": "release target v740sp05", + "id": "G1715", + "run_base": 112600 + }, + { + "category": "H", + "object_type": "PROG", + "topic": "contradicting filter rules", + "id": "G1716", + "run_base": 112640 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1717", + "run_base": 112680 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1718", + "run_base": 112720 + }, + { + "category": "E", + "object_type": "FUNC", + "topic": null, + "id": "G1719", + "run_base": 112760, + "difficulty": 3 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1720", + "run_base": 112800 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1721", + "run_base": 112840 + }, + { + "category": "E", + "object_type": "FUNC", + "topic": null, + "id": "G1722", + "run_base": 112880, + "difficulty": 3 + }, + { + "category": "A", + "object_type": "DDLS", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1723", + "run_base": 112920 + }, + { + "category": "D", + "object_type": "DDLS", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1724", + "run_base": 112960 + }, + { + "category": "F", + "object_type": "DDLS", + "topic": "view that reuses a seed view", + "id": "G1725", + "run_base": 113000, + "difficulty": 3 + }, + { + "category": "G", + "object_type": "PROG", + "topic": "release target v702", + "id": "G1726", + "run_base": 113040 + }, + { + "category": "H", + "object_type": "PROG", + "topic": "missing sort order or grouping rule", + "id": "G1727", + "run_base": 113080 + }, + { + "category": "I", + "object_type": "DDLS", + "topic": "wrong join condition", + "id": "G1728", + "run_base": 113120, + "difficulty": 3 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1729", + "run_base": 113160 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1730", + "run_base": 113200 + }, + { + "category": "E", + "object_type": "FUNC", + "topic": null, + "id": "G1731", + "run_base": 113240, + "difficulty": 3 + }, + { + "category": "A", + "object_type": "PROG", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1732", + "run_base": 113280 + }, + { + "category": "D", + "object_type": "PROG", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1733", + "run_base": 113320 + }, + { + "category": "F", + "object_type": "DDLS", + "topic": "view that uses a seed table function result table", + "id": "G1734", + "run_base": 113360, + "difficulty": 3 + }, + { + "category": "G", + "object_type": "PROG", + "topic": "release target v740sp05", + "id": "G1735", + "run_base": 113400 + }, + { + "category": "H", + "object_type": "PROG", + "topic": "contradicting filter rules", + "id": "G1736", + "run_base": 113440 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1737", + "run_base": 113480, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "FUNC", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1738", + "run_base": 113520 + }, + { + "category": "E", + "object_type": "FUNC", + "topic": null, + "id": "G1739", + "run_base": 113560 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1740", + "run_base": 113600, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "DDLS", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1741", + "run_base": 113640 + }, + { + "category": "E", + "object_type": "FUNC", + "topic": null, + "id": "G1742", + "run_base": 113680 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1743", + "run_base": 113720, + "difficulty": 3 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1744", + "run_base": 113760 + }, + { + "category": "F", + "object_type": "DDLS", + "topic": "view on a seed table with unknown field names", + "id": "G1745", + "run_base": 113800 + }, + { + "category": "G", + "object_type": "PROG", + "topic": "release target v702", + "id": "G1746", + "run_base": 113840, + "difficulty": 3 + }, + { + "category": "H", + "object_type": "PROG", + "topic": "missing sort order or grouping rule", + "id": "G1747", + "run_base": 113880 + }, + { + "category": "I", + "object_type": "CLAS", + "topic": null, + "id": "G1748", + "run_base": 113920 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1749", + "run_base": 113960, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "PROG", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1750", + "run_base": 114000 + }, + { + "category": "E", + "object_type": "FUNC", + "topic": null, + "id": "G1751", + "run_base": 114040 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1752", + "run_base": 114080, + "difficulty": 3 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1753", + "run_base": 114120 + }, + { + "category": "F", + "object_type": "DDLS", + "topic": "view that reuses a seed view", + "id": "G1754", + "run_base": 114160 + }, + { + "category": "G", + "object_type": "PROG", + "topic": "release target v740sp05", + "id": "G1755", + "run_base": 114200, + "difficulty": 3 + }, + { + "category": "H", + "object_type": "PROG", + "topic": "contradicting filter rules", + "id": "G1756", + "run_base": 114240 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1757", + "run_base": 114280 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1758", + "run_base": 114320, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "FUNC", + "topic": null, + "id": "G1759", + "run_base": 114360 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1760", + "run_base": 114400 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1761", + "run_base": 114440, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "FUNC", + "topic": null, + "id": "G1762", + "run_base": 114480 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1763", + "run_base": 114520 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1764", + "run_base": 114560, + "difficulty": 3 + }, + { + "category": "F", + "object_type": "DDLS", + "topic": "view that uses a seed table function result table", + "id": "G1765", + "run_base": 114600 + }, + { + "category": "G", + "object_type": "PROG", + "topic": "release target v702", + "id": "G1766", + "run_base": 114640 + }, + { + "category": "H", + "object_type": "PROG", + "topic": "missing sort order or grouping rule", + "id": "G1767", + "run_base": 114680 + }, + { + "category": "I", + "object_type": "CLAS", + "topic": null, + "id": "G1768", + "run_base": 114720 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1769", + "run_base": 114760 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1770", + "run_base": 114800, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "FUNC", + "topic": null, + "id": "G1771", + "run_base": 114840 + }, + { + "category": "A", + "object_type": "FUNC", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1772", + "run_base": 114880 + }, + { + "category": "D", + "object_type": "FUNC", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1773", + "run_base": 114920, + "difficulty": 3 + }, + { + "category": "F", + "object_type": "DDLS", + "topic": "view on a seed table with unknown field names", + "id": "G1774", + "run_base": 114960 + }, + { + "category": "G", + "object_type": "PROG", + "topic": "release target v740sp05", + "id": "G1775", + "run_base": 115000 + }, + { + "category": "H", + "object_type": "PROG", + "topic": "contradicting filter rules", + "id": "G1776", + "run_base": 115040 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1777", + "run_base": 115080 + }, + { + "category": "C", + "object_type": "FUNC", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1778", + "run_base": 115120 + }, + { + "category": "E", + "object_type": "FUNC", + "topic": null, + "id": "G1779", + "run_base": 115160, + "difficulty": 3 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1780", + "run_base": 115200 + }, + { + "category": "C", + "object_type": "DDLS", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1781", + "run_base": 115240 + }, + { + "category": "E", + "object_type": "FUNC", + "topic": null, + "id": "G1782", + "run_base": 115280, + "difficulty": 3 + }, + { + "category": "A", + "object_type": "DDLS", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1783", + "run_base": 115320 + }, + { + "category": "D", + "object_type": "DDLS", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1784", + "run_base": 115360 + }, + { + "category": "F", + "object_type": "DDLS", + "topic": "view that reuses a seed view", + "id": "G1785", + "run_base": 115400, + "difficulty": 3 + }, + { + "category": "G", + "object_type": "PROG", + "topic": "release target v702", + "id": "G1786", + "run_base": 115440 + }, + { + "category": "H", + "object_type": "PROG", + "topic": "missing sort order or grouping rule", + "id": "G1787", + "run_base": 115480 + }, + { + "category": "I", + "object_type": "CLAS", + "topic": null, + "id": "G1788", + "run_base": 115520, + "difficulty": 3 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1789", + "run_base": 115560 + }, + { + "category": "C", + "object_type": "PROG", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1790", + "run_base": 115600 + }, + { + "category": "E", + "object_type": "DDLS", + "topic": "old view with nested CASE to clean view entity", + "id": "G1791", + "run_base": 115640, + "difficulty": 3 + }, + { + "category": "A", + "object_type": "PROG", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1792", + "run_base": 115680 + }, + { + "category": "D", + "object_type": "PROG", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1793", + "run_base": 115720 + }, + { + "category": "F", + "object_type": "DDLS", + "topic": "view that uses a seed table function result table", + "id": "G1794", + "run_base": 115760, + "difficulty": 3 + }, + { + "category": "G", + "object_type": "CLAS", + "topic": "release target v740sp05", + "id": "G1795", + "run_base": 115800 + }, + { + "category": "H", + "object_type": "PROG", + "topic": "contradicting filter rules", + "id": "G1796", + "run_base": 115840 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1797", + "run_base": 115880, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1798", + "run_base": 115920 + }, + { + "category": "E", + "object_type": "DDLS", + "topic": "duplicate join logic to one association", + "id": "G1799", + "run_base": 115960 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1800", + "run_base": 116000, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1801", + "run_base": 116040 + }, + { + "category": "E", + "object_type": "DDLS", + "topic": "literal values to a parameter", + "id": "G1802", + "run_base": 116080 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1803", + "run_base": 116120, + "difficulty": 3 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1804", + "run_base": 116160 + }, + { + "category": "F", + "object_type": "DDLS", + "topic": "view on a seed table with unknown field names", + "id": "G1805", + "run_base": 116200 + }, + { + "category": "G", + "object_type": "CLAS", + "topic": "release target v702", + "id": "G1806", + "run_base": 116240, + "difficulty": 3 + }, + { + "category": "H", + "object_type": "DDLS", + "topic": "missing rule for which records count", + "id": "G1807", + "run_base": 116280 + }, + { + "category": "I", + "object_type": "CLAS", + "topic": null, + "id": "G1808", + "run_base": 116320 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1809", + "run_base": 116360, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1810", + "run_base": 116400 + }, + { + "category": "E", + "object_type": "DDLS", + "topic": "old view with nested CASE to clean view entity", + "id": "G1811", + "run_base": 116440 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1812", + "run_base": 116480, + "difficulty": 3 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1813", + "run_base": 116520 + }, + { + "category": "F", + "object_type": "DDLS", + "topic": "view that reuses a seed view", + "id": "G1814", + "run_base": 116560 + }, + { + "category": "G", + "object_type": "CLAS", + "topic": "release target v740sp05", + "id": "G1815", + "run_base": 116600, + "difficulty": 3 + }, + { + "category": "H", + "object_type": "DDLS", + "topic": "contradicting join or filter rule", + "id": "G1816", + "run_base": 116640 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1817", + "run_base": 116680 + }, + { + "category": "C", + "object_type": "FUNC", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1818", + "run_base": 116720, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "DDLS", + "topic": "duplicate join logic to one association", + "id": "G1819", + "run_base": 116760 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1820", + "run_base": 116800 + }, + { + "category": "C", + "object_type": "DDLS", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1821", + "run_base": 116840, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "DDLS", + "topic": "literal values to a parameter", + "id": "G1822", + "run_base": 116880 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1823", + "run_base": 116920 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1824", + "run_base": 116960, + "difficulty": 3 + }, + { + "category": "F", + "object_type": "DDLS", + "topic": "view that uses a seed table function result table", + "id": "G1825", + "run_base": 117000 + }, + { + "category": "G", + "object_type": "CLAS", + "topic": "release target v702", + "id": "G1826", + "run_base": 117040 + }, + { + "category": "H", + "object_type": "DDLS", + "topic": "missing rule for which records count", + "id": "G1827", + "run_base": 117080 + }, + { + "category": "I", + "object_type": "CLAS", + "topic": null, + "id": "G1828", + "run_base": 117120 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1829", + "run_base": 117160 + }, + { + "category": "C", + "object_type": "PROG", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1830", + "run_base": 117200, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "DDLS", + "topic": "old view with nested CASE to clean view entity", + "id": "G1831", + "run_base": 117240 + }, + { + "category": "A", + "object_type": "FUNC", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1832", + "run_base": 117280 + }, + { + "category": "D", + "object_type": "FUNC", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1833", + "run_base": 117320, + "difficulty": 3 + }, + { + "category": "F", + "object_type": "DDLS", + "topic": "view on a seed table with unknown field names", + "id": "G1834", + "run_base": 117360 + }, + { + "category": "G", + "object_type": "CLAS", + "topic": "release target v740sp05", + "id": "G1835", + "run_base": 117400 + }, + { + "category": "H", + "object_type": "DDLS", + "topic": "contradicting join or filter rule", + "id": "G1836", + "run_base": 117440 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1837", + "run_base": 117480 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1838", + "run_base": 117520 + }, + { + "category": "E", + "object_type": "DDLS", + "topic": "duplicate join logic to one association", + "id": "G1839", + "run_base": 117560, + "difficulty": 3 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1840", + "run_base": 117600 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1841", + "run_base": 117640 + }, + { + "category": "E", + "object_type": "DDLS", + "topic": "literal values to a parameter", + "id": "G1842", + "run_base": 117680, + "difficulty": 3 + }, + { + "category": "A", + "object_type": "DDLS", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1843", + "run_base": 117720 + }, + { + "category": "D", + "object_type": "DDLS", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1844", + "run_base": 117760 + }, + { + "category": "F", + "object_type": "DDLS", + "topic": "view that reuses a seed view", + "id": "G1845", + "run_base": 117800, + "difficulty": 3 + }, + { + "category": "G", + "object_type": "CLAS", + "topic": "release target v702", + "id": "G1846", + "run_base": 117840 + }, + { + "category": "H", + "object_type": "DDLS", + "topic": "missing rule for which records count", + "id": "G1847", + "run_base": 117880 + }, + { + "category": "I", + "object_type": "CLAS", + "topic": null, + "id": "G1848", + "run_base": 117920, + "difficulty": 3 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1849", + "run_base": 117960 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1850", + "run_base": 118000 + }, + { + "category": "E", + "object_type": "DDLS", + "topic": "old view with nested CASE to clean view entity", + "id": "G1851", + "run_base": 118040, + "difficulty": 3 + }, + { + "category": "A", + "object_type": "PROG", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1852", + "run_base": 118080 + }, + { + "category": "D", + "object_type": "PROG", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1853", + "run_base": 118120 + }, + { + "category": "F", + "object_type": "DDLS", + "topic": "view that uses a seed table function result table", + "id": "G1854", + "run_base": 118160, + "difficulty": 3 + }, + { + "category": "G", + "object_type": "CLAS", + "topic": "release target v740sp05", + "id": "G1855", + "run_base": 118200 + }, + { + "category": "H", + "object_type": "DDLS", + "topic": "contradicting join or filter rule", + "id": "G1856", + "run_base": 118240 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1857", + "run_base": 118280, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "FUNC", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1858", + "run_base": 118320 + }, + { + "category": "E", + "object_type": "DDLS", + "topic": "duplicate join logic to one association", + "id": "G1859", + "run_base": 118360 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1860", + "run_base": 118400, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "DDLS", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1861", + "run_base": 118440 + }, + { + "category": "E", + "object_type": "DDLS", + "topic": "literal values to a parameter", + "id": "G1862", + "run_base": 118480 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1863", + "run_base": 118520, + "difficulty": 3 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1864", + "run_base": 118560 + }, + { + "category": "F", + "object_type": "DDLS", + "topic": "view on a seed table with unknown field names", + "id": "G1865", + "run_base": 118600 + }, + { + "category": "G", + "object_type": "CLAS", + "topic": "release target v702", + "id": "G1866", + "run_base": 118640, + "difficulty": 3 + }, + { + "category": "H", + "object_type": "DDLS", + "topic": "missing rule for which records count", + "id": "G1867", + "run_base": 118680 + }, + { + "category": "I", + "object_type": "CLAS", + "topic": null, + "id": "G1868", + "run_base": 118720 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1869", + "run_base": 118760, + "difficulty": 3 + }, + { + "category": "C", + "object_type": "PROG", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1870", + "run_base": 118800 + }, + { + "category": "E", + "object_type": "DDLS", + "topic": "old view with nested CASE to clean view entity", + "id": "G1871", + "run_base": 118840 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1872", + "run_base": 118880, + "difficulty": 3 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1873", + "run_base": 118920 + }, + { + "category": "F", + "object_type": "DDLS", + "topic": "view that reuses a seed view", + "id": "G1874", + "run_base": 118960 + }, + { + "category": "G", + "object_type": "CLAS", + "topic": "release target v740sp05", + "id": "G1875", + "run_base": 119000, + "difficulty": 3 + }, + { + "category": "H", + "object_type": "DDLS", + "topic": "contradicting join or filter rule", + "id": "G1876", + "run_base": 119040 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1877", + "run_base": 119080 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1878", + "run_base": 119120, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "DDLS", + "topic": "duplicate join logic to one association", + "id": "G1879", + "run_base": 119160 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1880", + "run_base": 119200 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1881", + "run_base": 119240, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "DDLS", + "topic": "literal values to a parameter", + "id": "G1882", + "run_base": 119280 + }, + { + "category": "A", + "object_type": "CLAS", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1883", + "run_base": 119320 + }, + { + "category": "D", + "object_type": "CLAS", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1884", + "run_base": 119360, + "difficulty": 3 + }, + { + "category": "F", + "object_type": "DDLS", + "topic": "view that uses a seed table function result table", + "id": "G1885", + "run_base": 119400 + }, + { + "category": "G", + "object_type": "CLAS", + "topic": "release target v702", + "id": "G1886", + "run_base": 119440 + }, + { + "category": "H", + "object_type": "DDLS", + "topic": "missing rule for which records count", + "id": "G1887", + "run_base": 119480 + }, + { + "category": "I", + "object_type": "CLAS", + "topic": null, + "id": "G1888", + "run_base": 119520 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1889", + "run_base": 119560 + }, + { + "category": "C", + "object_type": "CLAS", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1890", + "run_base": 119600, + "difficulty": 3 + }, + { + "category": "E", + "object_type": "DDLS", + "topic": "old view with nested CASE to clean view entity", + "id": "G1891", + "run_base": 119640 + }, + { + "category": "A", + "object_type": "FUNC", + "topic": "The contract has methods with short coded character parameters (zone code, currency code, status flag, region key) of fixed length. A correct solution declares named types for them: TYPE c LENGTH n is not allowed in a method signature.", + "error_kind": "named-type", + "id": "G1892", + "run_base": 119680 + }, + { + "category": "D", + "object_type": "FUNC", + "topic": "The business domain uses concepts that collide with reserved or SQL words (hours, mode, order, date, count, group, value). The contract uses safe field and parameter names (for example work_hours, calc_mode); the solution must also avoid reserved words as field names.", + "error_kind": "reserved-word", + "id": "G1893", + "run_base": 119720, + "difficulty": 3 + }, + { + "category": "F", + "object_type": "DDLS", + "topic": "view on a seed table with unknown field names", + "id": "G1894", + "run_base": 119760 + }, + { + "category": "G", + "object_type": "CLAS", + "topic": "release target v740sp05", + "id": "G1895", + "run_base": 119800 + }, + { + "category": "H", + "object_type": "DDLS", + "topic": "contradicting join or filter rule", + "id": "G1896", + "run_base": 119840 + }, + { + "category": "B", + "object_type": "PROG", + "topic": null, + "id": "G1897", + "run_base": 119880 + }, + { + "category": "C", + "object_type": "FUNC", + "topic": "The task has at least 10 separate business rules, so a good solution needs at least 10 own unit tests, each for one rule. Every ABAP name stays at 30 characters or less (the model must shorten long descriptive test method names).", + "error_kind": "long-names", + "id": "G1898", + "run_base": 119920 + }, + { + "category": "E", + "object_type": "DDLS", + "topic": "duplicate join logic to one association", + "id": "G1899", + "run_base": 119960, + "difficulty": 3 + } + ], + "ledger_at_start": 94.615, + "stop_ledger": 1000000.0, + "target": null, + "created": "2026-10-05 18:04:59" +} \ No newline at end of file