Skip to content

Commit

Permalink
Add tests for ch and crz
Browse files Browse the repository at this point in the history
  • Loading branch information
smu160 committed Dec 26, 2023
1 parent 45dca97 commit 0353960
Show file tree
Hide file tree
Showing 2 changed files with 118 additions and 0 deletions.
44 changes: 44 additions & 0 deletions spinoza/src/circuit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -648,6 +648,50 @@ mod tests {
qc.execute();
}

#[test]
fn ch() {
let n = 3;
let mut state = State::new(n);

for target in 0..n {
apply(Gate::H, &mut state, target);
}
c_apply(Gate::H, &mut state, 0, 1);

let mut q = QuantumRegister::new(n);
let mut qc = QuantumCircuit::new(&mut [&mut q]);
for target in 0..n {
qc.h(target);
}
qc.ch(0, 1);
qc.execute();

assert_eq!(qc.state.reals, state.reals);
assert_eq!(qc.state.imags, state.imags);
}

#[test]
fn crz() {
let n = 3;
let mut state = State::new(n);

for target in 0..n {
apply(Gate::H, &mut state, target);
}
c_apply(Gate::RZ(PI / 2.0), &mut state, 0, 1);

let mut q = QuantumRegister::new(n);
let mut qc = QuantumCircuit::new(&mut [&mut q]);
for target in 0..n {
qc.h(target);
}
qc.crz(PI / 2.0, 0, 1);
qc.execute();

assert_eq!(qc.state.reals, state.reals);
assert_eq!(qc.state.imags, state.imags);
}

#[test]
fn cy() {
let n = 3;
Expand Down
74 changes: 74 additions & 0 deletions spinoza/src/gates.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1976,4 +1976,78 @@ mod tests {
assert_eq!(result_reals2, vec![3.0, 2.0]);
assert_eq!(result_imags2, vec![5.0, 4.0]);
}

#[test]
fn ch() {
let n = 3;
let mut state = State::new(n);

for t in 0..n {
apply(Gate::H, &mut state, t);
}

state
.reals
.iter()
.zip(state.imags.iter())
.for_each(|(z_re, z_im)| {
assert_float_closeness(*z_re, 0.353553391, 0.0001);
assert_float_closeness(*z_im, 0.0, 0.0001);
});

c_apply(Gate::H, &mut state, 0, 1);

let mut i = 0;

while i < state.len() - 3 {
assert_float_closeness(state.reals[i], 0.353553391, 0.0001);
assert_float_closeness(state.reals[i + 1], 0.5, 0.0001);
assert_float_closeness(state.reals[i + 2], 0.353553391, 0.0001);
assert_float_closeness(state.reals[i + 3], 0.0, 0.0001);

assert_float_closeness(state.imags[i], 0.0, 0.0001);
assert_float_closeness(state.imags[i + 1], 0.0, 0.0001);
assert_float_closeness(state.imags[i + 2], 0.0, 0.0001);
assert_float_closeness(state.imags[i + 3], 0.0, 0.0001);
i += 4;
}
}

#[test]
fn crz() {
let n = 3;
let mut state = State::new(n);

for t in 0..n {
apply(Gate::H, &mut state, t);
}

state
.reals
.iter()
.zip(state.imags.iter())
.for_each(|(z_re, z_im)| {
assert_float_closeness(*z_re, 0.353553391, 0.0001);
assert_float_closeness(*z_im, 0.0, 0.0001);
});

c_apply(Gate::RZ(PI / 2.0), &mut state, 0, 1);

let mut i = 0;

while i < state.len() - 3 {
assert_float_closeness(state.reals[i], 0.353553391, 0.0001);
assert_float_closeness(state.imags[i], 0.0, 0.0001);

assert_float_closeness(state.reals[i + 1], 0.25, 0.0001);
assert_float_closeness(state.imags[i + 1], -0.25, 0.0001);

assert_float_closeness(state.reals[i + 2], 0.353553391, 0.0001);
assert_float_closeness(state.imags[i + 2], 0.0, 0.0001);

assert_float_closeness(state.reals[i + 3], 0.25, 0.0001);
assert_float_closeness(state.imags[i + 3], 0.25, 0.0001);
i += 4;
}
}
}

0 comments on commit 0353960

Please sign in to comment.