1 package hat;
2
3 /*
4 * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
5 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6 *
7 * This code is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License version 2 only, as
9 * published by the Free Software Foundation.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26
27 import hat.buffer.S32Array;
28 import org.testng.Assert;
29 import org.testng.annotations.Test;
30
31 import jdk.incubator.code.CodeReflection;
32
33 import java.lang.invoke.MethodHandles;
34
35
36 /*
37 * @test
38 * @run testng hat.CustomOpTest
39 */
40
41 public class SquaresTest {
42 @CodeReflection
43 public static void squareKernel(KernelContext kc, S32Array s32Array) {
44 if (kc.x<kc.maxX){
45 int value = s32Array.array(kc.x); // arr[cc.x]
46 s32Array.array(kc.x, value * value); // arr[cc.x]=value*value
47 }
48 }
49
50 @CodeReflection
51 public static void square(ComputeContext cc, S32Array s32Array) {
52 cc.dispatchKernel(s32Array.length(),
53 kc -> squareKernel(kc, s32Array)
54 );
55 }
56
57 @Test
58 void testSquares(){
59
60 var accelerator = new Accelerator(MethodHandles.lookup());
61 var arr = S32Array.create(accelerator, 32);
62 for (int i = 0; i < arr.length(); i++) {
63 arr.array(i, i);
64 }
65 accelerator.compute(
66 cc -> SquaresTest.square(cc, arr) //QuotableComputeContextConsumer
67 ); // extends Quotable, Consumer<ComputeContext>
68 for (int i = 0; i < arr.length(); i++) {
69 Assert.assertEquals(i*i, arr.array(i));
70 }
71 }
72
73 }