CCSDS test vectors?

Hi everyone.

I’m implementing the channel coding for a cubesat. I’m following CCSDS 131.0-B-3 (Blue book, TM Synchronization and channel coding) and have an implementation that I think does everything according to the specification.

But I’d like to verify this. Is there anything similar to test vectors (often used for verifying cryptographic implementations), or some freely available implementation that I can use to encode and decode test data, to verify that my interpretation and implementation of CCSDS is correct?

I would prefer to verify without going to RF (at least initially). Could I use the Satnogs encoding/decoding blocks outside Gnu radio? I have some experience running Gnu radio, but unfortunately no experience in developing blocks.

Based on our link budget requirements, we plan to use convolutional and reed-solomon encoding.

2 Likes

Hello!

We have an implementation of (most of) the CCSD modulation and coding schemes here : https://gitlab.com/librespacefoundation/gr-ccsds . In the months to come we will test it against a hardware CCSDS modem, but for now we also have the same problem of verification with you, so it could be a good chance for both of us to see if we’re on the right track with the implementation!

For a way to run the code without the gnuradio companion take a look at the qa tests, like /lib/qa_conv_decoder.cc which tests the convolutional decoder block. Still you will need the gnuradio libraries though

Cheers

3 Likes

Hi!

The CCSDS decoders in gr-satellites are working and have been tested with real data.
There are decoders for convolutional rate 1/2 and Reed-Solomon that I already successfully used.

Another implementation including de- and encoders is gr-ccsds (not to confuse with the LibreSpace implementation).

Cheers,
Milenko

2 Likes

I tried compiling and running the tests, but I suspect I’m not doing the right thing. Is there any documentation or does anyone have any pointers on how to run the tests?

I’m running Ubuntu 19.04. This is what I did:

sudo apt-get install gnuradio-dev pkg-config libitpp-dev
git clone https://gitlab.com/librespacefoundation/gr-ccsds.git
cd gr-ccsds/
mkdir build
cd build
cmake ..
sudo make install
cd ../lib
mkdir build && cd build
cmake ..
-- The C compiler identification is GNU 8.3.0
-- The CXX compiler identification is GNU 8.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at CMakeLists.txt:24 (include):
  include could not find load file:

    GrPlatform


-- Looking for getopt.h
-- Looking for getopt.h - found
-- Looking for stdio.h
-- Looking for stdio.h - found
-- Looking for stdlib.h
-- Looking for stdlib.h - found
-- Looking for memory.h
-- Looking for memory.h - found
-- Looking for string.h
-- Looking for string.h - found
-- Looking for getopt_long
-- Looking for getopt_long - found
-- Looking for memset
-- Looking for memset - found
-- Looking for memmove
-- Looking for memmove - found
CMake Error at libfec/CMakeLists.txt:223 (include):
  include could not find load file:

    GrMiscUtils


CMake Error at libfec/CMakeLists.txt:224 (GR_LIBRARY_FOO):
  Unknown CMake command "GR_LIBRARY_FOO".


CMake Warning (dev) in CMakeLists.txt:
  No cmake_minimum_required command is present.  A line of code such as

    cmake_minimum_required(VERSION 3.13)

  should be added at the top of the file.  The version specified may be lower
  if you wish to support older CMake versions for this project.  For more
  information run "cmake --help-policy CMP0000".
This warning is for project developers.  Use -Wno-dev to suppress it.

-- Configuring incomplete, errors occurred!

CMakeOutput.log is available at https://pastebin.com/dEuSth7H

I was hoping to be able to first run the tests untouched from the repo, then add my own tests.

You also need to install gnuradio, not only gnuradio-dev!

Thanks. Looks like gnuradio is already installed though:

$ sudo apt-get install gnuradio
Reading package lists... Done
Building dependency tree
Reading state information... Done
gnuradio is already the newest version (3.7.13.4-4build1).

EDIT: gnuradio is automatically pulled in by gnuradio-dev

$ aptitude why gnuradio
i   gnuradio-dev Depends gnuradio (= 3.7.13.4-4build1)

