code: def test_bins(self):
      rows = []
  
      for i in range(0, 100):
          rows.append([i]),
  
      new_table = Table(
          rows, self.column_names, self.column_types
      ).bins("number")
  
      self.assertColumnNames(new_table, ["number", "Count"])
      self.assertColumnTypes(new_table, [Text, Number])
  
      self.assertSequenceEqual(new_table.rows[0], ["[0 - 10)", 10])
      self.assertSequenceEqual(new_table.rows[3], ["[30 - 40)", 10])
      self.assertSequenceEqual(new_table.rows[9], ["[90 - 100]", 10])
  
      self.assertRowNames(
          new_table,
          [
              "[0 - 10)",
              "[10 - 20)",
              "[20 - 30)",
              "[30 - 40)",
              "[40 - 50)",
              "[50 - 60)",
              "[60 - 70)",
              "[70 - 80)",
              "[80 - 90)",
              "[90 - 100]",
          ],
      )
  
file_path: agate/tests/test_table/test_bins.py
imports: from decimal import Decimal
  from babel.numbers import get_decimal_symbol
  from agate import Table
  from agate.data_types import Number, Text
  from agate.testcase import AgateTestCase
label_desc: Use image node_id 2 for calling the TestBins obj's underlying member method code with example usage: obj.test_bins() without return types