rquant 0.0.3

A quantum computing library for qubit manipulation and observation.
Documentation
use rquant::quantum::types::{
    quantum_gate::QuantumGate, qubit::Qubit, qubit_register::QubitRegister,
};

#[test]
fn new_shouldcreateblankregister_withzeroqubits() {
    let qubit_register = QubitRegister::new(0);

    assert_eq!(0, qubit_register.len());
}

#[test]
fn new_shouldcreateregister_withmultiplequbits() {
    let qubit_register = QubitRegister::new(5);

    assert!(!qubit_register.is_empty());
}

#[test]
fn len_shouldreturnzero_withoutqubits() {
    let qubit_register = QubitRegister { qubits: vec![] };

    assert_eq!(0, qubit_register.len());
}

#[test]
fn len_shouldreturnqubitamount() {
    let num_qubits = 5;
    let qubit_register = QubitRegister::new(num_qubits);

    assert_eq!(num_qubits, qubit_register.len());
}

#[test]
fn isempty_shouldreturntrue_foremptyregister() {
    let qubit_register = QubitRegister { qubits: vec![] };

    assert!(qubit_register.is_empty());
}

#[test]
fn get_shouldreturnnone_withinvalidindex() {
    let qubit_register = QubitRegister::new(0);

    assert!(qubit_register.get(999).is_none());
}

#[test]
fn get_shouldreturnsome_withvalidindex() {
    let qubit_register = QubitRegister::new(5);

    assert!(qubit_register.get(0).is_some());
}

#[test]
fn getmut_shouldreturnnone_withinvalidindex() {
    let mut qubit_register = QubitRegister::new(0);

    assert!(qubit_register.get_mut(999).is_none());
}

#[test]
fn getmut_shouldreturnsome_withvalidindex() {
    let mut qubit_register = QubitRegister::new(5);

    assert!(qubit_register.get_mut(0).is_some());
}

#[test]
fn applysinglequbitgate_shouldmodifyregister_withvalidgate() {
    let expected = Qubit::zero()
        .apply_gate(&QuantumGate::SUPERPOSITION)
        .initial_position();
    let qubit_to_modify_index = 0;
    let mut qubit_register = QubitRegister::new(10);

    qubit_register.apply_single_qubit_gate(&QuantumGate::SUPERPOSITION, qubit_to_modify_index);
    let modified_qubit = qubit_register
        .get_mut(qubit_to_modify_index)
        .expect("Unable to get superpositioned qubit in register.");

    assert_eq!(expected, modified_qubit.initial_position());
}