code: def test_random_agent_should_generate_valid_actions_for_both_input_control_types(
      self,
  ):
      actions = self.random_agent.generate_actions(None)
  
      assert isinstance(actions, list)
      assert len(actions) == 3
  
      assert actions[0][0] in ["A", "B"]
      assert isinstance(actions[0][1], list)
      assert isinstance(actions[0][1][0], KeyboardEvent)
      assert actions[0][1][0].keyboard_key in [
          KeyboardKey.KEY_A,
          KeyboardKey.KEY_B,
      ]
  
      assert actions[1][0] == "SECOND"
      assert isinstance(actions[1][1], list)
      assert isinstance(actions[1][1][0], KeyboardEvent)
      assert actions[1][1][0].keyboard_key == KeyboardKey.KEY_A
  
      assert isinstance(actions[1][2], float)
      assert actions[1][2] >= 0.001 and actions[1][2] <= 1.0
  
      assert actions[2][0] in ["C", "D", "E"]
      assert isinstance(actions[2][1], list)
      assert isinstance(actions[2][1][0], KeyboardEvent)
      assert actions[2][1][0].keyboard_key in [
          KeyboardKey.KEY_C,
          KeyboardKey.KEY_D,
          KeyboardKey.KEY_E,
      ]
  
file_path: SerpentAI/tests/unit/test_random_agent.py
imports: import pytest
  from serpent.machine_learning.reinforcement_learning.agents.random_agent import RandomAgent
  from serpent.input_controller import KeyboardKey, KeyboardEvent, KeyboardEvents
  from serpent.enums import InputControlTypes
  from serpent.utilities import SerpentError
label_desc: Use image node_id 3 for calling the TestRandomAgent obj's underlying member method code with example usage: obj.test_random_agent_should_generate_valid_actions_for_both_input_control_types() without return types