code: def test_storage_reservations_with_dense_estimation(self) -> None:
      tables = [
          EmbeddingBagConfig(
              num_embeddings=100,
              embedding_dim=10,
              name="table_0",
              feature_names=["feature_0"],
          )
      ]
  
      ebc = EmbeddingBagCollection(tables)
      model = TestModel(shardable_sparse=ebc)
  
      dense_tensor_estimate = 1000000
      heuristical_storage_reservation = HeuristicalStorageReservation(
          percentage=0.0, dense_tensor_estimate=dense_tensor_estimate
      )
  
      heuristical_storage_reservation.reserve(
          topology=Topology(world_size=2, compute_device="cuda"),
          batch_size=10,
          module=model,
          sharders=cast(
              List[ModuleSharder[nn.Module]],
              [EmbeddingBagCollectionSharder()],
          ),
      )
  
      self.assertEqual(
          dense_tensor_estimate,
          # pyre-ignore
          heuristical_storage_reservation._dense_storage.hbm,
      )
  
imports: import unittest
  from typing import cast, List
  from torch import nn
  from torchrec.distributed.embedding_tower_sharding import EmbeddingTowerCollectionSharder
  from torchrec.distributed.embeddingbag import EmbeddingBagCollectionSharder
  from torchrec.distributed.planner.storage_reservations import _get_module_size, HeuristicalStorageReservation
  from torchrec.distributed.planner.types import Topology
  from torchrec.distributed.test_utils.test_model import TestTowerInteraction
  from torchrec.distributed.types import ModuleSharder
  from torchrec.modules.embedding_configs import EmbeddingBagConfig
  from torchrec.modules.embedding_modules import EmbeddingBagCollection
  from torchrec.modules.embedding_tower import EmbeddingTower, EmbeddingTowerCollection
label_desc: Use image node_id 4 for calling the TestHeuristicalStorageReservation obj's underlying member method code with example usage: obj.test_storage_reservations_with_dense_estimation() without return types