code: def test_get_recorded_durations_table(self) -> None:
      # empty input
      empty_input = get_recorded_durations_table({})
      assert empty_input == ""
  
      # no recorded duration values
      no_recorded_duration_input = get_recorded_durations_table(
          {"op": {}}
      )
      assert no_recorded_duration_input == ""
  
      # valid input
      valid_input = get_recorded_durations_table(
          {"op": {"p50": 1, "p90": 2}}
      )
      assert (
          valid_input
          == "\n| Name   |   p50 |   p90 |\n|:-------|------:|------:|\n| op     |     1 |     2 |"
      )
  
imports: import os
  import time
  import unittest
  from datetime import timedelta
  from random import random
  from unittest import mock
  from unittest.mock import Mock, patch
  import torch
  import torch.distributed
  from pyre_extensions import none_throws
  from torchtnt.utils.test_utils import skip_if_not_distributed, skip_if_not_gpu, spawn_multi_process
  from torchtnt.utils.timer import BoundedTimer, FullSyncPeriodicTimer, get_durations_histogram, get_recorded_durations_table, get_synced_durations_histogram, get_timer_summary, log_elapsed_time, logger, Timer
label_desc: Use image node_id 12 for calling the TimerTest obj's underlying member method code with example usage: obj.test_get_recorded_durations_table() without return types