code: def test_should_return_smaller_num_rows(self):
      dfs = [
          pd.DataFrame(
              np.random.randint(0, 100, size=(100, 4)),
              columns=list("ABCD"),
          )
          for _ in range(4)
      ]
  
      batches = [Batch(frames=df) for df in dfs]
  
      limit_value = 125
  
      plan = LimitPlan(ConstantValueExpression(limit_value))
  
      limit_executor = LimitExecutor(MagicMock(), plan)
      limit_executor.append_child(DummyExecutor(batches))
      reduced_batches = list(limit_executor.exec())
  
      total_size = 0
      for batch in reduced_batches:
          total_size += len(batch)
  
      self.assertEqual(total_size, limit_value)
  
file_path: evadb/test/unit_tests/executor/test_limit_executor.py
imports: import unittest
  from test.unit_tests.executor.utils import DummyExecutor
  import numpy
  import pandas
  from mock import MagicMock
  from evadb.executor.limit_executor import LimitExecutor
  from evadb.executor.orderby_executor import OrderByExecutor
  from evadb.expression.constant_value_expression import ConstantValueExpression
  from evadb.expression.tuple_value_expression import TupleValueExpression
  from evadb.models.storage.batch import Batch
  from evadb.parser.types import ParserOrderBySortType
  from evadb.plan_nodes.limit_plan import LimitPlan
  from evadb.plan_nodes.orderby_plan import OrderByPlan
label_desc: Use image node_id 1 for calling the LimitExecutorTest obj's underlying member method code with example usage: obj.test_should_return_smaller_num_rows() without return types