summaryrefslogtreecommitdiff
path: root/support/regression/tests/bug-2208.c
blob: 6890d25391ace53f5270befc71105176c0f834c6 (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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/*
   bug-2208.c
*/

#include <testfwk.h>

#if !defined(__SDCC_mcs51) && !defined(__SDCC_pdk14) && !defined(__SDCC_pdk15) && !defined(__SDCC_pic14) // Lack of memory
typedef
    struct SDCCBUG_Card {
        signed char suit, rank;
    } SDCCBUG_Card;

typedef
    SDCCBUG_Card SDCCBUG_Cards[37];

SDCCBUG_Cards SDCCBUG_pack;
unsigned char SDCCBUG_packN;
unsigned char SDCCBUG_handN[2];
SDCCBUG_Cards SDCCBUG_hand[2];
signed char SDCCBUG_skill = 1;

void SDCCBUG_DealCardsTo (unsigned char player)
{
    unsigned char i, j;
    SDCCBUG_Card tmp;
    if ((int)SDCCBUG_handN[player] >= 6 || (int)SDCCBUG_packN == 0) {
        return;
    }
    i = (int)SDCCBUG_handN[player] + 1;
    while ((int)i <= 6) {
        if (SDCCBUG_skill == 4) {
            j = (int)SDCCBUG_packN - 3;
            if (SDCCBUG_pack[SDCCBUG_packN].rank > SDCCBUG_pack[j].rank) {
                  tmp.suit = SDCCBUG_pack[SDCCBUG_packN].suit;
            }
        }

        SDCCBUG_hand[player][i].suit = SDCCBUG_pack[SDCCBUG_packN].suit;
        SDCCBUG_hand[player][i].rank = SDCCBUG_pack[SDCCBUG_packN].rank;
        SDCCBUG_handN[player] = i;
        SDCCBUG_packN -= 1;

        if ((int)SDCCBUG_packN == 0) {
            return;
        }
        i += 1;
    }
}
#endif

void testBug(void)
{
#if !defined(__SDCC_mcs51) && !defined(__SDCC_pdk14) && !defined(__SDCC_pdk15) && !defined(__SDCC_pic14) // Lack of memory
	SDCCBUG_packN = 1;
	SDCCBUG_skill = 1;
	SDCCBUG_pack[SDCCBUG_packN].suit = 23;
	SDCCBUG_pack[SDCCBUG_packN].rank = 42;
	SDCCBUG_handN[0] = 0;

	SDCCBUG_DealCardsTo (0);

	ASSERT(SDCCBUG_hand[0][1].suit == 23);
	ASSERT(SDCCBUG_hand[0][1].rank == 42);
	ASSERT(!SDCCBUG_packN);
#endif
}