Hmm i think you are building the project in the wrong directory, so it uses the wrong CMakeLists file. Make sure that you create a build folder inside the top-level directory and run the cmake command inside there, instead of the /lib/build folder that you do now

I have done that (see these steps from my earlier post:)

git clone https://gitlab.com/librespacefoundation/gr-ccsds.git
cd gr-ccsds/
mkdir build
cd build
cmake ..
sudo make install

How do I run the tests?

You also have this

cd ../lib
mkdir build && cd build
cmake ..

which causes the errors that you posted.

You can run the tests with

make test

from inside the build directory

thanks! The make test command was what I was missing.

Is it expected that tests fail?

~/gr-ccsds/build$ make test
Running tests...
Test project /home/micke/gr-ccsds/build
    Start 1: test_ccsds
1/2 Test #1: test_ccsds .......................   Passed   56.28 sec
    Start 2: memcheck_test_ccsds
Could not find executable MEMORYCHECK_COMMAND-NOTFOUND
Looked in the following places:
MEMORYCHECK_COMMAND-NOTFOUND
MEMORYCHECK_COMMAND-NOTFOUND
Release/MEMORYCHECK_COMMAND-NOTFOUND
Release/MEMORYCHECK_COMMAND-NOTFOUND
Debug/MEMORYCHECK_COMMAND-NOTFOUND
Debug/MEMORYCHECK_COMMAND-NOTFOUND
MinSizeRel/MEMORYCHECK_COMMAND-NOTFOUND
MinSizeRel/MEMORYCHECK_COMMAND-NOTFOUND
RelWithDebInfo/MEMORYCHECK_COMMAND-NOTFOUND
RelWithDebInfo/MEMORYCHECK_COMMAND-NOTFOUND
Deployment/MEMORYCHECK_COMMAND-NOTFOUND
Deployment/MEMORYCHECK_COMMAND-NOTFOUND
Development/MEMORYCHECK_COMMAND-NOTFOUND
Development/MEMORYCHECK_COMMAND-NOTFOUND
Unable to find executable: MEMORYCHECK_COMMAND-NOTFOUND
2/2 Test #2: memcheck_test_ccsds ..............***Not Run   0.00 sec

50% tests passed, 1 tests failed out of 2

Total Test time (real) =  56.28 sec

The following tests FAILED:
          2 - memcheck_test_ccsds (Not Run)
Errors while running CTest
make: *** [Makefile:86: test] Error 8

You need valgrind for the memory tests. Try installing it if you don’t have it already

1 Like

Thanks.
The memory test completes now, but fails. Not sure if that’s something I need to care about at this point.

~/gr-ccsds/build$ make test
Running tests...
Test project /home/micke/gr-ccsds/build
    Start 1: test_ccsds
1/2 Test #1: test_ccsds .......................   Passed   57.66 sec
    Start 2: memcheck_test_ccsds
2/2 Test #2: memcheck_test_ccsds ..............***Failed  629.44 sec

50% tests passed, 1 tests failed out of 2

Total Test time (real) = 687.11 sec

The following tests FAILED:
          2 - memcheck_test_ccsds (Failed)
Errors while running CTest
make: *** [Makefile:86: test] Error 8

It looks like the test run only shows information from the test group. Is there a way to see more detailed information from individual tests?

There is a log file inside the build folder. It might be the build/Testing/Temporary/LastTest.log file, but i am not entirely sure and i have some issues trying to find it. If it’s not that, check the other files inside the build/Testing folder

1 Like

Great!

~/gr-ccsds/build$ find .. -mtime -1 | grep -i log
../build/Testing/Temporary/LastTest.log
../build/Testing/Temporary/LastTestsFailed.log

LastTest.log has detailed information:

Start testing: Nov 05 19:11 CET
----------------------------------------------------------
1/2 Testing: test_ccsds
1/2 Test: test_ccsds
Command: "/bin/sh" "/home/micke/gr-ccsds/build/lib/test_ccsds_test.sh"
Directory: /home/micke/gr-ccsds/build/lib
"test_ccsds" start time: Nov 05 19:11 CET
Output:
----------------------------------------------------------
gr::ccsds::qa_encoder::t1. : OK
gr::ccsds::qa_decoder::t1. : OK
gr::ccsds::qa_conv_decoder::test_simple_decode_1_2.CPU: x86-64, using portable C implementation
 : OK
