diff --git a/abaplint_exercises.json b/abaplint_exercises.json index c9868c9..ae230f4 100644 --- a/abaplint_exercises.json +++ b/abaplint_exercises.json @@ -84,19 +84,7 @@ "check_syntax": true, "check_text_elements": true, "check_transformation_exists": true, - "class_attribute_names": { - "exclude": [], - "severity": "Error", - "patternKind": "required", - "ignoreNames": [], - "ignorePatterns": [], - "ignoreExceptions": true, - "ignoreLocal": true, - "ignoreInterfaces": false, - "statics": "^G._.+$", - "instance": "^M._.+$", - "constants": "" - }, + "class_attribute_names": false, "cloud_types": true, "colon_missing_space": true, "commented_code": { @@ -516,11 +504,7 @@ "tabl_enhancement_category": true, "try_without_catch": true, "type_form_parameters": true, - "types_naming": { - "exclude": [], - "severity": "Error", - "pattern": "^TY_.+$" - }, + "types_naming": false, "uncaught_exception": true, "unknown_types": true, "unreachable_code": true, diff --git a/abaplint_solutions.json b/abaplint_solutions.json index 7a8123b..4426c83 100644 --- a/abaplint_solutions.json +++ b/abaplint_solutions.json @@ -84,19 +84,7 @@ "check_syntax": true, "check_text_elements": true, "check_transformation_exists": true, - "class_attribute_names": { - "exclude": [], - "severity": "Error", - "patternKind": "required", - "ignoreNames": [], - "ignorePatterns": [], - "ignoreExceptions": true, - "ignoreLocal": true, - "ignoreInterfaces": false, - "statics": "^G._.+$", - "instance": "^M._.+$", - "constants": "" - }, + "class_attribute_names": false, "cloud_types": true, "colon_missing_space": true, "commented_code": { @@ -516,11 +504,7 @@ "tabl_enhancement_category": true, "try_without_catch": true, "type_form_parameters": true, - "types_naming": { - "exclude": [], - "severity": "Error", - "pattern": "^TY_.+$" - }, + "types_naming": false, "uncaught_exception": true, "unknown_types": true, "unreachable_code": true, diff --git a/config.json b/config.json index 348b444..97ca961 100644 --- a/config.json +++ b/config.json @@ -60,6 +60,14 @@ "practices": [], "prerequisites": [], "difficulty": 1 + }, + { + "slug": "clock", + "name": "Clock", + "uuid": "ac4e5fb1-1e7c-461d-b2df-1abfd88d8c8a", + "practices": [], + "prerequisites": [], + "difficulty": 1 } ] }, diff --git a/exercises/practice/clock/.docs/instructions.md b/exercises/practice/clock/.docs/instructions.md new file mode 100644 index 0000000..a1efc78 --- /dev/null +++ b/exercises/practice/clock/.docs/instructions.md @@ -0,0 +1,7 @@ +# Instructions + +Implement a clock that handles times without dates. + +You should be able to add and subtract minutes to it. + +Two clocks that represent the same time should be equal to each other. diff --git a/exercises/practice/clock/.meta/config.json b/exercises/practice/clock/.meta/config.json new file mode 100644 index 0000000..73a867c --- /dev/null +++ b/exercises/practice/clock/.meta/config.json @@ -0,0 +1,10 @@ +{ + "blurb": "Clock", + "authors": ["mbtools"], + "contributors": [], + "files": { + "solution": ["zcl_clock.clas.abap"], + "test": ["zcl_clock.clas.testclasses.abap"], + "example": [".meta/zcl_clock.clas.abap"] + } +} \ No newline at end of file diff --git a/exercises/practice/clock/.meta/zcl_clock.clas.abap b/exercises/practice/clock/.meta/zcl_clock.clas.abap new file mode 100644 index 0000000..582940f --- /dev/null +++ b/exercises/practice/clock/.meta/zcl_clock.clas.abap @@ -0,0 +1,54 @@ +CLASS zcl_clock DEFINITION + PUBLIC + CREATE PUBLIC. + + PUBLIC SECTION. + + METHODS constructor + IMPORTING + !hours TYPE i + !minutes TYPE i DEFAULT 0. + METHODS get + RETURNING + VALUE(result) TYPE string. + METHODS add + IMPORTING + !minutes TYPE i. + METHODS sub + IMPORTING + !minutes TYPE i. + + PRIVATE SECTION. + + DATA clock TYPE t. + +ENDCLASS. + + + +CLASS zcl_clock IMPLEMENTATION. + + + METHOD add. + clock = clock + minutes * 60. + ENDMETHOD. + + + METHOD constructor. + " Clock is number of seconds + clock = hours * 60 * 60 + minutes * 60. + ENDMETHOD. + + + METHOD get. + " hh:mm:ss + result = |{ clock TIME = ISO }|. + " return only hh:mm + result = result(5). + ENDMETHOD. + + + METHOD sub. + clock = clock - minutes * 60. + ENDMETHOD. +ENDCLASS. diff --git a/exercises/practice/clock/zcl_clock.clas.abap b/exercises/practice/clock/zcl_clock.clas.abap new file mode 100644 index 0000000..b7fb710 --- /dev/null +++ b/exercises/practice/clock/zcl_clock.clas.abap @@ -0,0 +1,49 @@ +CLASS zcl_clock DEFINITION + PUBLIC + CREATE PUBLIC. + + PUBLIC SECTION. + + METHODS constructor + IMPORTING + !hours TYPE i + !minutes TYPE i DEFAULT 0. + METHODS get + RETURNING + VALUE(result) TYPE string. + METHODS add + IMPORTING + !minutes TYPE i. + METHODS sub + IMPORTING + !minutes TYPE i. + + PRIVATE SECTION. + +* add solution here + +ENDCLASS. + + + +CLASS zcl_clock IMPLEMENTATION. + + METHOD add. +* add solution here + ENDMETHOD. + + + METHOD constructor. +* add solution here + ENDMETHOD. + + + METHOD get. +* add solution here + ENDMETHOD. + + + METHOD sub. +* add solution here + ENDMETHOD. +ENDCLASS. diff --git a/exercises/practice/clock/zcl_clock.clas.testclasses.abap b/exercises/practice/clock/zcl_clock.clas.testclasses.abap new file mode 100644 index 0000000..65eea7e --- /dev/null +++ b/exercises/practice/clock/zcl_clock.clas.testclasses.abap @@ -0,0 +1,303 @@ +CLASS ltcl_clock DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL. + + PRIVATE SECTION. + DATA cut TYPE REF TO zcl_clock. + + METHODS: + on_the_hour FOR TESTING, + past_the_hour FOR TESTING, + adding_a_few_minutes FOR TESTING, + adding_zero_minutes FOR TESTING, + adding_over_an_hour FOR TESTING, + adding_more_than_two_hours_w_c FOR TESTING, + adding_more_than_two_days FOR TESTING, + wrap_around_at_midnight FOR TESTING, + subtract_minutes FOR TESTING, + subtract_more_than_two_hours FOR TESTING, + subtract_more_than_two_hours_w FOR TESTING, + subtract_more_than_two_days FOR TESTING, + wrap_around_backwards FOR TESTING, + wrap_around_day FOR TESTING, + wrap_around_day_backwards FOR TESTING, + equivalent_clocks FOR TESTING, + inequivalent_clocks FOR TESTING, + equivalent_clocks_1 FOR TESTING, + equivalent_clocks_2 FOR TESTING, + equivalent_clocks_3 FOR TESTING, + equivalent_clocks_4 FOR TESTING, + equivalent_clocks_5 FOR TESTING, + equivalent_clocks_6 FOR TESTING, + hours_rollover FOR TESTING, + minutes_rollover FOR TESTING, + hours_and_minutes_rollover FOR TESTING, + negative_hours_rollover FOR TESTING, + negative_minutes_rollover FOR TESTING, + negative_hours_and_minutes FOR TESTING. + +ENDCLASS. + +CLASS ltcl_clock IMPLEMENTATION. + + METHOD on_the_hour. + cut = NEW zcl_clock( 8 ). + + cl_abap_unit_assert=>assert_equals( + exp = '08:00' + act = cut->get( ) ). + ENDMETHOD. + + METHOD past_the_hour. + cut = NEW zcl_clock( hours = 11 + minutes = 9 ). + + cl_abap_unit_assert=>assert_equals( + exp = '11:09' + act = cut->get( ) ). + ENDMETHOD. + + METHOD adding_a_few_minutes. + cut = NEW zcl_clock( 10 ). + + cut->add( 3 ). + + cl_abap_unit_assert=>assert_equals( + exp = '10:03' + act = cut->get( ) ). + ENDMETHOD. + + METHOD adding_zero_minutes. + cut = NEW zcl_clock( hours = 6 + minutes = 41 ). + + cut->add( 0 ). + + cl_abap_unit_assert=>assert_equals( + exp = '06:41' + act = cut->get( ) ). + ENDMETHOD. + + METHOD adding_over_an_hour. + cut = NEW zcl_clock( 10 ). + + cut->add( 61 ). + + cl_abap_unit_assert=>assert_equals( + exp = '11:01' + act = cut->get( ) ). + ENDMETHOD. + + METHOD adding_more_than_two_hours_w_c. + cut = NEW zcl_clock( hours = 0 + minutes = 45 ). + + cut->add( 160 ). + + cl_abap_unit_assert=>assert_equals( + exp = '03:25' + act = cut->get( ) ). + ENDMETHOD. + + METHOD adding_more_than_two_days. + cut = NEW zcl_clock( hours = 1 + minutes = 1 ). + + cut->add( 3500 ). + + cl_abap_unit_assert=>assert_equals( + exp = '11:21' + act = cut->get( ) ). + ENDMETHOD. + + METHOD wrap_around_at_midnight. + cut = NEW zcl_clock( hours = 23 + minutes = 30 ). + + cut->add( 60 ). + + cl_abap_unit_assert=>assert_equals( + exp = '00:30' + act = cut->get( ) ). + ENDMETHOD. + + METHOD subtract_minutes. + cut = NEW zcl_clock( 10 ). + + cut->sub( 90 ). + + cl_abap_unit_assert=>assert_equals( + exp = '08:30' + act = cut->get( ) ). + ENDMETHOD. + + METHOD subtract_more_than_two_hours. + cut = NEW zcl_clock( hours = 6 + minutes = 15 ). + + cut->sub( 160 ). + + cl_abap_unit_assert=>assert_equals( + exp = '03:35' + act = cut->get( ) ). + ENDMETHOD. + + METHOD subtract_more_than_two_hours_w. + cut = NEW zcl_clock( hours = 6 + minutes = 15 ). + + cut->add( -160 ). + + cl_abap_unit_assert=>assert_equals( + exp = '03:35' + act = cut->get( ) ). + + ENDMETHOD. + + METHOD subtract_more_than_two_days. + cut = NEW zcl_clock( hours = 2 + minutes = 20 ). + + cut->sub( 3000 ). + + cl_abap_unit_assert=>assert_equals( + exp = '00:20' + act = cut->get( ) ). + ENDMETHOD. + + METHOD wrap_around_backwards. + cut = NEW zcl_clock( hours = 0 + minutes = 30 ). + + cut->sub( 60 ). + + cl_abap_unit_assert=>assert_equals( + exp = '23:30' + act = cut->get( ) ). + ENDMETHOD. + + METHOD wrap_around_day. + cut = NEW zcl_clock( hours = 5 + minutes = 32 ). + + cut->add( 25 * 60 ). + + cl_abap_unit_assert=>assert_equals( + exp = '06:32' + act = cut->get( ) ). + + ENDMETHOD. + + METHOD wrap_around_day_backwards. + cut = NEW zcl_clock( hours = 5 + minutes = 32 ). + + cut->sub( 25 * 60 ). + + cl_abap_unit_assert=>assert_equals( + exp = '04:32' + act = cut->get( ) ). + ENDMETHOD. + + METHOD equivalent_clocks. + cl_abap_unit_assert=>assert_equals( + exp = NEW zcl_clock( hours = 15 + minutes = 37 )->get( ) + act = NEW zcl_clock( hours = 15 + minutes = 37 )->get( ) ). + ENDMETHOD. + + METHOD inequivalent_clocks. + cl_abap_unit_assert=>assert_differs( + exp = NEW zcl_clock( hours = 1 + minutes = 1 )->get( ) + act = NEW zcl_clock( hours = 18 + minutes = 32 )->get( ) ). + ENDMETHOD. + + METHOD equivalent_clocks_1. + cl_abap_unit_assert=>assert_equals( + exp = NEW zcl_clock( hours = 3 + minutes = 11 )->get( ) + act = NEW zcl_clock( hours = 99 + minutes = 11 )->get( ) ). + ENDMETHOD. + + METHOD equivalent_clocks_2. + cl_abap_unit_assert=>assert_equals( + exp = NEW zcl_clock( hours = 22 + minutes = 40 )->get( ) + act = NEW zcl_clock( hours = -2 + minutes = 40 )->get( ) ). + ENDMETHOD. + + METHOD equivalent_clocks_3. + cl_abap_unit_assert=>assert_equals( + exp = NEW zcl_clock( hours = 17 + minutes = 3 )->get( ) + act = NEW zcl_clock( hours = -31 + minutes = 3 )->get( ) ). + ENDMETHOD. + + METHOD equivalent_clocks_4. + cl_abap_unit_assert=>assert_equals( + exp = NEW zcl_clock( hours = 2 + minutes = 2 )->get( ) + act = NEW zcl_clock( hours = 2 + minutes = 4322 )->get( ) ). + ENDMETHOD. + + METHOD equivalent_clocks_5. + cl_abap_unit_assert=>assert_equals( + exp = NEW zcl_clock( hours = 2 + minutes = 40 )->get( ) + act = NEW zcl_clock( hours = 3 + minutes = -20 )->get( ) ). + ENDMETHOD. + + METHOD equivalent_clocks_6. + cl_abap_unit_assert=>assert_equals( + exp = NEW zcl_clock( hours = 7 + minutes = 32 )->get( ) + act = NEW zcl_clock( hours = -12 + minutes = -268 )->get( ) ). + ENDMETHOD. + + METHOD hours_rollover. + cl_abap_unit_assert=>assert_equals( + exp = '04:00' + act = NEW zcl_clock( 100 )->get( ) ). + ENDMETHOD. + + METHOD minutes_rollover. + cl_abap_unit_assert=>assert_equals( + exp = '04:43' + act = NEW zcl_clock( hours = 0 + minutes = 1723 )->get( ) ). + ENDMETHOD. + + METHOD hours_and_minutes_rollover. + cl_abap_unit_assert=>assert_equals( + exp = '00:00' + act = NEW zcl_clock( hours = 72 + minutes = 8640 )->get( ) ). + ENDMETHOD. + + METHOD negative_hours_rollover. + cl_abap_unit_assert=>assert_equals( + exp = '05:00' + act = NEW zcl_clock( -91 )->get( ) ). + ENDMETHOD. + + METHOD negative_minutes_rollover. + cl_abap_unit_assert=>assert_equals( + exp = '16:40' + act = NEW zcl_clock( hours = 1 + minutes = -4820 )->get( ) ). + ENDMETHOD. + + METHOD negative_hours_and_minutes. + cl_abap_unit_assert=>assert_equals( + exp = '22:10' + act = NEW zcl_clock( hours = -121 + minutes = -5810 )->get( ) ). + ENDMETHOD. +ENDCLASS.