*"* use this source file for your ABAP unit test classes
CLASS ltc_int4_check DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
  PRIVATE SECTION.


    TYPES: BEGIN OF ty_case,
             data  TYPE string,
             valid TYPE abap_bool,
           END OF ty_case.
    TYPES: ty_case_t TYPE STANDARD TABLE OF ty_case.


    METHODS: invalid_input FOR TESTING.
    METHODS: valid_input FOR TESTING.

ENDCLASS.

CLASS ltc_int4_check IMPLEMENTATION.

  METHOD invalid_input.

    DATA: cases TYPE ty_case_t.

    cases = VALUE #(
        ( data = '-2147483649'   valid = abap_false )
        ( data = '2147483648'    valid = abap_false )
        ( data = '21474 83648'   valid = abap_false )
        ( data = '+2147483647-'  valid = abap_false )
        ( data = '21474836470'   valid = abap_false )
        ( data = '-2147483647+'  valid = abap_false )
        ( data = '-0+'           valid = abap_false )
        ( data = ''              valid = abap_false )
    ).

    LOOP AT cases ASSIGNING FIELD-SYMBOL(<case>).

      DATA(valid) = zcl_adv_int4_check=>zif_adv_check~is_valid( <case>-data ).

      cl_abap_unit_assert=>assert_equals(
        act = valid
        exp = <case>-valid
        msg = |Result of { <case>-data } should be '{ <case>-valid }'|
      ).

    ENDLOOP.

  ENDMETHOD.

  METHOD valid_input.

    DATA: cases TYPE ty_case_t.

    cases = VALUE #(
        ( data = '0'               valid = abap_true )
        ( data = '0-'              valid = abap_true )
        ( data = '+0'              valid = abap_true )
        ( data = '+02147483647'    valid = abap_true )
        ( data = '000002147483647' valid = abap_true )
        ( data = '02147483647-'    valid = abap_true )
        ( data = '02147483647+'    valid = abap_true )
        ( data = '-2147483648'     valid = abap_true )
        ( data = '+2147483647'     valid = abap_true )
        ( data = '2147483647- '    valid = abap_true )
        ( data = ' 2147483647 '    valid = abap_true )
        ( data = ' -2147483647'    valid = abap_true )
        ( data = '2147483647-'     valid = abap_true )
        ( data = '2147483647+'     valid = abap_true )
    ).

    LOOP AT cases ASSIGNING FIELD-SYMBOL(<case>).

      DATA(valid) = zcl_adv_int4_check=>zif_adv_check~is_valid( <case>-data ).

      cl_abap_unit_assert=>assert_equals(
        act = valid
        exp = <case>-valid
        msg = |Result of { <case>-data } should be '{ <case>-valid }'|
      ).

    ENDLOOP.
  ENDMETHOD.

ENDCLASS.
