śr., 7 sie 2019 o 21:51 Alexander Stein <alexander.stein@xxxxxxxxxxx> napisał(a): > > If run with --success, all expressions are evaluated and printed out. > But REQUIRE_FALSE(chip) tries to iterate over the chip resulting in this > backtrace: > #0 gpiod_chip_num_lines (chip=chip@entry=0x0) at ../../lib/core.c:235 > #1 gpiod_line_iter_new (chip=0x0) at ../../lib/iter.c:140 > #2 gpiod::(anonymous namespace)::make_line_iter (chip=0x0) at ../../../bindings/cxx/iter.cpp:29 > #3 gpiod::line_iter::line_iter (this=0x7fffffffd690, owner=...) at ../../../bindings/cxx/iter.cpp:109 > #4 Catch::rangeToString<gpiod::chip> (range=...) at /usr/include/catch2/catch.hpp:1959 > [...] > > Workaround by forcing catch2 to call gpiod::chip::operator bool(). > > Signed-off-by: Alexander Stein <alexander.stein@xxxxxxxxxxx> > --- > This actually looks like a flaw in the binding itself that the > gpiod::line_iter can't cope with an empty gpiod::chip. > Do you want to submit a patch that fixes that? Otherwise I can fix it. I think that simply throwing an exception on empty chip is enough, right? Bart > bindings/cxx/tests/tests-chip.cpp | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/bindings/cxx/tests/tests-chip.cpp b/bindings/cxx/tests/tests-chip.cpp > index c9eb8e5..1c69872 100644 > --- a/bindings/cxx/tests/tests-chip.cpp > +++ b/bindings/cxx/tests/tests-chip.cpp > @@ -70,7 +70,7 @@ TEST_CASE("GPIO chip can be opened with the open() method in different modes", " > mockup::probe_guard mockup_chips({ 8, 8, 8 }); > ::gpiod::chip chip; > > - REQUIRE_FALSE(chip); > + REQUIRE_FALSE(!!chip); > > SECTION("open by name") > { > @@ -102,7 +102,7 @@ TEST_CASE("Uninitialized GPIO chip behaves correctly", "[chip]") > > SECTION("uninitialized chip is 'false'") > { > - REQUIRE_FALSE(chip); > + REQUIRE_FALSE(!!chip); > } > > SECTION("using uninitialized chip throws logic_error") > @@ -149,7 +149,7 @@ TEST_CASE("Chip object can be reset", "[chip]") > ::gpiod::chip chip(mockup::instance().chip_name(0)); > REQUIRE(chip); > chip.reset(); > - REQUIRE_FALSE(chip); > + REQUIRE_FALSE(!!chip); > } > > TEST_CASE("Chip info can be correctly retrieved", "[chip]") > -- > 2.22.0 >