summaryrefslogtreecommitdiff
path: root/src/pal/tests/palsuite/c_runtime/fwprintf/test12/test12.c
blob: abfda87a984136de56ee64974fb45ecb44b1671a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information. 
//

/*============================================================================
**
** Source:      test12.c
**
** Purpose:     Tests the (lowercase) hexadecimal specifier (%x).
**              This test is modeled after the sprintf series.
**
**
**==========================================================================*/

#include <palsuite.h>
#include "../fwprintf.h"

/* 
 * Depends on memcmp, strlen, fopen, fseek and fgets.
 */

int __cdecl main(int argc, char *argv[])
{
    int neg = -42;
    int pos = 0x1234ab;
    INT64 l = I64(0x1234567887654321);
    
    if (PAL_Initialize(argc, argv) != 0)
    {
        return(FAIL);
    }

    DoNumTest(convert("foo %x"), pos, "foo 1234ab");
    DoNumTest(convert("foo %lx"), pos, "foo 1234ab");
    DoNumTest(convert("foo %hx"), pos, "foo 34ab");
    DoNumTest(convert("foo %Lx"), pos, "foo 1234ab");
    DoI64Test(convert("foo %I64x"), l, "0x1234567887654321",
        "foo 1234567887654321", "foo 0x1234567887654321");
    DoNumTest(convert("foo %7x"), pos, "foo  1234ab");
    DoNumTest(convert("foo %-7x"), pos, "foo 1234ab ");
    DoNumTest(convert("foo %.1x"), pos, "foo 1234ab");
    DoNumTest(convert("foo %.7x"), pos, "foo 01234ab");
    DoNumTest(convert("foo %07x"), pos, "foo 01234ab");
    DoNumTest(convert("foo %#x"), pos, "foo 0x1234ab");
    DoNumTest(convert("foo %+x"), pos, "foo 1234ab");
    DoNumTest(convert("foo % x"), pos, "foo 1234ab");
    DoNumTest(convert("foo %+x"), neg, "foo ffffffd6");
    DoNumTest(convert("foo % x"), neg, "foo ffffffd6");

    PAL_Terminate();
    return PASS;
}