gr::ccsds::qa_conv_decoder::test_simple_decode_2_3. : OK
gr::ccsds::qa_conv_decoder::test_simple_decode_3_4. : OK
gr::ccsds::qa_conv_decoder::test_simple_decode_5_6. : OK
gr::ccsds::qa_conv_decoder::test_simple_decode_7_8. : OK
gr::ccsds::qa_conv_decoder::test_various_msg_len_1_2. : OK
gr::ccsds::qa_conv_decoder::test_various_msg_len_2_3. : OK
gr::ccsds::qa_conv_decoder::test_various_msg_len_3_4. : OK
gr::ccsds::qa_conv_decoder::test_various_msg_len_5_6. : OK
gr::ccsds::qa_conv_decoder::test_various_msg_len_7_8. : OK
gr::ccsds::qa_utils::test_packing. : OK
gr::ccsds::qa_utils::test_soft_packing. : OK
gr::ccsds::qa_rs_decoder::test_ecc8_decode. : OK
gr::ccsds::qa_rs_decoder::test_ecc16_decode. : OK
gr::ccsds::qa_rs_decoder::test_no_vfill. : OK
gr::ccsds::qa_rs_decoder::test_vfill. : OK
gr::ccsds::qa_rs_decoder::test_errors. : OK
gr::ccsds::qa_rs_encoder::test_simple_encoder. : OK
gr::ccsds::qa_conv_encoder::t1. : OK
gr::ccsds::qa_turbo_encoder::t1. : OK
gr::ccsds::qa_pcm_encoder::t1. : OK
gr::ccsds::qa_pcm_decoder::t1. : OK
gr::ccsds::qa_ccsds_demodulator::bpsk_uncoded. : OK
gr::ccsds::qa_ccsds_demodulator::bpsk_nrzs. : OK
gr::ccsds::qa_ccsds_demodulator::bpsk_nrzm. : OK
gr::ccsds::qa_ccsds_demodulator::qpsk_uncoded. : OK
gr::ccsds::qa_ccsds_demodulator::qpsk_nrzm. : OK
gr::ccsds::qa_ccsds_demodulator::qpsk_nrzs. : OK



OK (30 tests)

Now I should be ready to add my own test vectors. I’ll report back when I have something useful. Big thanks for your help @Sleepwalker !

2 Likes

Hey did the memtest eventually passed?

memetest failed. The log doesn’t say much unfortunately; this is the entire contents of the log file:

~/gr-ccsds/build$ cat ../build/Testing/Temporary/LastTestsFailed.log
2:memcheck_test_ccsds

Can you please run the tests with make CTEST_OUTPUT_ON_FAILURE=1 test

This should generate a more verbose output.

1 Like

I’ll check and report back

This is the result

~/gr-ccsds/build$ make CTEST_OUTPUT_ON_FAILURE=1 test
Running tests...
Test project /home/micke/gr-ccsds/build
    Start 1: test_ccsds
1/2 Test #1: test_ccsds .......................   Passed   55.55 sec
    Start 2: memcheck_test_ccsds
2/2 Test #2: memcheck_test_ccsds ..............***Failed  601.16 sec
==6524== Memcheck, a memory error detector
==6524== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==6524== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
==6524== Command: /home/micke/gr-ccsds/build/lib/test-ccsds
==6524==
gr::ccsds::qa_encoder::t1. : OK
gr::ccsds::qa_decoder::t1. : OK
gr::ccsds::qa_conv_decoder::test_simple_decode_1_2.CPU: x86-64, using portable C implementation
 : OK
