old_contents: import pytest
  from mythril.laser.ethereum.state.calldata import ConcreteCalldata, SymbolicCalldata
  from z3 import Solver, simplify
  from z3.z3types import Z3Exception
  from mock import MagicMock
  
  uninitialized_test_data = [
      ([]),  # Empty concrete calldata
      ([1, 4, 5, 3, 4, 72, 230, 53]),  # Concrete calldata
  ]
  
  
  @pytest.mark.parametrize("starting_calldata", uninitialized_test_data)
  def test_concrete_calldata_uninitialized_index(starting_calldata):
      # Arrange
      calldata = ConcreteCalldata(0, starting_calldata)
  
      # Act
      value = calldata[100]
      value2 = calldata.get_word_at(200)
  
      # Assert
      assert value == 0
      assert value2 == 0
  
  
  def test_concrete_calldata_calldatasize():
      # Arrange
      calldata = ConcreteCalldata(0, [1, 4, 7, 3, 7, 2, 9])
      solver = Solver()
  
      # Act
      solver.check()
      model = solver.model()
      result = model.eval(calldata.calldatasize)
  
      # Assert
      assert result == 7
  
  
  def test_concrete_calldata_constrain_index():
      # Arrange
      calldata = ConcreteCalldata(0, [1, 4, 7, 3, 7, 2, 9])
      solver = Solver()
  
      # Act
      value = calldata[2]
      constraint = value == 3
  
      solver.add([constraint])
      result = solver.check()
  
      # Assert
      assert str(result) == "unsat"
  
  
  def test_symbolic_calldata_constrain_index():
      # Arrange
      calldata = SymbolicCalldata(0)
      solver = Solver()
  
      # Act
      value = calldata[51]
  
      constraints = [value == 1, calldata.calldatasize == 50]
  
      solver.add(constraints)
  
      result = solver.check()
  
      # Assert
      assert str(result) == "unsat"
  
new_contents: import pytest
  from mythril.laser.ethereum.state.calldata import ConcreteCalldata, SymbolicCalldata
  from z3 import Solver, simplify, BitVec, sat, unsat
  from z3.z3types import Z3Exception
  from mock import MagicMock
  
  uninitialized_test_data = [
      ([]),  # Empty concrete calldata
      ([1, 4, 5, 3, 4, 72, 230, 53]),  # Concrete calldata
  ]
  
  
  @pytest.mark.parametrize("starting_calldata", uninitialized_test_data)
  def test_concrete_calldata_uninitialized_index(starting_calldata):
      # Arrange
      calldata = ConcreteCalldata(0, starting_calldata)
  
      # Act
      value = calldata[100]
      value2 = calldata.get_word_at(200)
  
      # Assert
      assert value == 0
      assert value2 == 0
  
  
  def test_concrete_calldata_calldatasize():
      # Arrange
      calldata = ConcreteCalldata(0, [1, 4, 7, 3, 7, 2, 9])
      solver = Solver()
  
      # Act
      solver.check()
      model = solver.model()
      result = model.eval(calldata.calldatasize)
  
      # Assert
      assert result == 7
  
  
  def test_concrete_calldata_constrain_index():
      # Arrange
      calldata = ConcreteCalldata(0, [1, 4, 7, 3, 7, 2, 9])
      solver = Solver()
  
      # Act
      value = calldata[2]
      constraint = value == 3
  
      solver.add([constraint])
      result = solver.check()
  
      # Assert
      assert str(result) == "unsat"
  
  
  def test_symbolic_calldata_constrain_index():
      # Arrange
      calldata = SymbolicCalldata(0)
      solver = Solver()
  
      # Act
      value = calldata[51]
  
      constraints = [value == 1, calldata.calldatasize == 50]
  
      solver.add(constraints)
  
      result = solver.check()
  
      # Assert
      assert str(result) == "unsat"
  
  
  def test_symbolic_calldata_equal_indices():
      calldata = SymbolicCalldata(0)
  
      index_a = BitVec("index_a", 256)
      index_b = BitVec("index_b", 256)
  
      # Act
      a = calldata[index_a]
      b = calldata[index_b]
  
      s = Solver()
      s.append(index_a == index_b)
      s.append(a != b)
  
      # Assert
      assert unsat == s.check()
  
subject: add symbolic calldata indices test