/* This program is part of the TACLeBench benchmark suite. Version V 2.0 Name: ammunition Author: Vladimir Makarov Function: Tests reusable packages bits and arith bits: Work with bit strings (copying, moving, setting, testing, comparison). arith: Implementing host machine-independently arbitrary precision integer numbers arithmetic. The implementation of the package functions are not sufficiently efficient in order to use for run-time. The package functions are oriented to implement constant-folding in compilers, cross-compilers. Source: DINO programming language repository https://github.com/dino-lang/dino/ Changes: no major functional changes License: GPL 2 and LGPL 2 */ #include "ammunition_stdio.h" #include "ammunition_stdlib.h" #include "ammunition_string.h" #include "arithm.h" #include "bits.h" /* Forward declaration of functions */ // Wasm loop bounds __attribute__((import_module("__pragma"), import_name("loopbound"))) extern void __pragma_loopbound(unsigned int min_bound, unsigned int max_bound); void ammunition_reset_str_bits(char *str, char *s); void ammunition_reset_str_arithm(char *str, char *s, char *d, char *e, char *g); int ammunition_bits_test(); int ammunition_arithm_test(); void ammunition_init(void); int ammunition_return(void); __attribute__((noinline)) __attribute__((export_name("entrypoint"))) void ammunition_main(void); __attribute__((noinline)) __attribute__((export_name("main"))) int main(void); /* Forward declaration of global variables */ int ammunition_result; /* Core functions */ void ammunition_reset_str_bits(char *str, char *s) { int i; __pragma_loopbound(8, 8); for (i = 0; i < 8; i++) { str[i] = 0; s[i] = 0; } } void ammunition_reset_str_arithm(char *str, char *s, char *d, char *e, char *g) { int i; __pragma_loopbound(20, 20); for (i = 0; i < 20; i++) { str[i] = 0; s[i] = 0; } __pragma_loopbound(4, 4); for (i = 0; i < 4; i++) { d[i] = 0; e[i] = 0; } __pragma_loopbound(6, 6); for (i = 0; i < 6; i++) g[i] = 0; } int ammunition_bits_test() { char str[8]; char str1[8]; int result = 0; unsigned int i, j; /* Test 1 */ ammunition_reset_str_bits(str, str1); __pragma_loopbound(64, 64); for (i = 0; i < sizeof(str) * CHAR_BIT; i++) { if (BIT(str, i)) result = 1; } __pragma_loopbound(64, 64); for (i = 0; i < sizeof(str) * CHAR_BIT; i++) { SET_BIT(str, i, 1); __pragma_loopbound(64, 64); for (j = 0; j < sizeof(str) * CHAR_BIT; j++) if (j <= i) { if (BIT(str, j) == 0) result = 1; } else if (BIT(str, j)) result = 1; } /* Test 2 */ ammunition_reset_str_bits(str, str1); __pragma_loopbound(64, 64); for (i = 0; i < sizeof(str) * CHAR_BIT; i++) if (!ammunition_is_zero_bit_string( str, i, (sizeof(str) * CHAR_BIT - i) / 2 + 1)) result = 1; ammunition_bit_string_set(str, 13, 1, 35); __pragma_loopbound(13, 13); for (i = 0; i < 13; i++) if (!ammunition_is_zero_bit_string(str, i, 13 - i)) result = 1; __pragma_loopbound(35, 35); for (i = 13; i < 48; i++) if (ammunition_is_zero_bit_string(str, i, 48 - i)) result = 1; __pragma_loopbound(16, 16); for (i = 48; i < sizeof(str) * CHAR_BIT; i++) if (!ammunition_is_zero_bit_string(str, i, sizeof(str) * CHAR_BIT - i)) result = 1; /* Test 3 */ ammunition_reset_str_bits(str, str1); __pragma_loopbound(42, 42); for (i = 0; i + i / 2 + 1 < sizeof(str) * CHAR_BIT; i++) { ammunition_bit_string_set(str, i, 1, i / 2 + 1); if (!ammunition_is_zero_bit_string(str, 0, i - 1)) result = 1; if (ammunition_is_zero_bit_string(str, i, i / 2 + 1)) result = 1; if (!ammunition_is_zero_bit_string( str, i + i / 2 + 1, sizeof(str) * CHAR_BIT - (i + i / 2 + 1))) result = 1; ammunition_bit_string_set(str, 0, 0, sizeof(str) * CHAR_BIT); } /* Test 4 */ ammunition_reset_str_bits(str, str1); ammunition_bit_string_set(str, 2, 1, 43); ammunition_bit_string_set(str1, 2, 1, 40); __pragma_loopbound(42, 42); for (i = 0; i < 42; i++) if (ammunition_bit_string_comparison(str, i, str1, i, 42 - i) != 0) result = 1; __pragma_loopbound(43, 43); for (i = 0; i < 43; i++) if (ammunition_bit_string_comparison(str, i, str1, i, sizeof(str) * CHAR_BIT - i) <= 0) result = 1; __pragma_loopbound(43, 43); for (i = 0; i < 43; i++) if (ammunition_bit_string_comparison(str1, i, str, i, sizeof(str) * CHAR_BIT - i) >= 0) result = 1; /* Test 5 */ ammunition_reset_str_bits(str, str1); ammunition_bit_string_set(str, 2, 1, 43); __pragma_loopbound(59, 59); for (i = 0; i + 5 < sizeof(str) * CHAR_BIT; i++) { ammunition_bit_string_copy(str1, i + 5, str, i, sizeof(str) * CHAR_BIT - i - 5); if (ammunition_bit_string_comparison( str1, i + 5, str, i, sizeof(str) * CHAR_BIT - i - 5) != 0) result = 1; } /* Test 6 */ ammunition_reset_str_bits(str, str1); ammunition_bit_string_set(str, 2, 1, 43); ammunition_bit_string_set(str1, 2, 1, 43); __pragma_loopbound(59, 59); for (i = 0; i + 5 < sizeof(str) * CHAR_BIT; i++) { ammunition_bit_string_set(str, 0, 0, sizeof(str) * CHAR_BIT); ammunition_bit_string_set(str, 2, 1, 43); ammunition_bit_string_move(str, i + 5, str, i, sizeof(str) * CHAR_BIT - i - 5); if (ammunition_bit_string_comparison( str, i + 5, str1, i, sizeof(str) * CHAR_BIT - i - 5) != 0) result = 1; } /* Test 7 */ ammunition_reset_str_bits(str, str1); ammunition_bit_string_set(str, 2, 1, 43); ammunition_bit_string_set(str1, 2, 1, 43); __pragma_loopbound(59, 59); for (i = 0; i + 5 < sizeof(str) * CHAR_BIT; i++) { ammunition_bit_string_set(str, 0, 0, sizeof(str) * CHAR_BIT); ammunition_bit_string_set(str, 2, 1, 43); ammunition_bit_string_move(str, i, str, i + 5, sizeof(str) * CHAR_BIT - i - 5); if (ammunition_bit_string_comparison( str, i, str1, i + 5, sizeof(str) * CHAR_BIT - i - 5) != 0) result = 1; } return result; } int ammunition_arithm_test() { int result = 0; /* Test 1 */ int i; char str[20], s[20], d[4], e[4], g[6]; ammunition_integer_from_string(4, "-2147483649", d); if (!ammunition_overflow_bit) result = 1; ammunition_sprintf_d(str, INT_MIN); ammunition_integer_from_string(4, str, d); if (ammunition_overflow_bit) result = 1; ammunition_integer_to_string(4, d, s); if (ammunition_strcmp(s, str) != 0) result = 1; ammunition_integer_from_string(4, "2147483648", d); if (!ammunition_overflow_bit) result = 1; ammunition_sprintf_d(str, INT_MAX); ammunition_integer_from_string(4, str, d); if (ammunition_overflow_bit) result = 1; ammunition_integer_to_string(4, d, s); if (ammunition_strcmp(s, str) != 0) result = 1; __pragma_loopbound(4000, 4000); for (i = -2000; i < 2000; i++) { ammunition_sprintf_d(str, i); ammunition_integer_from_string(4, str, d); if (ammunition_overflow_bit) result = 1; ammunition_integer_to_string(4, d, s); if (ammunition_strcmp(s, str) != 0) result = 1; } /* Test 2 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_unsigned_integer_from_string(4, "4294967296", d); if (!ammunition_overflow_bit) result = 1; ammunition_sprintf_u(str, UINT_MAX); ammunition_unsigned_integer_from_string(4, str, d); if (ammunition_overflow_bit) result = 1; ammunition_unsigned_integer_to_string(4, d, s); if (ammunition_strcmp(s, str) != 0) result = 1; __pragma_loopbound(4000, 4000); for (i = 0; i < 4000; i++) { ammunition_sprintf_u(str, i); ammunition_unsigned_integer_from_string(4, str, d); if (ammunition_overflow_bit) result = 1; ammunition_unsigned_integer_to_string(4, d, s); if (ammunition_strcmp(s, str) != 0) result = 1; } /* Test 3 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_sprintf_d(str, INT_MAX); ammunition_integer_from_string(4, str, d); ammunition_integer_from_string(4, "1", e); ammunition_add_integer(4, d, e, d); if (!ammunition_overflow_bit) result = 1; ammunition_sprintf_d(str, INT_MAX - 4); ammunition_integer_from_string(4, str, d); ammunition_sprintf_d(str, 4); ammunition_integer_from_string(4, str, e); ammunition_add_integer(4, d, e, d); if (ammunition_overflow_bit) result = 1; ammunition_integer_to_string(4, d, s); ammunition_sprintf_d(str, INT_MAX); if (ammunition_strcmp(s, str) != 0) result = 1; __pragma_loopbound(4000, 4000); for (i = -2000; i < 2000; i++) { ammunition_sprintf_d(str, i); ammunition_integer_from_string(4, str, d); ammunition_sprintf_d(str, i + 1); ammunition_integer_from_string(4, str, e); ammunition_add_integer(4, d, e, d); if (ammunition_overflow_bit) result = 1; ammunition_integer_to_string(4, d, s); if (ammunition_atoi(s) != i + i + 1) result = 1; } /* Test 4 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_sprintf_u(str, UINT_MAX); ammunition_unsigned_integer_from_string(4, str, d); ammunition_unsigned_integer_from_string(4, "1", e); ammunition_add_unsigned_integer(4, d, e, d); if (!ammunition_overflow_bit) result = 1; ammunition_sprintf_u(str, UINT_MAX - 4); ammunition_unsigned_integer_from_string(4, str, d); ammunition_sprintf_u(str, 4); ammunition_unsigned_integer_from_string(4, str, e); ammunition_add_unsigned_integer(4, d, e, d); if (ammunition_overflow_bit) result = 1; ammunition_unsigned_integer_to_string(4, d, s); ammunition_sprintf_u(str, UINT_MAX); if (ammunition_strcmp(s, str) != 0) result = 1; __pragma_loopbound(4000, 4000); for (i = 0; i < 4000; i++) { ammunition_sprintf_u(str, i); ammunition_unsigned_integer_from_string(4, str, d); ammunition_sprintf_u(str, i + 1); ammunition_unsigned_integer_from_string(4, str, e); ammunition_add_unsigned_integer(4, d, e, d); if (ammunition_overflow_bit) result = 1; ammunition_unsigned_integer_to_string(4, d, s); if (ammunition_atoi(s) != i + i + 1) result = 1; } /* Test 5 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_sprintf_d(str, INT_MIN); ammunition_integer_from_string(4, str, d); ammunition_integer_from_string(4, "1", e); ammunition_subtract_integer(4, d, e, d); if (!ammunition_overflow_bit) result = 1; ammunition_sprintf_d(str, INT_MIN + 4); ammunition_integer_from_string(4, str, d); ammunition_sprintf_d(str, 4); ammunition_integer_from_string(4, str, e); ammunition_subtract_integer(4, d, e, d); if (ammunition_overflow_bit) result = 1; ammunition_integer_to_string(4, d, s); ammunition_sprintf_d(str, INT_MIN); if (ammunition_strcmp(s, str) != 0) result = 1; __pragma_loopbound(4000, 4000); for (i = -2000; i < 2000; i++) { ammunition_sprintf_d(str, i); ammunition_integer_from_string(4, str, d); ammunition_sprintf_d(str, 10 - i); ammunition_integer_from_string(4, str, e); ammunition_subtract_integer(4, d, e, d); if (ammunition_overflow_bit) result = 1; ammunition_integer_to_string(4, d, s); if (ammunition_atoi(s) != i + i - 10) result = 1; } /* Test 6 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_sprintf_u(str, UINT_MAX - 2); ammunition_unsigned_integer_from_string(4, str, d); ammunition_sprintf_u(str, UINT_MAX - 1); ammunition_unsigned_integer_from_string(4, str, e); ammunition_subtract_unsigned_integer(4, d, e, d); if (!ammunition_overflow_bit) result = 1; ammunition_sprintf_u(str, UINT_MAX); ammunition_unsigned_integer_from_string(4, str, d); ammunition_subtract_unsigned_integer(4, d, d, d); if (ammunition_overflow_bit) result = 1; ammunition_unsigned_integer_to_string(4, d, s); if (ammunition_strcmp(s, "0") != 0) result = 1; __pragma_loopbound(4000, 4000); for (i = 0; i < 4000; i++) { ammunition_sprintf_u(str, i); ammunition_unsigned_integer_from_string(4, str, d); ammunition_sprintf_u(str, i / 2); ammunition_unsigned_integer_from_string(4, str, e); ammunition_subtract_unsigned_integer(4, d, e, d); if (ammunition_overflow_bit) result = 1; ammunition_unsigned_integer_to_string(4, d, s); if (ammunition_atoi(s) != i - i / 2) result = 1; } /* Test 7 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_sprintf_d(str, INT_MAX / 2 + 1); ammunition_integer_from_string(4, str, d); ammunition_integer_from_string(4, "2", e); ammunition_multiply_integer(4, d, e, d); if (!ammunition_overflow_bit) result = 1; ammunition_sprintf_d(str, INT_MIN / 2 - 1); ammunition_integer_from_string(4, str, d); ammunition_integer_from_string(4, "2", e); ammunition_multiply_integer(4, d, e, d); if (!ammunition_overflow_bit) result = 1; ammunition_sprintf_d(str, INT_MAX / 3); ammunition_integer_from_string(4, str, d); ammunition_sprintf_d(str, 3); ammunition_integer_from_string(4, str, e); ammunition_multiply_integer(4, d, e, d); if (ammunition_overflow_bit) result = 1; ammunition_integer_to_string(4, d, s); ammunition_sprintf_d(str, (INT_MAX / 3) * 3); if (ammunition_strcmp(s, str) != 0) result = 1; ammunition_sprintf_d(str, INT_MIN / 2); ammunition_integer_from_string(4, str, d); ammunition_sprintf_d(str, 2); ammunition_integer_from_string(4, str, e); ammunition_multiply_integer(4, d, e, d); if (ammunition_overflow_bit) result = 1; ammunition_integer_to_string(4, d, s); ammunition_sprintf_d(str, (INT_MIN / 2) * 2); if (ammunition_strcmp(s, str) != 0) result = 1; __pragma_loopbound(4000, 4000); for (i = -2000; i < 2000; i++) { ammunition_sprintf_d(str, i); ammunition_integer_from_string(4, str, d); ammunition_sprintf_d(str, i + 1000); ammunition_integer_from_string(4, str, e); ammunition_multiply_integer(4, d, e, d); if (ammunition_overflow_bit) result = 1; ammunition_integer_to_string(4, d, s); if (ammunition_atoi(s) != i * (i + 1000)) result = 1; } /* Test 8 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_sprintf_u(str, UINT_MAX / 5 + 1); ammunition_unsigned_integer_from_string(4, str, d); ammunition_sprintf_u(str, 5); ammunition_unsigned_integer_from_string(4, str, e); ammunition_multiply_unsigned_integer(4, d, e, d); if (!ammunition_overflow_bit) result = 1; ammunition_sprintf_u(str, UINT_MAX / 2); ammunition_unsigned_integer_from_string(4, str, d); ammunition_sprintf_u(str, 2); ammunition_unsigned_integer_from_string(4, str, e); ammunition_multiply_unsigned_integer(4, d, e, d); if (ammunition_overflow_bit) result = 1; ammunition_unsigned_integer_to_string(4, d, s); ammunition_sprintf_u(str, (UINT_MAX / 2) * 2); if (ammunition_strcmp(s, str) != 0) result = 1; __pragma_loopbound(4000, 4000); for (i = 0; i < 4000; i++) { ammunition_sprintf_u(str, i); ammunition_unsigned_integer_from_string(4, str, d); ammunition_sprintf_u(str, i / 2); ammunition_unsigned_integer_from_string(4, str, e); ammunition_multiply_unsigned_integer(4, d, e, d); if (ammunition_overflow_bit) result = 1; ammunition_unsigned_integer_to_string(4, d, s); if (ammunition_atoi(s) != i * (i / 2)) result = 1; } /* Test 9 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_integer_from_string(4, "10", d); ammunition_integer_from_string(4, "0", e); ammunition_divide_integer(4, d, e, d); if (!ammunition_overflow_bit) result = 1; __pragma_loopbound(4000, 4000); for (i = -2000; i < 2000; i++) { ammunition_sprintf_d(str, i); ammunition_integer_from_string(4, str, d); ammunition_sprintf_d(str, (i < 0 ? -i / 20 + 1 : -i / 20 - 1)); ammunition_integer_from_string(4, str, e); ammunition_divide_integer(4, d, e, d); if (ammunition_overflow_bit) result = 1; ammunition_integer_to_string(4, d, s); if (ammunition_atoi(s) != i / (i < 0 ? -i / 20 + 1 : -i / 20 - 1)) result = 1; ammunition_sprintf_d(str, i); ammunition_integer_from_string(4, str, d); ammunition_divide_integer(4, d, e, e); if (ammunition_overflow_bit) result = 1; ammunition_integer_to_string(4, e, s); if (ammunition_atoi(s) != i / (i < 0 ? -i / 20 + 1 : -i / 20 - 1)) result = 1; } /* Test 10 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_unsigned_integer_from_string(4, "10", d); ammunition_unsigned_integer_from_string(4, "0", e); ammunition_divide_unsigned_integer(4, d, e, d); if (!ammunition_overflow_bit) result = 1; __pragma_loopbound(4000, 4000); for (i = 0; i < 4000; i++) { ammunition_sprintf_u(str, i); ammunition_unsigned_integer_from_string(4, str, d); ammunition_sprintf_u(str, i / 20 + 1); ammunition_unsigned_integer_from_string(4, str, e); ammunition_divide_unsigned_integer(4, d, e, d); if (ammunition_overflow_bit) result = 1; ammunition_unsigned_integer_to_string(4, d, s); if (ammunition_atoi(s) != i / (i / 20 + 1)) result = 1; } /* Test 11 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_unsigned_integer_from_string(4, "10", d); ammunition_unsigned_integer_from_string(4, "0", e); ammunition_unsigned_integer_remainder(4, d, e, d); if (!ammunition_overflow_bit) result = 1; __pragma_loopbound(4000, 4000); for (i = 0; i < 4000; i++) { ammunition_sprintf_u(str, i); ammunition_unsigned_integer_from_string(4, str, d); ammunition_sprintf_u(str, i / 20 + 1); ammunition_unsigned_integer_from_string(4, str, e); ammunition_unsigned_integer_remainder(4, d, e, d); if (ammunition_overflow_bit) result = 1; ammunition_unsigned_integer_to_string(4, d, s); if (ammunition_atoi(s) != i % (i / 20 + 1)) result = 1; } /* Test 12 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_unsigned_integer_from_string(4, "1348", d); ammunition_unsigned_integer_shift_right(4, d, 0, d); ammunition_unsigned_integer_to_string(4, d, s); if (ammunition_overflow_bit || ammunition_strcmp(s, "1348") != 0) result = 1; ammunition_unsigned_integer_from_string(4, "1348", d); ammunition_unsigned_integer_shift_right(4, d, 32, d); ammunition_unsigned_integer_to_string(4, d, s); if (!ammunition_overflow_bit || ammunition_strcmp(s, "0") != 0) result = 1; ammunition_unsigned_integer_from_string(4, "1348", d); ammunition_unsigned_integer_shift_right(4, d, 8, d); ammunition_unsigned_integer_to_string(4, d, s); if (!ammunition_overflow_bit || ammunition_strcmp(s, "5") != 0) result = 1; ammunition_unsigned_integer_from_string(4, "134890", d); ammunition_unsigned_integer_shift_right(4, d, 13, d); ammunition_unsigned_integer_to_string(4, d, s); if (!ammunition_overflow_bit || ammunition_strcmp(s, "16") != 0) result = 1; ammunition_unsigned_integer_from_string(4, "134890", d); ammunition_unsigned_integer_shift_left(4, d, -13, d); ammunition_unsigned_integer_to_string(4, d, s); if (!ammunition_overflow_bit || ammunition_strcmp(s, "16") != 0) result = 1; /* Test 13 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_integer_from_string(4, "1348", d); ammunition_integer_shift_right(4, d, 0, d); ammunition_integer_to_string(4, d, s); if (ammunition_overflow_bit || ammunition_strcmp(s, "1348") != 0) result = 1; ammunition_integer_from_string(4, "1348", d); ammunition_integer_shift_right(4, d, 32, d); ammunition_integer_to_string(4, d, s); if (!ammunition_overflow_bit || ammunition_strcmp(s, "0") != 0) result = 1; ammunition_integer_from_string(4, "1348", d); ammunition_integer_shift_right(4, d, 8, d); ammunition_integer_to_string(4, d, s); if (!ammunition_overflow_bit || ammunition_strcmp(s, "5") != 0) result = 1; ammunition_integer_from_string(4, "134890", d); ammunition_integer_shift_right(4, d, 13, d); ammunition_integer_to_string(4, d, s); if (!ammunition_overflow_bit || ammunition_strcmp(s, "16") != 0) result = 1; ammunition_integer_from_string(4, "134890", d); ammunition_integer_shift_left(4, d, -13, d); ammunition_integer_to_string(4, d, s); if (!ammunition_overflow_bit || ammunition_strcmp(s, "16") != 0) result = 1; ammunition_integer_from_string(4, "-1348", d); ammunition_integer_shift_right(4, d, 0, d); ammunition_integer_to_string(4, d, s); if (ammunition_overflow_bit || ammunition_strcmp(s, "-1348") != 0) result = 1; ammunition_integer_from_string(4, "-1348", d); ammunition_integer_shift_right(4, d, 32, d); ammunition_integer_to_string(4, d, s); if (!ammunition_overflow_bit || ammunition_strcmp(s, "-1") != 0) result = 1; ammunition_integer_from_string(4, "-1348", d); ammunition_integer_shift_right(4, d, 8, d); ammunition_integer_to_string(4, d, s); if (!ammunition_overflow_bit || ammunition_strcmp(s, "-6") != 0) result = 1; ammunition_integer_from_string(4, "-134890", d); ammunition_integer_shift_right(4, d, 13, d); ammunition_integer_to_string(4, d, s); if (!ammunition_overflow_bit || ammunition_strcmp(s, "-17") != 0) result = 1; ammunition_integer_from_string(4, "-134890", d); ammunition_integer_shift_left(4, d, -13, d); ammunition_integer_to_string(4, d, s); if (!ammunition_overflow_bit || ammunition_strcmp(s, "-17") != 0) result = 1; /* Test 14 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_unsigned_integer_from_string(4, "1348", d); ammunition_unsigned_integer_shift_left(4, d, 0, d); ammunition_unsigned_integer_to_string(4, d, s); if (ammunition_overflow_bit || ammunition_strcmp(s, "1348") != 0) result = 1; ammunition_unsigned_integer_from_string(4, "1348", d); ammunition_unsigned_integer_shift_left(4, d, 22, d); if (!ammunition_overflow_bit) result = 1; ammunition_unsigned_integer_from_string(4, "1348", d); ammunition_unsigned_integer_shift_left(4, d, 8, d); ammunition_unsigned_integer_to_string(4, d, s); if (ammunition_overflow_bit || ammunition_strcmp(s, "345088") != 0) result = 1; ammunition_unsigned_integer_from_string(4, "134890", d); ammunition_unsigned_integer_shift_left(4, d, 13, d); ammunition_unsigned_integer_to_string(4, d, s); if (ammunition_overflow_bit || ammunition_strcmp(s, "1105018880") != 0) result = 1; ammunition_unsigned_integer_from_string(4, "134890", d); ammunition_unsigned_integer_shift_right(4, d, -13, d); ammunition_unsigned_integer_to_string(4, d, s); if (ammunition_overflow_bit || ammunition_strcmp(s, "1105018880") != 0) result = 1; /* Test 15 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_integer_from_string(4, "1348", d); ammunition_integer_shift_left(4, d, 0, d); ammunition_integer_to_string(4, d, s); if (ammunition_overflow_bit || ammunition_strcmp(s, "1348") != 0) result = 1; ammunition_integer_from_string(4, "1348", d); ammunition_integer_shift_left(4, d, 21, d); if (!ammunition_overflow_bit) result = 1; ammunition_integer_from_string(4, "1348", d); ammunition_integer_shift_left(4, d, 8, d); ammunition_integer_to_string(4, d, s); if (ammunition_overflow_bit || ammunition_strcmp(s, "345088") != 0) result = 1; ammunition_integer_from_string(4, "134890", d); ammunition_integer_shift_left(4, d, 13, d); ammunition_integer_to_string(4, d, s); if (ammunition_overflow_bit || ammunition_strcmp(s, "1105018880") != 0) result = 1; ammunition_integer_from_string(4, "134890", d); ammunition_integer_shift_right(4, d, -13, d); ammunition_integer_to_string(4, d, s); if (ammunition_overflow_bit || ammunition_strcmp(s, "1105018880") != 0) result = 1; ammunition_integer_from_string(4, "-1348", d); ammunition_integer_shift_left(4, d, 0, d); ammunition_integer_to_string(4, d, s); if (ammunition_overflow_bit || ammunition_strcmp(s, "-1348") != 0) result = 1; ammunition_integer_from_string(4, "-1348", d); ammunition_integer_shift_left(4, d, 21, d); if (!ammunition_overflow_bit) result = 1; ammunition_integer_from_string(4, "-1348", d); ammunition_integer_shift_left(4, d, 8, d); ammunition_integer_to_string(4, d, s); if (ammunition_overflow_bit || ammunition_strcmp(s, "-345088") != 0) result = 1; ammunition_integer_from_string(4, "-134890", d); ammunition_integer_shift_left(4, d, 13, d); ammunition_integer_to_string(4, d, s); if (ammunition_overflow_bit || ammunition_strcmp(s, "-1105018880") != 0) result = 1; ammunition_integer_from_string(4, "-134890", d); ammunition_integer_shift_right(4, d, -13, d); ammunition_integer_to_string(4, d, s); if (ammunition_overflow_bit || ammunition_strcmp(s, "-1105018880") != 0) result = 1; /* Test 16 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_integer_from_string(4, "-10", d); ammunition_integer_from_string(4, "1348", e); if (ammunition_eq_integer(4, d, e)) result = 1; ammunition_integer_from_string(4, "-1348", d); ammunition_integer_from_string(4, "-1348", e); if (!ammunition_eq_integer(4, d, e)) result = 1; /* Test 17 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_unsigned_integer_from_string(4, "10", d); ammunition_unsigned_integer_from_string(4, "1348", e); if (ammunition_eq_unsigned_integer(4, d, e)) result = 1; ammunition_unsigned_integer_from_string(4, "1348", d); ammunition_unsigned_integer_from_string(4, "1348", e); if (!ammunition_eq_unsigned_integer(4, d, e)) result = 1; /* Test 18 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_integer_from_string(4, "-10", d); ammunition_integer_from_string(4, "1348", e); if (!ammunition_ne_integer(4, d, e)) result = 1; ammunition_integer_from_string(4, "-1348", d); ammunition_integer_from_string(4, "-1348", e); if (ammunition_ne_integer(4, d, e)) result = 1; /* Test 19 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_unsigned_integer_from_string(4, "10", d); ammunition_unsigned_integer_from_string(4, "1348", e); if (!ammunition_ne_unsigned_integer(4, d, e)) result = 1; ammunition_unsigned_integer_from_string(4, "1348", d); ammunition_unsigned_integer_from_string(4, "1348", e); if (ammunition_ne_unsigned_integer(4, d, e)) result = 1; /* Test 20 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_integer_from_string(4, "-10", d); ammunition_integer_from_string(4, "1348", e); if (ammunition_gt_integer(4, d, e)) result = 1; ammunition_integer_from_string(4, "-1348", d); ammunition_integer_from_string(4, "-1348", e); if (ammunition_gt_integer(4, d, e)) result = 1; ammunition_integer_from_string(4, "-1000000", d); ammunition_integer_from_string(4, "-1348", e); if (ammunition_gt_integer(4, d, e)) result = 1; ammunition_integer_from_string(4, "1000000", d); ammunition_integer_from_string(4, "1348", e); if (!ammunition_gt_integer(4, d, e)) result = 1; /* Test 21 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_unsigned_integer_from_string(4, "10", d); ammunition_unsigned_integer_from_string(4, "1348", e); if (ammunition_gt_unsigned_integer(4, d, e)) result = 1; ammunition_unsigned_integer_from_string(4, "1348", d); ammunition_unsigned_integer_from_string(4, "1348", e); if (ammunition_gt_unsigned_integer(4, d, e)) result = 1; ammunition_unsigned_integer_from_string(4, "1000000", d); ammunition_unsigned_integer_from_string(4, "1348", e); if (!ammunition_gt_unsigned_integer(4, d, e)) result = 1; /* Test 22 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_integer_from_string(4, "-10", d); ammunition_integer_from_string(4, "1348", e); if (!ammunition_lt_integer(4, d, e)) result = 1; ammunition_integer_from_string(4, "-1348", d); ammunition_integer_from_string(4, "-1348", e); if (ammunition_lt_integer(4, d, e)) result = 1; ammunition_integer_from_string(4, "-1000000", d); ammunition_integer_from_string(4, "-1348", e); if (!ammunition_lt_integer(4, d, e)) result = 1; ammunition_integer_from_string(4, "1000000", d); ammunition_integer_from_string(4, "1348", e); if (ammunition_lt_integer(4, d, e)) result = 1; /* Test 23 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_unsigned_integer_from_string(4, "10", d); ammunition_unsigned_integer_from_string(4, "1348", e); if (!ammunition_lt_unsigned_integer(4, d, e)) result = 1; ammunition_unsigned_integer_from_string(4, "1348", d); ammunition_unsigned_integer_from_string(4, "1348", e); if (ammunition_lt_unsigned_integer(4, d, e)) result = 1; ammunition_unsigned_integer_from_string(4, "1000000", d); ammunition_unsigned_integer_from_string(4, "1348", e); if (ammunition_lt_unsigned_integer(4, d, e)) result = 1; /* Test 24 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_integer_from_string(4, "-10", d); ammunition_integer_from_string(4, "1348", e); if (ammunition_ge_integer(4, d, e)) result = 1; ammunition_integer_from_string(4, "-1348", d); ammunition_integer_from_string(4, "-1348", e); if (!ammunition_ge_integer(4, d, e)) result = 1; ammunition_integer_from_string(4, "-1000000", d); ammunition_integer_from_string(4, "-1348", e); if (ammunition_ge_integer(4, d, e)) result = 1; ammunition_integer_from_string(4, "1000000", d); ammunition_integer_from_string(4, "1348", e); if (!ammunition_ge_integer(4, d, e)) result = 1; /* Test 25 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_unsigned_integer_from_string(4, "10", d); ammunition_unsigned_integer_from_string(4, "1348", e); if (ammunition_ge_unsigned_integer(4, d, e)) result = 1; ammunition_unsigned_integer_from_string(4, "1348", d); ammunition_unsigned_integer_from_string(4, "1348", e); if (!ammunition_ge_unsigned_integer(4, d, e)) result = 1; ammunition_unsigned_integer_from_string(4, "1000000", d); ammunition_unsigned_integer_from_string(4, "1348", e); if (!ammunition_ge_unsigned_integer(4, d, e)) result = 1; /* Test 26 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_integer_from_string(4, "-10", d); ammunition_integer_from_string(4, "1348", e); if (!ammunition_le_integer(4, d, e)) result = 1; ammunition_integer_from_string(4, "-1348", d); ammunition_integer_from_string(4, "-1348", e); if (!ammunition_le_integer(4, d, e)) result = 1; ammunition_integer_from_string(4, "-1000000", d); ammunition_integer_from_string(4, "-1348", e); if (!ammunition_le_integer(4, d, e)) result = 1; ammunition_integer_from_string(4, "1000000", d); ammunition_integer_from_string(4, "1348", e); if (ammunition_le_integer(4, d, e)) result = 1; /* Test 27 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_unsigned_integer_from_string(4, "10", d); ammunition_unsigned_integer_from_string(4, "1348", e); if (!ammunition_le_unsigned_integer(4, d, e)) result = 1; ammunition_unsigned_integer_from_string(4, "1348", d); ammunition_unsigned_integer_from_string(4, "1348", e); if (!ammunition_le_unsigned_integer(4, d, e)) result = 1; ammunition_unsigned_integer_from_string(4, "1000000", d); ammunition_unsigned_integer_from_string(4, "1348", e); if (ammunition_le_unsigned_integer(4, d, e)) result = 1; /* Test 28 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_unsigned_integer_from_string(4, "70000", d); ammunition_change_unsigned_integer_size(4, d, 2, d); if (!ammunition_overflow_bit) result = 1; ammunition_unsigned_integer_from_string(4, "30000", d); ammunition_change_unsigned_integer_size(4, d, 2, d); ammunition_integer_to_string(2, d, s); if (ammunition_overflow_bit || ammunition_strcmp(s, "30000") != 0) result = 1; ammunition_unsigned_integer_from_string(4, "11230000", g); ammunition_change_unsigned_integer_size(4, g, 6, g); ammunition_integer_to_string(6, g, s); if (ammunition_overflow_bit || ammunition_strcmp(s, "11230000") != 0) result = 1; /* Test 29 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_integer_from_string(4, "40000", d); ammunition_change_integer_size(4, d, 2, d); if (!ammunition_overflow_bit) result = 1; ammunition_integer_from_string(4, "-33000", d); ammunition_change_integer_size(4, d, 2, d); if (!ammunition_overflow_bit) result = 1; ammunition_integer_from_string(4, "30000", d); ammunition_change_integer_size(4, d, 2, d); ammunition_integer_to_string(2, d, s); if (ammunition_overflow_bit || ammunition_strcmp(s, "30000") != 0) result = 1; ammunition_integer_from_string(4, "-30000", d); ammunition_change_integer_size(4, d, 2, d); ammunition_integer_to_string(2, d, s); if (ammunition_overflow_bit || ammunition_strcmp(s, "-30000") != 0) result = 1; ammunition_integer_from_string(4, "11230000", g); ammunition_change_integer_size(4, g, 6, g); ammunition_integer_to_string(6, g, s); if (ammunition_overflow_bit || ammunition_strcmp(s, "11230000") != 0) result = 1; ammunition_integer_from_string(4, "-11230000", g); ammunition_change_integer_size(4, g, 6, g); ammunition_integer_to_string(6, g, s); if (ammunition_overflow_bit || ammunition_strcmp(s, "-11230000") != 0) result = 1; /* Test 30 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_unsigned_integer_from_string(4, "1348", d); ammunition_unsigned_integer_from_string(4, "1348", e); ammunition_unsigned_integer_or(4, d, e, e); ammunition_unsigned_integer_to_string(4, e, s); if (ammunition_strcmp(s, "1348") != 0) result = 1; ammunition_unsigned_integer_from_string(4, "1348", d); ammunition_unsigned_integer_from_string(4, "0", e); ammunition_unsigned_integer_or(4, d, e, e); ammunition_unsigned_integer_to_string(4, e, s); if (ammunition_strcmp(s, "1348") != 0) result = 1; ammunition_unsigned_integer_from_string(4, "1348", d); ammunition_unsigned_integer_from_string(4, "4294967295", e); ammunition_unsigned_integer_or(4, d, e, e); ammunition_unsigned_integer_to_string(4, e, s); if (ammunition_strcmp(s, "4294967295") != 0) result = 1; ammunition_unsigned_integer_from_string(4, "1348", d); ammunition_unsigned_integer_from_string(4, "96", e); ammunition_unsigned_integer_or(4, d, e, e); ammunition_unsigned_integer_to_string(4, e, s); if (ammunition_strcmp(s, "1380") != 0) result = 1; /* Test 31 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_integer_from_string(4, "1348", d); ammunition_integer_from_string(4, "1348", e); ammunition_integer_or(4, d, e, e); ammunition_integer_to_string(4, e, s); if (ammunition_strcmp(s, "1348") != 0) result = 1; ammunition_integer_from_string(4, "1348", d); ammunition_integer_from_string(4, "0", e); ammunition_integer_or(4, d, e, e); ammunition_integer_to_string(4, e, s); if (ammunition_strcmp(s, "1348") != 0) result = 1; ammunition_integer_from_string(4, "1348", d); ammunition_integer_from_string(4, "-1", e); ammunition_integer_or(4, d, e, e); ammunition_integer_to_string(4, e, s); if (ammunition_strcmp(s, "-1") != 0) result = 1; ammunition_integer_from_string(4, "1348", d); ammunition_integer_from_string(4, "96", e); ammunition_integer_or(4, d, e, e); ammunition_integer_to_string(4, e, s); if (ammunition_strcmp(s, "1380") != 0) result = 1; /* Test 32 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_unsigned_integer_from_string(4, "1348", d); ammunition_unsigned_integer_from_string(4, "1348", e); ammunition_unsigned_integer_and(4, d, e, e); ammunition_unsigned_integer_to_string(4, e, s); if (ammunition_strcmp(s, "1348") != 0) result = 1; ammunition_unsigned_integer_from_string(4, "1348", d); ammunition_unsigned_integer_from_string(4, "0", e); ammunition_unsigned_integer_and(4, d, e, e); ammunition_unsigned_integer_to_string(4, e, s); if (ammunition_strcmp(s, "0") != 0) result = 1; ammunition_unsigned_integer_from_string(4, "1348", d); ammunition_unsigned_integer_from_string(4, "4294967295", e); ammunition_unsigned_integer_and(4, d, e, e); ammunition_unsigned_integer_to_string(4, e, s); if (ammunition_strcmp(s, "1348") != 0) result = 1; ammunition_unsigned_integer_from_string(4, "1348", d); ammunition_unsigned_integer_from_string(4, "96", e); ammunition_unsigned_integer_and(4, d, e, e); ammunition_unsigned_integer_to_string(4, e, s); if (ammunition_strcmp(s, "64") != 0) result = 1; /* Test 33 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_integer_from_string(4, "1348", d); ammunition_integer_from_string(4, "1348", e); ammunition_integer_and(4, d, e, e); ammunition_integer_to_string(4, e, s); if (ammunition_strcmp(s, "1348") != 0) result = 1; ammunition_integer_from_string(4, "1348", d); ammunition_integer_from_string(4, "0", e); ammunition_integer_and(4, d, e, e); ammunition_integer_to_string(4, e, s); if (ammunition_strcmp(s, "0") != 0) result = 1; ammunition_integer_from_string(4, "1348", d); ammunition_integer_from_string(4, "-1", e); ammunition_integer_and(4, d, e, e); ammunition_integer_to_string(4, e, s); if (ammunition_strcmp(s, "1348") != 0) result = 1; ammunition_integer_from_string(4, "1348", d); ammunition_integer_from_string(4, "96", e); ammunition_integer_and(4, d, e, e); ammunition_integer_to_string(4, e, s); if (ammunition_strcmp(s, "64") != 0) result = 1; /* Test 34 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_unsigned_integer_from_string(4, "1348", d); ammunition_unsigned_integer_not(4, d, d); ammunition_unsigned_integer_to_string(4, d, s); if (ammunition_strcmp(s, "4294965947") != 0) result = 1; ammunition_unsigned_integer_from_string(4, "0", d); ammunition_unsigned_integer_not(4, d, d); ammunition_unsigned_integer_to_string(4, d, s); if (ammunition_strcmp(s, "4294967295") != 0) result = 1; ammunition_unsigned_integer_from_string(4, "4294967295", d); ammunition_unsigned_integer_not(4, d, d); ammunition_unsigned_integer_to_string(4, d, s); if (ammunition_strcmp(s, "0") != 0) result = 1; /* Test 35 */ ammunition_reset_str_arithm(str, s, d, e, g); ammunition_integer_from_string(4, "1348", d); ammunition_integer_not(4, d, d); ammunition_integer_to_string(4, d, s); if (ammunition_strcmp(s, "-1349") != 0) result = 1; ammunition_integer_from_string(4, "0", d); ammunition_integer_not(4, d, d); ammunition_integer_to_string(4, d, s); if (ammunition_strcmp(s, "-1") != 0) result = 1; ammunition_integer_from_string(4, "-1", d); ammunition_integer_not(4, d, d); ammunition_integer_to_string(4, d, s); if (ammunition_strcmp(s, "0") != 0) result = 1; return result; } /* Initialization- and return-value-related functions */ void ammunition_init(void) { ammunition_result = 0; } int ammunition_return(void) { return ammunition_result; } /* Main functions */ __attribute__((noinline)) __attribute__((export_name("entrypoint"))) void ammunition_main(void) { ammunition_result |= ammunition_bits_test(); ammunition_result |= ammunition_arithm_test(); } __attribute__((noinline)) __attribute__((export_name("main"))) int main(void) { ammunition_init(); ammunition_main(); return (ammunition_return()); }