add gray_code, gray_code_generator, alle with tests