jdk-24/test/hotspot/jtreg/vmTestbase/nsk/share/native/README
Kim Barrett 998d0baab0 8324799: Use correct extension for C++ test headers
Reviewed-by: jwaters, gli, coleenp, lmesnik
2024-02-29 06:24:42 +00:00

184 lines
4.9 KiB
Plaintext

Copyright (c) 2003, 2024, 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.
---------------------------------------------------------------------------------
This directory contains source files of testbase_nsk native
framework, which provides support for native tests.
Source files:
nsk_tools.hpp
nsk_tools.cpp
Naming conventions:
macroses: NSK_*
functions: nsk_*
Also this directory provides support for running native threads
in a platform independent manner.
Source files:
native_thread.hpp
native_thread.cpp
Naming conventions:
functions: THREAD_*
The following source files declares a set of functions which
provides support for lists of various objects
Source files:
nsk_list.hpp
nsk_list.cpp
Naming conventions:
functions: nsk_list_*
---------------------------------------------------------------------------------
nsk_tools.hpp
Provides functions and macroses for the most usefull actions:
- print error message with arguments
NSK_COMPLAINn(format, arg1, ..., argn)
- print verbose message with arguments
NSK_DISPLAYn(format, arg1, ..., argn)
- trace action execution
NSK_TRACE(action)
- trace action, check result for true/false and print error if required
NSK_VERIFY(action)
NSK_VERIFY_NEGATIVE(action)
- set verbose and trace mode of test output
void nsk_setVerboseMode(int verbose);
int nsk_getVerboseMode();
void nsk_setTraceMode(int mode);
int nsk_getTraceMode();
- miscelaneous functions for printing messages
(hidden by above mentioned macroses)
Typical example of using the NSK_VERIFY macro
for accesing JVM native environment:
// jvm->GetEnv(jvm, &env, version)
if (!NSK_VERIFY(
jvm->GetEnv(&env, JNI_VERSION_1_2) == JNI_OK)) {
return JNI_ERR;
}
For more specific checks in invocations of JNI and JVMTI functions
use special macroses defined in share/jni and share/jvmti frameworks.
---------------------------------------------------------------------------------
native_thread.hpp
Provides platform-independent support for running native threads:
- manage native threads
void* THREAD_new(PROCEDURE procedure, void* context);
void* THREAD_start(void* thread);
void THREAD_waitFor(void* thread);
void THREAD_sleep(int seconds);
- get status of native threads
int THREAD_isStarted(void* thread);
int THREAD_hasFinished(void* thread);
int THREAD_status(void* thread);
---------------------------------------------------------------------------------
nsk_list.hpp
Provides support for lists of various objects:
- managing list
const void* nsk_list_Create();
int nsk_list_Destroy(const void *plist);
- managing elements
const void* nsk_list_Add(const void *plist, const void *p);
int nsk_list_Delete(const void *plist, int ind);
- getting element info
int nsk_list_getCount(const void *plist);
const void* nsk_list_Get(const void *plist, int ind);
Typical example:
int TOTAL_COUNT = 10;
typedef struct recordStruct {
int field1;
int field2;
} record;
main() {
int i;
record *rec;
const void *plist;
/* creating list */
plist = nsk_list_create();
/* adding new elements */
for (i = 0; i < TOTAL_COUNT; i ++) {
rec = (record *)malloc(sizeof(record));
rec->field1 = i;
rec->field2 = i * 10;
if (!nsk_list_add(plist, rec)) {
free((void *)rec);
}
}
/* getting elements */
for (i = 0; i < TOTAL_COUNT; i ++) {
rec = (record *)nsk_list_get(plist, i);
printf("%3d %3d\n", rec->field1, rec->field2);
}
/* deleteing elements */
for (i = 0; i < TOTAL_COUNT; i ++) {
rec = (record *)nsk_list_get(plist, i);
free(rec);
nsk_list_remove(plist, 0);
}
/* destroying list */
nsk_list_destroy(plist);
}
---------------------------------------------------------------------------------