def test_promote_dtype_handles_rearrangement_of_columns_favouring_dtype1():
    dtype1 = np.dtype([('A', 'i4'), ('B', 'f4'), ('C', 'a10')])
    dtype2 = np.dtype([('A', 'i4'), ('C', 'a10'), ('B', 'f4')])
    expected = np.dtype([('A', 'i4'), ('B', 'f4'), ('C', 'a10')])

    actual = _promote_struct_dtypes(dtype1, dtype2)

    assert expected == actual
def test_promote_dtype_handles_new_column():
    dtype1 = np.dtype([('A', 'i4'), ('B', 'f4'), ('C', 'a10')])
    dtype2 = np.dtype([('A', 'i4'), ('B', 'f4')])
    expected = np.dtype([('A', 'i4'), ('B', 'f4'), ('C', 'a10')])

    actual = _promote_struct_dtypes(dtype1, dtype2)

    assert expected == actual
def test_promote_dtype_handles_rearrangement_of_columns_favouring_dtype1():
    dtype1 = np.dtype([('A', 'i4'), ('B', 'f4'), ('C', 'a10')])
    dtype2 = np.dtype([('A', 'i4'), ('C', 'a10'), ('B', 'f4')])
    expected = np.dtype([('A', 'i4'), ('B', 'f4'), ('C', 'a10')])

    actual = _promote_struct_dtypes(dtype1, dtype2)

    assert expected == actual
def test_promote_dtype_handles_new_column():
    dtype1 = np.dtype([('A', 'i4'), ('B', 'f4'), ('C', 'a10')])
    dtype2 = np.dtype([('A', 'i4'), ('B', 'f4')])
    expected = np.dtype([('A', 'i4'), ('B', 'f4'), ('C', 'a10')])

    actual = _promote_struct_dtypes(dtype1, dtype2)

    assert expected == actual
def test_promote_dtype_throws_if_column_is_removed():
    dtype1 = np.dtype([('A', 'i4'), ('B', 'f4')])
    dtype2 = np.dtype([('A', 'i4'), ('C', 'a10'), ('B', 'f4')])

    with raises(Exception):
        _promote_struct_dtypes(dtype1, dtype2)
def test_promote_dtype_throws_if_column_is_removed():
    dtype1 = np.dtype([('A', 'i4'), ('B', 'f4')])
    dtype2 = np.dtype([('A', 'i4'), ('C', 'a10'), ('B', 'f4')])

    with raises(Exception):
        _promote_struct_dtypes(dtype1, dtype2)