Hi All, This is an updated unit test. The test cases include overflow and detection, and bad params. It was tested with and without PDF_FORCE_BIGNUMS. I did not create the full patch/diff since it can be rejected.
* drop pdf_i64_neg.c in torture/unit/base/types/ over top of the existing file Jeff
/* -*- mode: C -*- * * File: pdf-i64-neg.c * Date: Mon May 05 16:30:00 2008 * * GNU PDF Library - Types Module - pdf_i64_neg test case * */ /* Copyright (C) 2008, 2010 Free Software Foundation, Inc. */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> #include <string.h> #include <pdf.h> #include <check.h> #define INTERACTIVE_DEBUG 0 #ifndef pdf_i64_eq # define pdf_i64_eq(x,y) (0 == pdf_i64_cmp((x), (y))) #endif /* pdf_i64_eq */ #ifndef pdf_i64_neq # define pdf_i64_neq(x,y) (0 != pdf_i64_cmp((x), (y))) #endif /* pdf_i64_neq */ typedef struct _KnownAnswer { int32_t nh; /* number high */ uint32_t nl; /* number low */ int32_t mh; /* expected neg high */ uint32_t ml; /* expected neg low */ uint32_t st; /* expected status */ } KnownAnswer; static const KnownAnswer tests_neg[] = { /* 1 */ {0x80000000,0x00000000,0x00000000,0x00000000,PDF_EOVERFLOW}, /* 2 */ {0x80000000,0x00000001,0x7fffffff,0xffffffff,PDF_OK}, /* 3 */ {0xffffffff,0xfffffffe,0x00000000,0x00000002,PDF_OK}, /* 4 */ {0xffffffff,0xffffffff,0x00000000,0x00000001,PDF_OK}, /* 5 */ {0x00000000,0x00000000,0x00000000,0x00000000,PDF_OK}, /* 6 */ {0x00000000,0x00000001,0xffffffff,0xffffffff,PDF_OK}, /* 7 */ {0x00000000,0x00000002,0xffffffff,0xfffffffe,PDF_OK}, /* 8 */ {0x7fffffff,0xfffffffe,0x80000000,0x00000002,PDF_OK}, /* 9 */ {0x7fffffff,0xffffffff,0x80000000,0x00000001,PDF_OK}, /* 10 */ {0x00000000,0x00000000,0x00000000,0x00000000,PDF_OK}, /* 11 */ {0x80000000,0x00000000,0x00000000,0x00000000,PDF_EOVERFLOW}, /* 12 */ {0x00000000,0x00000001,0xffffffff,0xffffffff,PDF_OK}, /* 13 */ {0x80000000,0x00000001,0x7fffffff,0xffffffff,PDF_OK}, /* 14 */ {0x00000000,0x00000002,0xffffffff,0xfffffffe,PDF_OK}, /* 15 */ {0x80000000,0x00000002,0x7fffffff,0xfffffffe,PDF_OK}, /* 16 */ {0x00000000,0x00000004,0xffffffff,0xfffffffc,PDF_OK}, /* 17 */ {0x80000000,0x00000004,0x7fffffff,0xfffffffc,PDF_OK}, /* 18 */ {0x00000000,0x00000008,0xffffffff,0xfffffff8,PDF_OK}, /* 19 */ {0x80000000,0x00000008,0x7fffffff,0xfffffff8,PDF_OK}, /* 20 */ {0x00000000,0x00000010,0xffffffff,0xfffffff0,PDF_OK}, /* 21 */ {0x80000000,0x00000010,0x7fffffff,0xfffffff0,PDF_OK}, /* 22 */ {0x00000000,0x00000020,0xffffffff,0xffffffe0,PDF_OK}, /* 23 */ {0x80000000,0x00000020,0x7fffffff,0xffffffe0,PDF_OK}, /* 24 */ {0x00000000,0x00000040,0xffffffff,0xffffffc0,PDF_OK}, /* 25 */ {0x80000000,0x00000040,0x7fffffff,0xffffffc0,PDF_OK}, /* 26 */ {0x00000000,0x00000080,0xffffffff,0xffffff80,PDF_OK}, /* 27 */ {0x80000000,0x00000080,0x7fffffff,0xffffff80,PDF_OK}, /* 28 */ {0x00000000,0x00000100,0xffffffff,0xffffff00,PDF_OK}, /* 29 */ {0x80000000,0x00000100,0x7fffffff,0xffffff00,PDF_OK}, /* 30 */ {0x00000000,0x00000200,0xffffffff,0xfffffe00,PDF_OK}, /* 31 */ {0x80000000,0x00000200,0x7fffffff,0xfffffe00,PDF_OK}, /* 32 */ {0x00000000,0x00000400,0xffffffff,0xfffffc00,PDF_OK}, /* 33 */ {0x80000000,0x00000400,0x7fffffff,0xfffffc00,PDF_OK}, /* 34 */ {0x00000000,0x00000800,0xffffffff,0xfffff800,PDF_OK}, /* 35 */ {0x80000000,0x00000800,0x7fffffff,0xfffff800,PDF_OK}, /* 36 */ {0x00000000,0x00001000,0xffffffff,0xfffff000,PDF_OK}, /* 37 */ {0x80000000,0x00001000,0x7fffffff,0xfffff000,PDF_OK}, /* 38 */ {0x00000000,0x00002000,0xffffffff,0xffffe000,PDF_OK}, /* 39 */ {0x80000000,0x00002000,0x7fffffff,0xffffe000,PDF_OK}, /* 40 */ {0x00000000,0x00004000,0xffffffff,0xffffc000,PDF_OK}, /* 41 */ {0x80000000,0x00004000,0x7fffffff,0xffffc000,PDF_OK}, /* 42 */ {0x00000000,0x00008000,0xffffffff,0xffff8000,PDF_OK}, /* 43 */ {0x80000000,0x00008000,0x7fffffff,0xffff8000,PDF_OK}, /* 44 */ {0x00000000,0x00010000,0xffffffff,0xffff0000,PDF_OK}, /* 45 */ {0x80000000,0x00010000,0x7fffffff,0xffff0000,PDF_OK}, /* 46 */ {0x00000000,0x00020000,0xffffffff,0xfffe0000,PDF_OK}, /* 47 */ {0x80000000,0x00020000,0x7fffffff,0xfffe0000,PDF_OK}, /* 48 */ {0x00000000,0x00040000,0xffffffff,0xfffc0000,PDF_OK}, /* 49 */ {0x80000000,0x00040000,0x7fffffff,0xfffc0000,PDF_OK}, /* 50 */ {0x00000000,0x00080000,0xffffffff,0xfff80000,PDF_OK}, /* 51 */ {0x80000000,0x00080000,0x7fffffff,0xfff80000,PDF_OK}, /* 52 */ {0x00000000,0x00100000,0xffffffff,0xfff00000,PDF_OK}, /* 53 */ {0x80000000,0x00100000,0x7fffffff,0xfff00000,PDF_OK}, /* 54 */ {0x00000000,0x00200000,0xffffffff,0xffe00000,PDF_OK}, /* 55 */ {0x80000000,0x00200000,0x7fffffff,0xffe00000,PDF_OK}, /* 56 */ {0x00000000,0x00400000,0xffffffff,0xffc00000,PDF_OK}, /* 57 */ {0x80000000,0x00400000,0x7fffffff,0xffc00000,PDF_OK}, /* 58 */ {0x00000000,0x00800000,0xffffffff,0xff800000,PDF_OK}, /* 59 */ {0x80000000,0x00800000,0x7fffffff,0xff800000,PDF_OK}, /* 60 */ {0x00000000,0x01000000,0xffffffff,0xff000000,PDF_OK}, /* 61 */ {0x80000000,0x01000000,0x7fffffff,0xff000000,PDF_OK}, /* 62 */ {0x00000000,0x02000000,0xffffffff,0xfe000000,PDF_OK}, /* 63 */ {0x80000000,0x02000000,0x7fffffff,0xfe000000,PDF_OK}, /* 64 */ {0x00000000,0x04000000,0xffffffff,0xfc000000,PDF_OK}, /* 65 */ {0x80000000,0x04000000,0x7fffffff,0xfc000000,PDF_OK}, /* 66 */ {0x00000000,0x08000000,0xffffffff,0xf8000000,PDF_OK}, /* 67 */ {0x80000000,0x08000000,0x7fffffff,0xf8000000,PDF_OK}, /* 68 */ {0x00000000,0x10000000,0xffffffff,0xf0000000,PDF_OK}, /* 69 */ {0x80000000,0x10000000,0x7fffffff,0xf0000000,PDF_OK}, /* 70 */ {0x00000000,0x20000000,0xffffffff,0xe0000000,PDF_OK}, /* 71 */ {0x80000000,0x20000000,0x7fffffff,0xe0000000,PDF_OK}, /* 72 */ {0x00000000,0x40000000,0xffffffff,0xc0000000,PDF_OK}, /* 73 */ {0x80000000,0x40000000,0x7fffffff,0xc0000000,PDF_OK}, /* 74 */ {0x00000000,0x80000000,0xffffffff,0x80000000,PDF_OK}, /* 75 */ {0x80000000,0x80000000,0x7fffffff,0x80000000,PDF_OK}, /* 76 */ {0x00000001,0x00000000,0xffffffff,0x00000000,PDF_OK}, /* 77 */ {0x80000001,0x00000000,0x7fffffff,0x00000000,PDF_OK}, /* 78 */ {0x00000002,0x00000000,0xfffffffe,0x00000000,PDF_OK}, /* 79 */ {0x80000002,0x00000000,0x7ffffffe,0x00000000,PDF_OK}, /* 80 */ {0x00000004,0x00000000,0xfffffffc,0x00000000,PDF_OK}, /* 81 */ {0x80000004,0x00000000,0x7ffffffc,0x00000000,PDF_OK}, /* 82 */ {0x00000008,0x00000000,0xfffffff8,0x00000000,PDF_OK}, /* 83 */ {0x80000008,0x00000000,0x7ffffff8,0x00000000,PDF_OK}, /* 84 */ {0x00000010,0x00000000,0xfffffff0,0x00000000,PDF_OK}, /* 85 */ {0x80000010,0x00000000,0x7ffffff0,0x00000000,PDF_OK}, /* 86 */ {0x00000020,0x00000000,0xffffffe0,0x00000000,PDF_OK}, /* 87 */ {0x80000020,0x00000000,0x7fffffe0,0x00000000,PDF_OK}, /* 88 */ {0x00000040,0x00000000,0xffffffc0,0x00000000,PDF_OK}, /* 89 */ {0x80000040,0x00000000,0x7fffffc0,0x00000000,PDF_OK}, /* 90 */ {0x00000080,0x00000000,0xffffff80,0x00000000,PDF_OK}, /* 91 */ {0x80000080,0x00000000,0x7fffff80,0x00000000,PDF_OK}, /* 92 */ {0x00000100,0x00000000,0xffffff00,0x00000000,PDF_OK}, /* 93 */ {0x80000100,0x00000000,0x7fffff00,0x00000000,PDF_OK}, /* 94 */ {0x00000200,0x00000000,0xfffffe00,0x00000000,PDF_OK}, /* 95 */ {0x80000200,0x00000000,0x7ffffe00,0x00000000,PDF_OK}, /* 96 */ {0x00000400,0x00000000,0xfffffc00,0x00000000,PDF_OK}, /* 97 */ {0x80000400,0x00000000,0x7ffffc00,0x00000000,PDF_OK}, /* 98 */ {0x00000800,0x00000000,0xfffff800,0x00000000,PDF_OK}, /* 99 */ {0x80000800,0x00000000,0x7ffff800,0x00000000,PDF_OK}, /* 100 */ {0x00001000,0x00000000,0xfffff000,0x00000000,PDF_OK}, /* 101 */ {0x80001000,0x00000000,0x7ffff000,0x00000000,PDF_OK}, /* 102 */ {0x00002000,0x00000000,0xffffe000,0x00000000,PDF_OK}, /* 103 */ {0x80002000,0x00000000,0x7fffe000,0x00000000,PDF_OK}, /* 104 */ {0x00004000,0x00000000,0xffffc000,0x00000000,PDF_OK}, /* 105 */ {0x80004000,0x00000000,0x7fffc000,0x00000000,PDF_OK}, /* 106 */ {0x00008000,0x00000000,0xffff8000,0x00000000,PDF_OK}, /* 107 */ {0x80008000,0x00000000,0x7fff8000,0x00000000,PDF_OK}, /* 108 */ {0x00010000,0x00000000,0xffff0000,0x00000000,PDF_OK}, /* 109 */ {0x80010000,0x00000000,0x7fff0000,0x00000000,PDF_OK}, /* 110 */ {0x00020000,0x00000000,0xfffe0000,0x00000000,PDF_OK}, /* 111 */ {0x80020000,0x00000000,0x7ffe0000,0x00000000,PDF_OK}, /* 112 */ {0x00040000,0x00000000,0xfffc0000,0x00000000,PDF_OK}, /* 113 */ {0x80040000,0x00000000,0x7ffc0000,0x00000000,PDF_OK}, /* 114 */ {0x00080000,0x00000000,0xfff80000,0x00000000,PDF_OK}, /* 115 */ {0x80080000,0x00000000,0x7ff80000,0x00000000,PDF_OK}, /* 116 */ {0x00100000,0x00000000,0xfff00000,0x00000000,PDF_OK}, /* 117 */ {0x80100000,0x00000000,0x7ff00000,0x00000000,PDF_OK}, /* 118 */ {0x00200000,0x00000000,0xffe00000,0x00000000,PDF_OK}, /* 119 */ {0x80200000,0x00000000,0x7fe00000,0x00000000,PDF_OK}, /* 120 */ {0x00400000,0x00000000,0xffc00000,0x00000000,PDF_OK}, /* 121 */ {0x80400000,0x00000000,0x7fc00000,0x00000000,PDF_OK}, /* 122 */ {0x00800000,0x00000000,0xff800000,0x00000000,PDF_OK}, /* 123 */ {0x80800000,0x00000000,0x7f800000,0x00000000,PDF_OK}, /* 124 */ {0x01000000,0x00000000,0xff000000,0x00000000,PDF_OK}, /* 125 */ {0x81000000,0x00000000,0x7f000000,0x00000000,PDF_OK}, /* 126 */ {0x02000000,0x00000000,0xfe000000,0x00000000,PDF_OK}, /* 127 */ {0x82000000,0x00000000,0x7e000000,0x00000000,PDF_OK}, /* 128 */ {0x04000000,0x00000000,0xfc000000,0x00000000,PDF_OK}, /* 129 */ {0x84000000,0x00000000,0x7c000000,0x00000000,PDF_OK}, /* 130 */ {0x08000000,0x00000000,0xf8000000,0x00000000,PDF_OK}, /* 131 */ {0x88000000,0x00000000,0x78000000,0x00000000,PDF_OK}, /* 132 */ {0x10000000,0x00000000,0xf0000000,0x00000000,PDF_OK}, /* 133 */ {0x90000000,0x00000000,0x70000000,0x00000000,PDF_OK}, /* 134 */ {0x20000000,0x00000000,0xe0000000,0x00000000,PDF_OK}, /* 135 */ {0xa0000000,0x00000000,0x60000000,0x00000000,PDF_OK}, /* 136 */ {0x40000000,0x00000000,0xc0000000,0x00000000,PDF_OK}, /* 137 */ {0xc0000000,0x00000000,0x40000000,0x00000000,PDF_OK}, /* 138 */ {0x80000000,0x00000000,0x00000000,0x00000000,PDF_EOVERFLOW}, }; /* * Test: pdf_i64_neg_001 * Description: * Checks the negation of 0 * Success conditions: * The call should return PDF_OK */ START_TEST(pdf_i64_neg_001) { int i; for(i=0; i<sizeof(tests_neg)/sizeof(tests_neg[0]); i++) { pdf_status_t exp_st, calc_st; pdf_i64_t n, exp_m, calc_m; const KnownAnswer ka = tests_neg[i]; n = pdf_i64_new( ka.nh, ka.nl ); exp_m = pdf_i64_new( ka.mh, ka.ml ); exp_st = (pdf_status_t)ka.st; pdf_i64_neg(&calc_m, n, &calc_st); /* Courtesy output */ int failed = (exp_st != calc_st) || (exp_st == PDF_OK && pdf_i64_neq(exp_m, calc_m)); if(failed) { PDF_DEBUG_BASE (" Negation test %d failed\n", i + 1); #if defined(PDF_USE_BUILTIN_64BIT_SUPPORT) PDF_DEBUG_BASE (" Using built in 64 bit support\n"); #else PDF_DEBUG_BASE (" Not using built in 64 bit support\n"); #endif /* Expected product is only valid if expected status = PDF_OK */ PDF_DEBUG_BASE (" n = %08x,%08x\n", pdf_i64_high32 (a), pdf_i64_low32 (a)); PDF_DEBUG_BASE (" expected neg = %08x,%08x\n", pdf_i64_high32 (exp_m), pdf_i64_low32 (exp_m)); PDF_DEBUG_BASE (" calculated neg = %08x,%08x\n", pdf_i64_high32 (calc_m), pdf_i64_low32 (calc_m)); PDF_DEBUG_BASE (" expected status = %d\n", exp_st); PDF_DEBUG_BASE (" returned status = %d\n", calc_st); } /* Real test occurs here */ fail_if( exp_st != calc_st ); if( exp_st == PDF_OK ) { fail_if(pdf_i64_neq(exp_m, calc_m)); } } } END_TEST /* * Test case creation function */ TCase * test_pdf_i64_neg (void) { TCase *tc = tcase_create("pdf_i64_neg"); tcase_add_test(tc, pdf_i64_neg_001); return tc; } /* End of pdf-i64-neg.c */
