Skip to main content

facade_quantum/
facade_quantum.rs

1use use_physics::{Photon, QuantumNumbers, hydrogen_transition_wavelength};
2
3fn approx_eq(left: f64, right: f64) -> bool {
4    let scale = left.abs().max(right.abs()).max(1.0);
5    (left - right).abs() <= 1.0e-12 * scale
6}
7
8fn main() -> Result<(), &'static str> {
9    let photon = Photon::from_frequency(1.0).ok_or("expected valid photon")?;
10    let quantum_numbers =
11        QuantumNumbers::new(2, 1, 0, 1).ok_or("expected valid quantum numbers")?;
12    let wavelength =
13        hydrogen_transition_wavelength(2, 1).ok_or("expected transition wavelength")?;
14
15    assert!(approx_eq(
16        photon.energy_joules(),
17        use_physics::PLANCK_CONSTANT
18    ));
19    assert!(approx_eq(quantum_numbers.spin_projection(), 0.5));
20    assert!(wavelength > 0.0);
21
22    Ok(())
23}