def test_constant_versus_series(w):
    # A random rotation should leave everything but data and frame the
    # same (except num, of course)
    W_const = w()
    W_series = w()
    np.random.seed(hash("test_constant_versus_series") % 4294967294)  # Use mod to get in an acceptable range
    W_const.rotate_decomposition_basis(np.quaternion(*np.random.uniform(-1, 1, 4)).normalized())
    W_series.rotate_decomposition_basis(
        np.array([np.quaternion(*np.random.uniform(-1, 1, 4)).normalized()] * W_series.n_times)
    )
    assert W_const.ensure_validity(alter=False)
    assert W_series.ensure_validity(alter=False)
    assert np.array_equal(W_series.t, W_const.t)
    assert not np.array_equal(W_series.frame, W_const.frame)  # This SHOULD change
    assert not np.array_equal(W_series.data, W_const.data)  # This SHOULD change
    assert W_series.ell_min == W_const.ell_min
    assert W_series.ell_max == W_const.ell_max
    assert np.array_equal(W_series.LM, W_const.LM)
    for h_const, h_series in zip(W_const.history[:-5], W_series.history[:-11]):
        assert h_const == h_series.replace(
            f"{type(W_series).__name__}_{str(W_series.num)}", f"{type(W_const).__name__}_{str(W_const.num)}"
        ) or (h_const.startswith("# ") and h_series.startswith("# "))
    assert W_series.frameType == W_const.frameType
    assert W_series.dataType == W_const.dataType
    assert W_series.r_is_scaled_out == W_const.r_is_scaled_out
    assert W_series.m_is_scaled_out == W_const.m_is_scaled_out
    assert W_series.num != W_const.num