diff --git a/tests/od/Makefile b/tests/od/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..72371e77bf870ec72ef6c87dbf5be8a0b96ced00 --- /dev/null +++ b/tests/od/Makefile @@ -0,0 +1,25 @@ +# name of your application +APPLICATION = od + +# If no BOARD is found in the environment, use this default: +BOARD ?= native + +# This has to be the absolute path to the RIOT base directory: +RIOTBASE ?= $(CURDIR)/../.. + +USEMODULE += od + +# Comment this out to disable code in RIOT that does safety checking +# which is not needed in a production environment but helps in the +# development process: +CFLAGS += -DDEVELHELP + +# Change this to 0 show compiler invocation lines by default: +QUIET ?= 1 + +include $(RIOTBASE)/Makefile.include + +test: +# `testrunner` calls `make term` recursively, results in duplicated `TERMFLAGS`. +# So clears `TERMFLAGS` before run. + TERMFLAGS= tests/01-run.py diff --git a/tests/od/main.c b/tests/od/main.c new file mode 100644 index 0000000000000000000000000000000000000000..08a876e5c71909c9e56352689195118ba3ebe5a2 --- /dev/null +++ b/tests/od/main.c @@ -0,0 +1,186 @@ +/* + * Copyright (C) 2016 Freie Universität Berlin + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup tests + * @{ + * + * @file + * @brief Tests od module. + * + * @author Martine Lenders <mlenders@inf.fu-berlin.de> + * + * @} + */ + +#include <stdio.h> + +#include "od.h" + +#define CALL(fn) puts(#fn); fn + +static const char short_str[] = "AB"; +static const char long_str[] = "\xff,a\xff.bcdefghijklmnop"; + +int main(void) +{ + /* test data width vs. output width discrepency */ + CALL(od(short_str, sizeof(short_str), OD_WIDTH_DEFAULT, 0)); + + /* Test different output width in default configuration*/ + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, 0)); + CALL(od(long_str, sizeof(long_str), 4, 0)); + CALL(od(long_str, sizeof(long_str), 3, 0)); + CALL(od(long_str, sizeof(long_str), 8, 0)); + + /* Test different address formats in default configuration */ + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_ADDRESS_OCTAL)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_ADDRESS_HEX)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_ADDRESS_DECIMAL)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_ADDRESS_NONE)); + + /* Test octal data format with different address formats */ + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_OCTAL)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_ADDRESS_OCTAL | OD_FLAGS_BYTES_OCTAL)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_ADDRESS_HEX | OD_FLAGS_BYTES_OCTAL)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_ADDRESS_DECIMAL | OD_FLAGS_BYTES_OCTAL)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_ADDRESS_NONE | OD_FLAGS_BYTES_OCTAL)); + + /* Test different data formats */ + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_CHAR)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_INT)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_DECIMAL)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_UINT)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_HEX)); + + /* Test octal byte-wise output with different output lengths */ + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_OCTAL | OD_FLAGS_LENGTH_1)); + CALL(od(long_str, sizeof(long_str), 4, + OD_FLAGS_BYTES_OCTAL | OD_FLAGS_LENGTH_1)); + CALL(od(long_str, sizeof(long_str), 3, + OD_FLAGS_BYTES_OCTAL | OD_FLAGS_LENGTH_1)); + CALL(od(long_str, sizeof(long_str), 8, + OD_FLAGS_BYTES_OCTAL | OD_FLAGS_LENGTH_1)); + + /* Test different data formats with byte-wise output */ + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_CHAR | OD_FLAGS_LENGTH_1)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_INT | OD_FLAGS_LENGTH_1)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_DECIMAL | OD_FLAGS_LENGTH_1)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_UINT | OD_FLAGS_LENGTH_1)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_HEX | OD_FLAGS_LENGTH_1)); + + /* Test octal 2-byte-wise output with different output lengths */ + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_OCTAL | OD_FLAGS_LENGTH_2)); + CALL(od(long_str, sizeof(long_str), 4, + OD_FLAGS_BYTES_OCTAL | OD_FLAGS_LENGTH_2)); + CALL(od(long_str, sizeof(long_str), 3, + OD_FLAGS_BYTES_OCTAL | OD_FLAGS_LENGTH_2)); + CALL(od(long_str, sizeof(long_str), 8, + OD_FLAGS_BYTES_OCTAL | OD_FLAGS_LENGTH_2)); + + /* Test 2-byte-char output (should just return normal char output) */ + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_CHAR | OD_FLAGS_LENGTH_2)); + + /* Test 2-byte-int output with different output widths */ + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_INT | OD_FLAGS_LENGTH_2)); + CALL(od(long_str, sizeof(long_str), 5, + OD_FLAGS_BYTES_INT | OD_FLAGS_LENGTH_2)); + + /* Test 2-byte-decimal output with different output widths */ + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_DECIMAL | OD_FLAGS_LENGTH_2)); + CALL(od(long_str, sizeof(long_str), 5, + OD_FLAGS_BYTES_DECIMAL | OD_FLAGS_LENGTH_2)); + + /* Test 2-byte-unsigned-int output with different output widths */ + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_UINT | OD_FLAGS_LENGTH_2)); + CALL(od(long_str, sizeof(long_str), 5, + OD_FLAGS_BYTES_UINT | OD_FLAGS_LENGTH_2)); + + /* Test 2-byte-hex output with different output widths */ + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_HEX | OD_FLAGS_LENGTH_2)); + CALL(od(long_str, sizeof(long_str), 5, + OD_FLAGS_BYTES_HEX | OD_FLAGS_LENGTH_2)); + + /* Test different 4-byte-wise byte formats */ + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_INT | OD_FLAGS_LENGTH_4)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_DECIMAL | OD_FLAGS_LENGTH_4)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_UINT | OD_FLAGS_LENGTH_4)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_HEX | OD_FLAGS_LENGTH_4)); + + /* Test different 8-byte-wise byte formats */ + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_INT | OD_FLAGS_LENGTH_8)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_DECIMAL | OD_FLAGS_LENGTH_8)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_UINT | OD_FLAGS_LENGTH_8)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_HEX | OD_FLAGS_LENGTH_8)); + + /* Test different char-wise byte formats */ + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_INT | OD_FLAGS_LENGTH_CHAR)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_DECIMAL | OD_FLAGS_LENGTH_CHAR)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_UINT | OD_FLAGS_LENGTH_CHAR)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_HEX | OD_FLAGS_LENGTH_CHAR)); + + /* Test different short-wise byte formats */ + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_INT | OD_FLAGS_LENGTH_SHORT)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_DECIMAL | OD_FLAGS_LENGTH_SHORT)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_UINT | OD_FLAGS_LENGTH_SHORT)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_HEX | OD_FLAGS_LENGTH_SHORT)); + + /* Test different long-wise byte formats */ + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_INT | OD_FLAGS_LENGTH_LONG)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_DECIMAL | OD_FLAGS_LENGTH_LONG)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_UINT | OD_FLAGS_LENGTH_LONG)); + CALL(od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, + OD_FLAGS_BYTES_HEX | OD_FLAGS_LENGTH_LONG)); + + return 0; +} diff --git a/tests/od/tests/01-run.py b/tests/od/tests/01-run.py new file mode 100755 index 0000000000000000000000000000000000000000..a7d9afa8e1f2676891cf3b92038bf9f0d7e34cdd --- /dev/null +++ b/tests/od/tests/01-run.py @@ -0,0 +1,284 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2016 Freie Universität Berlin +# +# This file is subject to the terms and conditions of the GNU Lesser +# General Public License v2.1. See the file LICENSE in the top level +# directory for more details. + +import os +import sys + +sys.path.append(os.path.join(os.environ['RIOTBASE'], 'dist/tools/testrunner')) +import testrunner + +def testfunc(child): + # test data width vs. output width discrepency + child.expect_exact(r'od(short_str, sizeof(short_str), OD_WIDTH_DEFAULT, 0)') + child.expect_exact(r'000000000 000000041101') + + # Test different output width in default configuration + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, 0)') + child.expect_exact(r'000000000 037730226377 014430661056 015031663145 015432665151') + child.expect_exact(r'000000020 016033667155 000000000000') + child.expect_exact(r'od(long_str, sizeof(long_str), 4, 0)') + child.expect_exact(r'000000000 037730226377') + child.expect_exact(r'000000004 014430661056') + child.expect_exact(r'000000010 015031663145') + child.expect_exact(r'000000014 015432665151') + child.expect_exact(r'000000020 016033667155') + child.expect_exact(r'000000024 000000000000') + child.expect_exact(r'od(long_str, sizeof(long_str), 3, 0)') + child.expect_exact(r'000000000 037730226377') + child.expect_exact(r'000000004 014430661056') + child.expect_exact(r'000000010 015031663145') + child.expect_exact(r'000000014 015432665151') + child.expect_exact(r'000000020 016033667155') + child.expect_exact(r'000000024 000000000000') + child.expect_exact(r'od(long_str, sizeof(long_str), 8, 0)') + child.expect_exact(r'000000000 037730226377 014430661056') + child.expect_exact(r'000000010 015031663145 015432665151') + child.expect_exact(r'000000020 016033667155 000000000000') + + # Test different address formats in default configuration + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_ADDRESS_OCTAL)') + child.expect_exact(r'000000000 037730226377 014430661056 015031663145 015432665151') + child.expect_exact(r'000000020 016033667155 000000000000') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_ADDRESS_HEX)') + child.expect_exact(r'000000 037730226377 014430661056 015031663145 015432665151') + child.expect_exact(r'000010 016033667155 000000000000') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_ADDRESS_DECIMAL)') + child.expect_exact(r'0000000 037730226377 014430661056 015031663145 015432665151') + child.expect_exact(r'0000016 016033667155 000000000000') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_ADDRESS_NONE)') + child.expect_exact(r' 037730226377 014430661056 015031663145 015432665151') + child.expect_exact(r' 016033667155 000000000000') + + # Test octal data format with different address formats + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_OCTAL)') + child.expect_exact(r'000000000 037730226377 014430661056 015031663145 015432665151') + child.expect_exact(r'000000020 016033667155 000000000000') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_ADDRESS_OCTAL | OD_FLAGS_BYTES_OCTAL)') + child.expect_exact(r'000000000 037730226377 014430661056 015031663145 015432665151') + child.expect_exact(r'000000020 016033667155 000000000000') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_ADDRESS_HEX | OD_FLAGS_BYTES_OCTAL)') + child.expect_exact(r'000000 037730226377 014430661056 015031663145 015432665151') + child.expect_exact(r'000010 016033667155 000000000000') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_ADDRESS_DECIMAL | OD_FLAGS_BYTES_OCTAL)') + child.expect_exact(r'0000000 037730226377 014430661056 015031663145 015432665151') + child.expect_exact(r'0000016 016033667155 000000000000') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_ADDRESS_NONE | OD_FLAGS_BYTES_OCTAL)') + child.expect_exact(r' 037730226377 014430661056 015031663145 015432665151') + child.expect_exact(r' 016033667155 000000000000') + + # Test different data formats + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_CHAR)') + child.expect_exact(r'000000000 377 , a 377 . b c d e f g h i j k l') + child.expect_exact(r'000000020 m n o p \0') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_INT)') + child.expect_exact(r'000000000 -10408705 1684234798 1751606885 1818978921') + child.expect_exact(r'000000020 1886350957 0') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_DECIMAL)') + child.expect_exact(r'000000000 -10408705 1684234798 1751606885 1818978921') + child.expect_exact(r'000000020 1886350957 0') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_UINT)') + child.expect_exact(r'000000000 4284558591 1684234798 1751606885 1818978921') + child.expect_exact(r'000000020 1886350957 0') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_HEX)') + child.expect_exact(r'000000000 ff612cff 6463622e 68676665 6c6b6a69') + child.expect_exact(r'000000020 706f6e6d 00000000') + + # Test octal byte-wise output with different output lengths + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_OCTAL | OD_FLAGS_LENGTH_1)') + child.expect_exact(r'000000000 377 054 141 377 056 142 143 144 145 146 147 150 151 152 153 154') + child.expect_exact(r'000000020 155 156 157 160 000') + child.expect_exact(r'od(long_str, sizeof(long_str), 4, OD_FLAGS_BYTES_OCTAL | OD_FLAGS_LENGTH_1)') + child.expect_exact(r'000000000 377 054 141 377') + child.expect_exact(r'000000004 056 142 143 144') + child.expect_exact(r'000000010 145 146 147 150') + child.expect_exact(r'000000014 151 152 153 154') + child.expect_exact(r'000000020 155 156 157 160') + child.expect_exact(r'000000024 000') + child.expect_exact(r'od(long_str, sizeof(long_str), 3, OD_FLAGS_BYTES_OCTAL | OD_FLAGS_LENGTH_1)') + child.expect_exact(r'000000000 377 054 141') + child.expect_exact(r'000000003 377 056 142') + child.expect_exact(r'000000006 143 144 145') + child.expect_exact(r'000000011 146 147 150') + child.expect_exact(r'000000014 151 152 153') + child.expect_exact(r'000000017 154 155 156') + child.expect_exact(r'000000022 157 160 000') + child.expect_exact(r'od(long_str, sizeof(long_str), 8, OD_FLAGS_BYTES_OCTAL | OD_FLAGS_LENGTH_1)') + child.expect_exact(r'000000000 377 054 141 377 056 142 143 144') + child.expect_exact(r'000000010 145 146 147 150 151 152 153 154') + child.expect_exact(r'000000020 155 156 157 160 000') + + # Test different data formats with byte-wise output + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_CHAR | OD_FLAGS_LENGTH_1)') + child.expect_exact(r'000000000 377 , a 377 . b c d e f g h i j k l') + child.expect_exact(r'000000020 m n o p \0') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_INT | OD_FLAGS_LENGTH_1)') + child.expect_exact(r'000000000 -1 44 97 -1 46 98 99 100 101 102 103 104 105 106 107 108') + child.expect_exact(r'000000020 109 110 111 112 0') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_DECIMAL | OD_FLAGS_LENGTH_1)') + child.expect_exact(r'000000000 -1 44 97 -1 46 98 99 100 101 102 103 104 105 106 107 108') + child.expect_exact(r'000000020 109 110 111 112 0') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_UINT | OD_FLAGS_LENGTH_1)') + child.expect_exact(r'000000000 255 44 97 255 46 98 99 100 101 102 103 104 105 106 107 108') + child.expect_exact(r'000000020 109 110 111 112 0') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_HEX | OD_FLAGS_LENGTH_1)') + child.expect_exact(r'000000000 ff 2c 61 ff 2e 62 63 64 65 66 67 68 69 6a 6b 6c') + child.expect_exact(r'000000020 6d 6e 6f 70 00') + + # Test octal 2-byte-wise output with different output lengths + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_OCTAL | OD_FLAGS_LENGTH_2)') + child.expect_exact(r'000000000 026377 177541 061056 062143 063145 064147 065151 066153') + child.expect_exact(r'000000020 067155 070157 000000') + child.expect_exact(r'od(long_str, sizeof(long_str), 4, OD_FLAGS_BYTES_OCTAL | OD_FLAGS_LENGTH_2)') + child.expect_exact(r'000000000 026377 177541') + child.expect_exact(r'000000004 061056 062143') + child.expect_exact(r'000000010 063145 064147') + child.expect_exact(r'000000014 065151 066153') + child.expect_exact(r'000000020 067155 070157') + child.expect_exact(r'000000024 000000') + child.expect_exact(r'od(long_str, sizeof(long_str), 3, OD_FLAGS_BYTES_OCTAL | OD_FLAGS_LENGTH_2)') + child.expect_exact(r'000000000 026377') + child.expect_exact(r'000000002 177541') + child.expect_exact(r'000000004 061056') + child.expect_exact(r'000000006 062143') + child.expect_exact(r'000000010 063145') + child.expect_exact(r'000000012 064147') + child.expect_exact(r'000000014 065151') + child.expect_exact(r'000000016 066153') + child.expect_exact(r'000000020 067155') + child.expect_exact(r'000000022 070157') + child.expect_exact(r'000000024 000000') + child.expect_exact(r'od(long_str, sizeof(long_str), 8, OD_FLAGS_BYTES_OCTAL | OD_FLAGS_LENGTH_2)') + child.expect_exact(r'000000000 026377 177541 061056 062143') + child.expect_exact(r'000000010 063145 064147 065151 066153') + child.expect_exact(r'000000020 067155 070157 000000') + + # Test 2-byte-char output (should just return normal char output) + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_CHAR | OD_FLAGS_LENGTH_2)') + child.expect_exact(r'000000000 377 , a 377 . b c d e f g h i j k l') + child.expect_exact(r'000000020 m n o p \0') + + # Test 2-byte-int output with different output widths + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_INT | OD_FLAGS_LENGTH_2)') + child.expect_exact(r'000000000 11519 -159 25134 25699 26213 26727 27241 27755') + child.expect_exact(r'000000020 28269 28783 0') + child.expect_exact(r'od(long_str, sizeof(long_str), 5, OD_FLAGS_BYTES_INT | OD_FLAGS_LENGTH_2)') + child.expect_exact(r'000000000 11519 -159') + child.expect_exact(r'000000004 25134 25699') + child.expect_exact(r'000000010 26213 26727') + child.expect_exact(r'000000014 27241 27755') + child.expect_exact(r'000000020 28269 28783') + child.expect_exact(r'000000024 0') + + # Test 2-byte-decimal output with different output widths + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_DECIMAL | OD_FLAGS_LENGTH_2)') + child.expect_exact(r'000000000 11519 -159 25134 25699 26213 26727 27241 27755') + child.expect_exact(r'000000020 28269 28783 0') + child.expect_exact(r'od(long_str, sizeof(long_str), 5, OD_FLAGS_BYTES_DECIMAL | OD_FLAGS_LENGTH_2)') + child.expect_exact(r'000000000 11519 -159') + child.expect_exact(r'000000004 25134 25699') + child.expect_exact(r'000000010 26213 26727') + child.expect_exact(r'000000014 27241 27755') + child.expect_exact(r'000000020 28269 28783') + child.expect_exact(r'000000024 0') + + # Test 2-byte-unsigned-int output with different output widths + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_UINT | OD_FLAGS_LENGTH_2)') + child.expect_exact(r'000000000 11519 65377 25134 25699 26213 26727 27241 27755') + child.expect_exact(r'000000020 28269 28783 0') + child.expect_exact(r'od(long_str, sizeof(long_str), 5, OD_FLAGS_BYTES_UINT | OD_FLAGS_LENGTH_2)') + child.expect_exact(r'000000000 11519 65377') + child.expect_exact(r'000000004 25134 25699') + child.expect_exact(r'000000010 26213 26727') + child.expect_exact(r'000000014 27241 27755') + child.expect_exact(r'000000020 28269 28783') + child.expect_exact(r'000000024 0') + + # Test 2-byte-hex output with different output widths + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_HEX | OD_FLAGS_LENGTH_2)') + child.expect_exact(r'000000000 2cff ff61 622e 6463 6665 6867 6a69 6c6b') + child.expect_exact(r'000000020 6e6d 706f 0000') + child.expect_exact(r'od(long_str, sizeof(long_str), 5, OD_FLAGS_BYTES_HEX | OD_FLAGS_LENGTH_2)') + child.expect_exact(r'000000000 2cff ff61') + child.expect_exact(r'000000004 622e 6463') + child.expect_exact(r'000000010 6665 6867') + child.expect_exact(r'000000014 6a69 6c6b') + child.expect_exact(r'000000020 6e6d 706f') + child.expect_exact(r'000000024 0000') + + # Test different 4-byte-wise byte formats + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_INT | OD_FLAGS_LENGTH_4)') + child.expect_exact(r'000000000 -10408705 1684234798 1751606885 1818978921') + child.expect_exact(r'000000020 1886350957 0') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_DECIMAL | OD_FLAGS_LENGTH_4)') + child.expect_exact(r'000000000 -10408705 1684234798 1751606885 1818978921') + child.expect_exact(r'000000020 1886350957 0') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_UINT | OD_FLAGS_LENGTH_4)') + child.expect_exact(r'000000000 4284558591 1684234798 1751606885 1818978921') + child.expect_exact(r'000000020 1886350957 0') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_HEX | OD_FLAGS_LENGTH_4)') + child.expect_exact(r'000000000 ff612cff 6463622e 68676665 6c6b6a69') + child.expect_exact(r'000000020 706f6e6d 00000000') + + # Test different 8-byte-wise byte formats + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_INT | OD_FLAGS_LENGTH_8)') + child.expect_exact(r'000000000 7233733380479724799 7812454979559974501') + child.expect_exact(r'000000020 1886350957') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_DECIMAL | OD_FLAGS_LENGTH_8)') + child.expect_exact(r'000000000 7233733380479724799 7812454979559974501') + child.expect_exact(r'000000020 1886350957') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_UINT | OD_FLAGS_LENGTH_8)') + child.expect_exact(r'000000000 7233733380479724799 7812454979559974501') + child.expect_exact(r'000000020 1886350957') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_HEX | OD_FLAGS_LENGTH_8)') + child.expect_exact(r'000000000 6463622eff612cff 6c6b6a6968676665') + child.expect_exact(r'000000020 00000000706f6e6d') + + # Test different char-wise byte formats + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_INT | OD_FLAGS_LENGTH_CHAR)') + child.expect_exact(r'000000000 -1 44 97 -1 46 98 99 100 101 102 103 104 105 106 107 108') + child.expect_exact(r'000000020 109 110 111 112 0') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_DECIMAL | OD_FLAGS_LENGTH_CHAR)') + child.expect_exact(r'000000000 -1 44 97 -1 46 98 99 100 101 102 103 104 105 106 107 108') + child.expect_exact(r'000000020 109 110 111 112 0') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_UINT | OD_FLAGS_LENGTH_CHAR)') + child.expect_exact(r'000000000 255 44 97 255 46 98 99 100 101 102 103 104 105 106 107 108') + child.expect_exact(r'000000020 109 110 111 112 0') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_HEX | OD_FLAGS_LENGTH_CHAR)') + child.expect_exact(r'000000000 ff 2c 61 ff 2e 62 63 64 65 66 67 68 69 6a 6b 6c') + child.expect_exact(r'000000020 6d 6e 6f 70 00') + + # Test different short-wise byte formats + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_INT | OD_FLAGS_LENGTH_SHORT)') + child.expect_exact(r'000000000 11519 -159 25134 25699 26213 26727 27241 27755') + child.expect_exact(r'000000020 28269 28783 0') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_DECIMAL | OD_FLAGS_LENGTH_SHORT)') + child.expect_exact(r'000000000 11519 -159 25134 25699 26213 26727 27241 27755') + child.expect_exact(r'000000020 28269 28783 0') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_UINT | OD_FLAGS_LENGTH_SHORT)') + child.expect_exact(r'000000000 11519 65377 25134 25699 26213 26727 27241 27755') + child.expect_exact(r'000000020 28269 28783 0') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_HEX | OD_FLAGS_LENGTH_SHORT)') + child.expect_exact(r'000000000 2cff ff61 622e 6463 6665 6867 6a69 6c6b') + child.expect_exact(r'000000020 6e6d 706f 0000') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_INT | OD_FLAGS_LENGTH_LONG)') + child.expect_exact(r'000000000 -10408705 1684234798 1751606885 1818978921') + child.expect_exact(r'000000020 1886350957 0') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_DECIMAL | OD_FLAGS_LENGTH_LONG)') + child.expect_exact(r'000000000 -10408705 1684234798 1751606885 1818978921') + child.expect_exact(r'000000020 1886350957 0') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_UINT | OD_FLAGS_LENGTH_LONG)') + child.expect_exact(r'000000000 4284558591 1684234798 1751606885 1818978921') + child.expect_exact(r'000000020 1886350957 0') + child.expect_exact(r'od(long_str, sizeof(long_str), OD_WIDTH_DEFAULT, OD_FLAGS_BYTES_HEX | OD_FLAGS_LENGTH_LONG)') + child.expect_exact(r'000000000 ff612cff 6463622e 68676665 6c6b6a69') + child.expect_exact(r'000000020 706f6e6d 00000000') + + print("All tests successful") + +if __name__ == "__main__": + sys.exit(testrunner.run(testfunc, timeout=1, echo=False))