test lib at c level.
This commit is contained in:
parent
29483913d6
commit
330c72acbb
6
.gitmodules
vendored
Normal file
6
.gitmodules
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[submodule "extlib/cwalk"]
|
||||||
|
path = extlib/cwalk
|
||||||
|
url = https://github.com/likle/cwalk.git
|
||||||
|
[submodule "src/extlib/cwalk"]
|
||||||
|
path = src/extlib/cwalk
|
||||||
|
url = https://github.com/likle/cwalk.git
|
@ -15,14 +15,23 @@ class Uint8FlexList extends ListBase<Uint8> {
|
|||||||
set list(List<Uint8> l) {
|
set list(List<Uint8> l) {
|
||||||
_list.removeWhere((element) => true);
|
_list.removeWhere((element) => true);
|
||||||
_list.addAll(l);
|
_list.addAll(l);
|
||||||
|
Pointer<Uint8> p = pointer;
|
||||||
pointer = calloc<Uint8>(l.length);
|
pointer = calloc<Uint8>(l.length);
|
||||||
_list.forEach((element) {
|
for (int i = 0; i < _list.length; ++i) {
|
||||||
pointer[_list.indexOf(element)] = element as int;
|
pointer[i] = _list[i] as int;
|
||||||
});
|
}
|
||||||
|
calloc.free(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void operator []=(int index, Uint8 value) {
|
void operator []=(int index, Uint8 value) {
|
||||||
|
if (index > _list.length) {
|
||||||
|
// resize the pointer
|
||||||
|
pointer = calloc<Uint8>(index - 1);
|
||||||
|
for (int i = 0; i < _list.length; ++i) {
|
||||||
|
pointer[i] = _list[i] as int;
|
||||||
|
}
|
||||||
|
}
|
||||||
_list[index] = value;
|
_list[index] = value;
|
||||||
pointer[index] = value as int;
|
pointer[index] = value as int;
|
||||||
}
|
}
|
||||||
@ -37,14 +46,11 @@ class Uint8FlexList extends ListBase<Uint8> {
|
|||||||
|
|
||||||
static fromList(List<Uint8> l) {
|
static fromList(List<Uint8> l) {
|
||||||
final l2 = Uint8FlexList();
|
final l2 = Uint8FlexList();
|
||||||
|
l2.list = l;
|
||||||
|
return l2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Pointer<Uint8> readUint8Ptr(File file) {
|
Uint8FlexList readUint8Ptr(File file) {
|
||||||
final l = file.readAsBytesSync().cast();
|
return Uint8FlexList.fromList(file.readAsBytesSync().cast());
|
||||||
final dataPointer = calloc<Uint8>(l.length);
|
|
||||||
for (int i = 0; i < l.length; ++i) {
|
|
||||||
dataPointer[i] = l[i];
|
|
||||||
}
|
|
||||||
return dataPointer;
|
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,10 @@ cd ${BUILD_DIR}
|
|||||||
cmake \
|
cmake \
|
||||||
${SRC_DIR}\
|
${SRC_DIR}\
|
||||||
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}\
|
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}\
|
||||||
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
|
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
|
||||||
|
-DCMAKE_BUILD_TYPE=Debug
|
||||||
make
|
make
|
||||||
|
|
||||||
|
printf "\033c"
|
||||||
|
|
||||||
set +e
|
set +e
|
14
scripts/runtests.sh
Executable file
14
scripts/runtests.sh
Executable file
@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
SOURCE=${BASH_SOURCE[0]}
|
||||||
|
while [ -L "$SOURCE" ]; do
|
||||||
|
DIR=$(cd -P "$(dirname "$SOURCE")" >/dev/null 2>&1 && pwd)
|
||||||
|
SOURCE=$(readlink "$SOURCE")
|
||||||
|
[[ $SOURCE != /* ]] && SOURCE=$DIR/$SOURCE
|
||||||
|
done
|
||||||
|
DIR=$(cd -P "$(dirname "$SOURCE")" >/dev/null 2>&1 && pwd)
|
||||||
|
|
||||||
|
BUILD_DIR=$(realpath ${DIR}/../build)
|
||||||
|
|
||||||
|
printf '\033c'
|
||||||
|
${BUILD_DIR}/test_image
|
@ -10,5 +10,5 @@ DIR=$(cd -P "$(dirname "$SOURCE")" >/dev/null 2>&1 && pwd)
|
|||||||
|
|
||||||
SRC_DIR=$(realpath ${DIR}/../src)
|
SRC_DIR=$(realpath ${DIR}/../src)
|
||||||
|
|
||||||
find ${SRC_DIR} -name "*.c" -o -name "*.h" -o -name "CMakeLists.txt" | \
|
find ${SRC_DIR} -name "*.c*" -o -name "*.h" -o -name "CMakeLists.txt" | \
|
||||||
entr -r ${DIR}/compilelib.sh
|
entr -r ${DIR}/compilelib.sh
|
13
scripts/watch_tests.sh
Executable file
13
scripts/watch_tests.sh
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
SOURCE=${BASH_SOURCE[0]}
|
||||||
|
while [ -L "$SOURCE" ]; do
|
||||||
|
DIR=$(cd -P "$(dirname "$SOURCE")" >/dev/null 2>&1 && pwd)
|
||||||
|
SOURCE=$(readlink "$SOURCE")
|
||||||
|
[[ $SOURCE != /* ]] && SOURCE=$DIR/$SOURCE
|
||||||
|
done
|
||||||
|
DIR=$(cd -P "$(dirname "$SOURCE")" >/dev/null 2>&1 && pwd)
|
||||||
|
|
||||||
|
BUILD_DIR=$(realpath ${DIR}/../build)
|
||||||
|
|
||||||
|
echo ${BUILD_DIR}/test_image | entr -r ${DIR}/runtests.sh
|
@ -2,6 +2,9 @@
|
|||||||
# installed. You should not increase this version, as doing so will cause
|
# installed. You should not increase this version, as doing so will cause
|
||||||
# the plugin to fail to compile for some customers of the plugin.
|
# the plugin to fail to compile for some customers of the plugin.
|
||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.10)
|
||||||
|
project(archimedes_mobile_lib_library VERSION 0.0.1 LANGUAGES CXX)
|
||||||
|
enable_language(CXX)
|
||||||
|
|
||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||||
|
|
||||||
function(dump_cmake_variables)
|
function(dump_cmake_variables)
|
||||||
@ -27,7 +30,6 @@ function(dump_cmake_variables)
|
|||||||
endforeach()
|
endforeach()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
project(archimedes_mobile_lib_library VERSION 0.0.1 LANGUAGES CXX)
|
|
||||||
|
|
||||||
set (OPENMVG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../../openMVG/src)
|
set (OPENMVG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../../openMVG/src)
|
||||||
set (FFMPEG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../../ffmpeg_install/include)
|
set (FFMPEG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../../ffmpeg_install/include)
|
||||||
@ -37,17 +39,17 @@ find_package(
|
|||||||
REQUIRED
|
REQUIRED
|
||||||
)
|
)
|
||||||
|
|
||||||
|
find_package(JPEG REQUIRED)
|
||||||
|
find_package(TIFF REQUIRED)
|
||||||
|
|
||||||
|
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/extlib/cwalk)
|
||||||
|
|
||||||
set(PNG_SHARED ON CACHE BOOL "" FORCE)
|
set(PNG_SHARED ON CACHE BOOL "" FORCE)
|
||||||
set(PNG_STATIC OFF CACHE BOOL "" FORCE)
|
set(PNG_STATIC OFF CACHE BOOL "" FORCE)
|
||||||
set(PNG_EXECUTABLES OFF CACHE BOOL "" FORCE) # we only want lib
|
set(PNG_EXECUTABLES OFF CACHE BOOL "" FORCE) # we only want lib
|
||||||
set(PNG_TESTS OFF CACHE BOOL "" FORCE) # we only want lib
|
set(PNG_TESTS OFF CACHE BOOL "" FORCE) # we only want lib
|
||||||
set(SKIP_INSTALL_ALL OFF CACHE BOOL "" FORCE) # we only want lib
|
set(SKIP_INSTALL_ALL OFF CACHE BOOL "" FORCE) # we only want lib
|
||||||
|
|
||||||
# find_package(PNG
|
|
||||||
# REQUIRED
|
|
||||||
# HINTS "../"
|
|
||||||
# )
|
|
||||||
|
|
||||||
add_definitions(${PNG_DEFINITIONS})
|
add_definitions(${PNG_DEFINITIONS})
|
||||||
|
|
||||||
add_library(archimedes_mobile_lib SHARED
|
add_library(archimedes_mobile_lib SHARED
|
||||||
@ -55,12 +57,15 @@ add_library(archimedes_mobile_lib SHARED
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
dump_cmake_variables("^png")
|
# dump_cmake_variables("")
|
||||||
|
|
||||||
message("LIBRARIES:" ${OpenMVG_LIBRARIES})
|
message("LIBRARIES:" ${OpenMVG_LIBRARIES})
|
||||||
|
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
archimedes_mobile_lib
|
archimedes_mobile_lib
|
||||||
|
cwalk
|
||||||
|
jpeg
|
||||||
|
tiff
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/../../libpng/_install/lib/libpng16.so
|
${CMAKE_CURRENT_SOURCE_DIR}/../../libpng/_install/lib/libpng16.so
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/../../openMVG/build/_install/lib/libopenMVG_image.a
|
${CMAKE_CURRENT_SOURCE_DIR}/../../openMVG/build/_install/lib/libopenMVG_image.a
|
||||||
${OPENMVG_LIBRARIES}
|
${OPENMVG_LIBRARIES}
|
||||||
@ -78,7 +83,34 @@ set_target_properties(archimedes_mobile_lib
|
|||||||
PUBLIC_HEADER image.h
|
PUBLIC_HEADER image.h
|
||||||
OUTPUT_NAME "archimedes_mobile_lib"
|
OUTPUT_NAME "archimedes_mobile_lib"
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_options(archimedes_mobile_lib PRIVATE "-Wl,-Bstatic")
|
target_link_options(archimedes_mobile_lib PRIVATE "-Wl,-Bstatic")
|
||||||
target_link_options(archimedes_mobile_lib PRIVATE "-Wl,-Bdynamic")
|
target_link_options(archimedes_mobile_lib PRIVATE "-Wl,-Bdynamic")
|
||||||
|
|
||||||
|
add_executable(
|
||||||
|
test_image
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/tests/test_image.cxx
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
test_image
|
||||||
|
cunit
|
||||||
|
cwalk
|
||||||
|
archimedes_mobile_lib
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/../../libpng/_install/lib/libpng16.so
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/../../openMVG/build/_install/lib/libopenMVG_image.a
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/../../openMVG/build/_install/lib/libopenMVG_features.a
|
||||||
|
${OPENMVG_LIBRARIES}
|
||||||
|
)
|
||||||
|
|
||||||
|
set_target_properties(test_image
|
||||||
|
PROPERTIES
|
||||||
|
LINKER_LANGUAGE CXX
|
||||||
|
)
|
||||||
|
|
||||||
|
add_test (
|
||||||
|
NAME test_image
|
||||||
|
COMMAND test_image
|
||||||
|
)
|
||||||
|
|
||||||
target_compile_definitions(archimedes_mobile_lib PUBLIC DART_SHARED_LIB)
|
target_compile_definitions(archimedes_mobile_lib PUBLIC DART_SHARED_LIB)
|
1
src/extlib/cwalk
Submodule
1
src/extlib/cwalk
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit f418404bf395f5ad5b5dccaf9547c3e016a8dad6
|
@ -17,7 +17,7 @@ const Frame *new_frame_from_handle(FILE *stream, int w, int h, int depth)
|
|||||||
|
|
||||||
FILE *make_buffer(const uint8_t *data, const size_t data_len)
|
FILE *make_buffer(const uint8_t *data, const size_t data_len)
|
||||||
{
|
{
|
||||||
FILE *file = fmemopen((char *)data, data_len, "r+");
|
FILE *file = fmemopen((void *) data, data_len, "r+");
|
||||||
|
|
||||||
if (file == NULL)
|
if (file == NULL)
|
||||||
{
|
{
|
||||||
|
14
src/image.h
14
src/image.h
@ -13,7 +13,14 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <png.h>
|
#include <png.h>
|
||||||
|
|
||||||
extern "C" auto png_sig_cm = png_sig_cmp;
|
#if defined(__cplusplus)
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
auto png_sig_cm = png_sig_cmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
|
||||||
typedef struct _Frame
|
typedef struct _Frame
|
||||||
{
|
{
|
||||||
@ -23,6 +30,11 @@ typedef struct _Frame
|
|||||||
int depth;
|
int depth;
|
||||||
} Frame;
|
} Frame;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" __attribute__((visibility("default"))) __attribute((used))
|
||||||
|
#else
|
||||||
|
__attribute__((visibility("default"))) __attribute((used))
|
||||||
|
#endif // __cplusplus
|
||||||
const Frame *new_frame_from_handle(FILE *, int, int, int);
|
const Frame *new_frame_from_handle(FILE *, int, int, int);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" __attribute__((visibility("default"))) __attribute((used))
|
extern "C" __attribute__((visibility("default"))) __attribute((used))
|
||||||
|
126
src/tests/test_image.cxx
Normal file
126
src/tests/test_image.cxx
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
#include <CUnit/Basic.h>
|
||||||
|
#include "image.h"
|
||||||
|
#include <cwalk.h>
|
||||||
|
|
||||||
|
#define STRLEN 2048
|
||||||
|
|
||||||
|
FILE *imageHandle = NULL;
|
||||||
|
char frame1Path[STRLEN];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Read the contents of a file into an array
|
||||||
|
* path: path to the file
|
||||||
|
* contents: array we'll write to that contains the contents of the file.
|
||||||
|
*/
|
||||||
|
size_t read_file(const char *path, uint8_t **contents) {
|
||||||
|
FILE *file = fopen(path, "rb");
|
||||||
|
if (file == NULL) {
|
||||||
|
printf("Error: Unable to open file.\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine the file size
|
||||||
|
fseek(file, 0, SEEK_END);
|
||||||
|
size_t file_size = ftell(file);
|
||||||
|
rewind(file);
|
||||||
|
|
||||||
|
// Allocate memory for the contents array
|
||||||
|
*contents = (uint8_t *) malloc(file_size);
|
||||||
|
if (*contents == NULL) {
|
||||||
|
printf("Error: Unable to allocate memory.\n");
|
||||||
|
fclose(file);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read the file contents into the array
|
||||||
|
fread(*contents, 1, file_size, file);
|
||||||
|
fclose(file);
|
||||||
|
|
||||||
|
return file_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
int setUp(void)
|
||||||
|
{
|
||||||
|
char framesDir[STRLEN];
|
||||||
|
char *here = __FILE__;
|
||||||
|
size_t length;
|
||||||
|
cwk_path_get_dirname(here, &length); // archimedes_mobile_lib/src/tests
|
||||||
|
cwk_path_join(here, "../../../assets/test/frames", framesDir, STRLEN);
|
||||||
|
cwk_path_join(framesDir, "0001.png", frame1Path, STRLEN);
|
||||||
|
printf("Opening file %s\n", frame1Path);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tearDown(void)
|
||||||
|
{
|
||||||
|
if (imageHandle) {
|
||||||
|
fclose(imageHandle);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_create_frame(void)
|
||||||
|
{
|
||||||
|
imageHandle = fopen(frame1Path, "rw+");
|
||||||
|
const Frame *f = new_frame_from_handle(
|
||||||
|
imageHandle,
|
||||||
|
768,
|
||||||
|
768,
|
||||||
|
64
|
||||||
|
);
|
||||||
|
CU_ASSERT_PTR_NOT_NULL(f->stream);
|
||||||
|
CU_ASSERT(f->w == 768);
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_frame_from_data(void)
|
||||||
|
{
|
||||||
|
uint8_t *contents = NULL;
|
||||||
|
size_t len = read_file(frame1Path, &contents);
|
||||||
|
const Frame *f = new_frame_from_data(contents, len, 768, 768, 64);
|
||||||
|
CU_ASSERT_PTR_NOT_NULL(f->stream);
|
||||||
|
CU_ASSERT(f->w == 768);
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_archimedes_get_data(void)
|
||||||
|
{
|
||||||
|
imageHandle = fopen(frame1Path, "rw+");
|
||||||
|
const Frame *f = new_frame_from_handle(
|
||||||
|
imageHandle,
|
||||||
|
768,
|
||||||
|
768,
|
||||||
|
64
|
||||||
|
);
|
||||||
|
|
||||||
|
unsigned char *image_data = NULL;
|
||||||
|
archimedes_get_image_data(f, image_data);
|
||||||
|
CU_ASSERT_PTR_NOT_NULL(image_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
CU_pSuite pSuite = NULL;
|
||||||
|
|
||||||
|
/* initialize the CUnit test registry */
|
||||||
|
if (CUE_SUCCESS != CU_initialize_registry())
|
||||||
|
return CU_get_error();
|
||||||
|
|
||||||
|
/* add a suite to the registry */
|
||||||
|
pSuite = CU_add_suite("ImageSuite", setUp, tearDown);
|
||||||
|
if (NULL == pSuite) {
|
||||||
|
CU_cleanup_registry();
|
||||||
|
return CU_get_error();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add the tests to the suite */
|
||||||
|
if ((NULL == CU_add_test(pSuite, "frame can be created", test_create_frame)) ||
|
||||||
|
(NULL == CU_add_test(pSuite, "frame can be created from data", test_frame_from_data)))
|
||||||
|
{
|
||||||
|
CU_cleanup_registry();
|
||||||
|
return CU_get_error();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Run all tests using the CUnit Basic interface */
|
||||||
|
CU_basic_set_mode(CU_BRM_VERBOSE);
|
||||||
|
CU_basic_run_tests();
|
||||||
|
CU_cleanup_registry();
|
||||||
|
return CU_get_error();
|
||||||
|
}
|
@ -20,8 +20,8 @@ void main() {
|
|||||||
// Tear down code
|
// Tear down code
|
||||||
});
|
});
|
||||||
test('newFrame', () {
|
test('newFrame', () {
|
||||||
Pointer<Uint8> frameData = readUint8Ptr(File(firstFrame));
|
Uint8FlexList frameData = readUint8Ptr(File(firstFrame));
|
||||||
// newFrame(frameData, fData.length, 768, 768, 1204);
|
newFrame(frameData.pointer, frameData.length, 768, 768, 1204);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user