Skip to content

Commit

Permalink
Merge 8ea8fc8 into 57b36a9
Browse files Browse the repository at this point in the history
  • Loading branch information
FrancoisCarouge committed Oct 21, 2023
2 parents 57b36a9 + 8ea8fc8 commit 538a98a
Show file tree
Hide file tree
Showing 7 changed files with 182 additions and 9 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/deploy_test_coverage_coveralls.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ jobs:
lcov --rc lcov_branch_coverage=1 --gcov-tool gcov-13 --remove base.info '/usr/*' --output-file base.info
lcov --rc lcov_branch_coverage=1 --gcov-tool gcov-13 --remove base.info '10' --output-file base.info
- name: 'Test'
run: ctest --test-dir 'build' --tests-regex 'kalman_(test|sample|benchmark)' --verbose --parallel 4
run: ctest --test-dir 'build' --tests-regex 'kalman' --verbose --parallel 4
- name: 'Coverage: Test'
run: |
lcov --rc lcov_branch_coverage=1 --gcov-tool gcov-13 --capture --directory . --output-file test.info
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ jobs:
- name: 'Build'
run: cmake --build 'build' --config '${{ matrix.config }}' --verbose --parallel 4
- name: 'Test'
run: ctest --test-dir 'build' --config '${{ matrix.config }}' --tests-regex 'kalman_(test|sample|benchmark)' --verbose --parallel 4
run: ctest --test-dir 'build' --tests-regex 'kalman' --config '${{ matrix.config }}' --verbose --parallel 4
- name: 'Install'
run: cmake --install 'build' --config '${{ matrix.config }}' --prefix 'install' --verbose
- name: 'Package'
Expand Down
2 changes: 1 addition & 1 deletion INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ Build and run the tests and samples:
git clone --depth 1 "https://github.com/FrancoisCarouge/kalman"
cmake -S "kalman" -B "build"
cmake --build "build" --config "Debug" --parallel
ctest --test-dir "build" --build-config "Debug" --tests-regex "kalman_(test|sample|benchmark)" --output-on-failure --parallel
ctest --test-dir "build" --build-config "Debug" --output-on-failure --parallel
```

## Benchmarks
Expand Down
9 changes: 3 additions & 6 deletions include/fcarouge/kalman.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -266,9 +266,7 @@ class kalman final {
//! elements of the filter with.
//!
//! @complexity Constant.
//!
//! @todo Implement and test.
inline constexpr kalman(kalman &&other) noexcept = delete;
inline constexpr kalman(kalman &&other) noexcept = default;

//! @brief Copy assignment operator.
//!
Expand Down Expand Up @@ -300,9 +298,8 @@ class kalman final {
//! i.e. `*this`.
//!
//! @complexity Constant.
//!
//! @todo Implement and test.
inline constexpr auto operator=(kalman &&other) noexcept -> kalman & = delete;
inline constexpr auto operator=(kalman &&other) noexcept
-> kalman & = default;

//! @brief Destructs the Kalman filter.
//!
Expand Down
2 changes: 2 additions & 0 deletions test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ endforeach()
foreach(BACKEND IN ITEMS "eigen")
foreach(
TEST
"kalman_assign_move_5x4x3.cpp"
"kalman_constructor_default_1x1x3.cpp"
"kalman_constructor_default_1x4x1.cpp"
"kalman_constructor_default_1x4x3.cpp"
Expand All @@ -111,6 +112,7 @@ foreach(BACKEND IN ITEMS "eigen")
"kalman_constructor_default_5x4x0.cpp"
"kalman_constructor_default_5x4x1.cpp"
"kalman_constructor_default_5x4x3.cpp"
"kalman_constructor_move_5x4x3.cpp"
"kalman_f_5x4x3.cpp"
"kalman_h_5x4x3.cpp")
get_filename_component(NAME ${TEST} NAME_WE)
Expand Down
89 changes: 89 additions & 0 deletions test/kalman_assign_move_5x4x3.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
/* __ _ __ __ _ _
| |/ / /\ | | | \/ | /\ | \ | |
| ' / / \ | | | \ / | / \ | \| |
| < / /\ \ | | | |\/| | / /\ \ | . ` |
| . \ / ____ \| |____| | | |/ ____ \| |\ |
|_|\_\/_/ \_\______|_| |_/_/ \_\_| \_|
Kalman Filter
Version 0.3.0
https://github.com/FrancoisCarouge/Kalman
SPDX-License-Identifier: Unlicense
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <https://unlicense.org> */

