GCC Code Coverage Report


Directory: ./
File: ZX/ZXRWCombinators.cpp
Date: 2022-10-15 05:10:18
Exec Total Coverage
Lines: 39 39 100.0%
Functions: 9 9 100.0%
Branches: 30 46 65.2%
Decisions: 8 8 100.0%

Line Branch Decision Exec Source
1 // Copyright 2019-2022 Cambridge Quantum Computing
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 #include "ZX/Rewrite.hpp"
16
17 namespace tket {
18
19 namespace zx {
20
21 47 Rewrite::Rewrite(const RewriteFun &fun) : apply(fun) {}
22
23 3 Rewrite Rewrite::sequence(const std::vector<Rewrite> &rvec) {
24 10 return Rewrite([=](ZXDiagram &diag) {
25 10 bool success = false;
26 10 for (std::vector<Rewrite>::const_iterator it = rvec.begin();
27
2/2
✓ Branch 2 taken 20 times.
✓ Branch 3 taken 10 times.
30 it != rvec.end(); ++it) {
28
5/6
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 11 times.
✓ Branch 5 taken 9 times.
✓ Branch 6 taken 3 times.
✓ Branch 7 taken 8 times.
20 success = it->apply(diag) || success;
29 }
30 10 return success;
31
2/4
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
3 });
32 }
33
34 1 Rewrite Rewrite::repeat(const Rewrite &rw) {
35 2 return Rewrite([=](ZXDiagram &diag) {
36 2 bool success = false;
37
2/2
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
2/2
✓ Decision 'true' taken 2 times.
✓ Decision 'false' taken 2 times.
4 while (rw.apply(diag)) success = true;
38 2 return success;
39
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 });
40 }
41
42 1 Rewrite Rewrite::repeat_with_metric(
43 const Rewrite &rw, const Rewrite::Metric &eval) {
44 2 return Rewrite([=](ZXDiagram &diag) {
45 2 bool success = false;
46
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 unsigned currentVal = eval(diag);
47
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 ZXDiagram newDiag = diag;
48
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 rw.apply(newDiag);
49
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 unsigned newVal = eval(newDiag);
50
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
2/2
✓ Decision 'true' taken 1 times.
✓ Decision 'false' taken 2 times.
3 while (newVal < currentVal) {
51 1 currentVal = newVal;
52 1 success = true;
53
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 rw.apply(newDiag);
54
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 newVal = eval(newDiag);
55 }
56
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
2/2
✓ Decision 'true' taken 1 times.
✓ Decision 'false' taken 1 times.
2 if (success) {
57
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 diag = newDiag;
58 }
59 2 return success;
60
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
3 });
61 }
62
63 1 Rewrite Rewrite::repeat_while(const Rewrite &cond, const Rewrite &body) {
64 2 return Rewrite([=](ZXDiagram &diag) {
65 2 bool success = false;
66
2/2
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
2/2
✓ Decision 'true' taken 2 times.
✓ Decision 'false' taken 2 times.
4 while (cond.apply(diag)) {
67 2 success = true;
68 2 body.apply(diag);
69 }
70 2 return success;
71
2/4
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
1 });
72 }
73
74 } // namespace zx
75
76 } // namespace tket
77