Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/hotspot/jtreg/compiler/intrinsics/sha/sanity/DigestSanityTestBase.java
41161 views
1
/*
2
* Copyright (c) 2014, 2020, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
package compiler.intrinsics.sha.sanity;
25
26
import compiler.intrinsics.sha.TestDigest;
27
import compiler.testlibrary.intrinsics.Verifier;
28
import sun.hotspot.WhiteBox;
29
30
import java.io.FileOutputStream;
31
import java.io.IOException;
32
import java.util.Objects;
33
import java.util.Properties;
34
import java.util.function.BooleanSupplier;
35
36
/**
37
* Base class for sanity tests on SHA intrinsics support.
38
*/
39
public class DigestSanityTestBase {
40
protected static final String MD5_INTRINSIC_ID
41
= "_md5_implCompress";
42
protected static final String SHA1_INTRINSIC_ID
43
= "_sha_implCompress";
44
protected static final String SHA256_INTRINSIC_ID
45
= "_sha2_implCompress";
46
protected static final String SHA512_INTRINSIC_ID
47
= "_sha5_implCompress";
48
protected static final String SHA3_INTRINSIC_ID
49
= "_sha3_implCompress";
50
protected static final String MB_INTRINSIC_ID
51
= "_digestBase_implCompressMB";
52
53
private static final WhiteBox WHITE_BOX = WhiteBox.getWhiteBox();
54
private static final int MSG_SIZE = 1024;
55
private static final int OFFSET = 0;
56
private static final int ITERATIONS = 10000;
57
private static final int WARMUP_ITERATIONS = 1;
58
private static final String PROVIDER = "SUN";
59
60
private final BooleanSupplier predicate;
61
private final String intrinsicID;
62
63
/**
64
* Construct the new test on intrinsic with ID {@code intrinsicID},
65
* which is expected to be emitted if {@code predicate} is evaluated to
66
* {@code true}.
67
*
68
* @param predicate The predicate indicating if the intrinsic is expected to
69
* be used.
70
* @param intrinsicID The ID of the intrinsic to be tested.
71
*/
72
protected DigestSanityTestBase(BooleanSupplier predicate, String intrinsicID) {
73
this.predicate = predicate;
74
this.intrinsicID = intrinsicID;
75
}
76
77
/**
78
* Run the test and dump properties to file.
79
*
80
* @throws Exception when something went wrong.
81
*/
82
public final void test() throws Exception {
83
String algorithm = Objects.requireNonNull(
84
System.getProperty("algorithm"),
85
"Algorithm name should be specified.");
86
87
dumpProperties();
88
89
TestDigest.testDigest(DigestSanityTestBase.PROVIDER, algorithm,
90
DigestSanityTestBase.MSG_SIZE, DigestSanityTestBase.OFFSET,
91
DigestSanityTestBase.ITERATIONS,
92
DigestSanityTestBase.WARMUP_ITERATIONS);
93
}
94
95
/**
96
* Dump properties containing information about the tested intrinsic name
97
* and whether or not is should be used to the file
98
* <LogFile value>.verify.properties.
99
*
100
* @throws IOException when something went wrong during dumping to file.
101
*/
102
private void dumpProperties() throws IOException {
103
Properties properties = new Properties();
104
properties.setProperty(Verifier.INTRINSIC_NAME_PROPERTY, intrinsicID);
105
properties.setProperty(Verifier.INTRINSIC_IS_EXPECTED_PROPERTY,
106
String.valueOf(predicate.getAsBoolean()));
107
108
String logFileName
109
= DigestSanityTestBase.WHITE_BOX.getStringVMFlag("LogFile");
110
FileOutputStream fileOutputStream = new FileOutputStream(logFileName
111
+ Verifier.PROPERTY_FILE_SUFFIX);
112
113
properties.store(fileOutputStream, null);
114
fileOutputStream.close();
115
}
116
}
117
118