From d673a1b1a5a75ac64aba417864f8470e2a5e6686 Mon Sep 17 00:00:00 2001 From: ptahmose Date: Sat, 19 Oct 2024 02:51:20 +0200 Subject: [PATCH] fix bugs & start adding octave-unit-tests --- CMakeLists.txt | 2 +- lib/src/functions/func_addsubblock.cpp | 4 +-- lib/src/functions/func_createcziwriter.cpp | 8 ++--- tests/octave/test_basic_operation.m | 24 +++++++++++++++ tests/octave/test_write.m | 36 ++++++++++++++++++++++ 5 files changed, 64 insertions(+), 10 deletions(-) create mode 100644 tests/octave/test_basic_operation.m create mode 100644 tests/octave/test_write.m diff --git a/CMakeLists.txt b/CMakeLists.txt index 888042b..6c98d5c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ cmake_minimum_required (VERSION 3.11) set(MEXLIBCZI_MAJOR 0) set(MEXLIBCZI_MINOR 3) -set(MEXLIBCZI_PATCH 0) +set(MEXLIBCZI_PATCH 1) set(MEXLIBCZI_EXT "alpha") if(WIN32) diff --git a/lib/src/functions/func_addsubblock.cpp b/lib/src/functions/func_addsubblock.cpp index 5678d25..df471c5 100644 --- a/lib/src/functions/func_addsubblock.cpp +++ b/lib/src/functions/func_addsubblock.cpp @@ -27,8 +27,7 @@ void MexFunction_AddSubBlock_CheckArguments(MatlabArgs* args) throw invalid_argument("1st argument must be an integer"); } - //if (!MexApi::GetInstance().MxIsChar(args->prhs[2])) - if (args->app_functions->pfn_IsChar(args->prhs[2])) + if (!args->app_functions->pfn_IsChar(args->prhs[2])) { throw invalid_argument("2nd argument must be a string"); } @@ -38,7 +37,6 @@ void MexFunction_AddSubBlock_CheckArguments(MatlabArgs* args) throw invalid_argument("3nd argument must be a ROI"); } - //if (!CArgsUtils::IsNumericArrayOfMinSize(args->prhs[4], 1, args->app_functions) && !MexApi::GetInstance().MxIsChar(args->prhs[4])) if (!CArgsUtils::IsNumericArrayOfMinSize(args->prhs[4], 1, args->app_functions) && !args->app_functions->pfn_IsChar(args->prhs[4])) { throw invalid_argument("4th argument must be an integer or a string"); diff --git a/lib/src/functions/func_createcziwriter.cpp b/lib/src/functions/func_createcziwriter.cpp index f1e8a0a..7e70f22 100644 --- a/lib/src/functions/func_createcziwriter.cpp +++ b/lib/src/functions/func_createcziwriter.cpp @@ -20,16 +20,14 @@ void MexFunction_CreateCziWriter_CheckArguments(MatlabArgs* args) throw invalid_argument("not enough arguments"); } - //if (!MexApi::GetInstance().MxIsChar(args->prhs[1], args->app_functions)) - if (args->app_functions->pfn_IsChar(args->prhs[1])) + if (!args->app_functions->pfn_IsChar(args->prhs[1])) { throw invalid_argument("Expecting a string as 2nd argument"); } if (args->nrhs >= 2) { - //if (!MexApi::GetInstance().MxIsChar(args->prhs[1], args->app_functions)) - if (args->app_functions->pfn_IsChar(args->prhs[2])) + if (!args->app_functions->pfn_IsChar(args->prhs[2])) { throw invalid_argument("Expecting a string as 3rd argument"); } @@ -38,13 +36,11 @@ void MexFunction_CreateCziWriter_CheckArguments(MatlabArgs* args) void MexFunction_CreateCziWriter_Execute(MatlabArgs* args) { - //const auto filename = MexApi::GetInstance().UpMxArrayToMatlabAllocatedUtf8String(args->prhs[1]); const auto filename = CArgsUtils::GetAsUtf8String(args->prhs[1], args->app_functions); bool overwrite_existing_file = false; if (args->nrhs >= 2) { - //const auto option = MexApi::GetInstance().UpMxArrayToMatlabAllocatedUtf8String(args->prhs[2]); const auto option = CArgsUtils::GetAsUtf8String(args->prhs[2], args->app_functions); if (option == "x" || option == "overwrite") { diff --git a/tests/octave/test_basic_operation.m b/tests/octave/test_basic_operation.m new file mode 100644 index 0000000..add86c7 --- /dev/null +++ b/tests/octave/test_basic_operation.m @@ -0,0 +1,24 @@ +% File: test_basic_operation.m + +function isValid = checkVersionString(versionStr) + % Function to check if the version string follows "XXX.XXX.XXX" pattern + pattern = '^\d{1,3}\.\d{1,3}\.\d{1,3}'; + isValid = ~isempty(regexp(versionStr, pattern, 'once')); +end + +addpath('../../OctaveMex'); + +%!test +%! version=octavelibczi('GetVersion'); +%! assert(checkVersionString(version.VersionString)) + +%!test +%! version=octavelibczi('GetVersion'); +%! assert(checkVersionString(version.libCZIVersion)) + +%!test +%! version=octavelibczi('GetVersion'); +%! assert(~isempty(version.CompilerIdentification)) + +%!test +%! fail ("octavelibczi('Open','non_existing_file.czi')") \ No newline at end of file diff --git a/tests/octave/test_write.m b/tests/octave/test_write.m new file mode 100644 index 0000000..7dc9751 --- /dev/null +++ b/tests/octave/test_write.m @@ -0,0 +1,36 @@ +% File: test_write.m + +addpath('../../OctaveMex'); + +%!test +%! handle=octavelibczi ('CreateCziWriter','test.czi','x'); +%! uint8_array = uint8([1, 2; 3, 4]); +%! octavelibczi ('AddSubBlock',handle,'C0T0',[0 0 2 2],'gray8',uint8_array,struct('M',0)); +%! uint8_array = uint8([10, 20; 30, 40]); +%! octavelibczi ('AddSubBlock',handle,'C0T1',[0 0 2 2],'gray8',uint8_array,struct('M',0)); +%! octavelibczi ('CloseCziWriter',handle); +%! handle = octavelibczi ('Open','test.czi'); +%! info = octavelibczi ('GetInfo', handle); +%! assert(isa(info.subblockcount, 'int32')); +%! assert(info.subblockcount, int32(2)); +%! assert(info.minMindex, int32(0)); +%! assert(info.maxMindex, int32(0)); +%! assert(info.boundingBox, int32([0,0,2,2])); +%! assert(info.boundingBoxLayer0, int32([0,0,2,2])); +%! octavelibczi ('Close',handle); +%! delete('test.czi'); + +%!test +%! handle=octavelibczi ('CreateCziWriter','test2.czi','x'); +%! uint8_array = uint8([1, 2; 3, 4]); +%! octavelibczi ('AddSubBlock',handle,'C0T0',[0 0 2 2],'gray8',uint8_array,struct('M',0)); +%! uint8_array = uint8([10, 20; 30, 40]); +%! octavelibczi ('AddSubBlock',handle,'C0T1',[0 0 2 2],'gray8',uint8_array,struct('M',0)); +%! octavelibczi ('CloseCziWriter',handle); +%! handle = octavelibczi ('Open','test2.czi'); +%! subblock1 = octavelibczi ('GetSubBlockBitmap', handle, 0); +%! assert(subblock1, uint8([1, 2; 3, 4])); +%! subblock2 = octavelibczi ('GetSubBlockBitmap', handle, 1); +%! assert(subblock2, uint8([10, 20; 30, 40])); +%! octavelibczi ('Close',handle); +%! delete('test2.czi');