radare2/test
pancake a3f8fef949 Fix type db lookups for __-prefixed names and comma-typed args ##types
r_type_func_* always stripped the leading __ from the function name, so
a registered __adddf3 could never be found, and the argument type/name
split happened at the first comma, breaking template and tuple types
such as std::map<K, V> or &[(u8, u8)]. Only strip the prefix when the
exact name is not registered and split at the last comma, since names
never contain one. This makes DWARF prototypes for such functions match
their stored record and get linked instead of re-minting a suffixed copy
on every reimport.
2026-08-16 13:39:16 +02:00
..
bench Add quickjs benchmark script 2022-01-06 22:54:55 +01:00
db Fix type db lookups for __-prefixed names and comma-typed args ##types 2026-08-16 13:39:16 +02:00
fuzz Clarify scalar and packed binary language types ##bin 2026-08-14 16:34:11 +02:00
indent Introduce the new indent suite ##test 2026-03-07 09:55:49 +01:00
notworking_db Move test/new/* into test/ ##tests (#16511) 2020-04-13 19:49:23 +02:00
perf Fix possible null deref in the elf parser related to bin.limits 2023-08-18 17:28:01 +02:00
scripts Theme fixes (typo in catppuccin) 2025-03-28 07:30:38 +01:00
unit Fix xref cleanup ordering ##crash 2026-08-15 17:53:00 +02:00
.gitignore Add writedwarf command tests 2026-08-13 20:56:22 +02:00
Makefile Introduce the new indent suite ##test 2026-03-07 09:55:49 +01:00
README.md Fix flaky io/resize tests 2025-01-24 18:03:13 +01:00
run_unit.sh Many improvements in the V testsuite (#15722) ##test 2019-12-29 19:26:15 +01:00

Radare2 Regression Test Suite

A set of regression tests for Radare2 (http://radare.org).

Originally based on work by and now in collaboration with pancake.

Directory Hierarchy

  • db/: The tests sources
  • unit/: Unit tests (written in C, using minunit).
  • fuzz/: Fuzzing helper scripts
  • bins/: Sample binaries (fetched from the external repository)

Requirements

  • Radare2 installed (and in $PATH or set the R2 environment).
  • r2pipe tests require Python and r2pipe (in CI uses python3 and r2pipe from git, but users may be good with latests releases)
  • Valgrind (optional).

Usage

  • To run all tests, use make -k all.
  • To execute only the unit tests use make -k unit-tests.

Failure Levels

A test can have one of the following results:

  • success: The test passed, and that was expected.
  • fixed: The test passed, but failure was expected.
  • broken: Failure was expected, and happened.
  • failed: The test failed unexpectedly. This is a regression.

Reporting a Bug

Please do not post Radare2 bugs on the r2-regressions github tracker. Instead use the official r2 tracker:

https://github.com/radareorg/radare2/issues?state=open

Test Types

There are different types of tests, asm, json and cmd. Those files are located under the db/ directory.

Assembly tests

The asm are used to verify that the assembler and disassembler for an instruction + arch works properly.

Example tests for db/asm/*:

General format:
type "assembly" opcode [offset]

	type:
		* a stands for assemble
		* d stands for disassemble
		* B stands for broken
		* E stands for cfg.bigendian=true

	offset:
		Some architectures are going to assemble an instruction differently depending
		on the offset it's written to. Optional.

Examples:
a "ret" c3
d "ret" c3
a "nop" 90 # Assembly is correct
dB "nopppp" 90 # Disassembly test is broken

You can merge lines:

adB "nop" 90

acts the same as

aB "nop" 90
dB "nop" 90

    The filename is very important. It is used to tell radare which architecture to use.

    Format:
    arch[[_cpu]_bits]

Example:
x86_32 means -a x86 -b 32
    arm_v7_64 means what it means

JSON tests

The JSON tests db/json are executed on 3 standard files (1 ELF, 1 MachO, 1 PE). The tests need to be working on the 3 files to pass.

Commands tests

Example commands tests for the other db/ folders:

NAME=test_db
FILE=bins/elf/ls
CMDS=<<EOF
pd 4
EOF
EXPECT=<<EOF
        ;-- main:
        ;-- entry0:
        ;-- func.100001174:
        0x100001174      55             Push rbp
        0x100001175      4889e5         Mov  rbp, rsp
        0x100001178      4157           Push r15
EOF
RUN
  • NAME is the name of the test, it must be unique
  • FILE is the path of the file used for the test
  • ARGS (optional) are the command line argument passed to r2 (e.g -b 16)
  • CMDS are the commands to be executed by the test
  • EXPECT is the expected output of the test
  • BROKEN (optional) is 1 if the tests is expected to be fail, 0 otherwise
  • TIMEOUT (optional) is the number of seconds to wait before considering the test timeout

You must end the test by adding RUN keyword

Advices

  • For portability reasons Do not use shell pipes, use ~
  • dont use pd if not necessary, use pi
  • All tests use the UTC timezone for consistency.

License

The test files are licensed under GPL 3 (or later).