Skip to content

Commit e9dd866

Browse files
committed
Finish CQiree interface and test
1 parent 8a83bc0 commit e9dd866

File tree

6 files changed

+166
-306
lines changed

6 files changed

+166
-306
lines changed

src/cqiree/CQiree.cc

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ qiree_max_result_items(CQiree* manager, int num_shots, size_t* result)
7878
{
7979
if (!manager)
8080
return QIREE_NOT_READY;
81+
if (!result)
82+
return QIREE_INVALID_INPUT;
8183

8284
auto* cpp_manager = reinterpret_cast<QM*>(manager);
8385
return static_cast<QireeReturnCode>(
@@ -113,8 +115,8 @@ QireeReturnCode qiree_execute(CQiree* manager, int num_shots)
113115
}
114116

115117
QireeReturnCode qiree_save_result_items(CQiree* manager,
116-
size_t max_items,
117-
CQireeResultRecord* encoded)
118+
CQireeResultRecord* encoded,
119+
size_t max_items)
118120
{
119121
if (!manager)
120122
return QIREE_NOT_READY;
@@ -126,7 +128,7 @@ QireeReturnCode qiree_save_result_items(CQiree* manager,
126128
auto* cpp_manager = reinterpret_cast<QM*>(manager);
127129
auto* encoded_tuples = reinterpret_cast<QM::ResultRecord*>(encoded);
128130
return static_cast<QireeReturnCode>(
129-
cpp_manager->save_result_items(max_items, encoded_tuples));
131+
cpp_manager->save_result_items(encoded_tuples, max_items));
130132
}
131133

132134
void qiree_destroy(CQiree* manager)

src/cqiree/CQiree.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ qiree_load_module_from_file(CQiree* manager, char const* filename);
4949
QireeReturnCode qiree_num_quantum_reg(CQiree* manager, int* result);
5050
QireeReturnCode qiree_num_classical_reg(CQiree* manager, int* result);
5151

52-
/* Amount of memory needed to store result (bytes) */
52+
/* Number of records needed to store result, including capacity */
5353
QireeReturnCode
5454
qiree_max_result_items(CQiree* manager, int num_shots, size_t* result);
5555

@@ -76,8 +76,8 @@ QireeReturnCode qiree_execute(CQiree* manager, int num_shots);
7676
* - 10: number of samples
7777
*/
7878
QireeReturnCode qiree_save_result_items(CQiree* manager,
79-
size_t max_items,
80-
CQireeResultRecord* encoded);
79+
CQireeResultRecord* encoded,
80+
size_t encoded_size);
8181

8282
/* Cleanly destroy a QireeManager instance */
8383
void qiree_destroy(CQiree* manager);

src/cqiree/QireeManager.cc

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@
3333
namespace qiree
3434
{
3535
//---------------------------------------------------------------------------//
36-
QireeManager::QireeManager() = default;
37-
QireeManager::~QireeManager() = default;
36+
QireeManager::QireeManager() throw() = default;
37+
QireeManager::~QireeManager() throw() = default;
3838

3939
//---------------------------------------------------------------------------//
4040
QireeManager::ReturnCode
@@ -127,6 +127,9 @@ QireeManager::max_result_items(int num_shots, std::size_t& result) const
127127
auto num_registers = attrs.required_num_results;
128128
result = std::min<std::size_t>(1 << num_registers, num_shots);
129129

130+
// Add one for the "count" record at the beginning
131+
result++;
132+
130133
return ReturnCode::success;
131134
}
132135

