Add trim utility functions and add unit test Signed-off-by: Tomasz Michalak <tmichalak@antmicro.com>
diff --git a/common/utils.h b/common/utils.h new file mode 100644 index 0000000..42ad7b1 --- /dev/null +++ b/common/utils.h
@@ -0,0 +1,19 @@ +#include <algorithm> +#include <cctype> +#include <locale> + +inline void trim_left(std::string &str) +{ + str.erase(str.begin(), std::find_if(str.begin(), str.end(), [](unsigned char ch) { return !std::isspace(ch); })); +} + +inline void trim_right(std::string &str) +{ + str.erase(std::find_if(str.rbegin(), str.rend(), [](unsigned char ch) { return !std::isspace(ch); }).base(), str.end()); +} + +inline void trim(std::string &str) +{ + trim_left(str); + trim_right(str); +}
diff --git a/design_introspection-plugin/get_ports.cc b/design_introspection-plugin/get_ports.cc index 042ada7..d6a0916 100644 --- a/design_introspection-plugin/get_ports.cc +++ b/design_introspection-plugin/get_ports.cc
@@ -18,6 +18,7 @@ * */ #include "get_ports.h" +#include "../common/utils.h" USING_YOSYS_NAMESPACE @@ -30,6 +31,7 @@ GetPorts::SelectionObjects GetPorts::ExtractSelection(RTLIL::Design *design, const CommandArgs &args) { std::string port_name = args.selection_objects.at(0); + trim(port_name); std::string port_str(port_name.size(), '\0'); int bit(0); if (!sscanf(port_name.c_str(), "%[^[][%d]", &port_str[0], &bit)) {
diff --git a/design_introspection-plugin/tests/Makefile b/design_introspection-plugin/tests/Makefile index fcca1e9..1602a48 100644 --- a/design_introspection-plugin/tests/Makefile +++ b/design_introspection-plugin/tests/Makefile
@@ -3,6 +3,8 @@ get_cells \ get_pins +UNIT_TESTS = trim_name + include $(shell pwd)/../../Makefile_test.common get_nets_verify = $(call diff_test,get_nets,txt)
diff --git a/design_introspection-plugin/tests/get_ports/get_ports.golden.txt b/design_introspection-plugin/tests/get_ports/get_ports.golden.txt index d87ba55..d427ccd 100644 --- a/design_introspection-plugin/tests/get_ports/get_ports.golden.txt +++ b/design_introspection-plugin/tests/get_ports/get_ports.golden.txt
@@ -4,3 +4,5 @@ clk led[0] port led[0] +led[1] port +led[1]
diff --git a/design_introspection-plugin/tests/get_ports/get_ports.tcl b/design_introspection-plugin/tests/get_ports/get_ports.tcl index eca245d..f82305a 100644 --- a/design_introspection-plugin/tests/get_ports/get_ports.tcl +++ b/design_introspection-plugin/tests/get_ports/get_ports.tcl
@@ -10,18 +10,24 @@ set fp [open "get_ports.txt" "w"] -puts "\nsignal_p port" +puts "\n signal_p port" puts $fp "signal_p port" puts $fp [get_ports signal_p] -puts "\nclk port" +puts "\n clk port" puts $fp "clk port" puts $fp [get_ports clk] -puts {\nled[0] port} +puts "\n" +puts { led[0] port} puts $fp {led[0] port} puts $fp [get_ports {led[0]}] +puts "\n" +puts { led[1] port} +puts $fp {led[1] port} +puts $fp [get_ports { led[1] }] + #puts "\nsignal_* ports quiet" #puts $fp "signal_* ports quiet" #puts $fp [get_ports -quiet signal_*]
diff --git a/design_introspection-plugin/tests/trim_name/trim_name.test.cc b/design_introspection-plugin/tests/trim_name/trim_name.test.cc new file mode 100644 index 0000000..5da2641 --- /dev/null +++ b/design_introspection-plugin/tests/trim_name/trim_name.test.cc
@@ -0,0 +1,22 @@ +#include "../common/utils.h" + +#include <gtest/gtest.h> + +TEST(UtilitiesTest, TrimName) +{ + std::string original(" wire_name "); + // trim wire_name from both sides + std::string name(original); + trim(name); + EXPECT_EQ(name, "wire_name"); + + // trim wire_name from left-hand side + name = original; + trim_left(name); + EXPECT_EQ(name, "wire_name "); + + // trim wire_name from right-hand side + name = original; + trim_right(name); + EXPECT_EQ(name, " wire_name"); +}