Where test data is concerned, having a few dice can be a very handy feature. Throw them to determine which choice a simulated end user would have done. Or use them to decide whether the next record of test data you are creating is red, green or blue. Random numbers - as test system tooling.
The following example was set up to support a series of automated choices to compose a list of unique employee names. A first name, prefix and lastname which is composed from shortlists of such names. In coding the outcome of a condition is based on the outcome of throwing a dice. Consider this example local class: lcl_random
. To use this class, all you need is a choice to make, e.g. whether a prefix is needed for a name:
if lcl_random=>roll_dice( ) < 2. * In 1/3rd of the cases, this logic is executed. endif.
If the dice mindset doesn't work for you, use a 1 to 10 range, or 1 to 100, or involve a dartboard, roulette table or whatever does work for you. Is 1 to 6 a too large subset? Use the same trick twice:
if lcl_random=>roll_dice( ) = 3 and lcl_random=>roll_dice( ) >= 4. * chance: 1/6 * 3/6 so 1 in 12 times endif.
For this setup to work, you'll need a small class (put it anywhere in your coding, light preference to "earlier that use", or also set CLASS lcl_random DEFINITION DEFERRED
.
CLASS lcl_random DEFINITION. PUBLIC SECTION. CLASS-METHODS: roll_dice IMPORTING eye_count type DATATYPE-INTEGER2 default 6 RETURNING VALUE(eyes) TYPE datatype-integer2. ENDCLASS. CLASS lcl_random IMPLEMENTATION. METHOD roll_dice. CALL FUNCTION 'RANDOM_I2' EXPORTING RND_MIN = 1 RND_MAX = eye_count IMPORTING rnd_value = eyes. ENDMETHOD. ENDCLASS.
Select random entry from internal table
To select a random entry from an internal table, the length of the table is determined and with this length a random entry is selected and read:
METHOD random_table_focus. data: lv_randomtabix TYPE datatype-integer4. describe table tbl lines lv_randomtabix. CALL FUNCTION 'RANDOM_I4' EXPORTING rnd_min = 1 rnd_max = lv_randomtabix IMPORTING rnd_value = lv_randomtabix. READ TABLE tbl INDEX lv_randomtabix INTO tableline. ENDMETHOD.
Function modules for random numbers
There are quite a few function modules starting with RANDOM_
, of give the GENERATE_SEC_RANDOM
a try: it returns a random code with a length you can specify..