#include "fcarouge/kalman.hpp"
#include "fcarouge/linalg.hpp"

#include <cassert>
#include <utility>

namespace fcarouge::test {
namespace {
template <auto Size> using vector = column_vector<double, Size>;
template <auto Row, auto Column> using matrix = matrix<double, Row, Column>;

//! @test Verifies the multi-dimension filter is move-assignable.
[[maybe_unused]] auto test{[] {
using kalman = kalman<vector<5>, vector<4>, vector<3>>;
const auto z3x1{zero_v<vector<3>>};
const auto i4x4{identity_v<matrix<4, 4>>};
const auto i4x5{identity_v<matrix<4, 5>>};
const auto i5x3{identity_v<matrix<5, 3>>};
const auto i5x4{identity_v<matrix<5, 4>>};
const auto i5x5{identity_v<matrix<5, 5>>};
const auto z4x1{zero_v<vector<4>>};
const auto z4x4{zero_v<matrix<4, 4>>};
const auto z5x1{zero_v<vector<5>>};
const auto z5x5{zero_v<matrix<5, 5>>};
kalman filter;

{
kalman filter_0;

filter_0.f(z5x5);

filter = std::move(filter_0);
}

assert(filter.f() == z5x5);
assert(filter.g() == i5x3);
assert(filter.h() == i4x5);
assert(filter.k() == i5x4);
assert(filter.p() == i5x5);
assert(filter.q() == z5x5 && "No process noise by default.");
assert(filter.r() == z4x4 && "No observation noise by default.");
assert(filter.s() == i4x4);
assert(filter.u() == z3x1 && "No initial control.");
assert(filter.x() == z5x1 && "Origin state.");
assert(filter.y() == z4x1);
assert(filter.z() == z4x1);

return 0;
}()};
} // namespace
} // namespace fcarouge::test
85 changes: 85 additions & 0 deletions test/kalman_constructor_move_5x4x3.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
/* __ _ __ __ _ _
| |/ / /\ | | | \/ | /\ | \ | |
| ' / / \ | | | \ / | / \ | \| |
| < / /\ \ | | | |\/| | / /\ \ | . ` |
| . \ / ____ \| |____| | | |/ ____ \| |\ |
|_|\_\/_/ \_\______|_| |_/_/ \_\_| \_|
Kalman Filter
Version 0.3.0
https://github.com/FrancoisCarouge/Kalman
SPDX-License-Identifier: Unlicense
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <https://unlicense.org> */

#include "fcarouge/kalman.hpp"
#include "fcarouge/linalg.hpp"

#include <cassert>
#include <utility>

namespace fcarouge::test {
namespace {
template <auto Size> using vector = column_vector<double, Size>;
template <auto Row, auto Column> using matrix = matrix<double, Row, Column>;

//! @test Verifies the multi-dimension filter is move-constructible.
[[maybe_unused]] auto test{[] {
using kalman = kalman<vector<5>, vector<4>, vector<3>>;
const auto z3x1{zero_v<vector<3>>};
const auto i4x4{identity_v<matrix<4, 4>>};
const auto i4x5{identity_v<matrix<4, 5>>};
const auto i5x3{identity_v<matrix<5, 3>>};
const auto i5x4{identity_v<matrix<5, 4>>};
const auto i5x5{identity_v<matrix<5, 5>>};
const auto z4x1{zero_v<vector<4>>};
const auto z4x4{zero_v<matrix<4, 4>>};
const auto z5x1{zero_v<vector<5>>};
const auto z5x5{zero_v<matrix<5, 5>>};
kalman filter_0;

filter_0.f(z5x5);

kalman filter{std::move(filter_0)};

assert(filter.f() == z5x5);
assert(filter.g() == i5x3);
assert(filter.h() == i4x5);
assert(filter.k() == i5x4);
assert(filter.p() == i5x5);
assert(filter.q() == z5x5 && "No process noise by default.");
assert(filter.r() == z4x4 && "No observation noise by default.");
assert(filter.s() == i4x4);
assert(filter.u() == z3x1 && "No initial control.");
assert(filter.x() == z5x1 && "Origin state.");
assert(filter.y() == z4x1);
assert(filter.z() == z4x1);

return 0;
}()};
} // namespace
} // namespace fcarouge::test

0 comments on commit 538a98a

Please sign in to comment.