QuilCompilerTester.cpp 1.96 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
/*******************************************************************************
 * Copyright (c) 2019 UT-Battelle, LLC.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * and Eclipse Distribution License v1.0 which accompanies this
 * distribution. The Eclipse Public License is available at
 * http://www.eclipse.org/legal/epl-v10.html and the Eclipse Distribution
 *License is available at https://eclipse.org/org/documents/edl-v10.php
 *
 * Contributors:
 *   Alexander J. McCaskey - initial API and implementation
 *******************************************************************************/
Mccaskey, Alex's avatar
Mccaskey, Alex committed
13
#include <gtest/gtest.h>
14
#include "xacc.hpp"
Mccaskey, Alex's avatar
Mccaskey, Alex committed
15
16
17
18
19
20
21
22
23
24
#include "QuilVisitor.hpp"
#include "CountGatesOfTypeVisitor.hpp"
#include "xacc_service.hpp"

using namespace xacc;

using namespace xacc::quantum;

TEST(QuilCompilerTester, checkSimple) {
  const std::string src =
25
      R"src(__qpu__ void rotate(qbit qreg) {
Mccaskey, Alex's avatar
Mccaskey, Alex committed
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
RX(3.141592653589793) 0
H 0
CX 1 0
MEASURE 0 [0]
})src";
  auto compiler = xacc::getService<Compiler>("quil");

  auto ir = compiler->compile(src);

  auto function = ir->getComposite("rotate");

  std::cout << "HELLO\n" << function->toString() << "\n";

  EXPECT_TRUE(ir->getComposites().size() == 1);

  EXPECT_TRUE(function->nInstructions() == 4);

}

TEST(QuilCompilerTester, checkVariableParameter) {

  const std::string src =
48
      R"src(__qpu__ void statePrep2x2(qbit qreg, double theta1) {
Mccaskey, Alex's avatar
Mccaskey, Alex committed
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
RY(theta1) 0
})src";

  auto compiler = xacc::getService<Compiler>("quil");

  auto ir = compiler->compile(src);
  std::cout << "TEST:\n" << ir->getComposites()[0]->toString() << "\n\n";

  std::vector<double> v{2.2};
  auto evaled = ir->getComposites()[0]->operator()(v); //({2.2});
  std::cout << "TEST:\n" << evaled->toString() << "\n\n";
}
int main(int argc, char **argv) {
  xacc::Initialize();
  ::testing::InitGoogleTest(&argc, argv);
  auto ret = RUN_ALL_TESTS();
  xacc::Finalize();
  return ret;
}