def METHOD_NAME(
    self,
    water,
    distance_,
    expected_w1,
    expected_w2,
    expected_w3,
):
    import openmm
    tip4p = ForceField("tip4p_fb.offxml")
    tip4p["VirtualSites"].parameters[0].distance = Quantity(
        distance_,
        unit.angstrom,
    )
    system = tip4p.create_openmm_system(water.to_topology())
    assert system.getNumParticles() == 4
    for index in range(3):
        assert system.getParticleMass(index)._value > 0.0
        try:
            system.getVirtualSite(index)
        except openmm.OpenMMException as error:
            # This method raises an error, not sure if there's another method
            # that just returns a boolean as to whether or not it's a virtual site
            assert "This particle is not a virtual site" in str(error)
    assert system.getParticleMass(3)._value == 0.0
    virtual_site = system.getVirtualSite(3)
    assert isinstance(virtual_site, openmm.ThreeParticleAverageSite)
    assert virtual_site.getParticle(0) == 0
    assert virtual_site.getParticle(1) == 1
    assert virtual_site.getParticle(2) == 2
    assert virtual_site.getWeight(0) == pytest.approx(expected_w1)
    assert virtual_site.getWeight(1) == pytest.approx(expected_w2)
    assert virtual_site.getWeight(2) == pytest.approx(expected_w3)