mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-20 00:51:42 +00:00
[wpimath] Support formatting more Eigen types (#4391)
Added an Eigen::SparseMatrix formatter. Also modified the Eigen::Matrix formatter to support Eigen::MatrixXd. Eigen::MatrixXd sets both dimension template arguments to -1, so they can't be used for iteration. rows() and cols() are now used instead. rows() and cols() are constexpr for statically sized matrices, so there's no performance loss there.
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
// Open Source Software; you can modify and/or share it under the terms of
|
||||
// the WPILib BSD license file in the root directory of this project.
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include <fmt/format.h>
|
||||
|
||||
#include "frc/fmt/Eigen.h"
|
||||
@@ -10,12 +12,33 @@
|
||||
#include "units/velocity.h"
|
||||
|
||||
TEST(FormatterTest, Eigen) {
|
||||
Eigen::Matrix<double, 3, 2> A{{1.0, 2.0}, {3.0, 4.0}, {5.0, 6.0}};
|
||||
Eigen::Matrix<double, 3, 2> A{{0.0, 1.0}, {2.0, 3.0}, {4.0, 5.0}};
|
||||
EXPECT_EQ(
|
||||
" 1.000000 2.000000\n"
|
||||
" 3.000000 4.000000\n"
|
||||
" 5.000000 6.000000",
|
||||
" 0.000000 1.000000\n"
|
||||
" 2.000000 3.000000\n"
|
||||
" 4.000000 5.000000",
|
||||
fmt::format("{}", A));
|
||||
|
||||
Eigen::MatrixXd B{{0.0, 1.0}, {2.0, 3.0}, {4.0, 5.0}};
|
||||
EXPECT_EQ(
|
||||
" 0.000000 1.000000\n"
|
||||
" 2.000000 3.000000\n"
|
||||
" 4.000000 5.000000",
|
||||
fmt::format("{}", B));
|
||||
|
||||
Eigen::SparseMatrix<double> C{3, 2};
|
||||
std::vector<Eigen::Triplet<double>> triplets;
|
||||
triplets.emplace_back(0, 1, 1.0);
|
||||
triplets.emplace_back(1, 0, 2.0);
|
||||
triplets.emplace_back(1, 1, 3.0);
|
||||
triplets.emplace_back(2, 0, 4.0);
|
||||
triplets.emplace_back(2, 1, 5.0);
|
||||
C.setFromTriplets(triplets.begin(), triplets.end());
|
||||
EXPECT_EQ(
|
||||
" 0.000000 1.000000\n"
|
||||
" 2.000000 3.000000\n"
|
||||
" 4.000000 5.000000",
|
||||
fmt::format("{}", C));
|
||||
}
|
||||
|
||||
TEST(FormatterTest, Units) {
|
||||
|
||||
Reference in New Issue
Block a user