...
This commit is contained in:
127
cxx/tests/fitpack.cpp
Normal file
127
cxx/tests/fitpack.cpp
Normal file
@@ -0,0 +1,127 @@
|
||||
#include <algorithm>
|
||||
#include <functional>
|
||||
#include <iostream>
|
||||
#include <random>
|
||||
#include <ranges>
|
||||
|
||||
#include "../fitpack/fitpack.h"
|
||||
|
||||
int tests_fitpack(int, char**)
|
||||
{
|
||||
size_t nt = 30, np = 60, N = nt * np, i = 1;
|
||||
// size_t nt = 10, np = 20, N = nt * np, i = 1;
|
||||
double ts = std::numbers::pi / (nt + 1);
|
||||
double ps = 2.0 * std::numbers::pi / (np + 1);
|
||||
|
||||
std::vector<double> tetha(N), phi(N), func(N);
|
||||
|
||||
auto gen_func = [](double st, size_t& idx) {
|
||||
double v = st * idx;
|
||||
++idx;
|
||||
|
||||
return v;
|
||||
};
|
||||
|
||||
auto print_func = [](const auto& r, std::string_view name) {
|
||||
std::cout << name << ": ";
|
||||
for (auto& el : r) {
|
||||
std::cout << el << " ";
|
||||
}
|
||||
std::cout << "\n";
|
||||
};
|
||||
|
||||
|
||||
// std::ranges::generate(tetha, std::bind(gen_func, ts, i));
|
||||
|
||||
// i = 1;
|
||||
// std::ranges::generate(phi, std::bind(gen_func, ps, i));
|
||||
|
||||
size_t k = 1;
|
||||
i = 0;
|
||||
for (size_t j = 0; j < nt; ++j) {
|
||||
std::ranges::fill_n(tetha.begin() + i * np, np, ts * (i + 1));
|
||||
std::ranges::generate(phi | std::views::drop(i * np) | std::views::take(np), std::bind(gen_func, ps, k));
|
||||
++i;
|
||||
k = 1;
|
||||
}
|
||||
|
||||
// std::uniform_real_distribution<double> distr{-0.1, 0.1};
|
||||
std::normal_distribution<double> distr{0.0, 1.0};
|
||||
std::random_device device;
|
||||
std::mt19937 engine{device()};
|
||||
|
||||
std::ranges::generate(func, [ii = 0, &distr, &engine, &tetha, &phi]() mutable {
|
||||
double v = (5.0 + tetha[ii]) * 1.3 + (3.0 + phi[ii]) * 3.1 + distr(engine);
|
||||
++ii;
|
||||
return v;
|
||||
});
|
||||
|
||||
|
||||
int ntk = 24, npk = 29, nf = (ntk + 4) * (npk + 4);
|
||||
// int ntk = 3, npk = 6, nf = (ntk + 4) * (npk + 4);
|
||||
std::vector<double> tk(ntk + 8), pk(npk + 8), coeffs(nf);
|
||||
ts = std::numbers::pi / (ntk + 1);
|
||||
ps = 2.0 * std::numbers::pi / (npk + 1);
|
||||
|
||||
i = 1;
|
||||
std::ranges::generate(tk | std::views::drop(4) | std::views::take(ntk), std::bind(gen_func, ts, i));
|
||||
i = 1;
|
||||
std::ranges::generate(pk | std::views::drop(4) | std::views::take(npk), std::bind(gen_func, ps, i));
|
||||
|
||||
|
||||
double rs = 0.0;
|
||||
int ec = mcc::fitpack::fitpack_sphere_fit(tetha, phi, func, 1.0, tk, pk, coeffs, rs);
|
||||
|
||||
std::cout << "FIT EC = " << ec << "\n";
|
||||
std::cout << "FIT RESI = " << rs << "\n";
|
||||
|
||||
ntk += 8;
|
||||
npk += 8;
|
||||
std::ranges::fill(tk, -1);
|
||||
std::ranges::fill(pk, -1);
|
||||
ec = mcc::fitpack::fitpack_sphere_smooth(tetha, phi, func, 1.0, 1800.0, ntk, npk, tk, pk, coeffs, rs);
|
||||
|
||||
std::cout << "FIT EC = " << ec << "\n";
|
||||
std::cout << "FIT RESI = " << rs << "\n";
|
||||
std::cout << "NKNOTS: " << ntk << ", " << npk << "\n";
|
||||
|
||||
|
||||
print_func(coeffs, "coeffs");
|
||||
|
||||
// print_func(tetha, "tetha");
|
||||
// print_func(phi, "phi");
|
||||
print_func(tk, "tetha_knots");
|
||||
print_func(pk, "phi_knots");
|
||||
print_func(func, "func");
|
||||
|
||||
std::cout << "\n\n";
|
||||
|
||||
k = 1;
|
||||
ts = std::numbers::pi / (nt + 1);
|
||||
std::ranges::generate_n(tetha.begin(), nt, std::bind(gen_func, ts, k));
|
||||
|
||||
std::vector<double> f_func;
|
||||
tetha.resize(nt);
|
||||
phi.resize(np);
|
||||
|
||||
tk.resize(ntk);
|
||||
pk.resize(npk);
|
||||
|
||||
print_func(tetha, "TETHA:");
|
||||
print_func(phi, "PHI:");
|
||||
|
||||
ec = mcc::fitpack::fitpack_eval_spl2d(tk, pk, coeffs, tetha, phi, f_func);
|
||||
// ec = mcc::fitpack::fitpack_eval_spl2d(pk, tk, coeffs, phi, tetha, f_func);
|
||||
std::cout << "EVAL EC = " << ec << "\n";
|
||||
print_func(f_func, "func");
|
||||
|
||||
std::cout << "\n\n";
|
||||
|
||||
for (size_t l = 0; l < f_func.size(); ++l) {
|
||||
auto r = f_func[l] - func[l];
|
||||
std::cout << r << " ";
|
||||
}
|
||||
std::cout << "\n";
|
||||
|
||||
return 0;
|
||||
}
|
||||
147
cxx/tests/fsm.cpp
Normal file
147
cxx/tests/fsm.cpp
Normal file
@@ -0,0 +1,147 @@
|
||||
#include <cxxabi.h>
|
||||
#include <iostream>
|
||||
#include <typeinfo>
|
||||
|
||||
#include "../mcc_finite_state_machine.h"
|
||||
|
||||
using namespace mcc;
|
||||
|
||||
|
||||
struct S {
|
||||
};
|
||||
|
||||
|
||||
struct EV1 {
|
||||
static constexpr std::string_view ID = "EV1";
|
||||
|
||||
void onTransit()
|
||||
{
|
||||
//
|
||||
std::cout << "EV1::onTransit()\n";
|
||||
}
|
||||
};
|
||||
|
||||
struct EV2 {
|
||||
static constexpr std::string_view ID = "EV2";
|
||||
};
|
||||
|
||||
struct EV3 {
|
||||
static constexpr std::string_view ID = "EV3";
|
||||
};
|
||||
|
||||
struct EVN {
|
||||
static constexpr std::string_view ID = "EVN";
|
||||
};
|
||||
|
||||
struct ST1;
|
||||
struct ST2;
|
||||
|
||||
struct STN {
|
||||
static constexpr std::string_view ID = "STN";
|
||||
using transition_t = fsm::fsm_transition_table_t<std::pair<EV1, STN>, std::pair<EV2, ST2>>;
|
||||
|
||||
void enter()
|
||||
{
|
||||
std::cout << "transit to " << ID << "-state\n";
|
||||
}
|
||||
|
||||
void exit()
|
||||
{
|
||||
std::cout << "transit from " << ID << "-state\n";
|
||||
}
|
||||
};
|
||||
|
||||
struct ST3 {
|
||||
static constexpr std::string_view ID = "ST3";
|
||||
using transition_t = fsm::fsm_transition_table_t<std::pair<EV1, ST1>, std::pair<EV2, ST2>>;
|
||||
|
||||
void enter(EV3& ev)
|
||||
{
|
||||
std::cout << "transit to " << ID << "-state\n";
|
||||
}
|
||||
|
||||
void exit()
|
||||
{
|
||||
std::cout << "transit from " << ID << "-state\n";
|
||||
}
|
||||
};
|
||||
|
||||
struct ST2 {
|
||||
static constexpr std::string_view ID = "ST2";
|
||||
using transition_t = fsm::fsm_transition_table_t<std::pair<EV2, STN>, std::pair<EV3, ST3>>;
|
||||
|
||||
void enter(EV2& ev)
|
||||
{
|
||||
std::cout << "transit to " << ID << "-state\n";
|
||||
}
|
||||
|
||||
void exit()
|
||||
{
|
||||
std::cout << "transit from " << ID << "-state\n";
|
||||
}
|
||||
};
|
||||
|
||||
struct ST1 {
|
||||
static constexpr std::string_view ID = "ST1";
|
||||
using transition_t =
|
||||
fsm::fsm_transition_table_t<std::pair<EV1, ST2>, std::pair<EV2, STN>, std::pair<EV3, STN>, std::pair<EV3, STN>>;
|
||||
|
||||
void enter()
|
||||
{
|
||||
std::cout << "transit to " << ID << "-state\n";
|
||||
}
|
||||
|
||||
void exit()
|
||||
{
|
||||
std::cout << "transit from " << ID << "-state\n";
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
int tests_fsm(int, char**)
|
||||
{
|
||||
std::cout << "\n\n\n------- mcc_finite_state_machine.h -------\n";
|
||||
|
||||
|
||||
|
||||
fsm::MccFiniteStateMachine fsmach(ST1{});
|
||||
|
||||
std::cout << "STATES: ";
|
||||
for (auto& el : fsmach.stateIDs()) {
|
||||
std::cout << std::quoted(el) << " ";
|
||||
}
|
||||
std::cout << "\n";
|
||||
|
||||
std::cout << "EVENTS: ";
|
||||
for (auto& el : fsmach.eventIDs()) {
|
||||
std::cout << std::quoted(el) << " ";
|
||||
}
|
||||
std::cout << "\n";
|
||||
|
||||
fsmach.dispatchEvent<EV1>();
|
||||
fsmach.dispatchEvent<EV3>();
|
||||
fsmach.dispatchEvent<EV2>();
|
||||
|
||||
// fsmach.dispatchEvent<EVN>();
|
||||
|
||||
using tab_t = fsm::fsm_transition_table_t<std::pair<EV1, ST2>, std::pair<EV3, ST1>>;
|
||||
|
||||
using st_t = tab_t::find_state_by_event_t<EV2>;
|
||||
|
||||
int status;
|
||||
char* aa = abi::__cxa_demangle(typeid(st_t).name(), NULL, NULL, &status);
|
||||
std::cout << "aa = " << aa << "\n";
|
||||
free(aa);
|
||||
|
||||
std::cout << "\nAfter std::move\n";
|
||||
auto fsmach1 = std::move(fsmach);
|
||||
std::cout << "STATES: ";
|
||||
for (auto& el : fsmach1.stateIDs()) {
|
||||
std::cout << std::quoted(el) << " ";
|
||||
}
|
||||
std::cout << "\n";
|
||||
std::cout << "current state: " << std::quoted(fsmach1.currentStateID()) << "\n";
|
||||
|
||||
return 0;
|
||||
}
|
||||
15
cxx/tests/mount.cpp
Normal file
15
cxx/tests/mount.cpp
Normal file
@@ -0,0 +1,15 @@
|
||||
#include "../mcc_mount.h"
|
||||
#include "../mcc_mount_events_states.h"
|
||||
|
||||
int tests_mount(int, char**)
|
||||
{
|
||||
using namespace mcc;
|
||||
|
||||
using mount_t = MccMount<MccMountConfig<MccMountType::CROSSAXIS_TYPE>, MccMountTelemetry>;
|
||||
|
||||
mount_t mount(MccMountStateIDLE<mount_t>{});
|
||||
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user