def METHOD_NAME(self, use_naive_parallel_network, reward_dim,
                         use_n_step_td, min_critic_by_critic_mean):
    num_env = 1
    config = TrainerConfig(
        root_dir="dummy",
        unroll_length=1,
        mini_batch_length=4,
        mini_batch_size=64,
        initial_collect_steps=500,
        whole_replay_buffer_training=False,
        clear_replay_buffer=False)
    env_class = PolicyUnittestEnv
    steps_per_episode = 13
    env = env_class(
        num_env,
        steps_per_episode,
        action_type=ActionType.Continuous,
        reward_dim=reward_dim)
    eval_env = env_class(
        100,
        steps_per_episode,
        action_type=ActionType.Continuous,
        reward_dim=reward_dim)
    obs_spec = env._observation_spec
    action_spec = env._action_spec
    reward_spec = env._reward_spec
    fc_layer_params = (10, 10)
    continuous_projection_net_ctor = partial(
        alf.nn.NormalProjectionNetwork,
        state_dependent_std=True,
        scale_distribution=True,
        std_transform=clipped_exp)
    actor_network = partial(
        alf.nn.ActorDistributionNetwork,
        fc_layer_params=fc_layer_params,
        continuous_projection_net_ctor=continuous_projection_net_ctor)
    num_quantiles = 50
    critic_network = partial(
        alf.nn.CriticNetwork,
        output_tensor_spec=TensorSpec((num_quantiles, )),
        joint_fc_layer_params=fc_layer_params,
        use_naive_parallel_network=use_naive_parallel_network)
    if use_n_step_td:
        td_qr_loss_ctor = TDQRLoss
    else:
        td_qr_loss_ctor = OneStepTDQRLoss
    critic_loss = partial(td_qr_loss_ctor, num_quantiles=num_quantiles)
    alg = QrsacAlgorithm(
        observation_spec=obs_spec,
        action_spec=action_spec,
        reward_spec=reward_spec,
        actor_network_cls=actor_network,
        critic_network_cls=critic_network,
        critic_loss_ctor=critic_loss,
        min_critic_by_critic_mean=min_critic_by_critic_mean,
        use_entropy_reward=reward_dim == 1,
        env=env,
        config=config,
        actor_optimizer=alf.optimizers.Adam(lr=1e-2),
        critic_optimizer=alf.optimizers.Adam(lr=1e-2),
        alpha_optimizer=alf.optimizers.Adam(lr=1e-2),
        debug_summaries=False,
        name="MyQRSAC")
    eval_env.reset()
    for i in range(700):
        alg.train_iter()
        if i < config.initial_collect_steps:
            continue
        eval_env.reset()
        eval_time_step = unroll(eval_env, alg, steps_per_episode - 1)
        logging.log_every_n_seconds(
            logging.INFO,
            "%d reward=%f" % (i, float(eval_time_step.reward.mean())),
            n_seconds=1)
    self.assertAlmostEqual(
        1.0, float(eval_time_step.reward.mean()), delta=0.3)