using xvec related api in scheduler
This commit is contained in:
parent
06209930f9
commit
924bc1517b
11 changed files with 689 additions and 70 deletions
374
src/lib/testsuite/test_xvec.c
Normal file
374
src/lib/testsuite/test_xvec.c
Normal file
|
|
@ -0,0 +1,374 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unity/unity.h>
|
||||
|
||||
#include "utils.h"
|
||||
#include "xvec.h"
|
||||
|
||||
static void test_xvec_init()
|
||||
{
|
||||
xvec_t v;
|
||||
int rc;
|
||||
|
||||
rc = xvec_init(&v, 128, sizeof(int));
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
TEST_ASSERT_TRUE(v.elsize == sizeof(int));
|
||||
TEST_ASSERT_TRUE(v.count == 128);
|
||||
TEST_ASSERT_TRUE(v.data != NULL);
|
||||
|
||||
xvec_fini(&v);
|
||||
}
|
||||
static void test_xvec_zero()
|
||||
{
|
||||
xvec_t v;
|
||||
int rc, i;
|
||||
|
||||
rc = xvec_init(&v, 128, sizeof(int));
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
rc = xvec_zero(&v);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
for (i = 0; i < 128; i++) {
|
||||
int val = ((int*)v.data)[i];
|
||||
|
||||
TEST_ASSERT_TRUE(val == 0);
|
||||
}
|
||||
xvec_fini(&v);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void test_xvec_putget(void)
|
||||
{
|
||||
xvec_t v;
|
||||
int rc, i;
|
||||
|
||||
rc = xvec_init(&v, 32, sizeof(int));
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
for (i = 0; i < 32; i++) {
|
||||
int val;
|
||||
|
||||
rc = xvec_put(&v, i, &i);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
rc = xvec_get(&v, i, &val);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
TEST_ASSERT_TRUE(i == val);
|
||||
}
|
||||
|
||||
xvec_fini(&v);
|
||||
}
|
||||
|
||||
static void test_xvec_resize(void)
|
||||
{
|
||||
xvec_t v;
|
||||
int rc, i;
|
||||
|
||||
rc = xvec_init(&v, 32, sizeof(int));
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
for (i = 0; i < 32; i++) {
|
||||
int val;
|
||||
|
||||
rc = xvec_put(&v, i, &i);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
rc = xvec_get(&v, i, &val);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
TEST_ASSERT_TRUE(i == val);
|
||||
}
|
||||
|
||||
rc = xvec_resize(&v, 64);
|
||||
for (i = 0; i < 64; i++) {
|
||||
int val;
|
||||
|
||||
rc = xvec_get(&v, i, &val);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
TEST_ASSERT_TRUE(((i < 32) && (val == i)) || ((i >= 32) && (val == 0)));
|
||||
}
|
||||
|
||||
xvec_fini(&v);
|
||||
}
|
||||
|
||||
static void test_xvec_int_add(void)
|
||||
{
|
||||
xvec_t v1, v2;
|
||||
int rc, i;
|
||||
|
||||
rc = xvec_init(&v1, 16, sizeof(int));
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
rc = xvec_init(&v2, 16, sizeof(int));
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
for (i = 0; i < 16; i++) {
|
||||
int val = i * i;
|
||||
|
||||
rc = xvec_put(&v1, i, &i);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
rc = xvec_put(&v2, i, &val);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
}
|
||||
|
||||
rc = xvec_op(&v1, &v2, XVEC_ADD_INT);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
for (i = 0; i < 16; i++) {
|
||||
int val;
|
||||
|
||||
rc = xvec_get(&v1, i, &val);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
TEST_ASSERT_TRUE(val == i * i + i);
|
||||
}
|
||||
xvec_fini(&v2);
|
||||
xvec_fini(&v1);
|
||||
}
|
||||
|
||||
static void test_xvec_int_sub(void)
|
||||
{
|
||||
xvec_t v1, v2;
|
||||
int rc, i;
|
||||
|
||||
rc = xvec_init(&v1, 16, sizeof(int));
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
rc = xvec_init(&v2, 16, sizeof(int));
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
for (i = 0; i < 16; i++) {
|
||||
int val = i * i;
|
||||
|
||||
rc = xvec_put(&v1, i, &val);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
rc = xvec_put(&v2, i, &i);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
}
|
||||
|
||||
rc = xvec_op(&v1, &v2, XVEC_SUB_INT);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
for (i = 0; i < 16; i++) {
|
||||
int val;
|
||||
|
||||
rc = xvec_get(&v1, i, &val);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
TEST_ASSERT_TRUE(val == i * i - i);
|
||||
}
|
||||
xvec_fini(&v2);
|
||||
xvec_fini(&v1);
|
||||
}
|
||||
|
||||
static void test_xvec_int_add2(void)
|
||||
{
|
||||
xvec_t v1, v2;
|
||||
int rc, i;
|
||||
|
||||
rc = xvec_init(&v1, 16, sizeof(int));
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
rc = xvec_init(&v2, 32, sizeof(int));
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
for (i = 0; i < 32; i++) {
|
||||
int val = i * i;
|
||||
|
||||
if (i < 16) {
|
||||
rc = xvec_put(&v1, i, &i);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
}
|
||||
|
||||
rc = xvec_put(&v2, i, &val);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
}
|
||||
|
||||
rc = xvec_op(&v1, &v2, XVEC_ADD_INT);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
TEST_ASSERT_TRUE(v1.count == 32);
|
||||
|
||||
for (i = 0; i < 32; i++) {
|
||||
int val;
|
||||
|
||||
rc = xvec_get(&v1, i, &val);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
TEST_ASSERT_TRUE(((i < 16) && (val == i * i + i))
|
||||
|| ((i >= 16) && (val == i * i)));
|
||||
}
|
||||
xvec_fini(&v2);
|
||||
xvec_fini(&v1);
|
||||
}
|
||||
|
||||
static void test_xvec_int_sub2(void)
|
||||
{
|
||||
xvec_t v1, v2;
|
||||
int rc, i;
|
||||
|
||||
rc = xvec_init(&v1, 16, sizeof(int));
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
rc = xvec_init(&v2, 32, sizeof(int));
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
for (i = 0; i < 32; i++) {
|
||||
int val = i * i;
|
||||
|
||||
if (i < 16) {
|
||||
rc = xvec_put(&v1, i, &val);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
}
|
||||
|
||||
rc = xvec_put(&v2, i, &i);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
}
|
||||
|
||||
rc = xvec_op(&v1, &v2, XVEC_SUB_INT);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
TEST_ASSERT_TRUE(v1.count == 32);
|
||||
|
||||
for (i = 0; i < 32; i++) {
|
||||
int val;
|
||||
|
||||
rc = xvec_get(&v1, i, &val);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
TEST_ASSERT_TRUE(((i < 16) && (val == i * i - i))
|
||||
|| ((i >= 16) && (val == -i)));
|
||||
}
|
||||
xvec_fini(&v2);
|
||||
xvec_fini(&v1);
|
||||
}
|
||||
|
||||
static void test_xvec_dup(void) {
|
||||
xvec_t v1;
|
||||
xvec_t *v2;
|
||||
int i, rc;
|
||||
|
||||
rc = xvec_init(&v1, 16, sizeof(int));
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
for(i = 0; i < 16; i ++) {
|
||||
xvec_put(&v1, i, &i);
|
||||
}
|
||||
|
||||
rc = xvec_dup(&v2, &v1);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
TEST_ASSERT_TRUE(v2 != NULL);
|
||||
|
||||
for(i = 0; i < 16; i ++) {
|
||||
int val1, val2;
|
||||
|
||||
rc = xvec_get(&v1, i, &val1);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
rc = xvec_get(v2, i, &val2);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
TEST_ASSERT_TRUE(val1 == val2);
|
||||
}
|
||||
xvec_fini(v2);
|
||||
free(v2);
|
||||
xvec_fini(&v1);
|
||||
}
|
||||
|
||||
static void test_xvec_idval_init(void) {
|
||||
xvec_idval_t v;
|
||||
int rc;
|
||||
|
||||
rc = xvec_idval_init(&v, 32);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
TEST_ASSERT_TRUE(v.count == 0);
|
||||
TEST_ASSERT_TRUE(v.idxs.elsize == sizeof(int));
|
||||
TEST_ASSERT_TRUE(v.vals.elsize == sizeof(float));
|
||||
TEST_ASSERT_TRUE(v.idxs.count == 32);
|
||||
TEST_ASSERT_TRUE(v.vals.count == 32);
|
||||
xvec_idval_fini(&v);
|
||||
}
|
||||
|
||||
static void test_xvec_idval_store(void) {
|
||||
xvec_idval_t v;
|
||||
int rc;
|
||||
int i;
|
||||
|
||||
rc = xvec_idval_init(&v, 32);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
for(i = 0; i < 32; i ++) {
|
||||
float val = (float)i*i;
|
||||
|
||||
rc = xvec_idval_store(&v, i, val);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
}
|
||||
|
||||
TEST_ASSERT_TRUE(v.count == 32);
|
||||
for(i = 0; i < 32; i ++) {
|
||||
int idx;
|
||||
float val;
|
||||
|
||||
rc = xvec_get(&(v.idxs), i, &idx);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
TEST_ASSERT_TRUE(idx == i);
|
||||
|
||||
rc = xvec_get(&(v.vals), i, &val);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
TEST_ASSERT_TRUE((val - i*i < 0.001) && (i*i - val < 0.001));
|
||||
}
|
||||
xvec_idval_fini(&v);
|
||||
}
|
||||
|
||||
static void test_xvec_idval_fill(void) {
|
||||
xvec_t v1;
|
||||
xvec_idval_t v2;
|
||||
int rc;
|
||||
int i;
|
||||
|
||||
rc = xvec_init(&v1, 32, sizeof(float));
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
rc = xvec_idval_init(&v2, 4);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
for(i = 0; i < 32; i ++) {
|
||||
float val = i*i;
|
||||
rc = xvec_put(&v1, i, &val);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
}
|
||||
|
||||
for(i = 0; i < 4; i ++) {
|
||||
int idx = 3 * i;
|
||||
|
||||
rc = xvec_idval_store_idx(&v2, idx);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
}
|
||||
|
||||
rc = xvec_fill_idval(&v2, &v1);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
for(i = 0; i < 4; i ++) {
|
||||
float val;
|
||||
|
||||
rc = xvec_get(&(v2.vals), i, &val);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
TEST_ASSERT_TRUE(val == (float)(3*i)*(3*i));
|
||||
}
|
||||
xvec_idval_fini(&v2);
|
||||
xvec_fini(&v1);
|
||||
}
|
||||
|
||||
|
||||
void test_xvec(void)
|
||||
{
|
||||
printf("\n>> xvec test\n\n");
|
||||
|
||||
RUN_TEST(test_xvec_init);
|
||||
RUN_TEST(test_xvec_zero);
|
||||
RUN_TEST(test_xvec_putget);
|
||||
RUN_TEST(test_xvec_resize);
|
||||
RUN_TEST(test_xvec_int_add);
|
||||
RUN_TEST(test_xvec_int_sub);
|
||||
RUN_TEST(test_xvec_int_add2);
|
||||
RUN_TEST(test_xvec_int_sub2);
|
||||
RUN_TEST(test_xvec_dup);
|
||||
RUN_TEST(test_xvec_idval_init);
|
||||
RUN_TEST(test_xvec_idval_store);
|
||||
RUN_TEST(test_xvec_idval_fill);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue