def METHOD_NAME(conc, dt):
    # Arrange
    sut = SUT()
    moles = {
        k: Storage.from_ndarray(
            np.full(n_sd, 0.0 if k not in conc["input"] else conc["input"][k] * volume)
        )
        for k in ("S_IV", "S_VI", "H2O2", "O3")
    }
    # Act
    sut.oxidation(
        n_sd=n_sd,
        cell_ids=cell_ids,
        do_chemistry_flag=Storage.from_ndarray(np.full(n_sd, True)),
        k0=k0,
        k1=k1,
        k2=k2,
        k3=k3,
        K_SO2=K_SO2,
        K_HSO3=K_HSO3,
        timestep=dt,
        droplet_volume=Storage.from_ndarray(np.full(n_sd, volume)),
        pH=Storage.from_ndarray(np.full(n_sd, pH)),
        dissociation_factor_SO2=Storage.from_ndarray(np.full(n_sd, DF)),
        # input/output
        moles_O3=moles["O3"],
        moles_H2O2=moles["H2O2"],
        moles_S_IV=moles["S_IV"],
        moles_S_VI=moles["S_VI"],
    )
    # Assert
    for k in conc["output"].keys():
        np.testing.assert_allclose(
            actual=moles[k].data / volume - conc["input"][k],
            desired=conc["output"][k] * dt,
            rtol=1e-11,
        )