@@ -202,9 +205,9 @@ QireeManager::setup_executor(std::string_view backend,
202205
//---------------------------------------------------------------------------//
203206
QireeManager::ReturnCode QireeManager::execute(int num_shots) throw()
204207
{
205-
if (execute_)
208+
if (!execute_)
206209
{
207-
CQIREE_FAIL(not_ready, "cannot create executor again");
210+
CQIREE_FAIL(not_ready, "setup_executor was not created");
208211
}
209212

210213
if (num_shots <= 0)
@@ -231,17 +234,20 @@ QireeManager::ReturnCode QireeManager::execute(int num_shots) throw()
231234
}
232235
//---------------------------------------------------------------------------//
233236
QireeManager::ReturnCode
234-
QireeManager::save_result_items(std::size_t num_items,
235-
ResultRecord* encoded) throw()
237+
QireeManager::save_result_items(ResultRecord* encoded,
238+
std::size_t max_count) throw()
236239
{
237240
if (!result_)
238241
{
239242
CQIREE_FAIL(not_ready, "execute has not been called");
240243
}
241244

242-
if (num_items < result_->size())
245+
if (max_count < result_->size() + 1)
243246
{
244-
CQIREE_FAIL(fail_load, "insufficient capacity for result items");
247+
CQIREE_FAIL(fail_load,
248+
"insufficient capacity " << max_count
249+
<< " for result items: need "
250+
<< result_->size() + 1);
245251
}
246252

247253
try

src/cqiree/QireeManager.hh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ class QireeManager
4343
using ResultRecord = std::array<std::uint64_t, 2>;
4444

4545
public:
46-
QireeManager();
47-
~QireeManager();
46+
QireeManager() throw();
47+
~QireeManager() throw();
4848

4949
ReturnCode load_module(std::string_view data_contents) throw();
5050
ReturnCode load_module(std::string filename) throw();
@@ -59,7 +59,7 @@ class QireeManager
5959
ReturnCode execute(int num_shots) throw();
6060

6161
ReturnCode
62-
save_result_items(std::size_t num_items, ResultRecord* encoded) throw();
62+
save_result_items(ResultRecord* encoded, std::size_t size) throw();
6363

6464
private:
6565
std::unique_ptr<Module> module_;

test/CMakeLists.txt

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,23 @@
44
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
55
#----------------------------------------------------------------------------#
66

7+
# Generate a file with configure-time paths
78
file(TO_CMAKE_PATH "${PROJECT_SOURCE_DIR}" QIREE_SOURCE_DIR)
89
configure_file(qiree_test_config.h.in qiree_test_config.h @ONLY)
910

11+
# Generate a file with generate-time paths
12+
file(
13+
GENERATE
14+
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/qiree_targets.h"
15+
CONTENT [[
16+
#ifndef qiree_targets_h
17+
#define qiree_targets_h
18+
19+
static char const cqiree_library_path[] = "$<TARGET_FILE:cqiree>";
20+
21+
#endif /* qiree_targets_h */
22+
]])
23+
1024
#---------------------------------------------------------------------------##
1125
# LIBRARY
1226
#---------------------------------------------------------------------------##
@@ -31,11 +45,14 @@ function(qiree_add_test ns name)
3145
add_executable(${_target}
3246
${ns}/${name}.test.cc
3347
)
34-
target_link_libraries(${_target}
35-
QIREE::${ns}
48+
set(_libs
3649
qiree_test_lib
3750
GTest::gtest_main
3851
)
52+
if(NOT ns STREQUAL "cqiree")
53+
list(APPEND _libs QIREE::${ns})
54+
endif()
55+
target_link_libraries(${_target} ${_libs})
3956
add_test(NAME test/${ns}/${name} COMMAND "$<TARGET_FILE:${_target}>")
4057
endfunction()
4158

@@ -47,6 +64,13 @@ qiree_add_test(qiree Executor)
4764
qiree_add_test(qiree Module)
4865
qiree_add_test(qiree ResultDistribution)
4966

67+
#---------------------------------------------------------------------------##
68+
# CQIREE TESTS
69+
#---------------------------------------------------------------------------##
70+
71+
qiree_add_test(cqiree cqiree)
72+
add_dependencies(cqiree_cqireeTest cqiree)
73+
5074
#---------------------------------------------------------------------------##
5175
# QIRXACC TESTS
5276
#---------------------------------------------------------------------------##
@@ -55,8 +79,6 @@ if(QIREE_USE_XACC)
5579
qiree_add_test(qirxacc XaccQuantum)
5680
endif()
5781

58-
#---------------------------------------------------------------------------##
59-
6082
#---------------------------------------------------------------------------##
6183
# QIRQSIM TESTS
6284
#---------------------------------------------------------------------------##

0 commit comments

Comments
 (0)