Update copyright to LGPL on all files
[dyninst.git] / testsuite / src / dyninst / test1_38_mutatee.c
1 /*
2  * Copyright (c) 1996-2009 Barton P. Miller
3  * 
4  * We provide the Paradyn Parallel Performance Tools (below
5  * described as "Paradyn") on an AS IS basis, and do not warrant its
6  * validity or performance.  We reserve the right to update, modify,
7  * or discontinue this software at any time.  We shall have no
8  * obligation to supply such updates or modifications or any other
9  * form of support to you.
10  * 
11  * By your use of Paradyn, you understand and agree that we (or any
12  * other person or entity with proprietary rights in Paradyn) are
13  * under no obligation to provide either maintenance services,
14  * update services, notices of latent defects, or correction of
15  * defects for Paradyn.
16  * 
17  * This library is free software; you can redistribute it and/or
18  * modify it under the terms of the GNU Lesser General Public
19  * License as published by the Free Software Foundation; either
20  * version 2.1 of the License, or (at your option) any later version.
21  * 
22  * This library is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
25  * Lesser General Public License for more details.
26  * 
27  * You should have received a copy of the GNU Lesser General Public
28  * License along with this library; if not, write to the Free Software
29  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
30  */
31 #include "mutatee_util.h"
32
33 /* group_mutatee_boilerplate.c is prepended to this file by the make system */
34
35 /* Externally accessed function prototypes.  These must have globally unique
36  * names.  I suggest following the pattern <testname>_<function>
37  */
38
39 void test1_38_call1();
40 /* Global variables accessed by the mutator.  These must have globally unique
41  * names.
42  */
43
44 int test1_38_globalVariable2 = -1;
45
46 /* Internally used function prototypes.  These should be declared with the
47  * keyword static so they don't interfere with other mutatees in the group.
48  */
49
50 static void funCall38_1();
51 static void funCall38_2();
52 static void funCall38_3();
53 static void funCall38_4();
54 static void funCall38_5();
55 static void funCall38_6();
56 static void funCall38_7();
57
58 /* Global variables used internally by the mutatee.  These should be declared
59  * with the keyword static so they don't interfere with other mutatees in the
60  * group.
61  */
62
63 static int globalVariable38_1 = 0;
64
65 /* Function definitions follow */
66
67 /* Test #38 (basic block addresses) */
68
69 int test1_38_mutatee() {
70     /* The only possible failures occur in the mutator. */
71   if (1 == test1_38_globalVariable2) {
72     logerror( "Passed test #38 (basic block addresses)\n" );
73     test_passes(testname);
74     return 0; /* Test passed */
75   } else {
76     return -1; /* Test failed */
77   }
78 }
79
80 /* the mutator checks if the addresses of these call* functions are within 
81    the address ranges of the basic blocks in the flowgraph */
82 void test1_38_call1() {
83     int i, j, k, m;
84
85     funCall38_1();
86
87     for (i = 0; i < 50; i++) {
88         m = i;
89         funCall38_2();
90
91         for (j = 0; i < 100; i++) {
92             for (k = 0; k < i ; i++) {
93                 funCall38_3();
94             }
95         }
96
97         funCall38_4();
98
99         while (m < 100) {
100             funCall38_5();
101             m++;
102         }
103
104         funCall38_6();
105     }
106
107     funCall38_7();
108 }
109
110 void funCall38_1() { globalVariable38_1++; }
111 void funCall38_2() { globalVariable38_1++; }
112 void funCall38_3() { globalVariable38_1++; }
113 void funCall38_4() { globalVariable38_1++; }
114 void funCall38_5() { globalVariable38_1++; }
115 void funCall38_6() { globalVariable38_1++; }
116 void funCall38_7() { globalVariable38_1++; }