');   $number_of_calls = 0;   assertEquals(text_get_substring((get_numbers()), 'FROM_START', 0, 'FROM_END', 0), '0000000', 'substring # #-end complex');   check_number_of_calls('substring # #-end complex');   $number_of_calls = 0;   assertEquals(text_get_substring((get_numbers()), 'FROM_END', 0, 'FROM_START', 0), '00', 'substring #-end # complex');   check_number_of_calls('substring #-end # complex');   $number_of_calls = 0;   assertEquals(text_get_substring((get_numbers()), 'FIRST', 0, 'FROM_START', 0), '0000', 'substring first # complex');   check_number_of_calls('substring first # complex');   $number_of_calls = 0;   assertEquals(text_get_substring((get_numbers()), 'FIRST', 0, 'FROM_END', 0), '00000000', 'substring first #-end complex');   check_number_of_calls('substring first #-end complex');   $number_of_calls = 0;   assertEquals(text_get_substring((get_numbers()), 'FROM_START', 0, 'LAST', 0), '000', 'substring # last complex');   check_number_of_calls('substring # last complex');   $number_of_calls = 0;   assertEquals(text_get_substring((get_numbers()), 'FROM_END', 0, 'LAST', 0), '000', 'substring #-end last complex');   check_number_of_calls('substring #-end last complex');   $number_of_calls = 0;   assertEquals(text_get_substring((get_numbers()), 'FROM_START', 0, 'FROM_END', 0), '000000000', 'substring all with # #-end complex');   check_number_of_calls('substring all with # #-end complex');   $number_of_calls = 0;   assertEquals(text_get_substring((get_numbers()), 'FROM_END', 0, 'FROM_START', 0), '000000000', 'substring all with #-end # complex');   check_number_of_calls('substring all with #-end # complex');   $number_of_calls = 0;   // Checks that the whole string is properly retrieved even if the value for start and end is not a simple number. This is especially important in generators where substring uses [x:length - y] for # #-end.   assertEquals(text_get_substring((get_numbers()), 'FROM_START', ((0 + 0) - 0), 'FROM_END', ((0 + 0) - 0)), '000000000', 'substring all with # #-end math complex');   check_number_of_calls('substring all with # #-end math complex'); }  // Tests the "