gr::ccsds::qa_conv_decoder::test_simple_decode_2_3. : OK
gr::ccsds::qa_conv_decoder::test_simple_decode_3_4. : OK
gr::ccsds::qa_conv_decoder::test_simple_decode_5_6. : OK
gr::ccsds::qa_conv_decoder::test_simple_decode_7_8. : OK
gr::ccsds::qa_conv_decoder::test_various_msg_len_1_2. : OK
gr::ccsds::qa_conv_decoder::test_various_msg_len_2_3. : OK
gr::ccsds::qa_conv_decoder::test_various_msg_len_3_4. : OK
gr::ccsds::qa_conv_decoder::test_various_msg_len_5_6. : OK
gr::ccsds::qa_conv_decoder::test_various_msg_len_7_8. : OK
gr::ccsds::qa_utils::test_packing. : OK
gr::ccsds::qa_utils::test_soft_packing. : OK
gr::ccsds::qa_rs_decoder::test_ecc8_decode. : OK
gr::ccsds::qa_rs_decoder::test_ecc16_decode. : OK
gr::ccsds::qa_rs_decoder::test_no_vfill. : OK
gr::ccsds::qa_rs_decoder::test_vfill. : OK
gr::ccsds::qa_rs_decoder::test_errors. : OK
gr::ccsds::qa_rs_encoder::test_simple_encoder. : OK
gr::ccsds::qa_conv_encoder::t1. : OK
gr::ccsds::qa_turbo_encoder::t1. : OK
gr::ccsds::qa_pcm_encoder::t1. : OK
gr::ccsds::qa_pcm_decoder::t1. : OK
gr::ccsds::qa_ccsds_demodulator::bpsk_uncoded. : assertionF
gr::ccsds::qa_ccsds_demodulator::bpsk_nrzs. : OK
gr::ccsds::qa_ccsds_demodulator::bpsk_nrzm. : assertionF
gr::ccsds::qa_ccsds_demodulator::qpsk_uncoded. : assertionF
gr::ccsds::qa_ccsds_demodulator::qpsk_nrzm. : OK
gr::ccsds::qa_ccsds_demodulator::qpsk_nrzs. : OK



!!!FAILURES!!!
Test Results:
Run:  30   Failures: 3   Errors: 0


1) test: gr::ccsds::qa_ccsds_demodulator::bpsk_uncoded (F) line: 101 /home/micke/gr-ccsds/lib/qa_ccsds_demodulator.cc
assertion failed
- Expression: data_length == dat.size()/8


2) test: gr::ccsds::qa_ccsds_demodulator::bpsk_nrzm (F) line: 226 /home/micke/gr-ccsds/lib/qa_ccsds_demodulator.cc
assertion failed
- Expression: data_length == dat.size()/8


3) test: gr::ccsds::qa_ccsds_demodulator::qpsk_uncoded (F) line: 289 /home/micke/gr-ccsds/lib/qa_ccsds_demodulator.cc
assertion failed
- Expression: data_length == dat.size()/8


