File: GetWithTests.java

package info (click to toggle)
openjdk-25 25.0.1%2B8-1~deb13u1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 825,408 kB
  • sloc: java: 5,585,680; cpp: 1,333,948; xml: 1,321,242; ansic: 488,034; asm: 404,003; objc: 21,088; sh: 15,106; javascript: 13,265; python: 8,319; makefile: 2,518; perl: 357; awk: 351; pascal: 103; exp: 83; sed: 72; jsp: 24
file content (128 lines) | stat: -rw-r--r-- 3,918 bytes parent folder | download | duplicates (19)
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/*
 * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code 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
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

/*
 * Unit tests for JVMTI GetObjectsWithTags function
 *
 */

package nsk.jvmti.unit.heap;

import nsk.share.jvmti.unit.*;
import java.io.PrintStream;

public class GetWithTests {

    final static int JCK_STATUS_BASE = 95;
    final static int PASSED = 0;
    final static int FAILED = 2;

    public static void main(String args[]) {
        args = nsk.share.jvmti.JVMTITest.commonInit(args);

        // produce JCK-like exit status.
        System.exit(run(args, System.out) + JCK_STATUS_BASE);
    }

    public static int run(String args[], PrintStream out) {

        // create 4000 objects
        // tag 1000 with a tag of '1'
        // tag 2000 with a tag of '2'
        // leave 1000 untagged

        int tagged = 0;

        Object[] objs = new Object[4000];
        for (int i=0; i<4000; i++) {
            objs[i] = new Object();
        }
        for (int i=0; i<1000; i++) {
            Heap.setTag(objs[i], 1);
            tagged++;
        }
        for (int i=1000; i<3000; i++) {
            Heap.setTag(objs[i], 2);
            tagged++;
        }

        // call GetObjectsWithTags and check that it returns a count
        // of 3000

        long tags[] = { 1L, 2L };
        int count = Heap.getObjectsWithTags(tags.length, tags);

        if (count != tagged) {
            throw new RuntimeException(count + " objects tagged, expected " +
                tagged);
        }

        // now check that the object_results and tag_results are
        // the correct length

        Object[] object_results = Heap.objectResults();
        long[] tag_results = Heap.tagResults();

        if (object_results.length != count) {
            throw new RuntimeException("object_results.length is incorrect");
        }
        if (tag_results.length != count) {
            throw new RuntimeException("tag_results.length is incorrect");
        }


        // Now verify the results

        for (int i=0; i<count; i++) {
            Object o = object_results[i];
            long tag = tag_results[i];
            if (tag != 1 && tag != 2) {
                throw new RuntimeException("Bogus tag value: " + tag);
            }
            if (Heap.getTag(o) != tag) {
                throw new RuntimeException("tag mismatch!!");
            }

            // check that the object is one of our objects
            boolean found = false;
            int j=0;
            while (j<objs.length) {
                if (objs[j] == o) {
                    found = true;
                    break;
                }
                j++;
            }
            if (!found) {
                throw new RuntimeException("Tagged object not found");
            }

            // to prevent this object from being found again we set it to
            // null in the array.
            objs[j] = null;
        }

        return PASSED;
    }

}