You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
4.5 KiB
130 lines
4.5 KiB
/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License. */
|
|
|
|
#include <functional>
|
|
#include "capi.h"
|
|
#include "gtest/gtest.h"
|
|
#include "paddle/utils/ThreadLocal.h"
|
|
|
|
static std::vector<paddle_real> randomBuffer(size_t bufSize) {
|
|
auto& eng = paddle::ThreadLocalRandomEngine::get();
|
|
std::uniform_real_distribution<paddle_real> dist(-1.0, 1.0);
|
|
std::vector<paddle_real> retv;
|
|
retv.reserve(bufSize);
|
|
for (size_t i = 0; i < bufSize; ++i) {
|
|
retv.push_back(dist(eng));
|
|
}
|
|
return retv;
|
|
}
|
|
|
|
TEST(CAPIArguments, create) {
|
|
//! TODO(yuyang18): Test GPU Code.
|
|
paddle_arguments args = paddle_arguments_create_none();
|
|
uint64_t size;
|
|
ASSERT_EQ(kPD_NO_ERROR, paddle_arguments_get_size(args, &size));
|
|
ASSERT_EQ(0UL, size);
|
|
ASSERT_EQ(kPD_NO_ERROR, paddle_arguments_destroy(args));
|
|
}
|
|
|
|
TEST(CAPIArguments, value) {
|
|
paddle_arguments args = paddle_arguments_create_none();
|
|
ASSERT_EQ(kPD_NO_ERROR, paddle_arguments_resize(args, 1));
|
|
|
|
paddle_matrix mat = paddle_matrix_create(128, 64, false);
|
|
for (size_t i = 0; i < 128; ++i) {
|
|
std::vector<paddle_real> sampleBuf = randomBuffer(64);
|
|
paddle_matrix_set_row(mat, i, sampleBuf.data());
|
|
}
|
|
ASSERT_EQ(kPD_NO_ERROR, paddle_arguments_set_value(args, 0, mat));
|
|
|
|
paddle_matrix val = paddle_matrix_create_none();
|
|
|
|
ASSERT_EQ(kPD_NO_ERROR, paddle_arguments_get_value(args, 0, val));
|
|
|
|
for (size_t i = 0; i < 128; ++i) {
|
|
paddle_real* row1;
|
|
paddle_real* row2;
|
|
|
|
ASSERT_EQ(kPD_NO_ERROR, paddle_matrix_get_row(mat, i, &row1));
|
|
ASSERT_EQ(kPD_NO_ERROR, paddle_matrix_get_row(val, i, &row2));
|
|
ASSERT_EQ(row1, row2);
|
|
}
|
|
|
|
paddle_ivector ivec = paddle_ivector_create_none();
|
|
ASSERT_EQ(kPD_NO_ERROR, paddle_ivector_destroy(ivec));
|
|
ASSERT_EQ(kPD_NO_ERROR, paddle_matrix_destroy(val));
|
|
ASSERT_EQ(kPD_NO_ERROR, paddle_matrix_destroy(mat));
|
|
ASSERT_EQ(kPD_NO_ERROR, paddle_arguments_destroy(args));
|
|
}
|
|
|
|
TEST(CAPIArguments, ids) {
|
|
paddle_arguments args = paddle_arguments_create_none();
|
|
ASSERT_EQ(kPD_NO_ERROR, paddle_arguments_resize(args, 1));
|
|
|
|
paddle_ivector ivec;
|
|
int array[3] = {1, 2, 3};
|
|
ivec = paddle_ivector_create(array, 3, true, false);
|
|
ASSERT_EQ(kPD_NO_ERROR, paddle_arguments_set_ids(args, 0, ivec));
|
|
|
|
paddle_ivector val = paddle_ivector_create_none();
|
|
ASSERT_EQ(kPD_NO_ERROR, paddle_arguments_get_ids(args, 0, val));
|
|
ASSERT_EQ(kPD_NO_ERROR, paddle_ivector_destroy(ivec));
|
|
ASSERT_EQ(kPD_NO_ERROR, paddle_ivector_destroy(val));
|
|
ASSERT_EQ(kPD_NO_ERROR, paddle_arguments_destroy(args));
|
|
}
|
|
|
|
template <typename T1, typename T2>
|
|
void testSequenceHelper(T1 setter, T2 getter) {
|
|
paddle_arguments args = paddle_arguments_create_none();
|
|
ASSERT_EQ(kPD_NO_ERROR, paddle_arguments_resize(args, 1));
|
|
|
|
paddle_ivector ivec;
|
|
int array[3] = {1, 2, 3};
|
|
ivec = paddle_ivector_create(array, 3, true, false);
|
|
ASSERT_EQ(kPD_NO_ERROR, setter(args, 0, ivec));
|
|
|
|
paddle_ivector val = paddle_ivector_create_none();
|
|
ASSERT_EQ(kPD_NO_ERROR, getter(args, 0, val));
|
|
uint64_t size;
|
|
ASSERT_EQ(kPD_NO_ERROR, paddle_ivector_get_size(val, &size));
|
|
|
|
int* rawBuf;
|
|
ASSERT_EQ(kPD_NO_ERROR, paddle_ivector_get(val, &rawBuf));
|
|
for (size_t i = 0; i < size; ++i) {
|
|
ASSERT_EQ(array[i], rawBuf[i]);
|
|
}
|
|
|
|
ASSERT_EQ(kPD_NO_ERROR, paddle_ivector_destroy(ivec));
|
|
ASSERT_EQ(kPD_NO_ERROR, paddle_ivector_destroy(val));
|
|
ASSERT_EQ(kPD_NO_ERROR, paddle_arguments_destroy(args));
|
|
}
|
|
|
|
TEST(CAPIArguments, Sequence) {
|
|
auto testSequence = [](uint32_t nestedLevel) {
|
|
testSequenceHelper(std::bind(paddle_arguments_set_sequence_start_pos,
|
|
std::placeholders::_1,
|
|
std::placeholders::_2,
|
|
nestedLevel,
|
|
std::placeholders::_3),
|
|
std::bind(paddle_arguments_get_sequence_start_pos,
|
|
std::placeholders::_1,
|
|
std::placeholders::_2,
|
|
nestedLevel,
|
|
std::placeholders::_3));
|
|
};
|
|
for (uint32_t i = 0; i < 2; ++i) { // test seq and sub-seq.
|
|
testSequence(i);
|
|
}
|
|
}
|