==6524==
==6524== HEAP SUMMARY:
==6524==     in use at exit: 27,688 bytes in 14 blocks
==6524==   total heap usage: 63,517,560 allocs, 63,517,546 frees, 116,715,720,500 bytes allocated
==6524==
==6524== 0 bytes in 1 blocks are definitely lost in loss record 1 of 14
==6524==    at 0x48394DF: operator new[](unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==6524==    by 0x152E12: gr::ccsds::qa_ccsds_demodulator::bpsk_uncoded() (qa_ccsds_demodulator.cc:89)
==6524==    by 0x14D510: void std::__invoke_impl<void, void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>(std::__invoke_memfun_deref, void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&) (invoke.h:73)
==6524==    by 0x14C943: std::__invoke_result<void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>::type std::__invoke<void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>(void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&) (invoke.h:95)
==6524==    by 0x14B246: void std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()>::__call<void, , 0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) (functional:400)
==6524==    by 0x149B7A: void std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()>::operator()<, void>() (functional:484)
==6524==    by 0x146E37: std::_Function_handler<void (), std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()> >::_M_invoke(std::_Any_data const&) (std_function.h:297)
==6524==    by 0x1520E7: std::function<void ()>::operator()() const (std_function.h:687)
==6524==    by 0x14E8BB: CppUnit::TestCaller<gr::ccsds::qa_ccsds_demodulator>::runTest() (TestCaller.h:175)
==6524==    by 0x4CC5881: CppUnit::TestCaseMethodFunctor::operator()() const (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==    by 0x4CBBE62: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==    by 0x4CC29E4: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==
==6524== 0 bytes in 1 blocks are definitely lost in loss record 2 of 14
==6524==    at 0x48394DF: operator new[](unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==6524==    by 0x15666A: gr::ccsds::qa_ccsds_demodulator::bpsk_nrzm() (qa_ccsds_demodulator.cc:215)
==6524==    by 0x14D510: void std::__invoke_impl<void, void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>(std::__invoke_memfun_deref, void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&) (invoke.h:73)
==6524==    by 0x14C943: std::__invoke_result<void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>::type std::__invoke<void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>(void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&) (invoke.h:95)
==6524==    by 0x14B246: void std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()>::__call<void, , 0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) (functional:400)
==6524==    by 0x149B7A: void std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()>::operator()<, void>() (functional:484)
==6524==    by 0x146E37: std::_Function_handler<void (), std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()> >::_M_invoke(std::_Any_data const&) (std_function.h:297)
==6524==    by 0x1520E7: std::function<void ()>::operator()() const (std_function.h:687)
==6524==    by 0x14E8BB: CppUnit::TestCaller<gr::ccsds::qa_ccsds_demodulator>::runTest() (TestCaller.h:175)
==6524==    by 0x4CC5881: CppUnit::TestCaseMethodFunctor::operator()() const (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==    by 0x4CBBE62: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==    by 0x4CC29E4: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==
==6524== 0 bytes in 1 blocks are definitely lost in loss record 3 of 14
==6524==    at 0x48394DF: operator new[](unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==6524==    by 0x158296: gr::ccsds::qa_ccsds_demodulator::qpsk_uncoded() (qa_ccsds_demodulator.cc:277)
==6524==    by 0x14D510: void std::__invoke_impl<void, void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>(std::__invoke_memfun_deref, void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&) (invoke.h:73)
==6524==    by 0x14C943: std::__invoke_result<void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>::type std::__invoke<void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>(void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&) (invoke.h:95)
==6524==    by 0x14B246: void std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()>::__call<void, , 0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) (functional:400)
==6524==    by 0x149B7A: void std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()>::operator()<, void>() (functional:484)
==6524==    by 0x146E37: std::_Function_handler<void (), std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()> >::_M_invoke(std::_Any_data const&) (std_function.h:297)
==6524==    by 0x1520E7: std::function<void ()>::operator()() const (std_function.h:687)
==6524==    by 0x14E8BB: CppUnit::TestCaller<gr::ccsds::qa_ccsds_demodulator>::runTest() (TestCaller.h:175)
==6524==    by 0x4CC5881: CppUnit::TestCaseMethodFunctor::operator()() const (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==    by 0x4CBBE62: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==    by 0x4CC29E4: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==
==6524== 1,024 bytes in 1 blocks are definitely lost in loss record 9 of 14
==6524==    at 0x48394DF: operator new[](unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==6524==    by 0x152900: gr::ccsds::qa_ccsds_demodulator::bpsk_uncoded() (qa_ccsds_demodulator.cc:66)
==6524==    by 0x14D510: void std::__invoke_impl<void, void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>(std::__invoke_memfun_deref, void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&) (invoke.h:73)
==6524==    by 0x14C943: std::__invoke_result<void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>::type std::__invoke<void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>(void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&) (invoke.h:95)
==6524==    by 0x14B246: void std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()>::__call<void, , 0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) (functional:400)
==6524==    by 0x149B7A: void std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()>::operator()<, void>() (functional:484)
==6524==    by 0x146E37: std::_Function_handler<void (), std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()> >::_M_invoke(std::_Any_data const&) (std_function.h:297)
==6524==    by 0x1520E7: std::function<void ()>::operator()() const (std_function.h:687)
==6524==    by 0x14E8BB: CppUnit::TestCaller<gr::ccsds::qa_ccsds_demodulator>::runTest() (TestCaller.h:175)
==6524==    by 0x4CC5881: CppUnit::TestCaseMethodFunctor::operator()() const (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==    by 0x4CBBE62: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==    by 0x4CC29E4: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==
==6524== 1,024 bytes in 1 blocks are definitely lost in loss record 10 of 14
==6524==    at 0x48394DF: operator new[](unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==6524==    by 0x156158: gr::ccsds::qa_ccsds_demodulator::bpsk_nrzm() (qa_ccsds_demodulator.cc:192)
==6524==    by 0x14D510: void std::__invoke_impl<void, void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>(std::__invoke_memfun_deref, void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&) (invoke.h:73)
==6524==    by 0x14C943: std::__invoke_result<void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>::type std::__invoke<void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>(void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&) (invoke.h:95)
==6524==    by 0x14B246: void std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()>::__call<void, , 0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) (functional:400)
==6524==    by 0x149B7A: void std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()>::operator()<, void>() (functional:484)
==6524==    by 0x146E37: std::_Function_handler<void (), std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()> >::_M_invoke(std::_Any_data const&) (std_function.h:297)
==6524==    by 0x1520E7: std::function<void ()>::operator()() const (std_function.h:687)
==6524==    by 0x14E8BB: CppUnit::TestCaller<gr::ccsds::qa_ccsds_demodulator>::runTest() (TestCaller.h:175)
==6524==    by 0x4CC5881: CppUnit::TestCaseMethodFunctor::operator()() const (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==    by 0x4CBBE62: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==    by 0x4CC29E4: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==
==6524== 1,024 bytes in 1 blocks are definitely lost in loss record 11 of 14
==6524==    at 0x48394DF: operator new[](unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==6524==    by 0x157D84: gr::ccsds::qa_ccsds_demodulator::qpsk_uncoded() (qa_ccsds_demodulator.cc:254)
==6524==    by 0x14D510: void std::__invoke_impl<void, void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>(std::__invoke_memfun_deref, void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&) (invoke.h:73)
==6524==    by 0x14C943: std::__invoke_result<void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>::type std::__invoke<void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>(void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&) (invoke.h:95)
==6524==    by 0x14B246: void std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()>::__call<void, , 0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) (functional:400)
==6524==    by 0x149B7A: void std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()>::operator()<, void>() (functional:484)
==6524==    by 0x146E37: std::_Function_handler<void (), std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()> >::_M_invoke(std::_Any_data const&) (std_function.h:297)
==6524==    by 0x1520E7: std::function<void ()>::operator()() const (std_function.h:687)
==6524==    by 0x14E8BB: CppUnit::TestCaller<gr::ccsds::qa_ccsds_demodulator>::runTest() (TestCaller.h:175)
==6524==    by 0x4CC5881: CppUnit::TestCaseMethodFunctor::operator()() const (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==    by 0x4CBBE62: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==    by 0x4CC29E4: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==
==6524== 8,192 bytes in 1 blocks are definitely lost in loss record 12 of 14
==6524==    at 0x48394DF: operator new[](unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==6524==    by 0x1529DE: gr::ccsds::qa_ccsds_demodulator::bpsk_uncoded() (qa_ccsds_demodulator.cc:70)
==6524==    by 0x14D510: void std::__invoke_impl<void, void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>(std::__invoke_memfun_deref, void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&) (invoke.h:73)
==6524==    by 0x14C943: std::__invoke_result<void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>::type std::__invoke<void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>(void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&) (invoke.h:95)
==6524==    by 0x14B246: void std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()>::__call<void, , 0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) (functional:400)
==6524==    by 0x149B7A: void std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()>::operator()<, void>() (functional:484)
==6524==    by 0x146E37: std::_Function_handler<void (), std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()> >::_M_invoke(std::_Any_data const&) (std_function.h:297)
==6524==    by 0x1520E7: std::function<void ()>::operator()() const (std_function.h:687)
==6524==    by 0x14E8BB: CppUnit::TestCaller<gr::ccsds::qa_ccsds_demodulator>::runTest() (TestCaller.h:175)
==6524==    by 0x4CC5881: CppUnit::TestCaseMethodFunctor::operator()() const (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==    by 0x4CBBE62: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==    by 0x4CC29E4: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==
==6524== 8,192 bytes in 1 blocks are definitely lost in loss record 13 of 14
==6524==    at 0x48394DF: operator new[](unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==6524==    by 0x156236: gr::ccsds::qa_ccsds_demodulator::bpsk_nrzm() (qa_ccsds_demodulator.cc:196)
==6524==    by 0x14D510: void std::__invoke_impl<void, void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>(std::__invoke_memfun_deref, void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&) (invoke.h:73)
==6524==    by 0x14C943: std::__invoke_result<void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>::type std::__invoke<void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>(void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&) (invoke.h:95)
==6524==    by 0x14B246: void std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()>::__call<void, , 0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) (functional:400)
==6524==    by 0x149B7A: void std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()>::operator()<, void>() (functional:484)
==6524==    by 0x146E37: std::_Function_handler<void (), std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()> >::_M_invoke(std::_Any_data const&) (std_function.h:297)
==6524==    by 0x1520E7: std::function<void ()>::operator()() const (std_function.h:687)
==6524==    by 0x14E8BB: CppUnit::TestCaller<gr::ccsds::qa_ccsds_demodulator>::runTest() (TestCaller.h:175)
==6524==    by 0x4CC5881: CppUnit::TestCaseMethodFunctor::operator()() const (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==    by 0x4CBBE62: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==    by 0x4CC29E4: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==
==6524== 8,192 bytes in 1 blocks are definitely lost in loss record 14 of 14
==6524==    at 0x48394DF: operator new[](unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==6524==    by 0x157E62: gr::ccsds::qa_ccsds_demodulator::qpsk_uncoded() (qa_ccsds_demodulator.cc:258)
==6524==    by 0x14D510: void std::__invoke_impl<void, void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>(std::__invoke_memfun_deref, void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&) (invoke.h:73)
==6524==    by 0x14C943: std::__invoke_result<void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>::type std::__invoke<void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&>(void (gr::ccsds::qa_ccsds_demodulator::*&)(), gr::ccsds::qa_ccsds_demodulator*&) (invoke.h:95)
==6524==    by 0x14B246: void std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()>::__call<void, , 0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) (functional:400)
==6524==    by 0x149B7A: void std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()>::operator()<, void>() (functional:484)
==6524==    by 0x146E37: std::_Function_handler<void (), std::_Bind<void (gr::ccsds::qa_ccsds_demodulator::*(gr::ccsds::qa_ccsds_demodulator*))()> >::_M_invoke(std::_Any_data const&) (std_function.h:297)
==6524==    by 0x1520E7: std::function<void ()>::operator()() const (std_function.h:687)
==6524==    by 0x14E8BB: CppUnit::TestCaller<gr::ccsds::qa_ccsds_demodulator>::runTest() (TestCaller.h:175)
==6524==    by 0x4CC5881: CppUnit::TestCaseMethodFunctor::operator()() const (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==    by 0x4CBBE62: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==    by 0x4CC29E4: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (in /usr/lib/x86_64-linux-gnu/libcppunit-1.14.so.0.0.0)
==6524==
==6524== LEAK SUMMARY:
==6524==    definitely lost: 27,648 bytes in 9 blocks
==6524==    indirectly lost: 0 bytes in 0 blocks
==6524==      possibly lost: 0 bytes in 0 blocks
==6524==    still reachable: 40 bytes in 5 blocks
==6524==         suppressed: 0 bytes in 0 blocks
==6524== Reachable blocks (those to which a pointer was found) are not shown.
==6524== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==6524==
==6524== For counts of detected and suppressed errors, rerun with: -v
==6524== ERROR SUMMARY: 9 errors from 9 contexts (suppressed: 0 from 0)


50% tests passed, 1 tests failed out of 2

Total Test time (real) = 656.71 sec

The following tests FAILED:
          2 - memcheck_test_ccsds (Failed)
Errors while running CTest
make: *** [Makefile:86: test] Error 8
1 Like

Ok, this is quite odd. Please raise an issue on the repo with this output so we can check it. Interestingly, the CI makes the same test and passes…