private static void testSpd2(LocalDiffusionKernel ldk) { int n1 = 5; int n2 = 6; for (int iter=0; iter<10; ++iter) { float[][] s = randfloat(n1,n2); float[][] x = sub(randfloat(n1,n2),0.5f); float[][] y = sub(randfloat(n1,n2),0.5f); float[][] dx = zerofloat(n1,n2); float[][] dy = zerofloat(n1,n2); ldk.apply(1.0f,s,x,dx); ldk.apply(1.0f,s,y,dy); float xdx = dot(x,dx); float ydy = dot(y,dy); float ydx = dot(y,dx); float xdy = dot(x,dy); assertTrue(xdx>=0.0f); assertTrue(ydy>=0.0f); assertEquals(xdy,ydx,0.0001); } } private static void testSpd2RandomTensors(LocalDiffusionKernel ldk) {
private static void testSpd3(LocalDiffusionKernel ldk) { int n1 = 5; int n2 = 6; int n3 = 7; for (int iter=0; iter<10; ++iter) { float[][][] s = randfloat(n1,n2,n3); float[][][] x = sub(randfloat(n1,n2,n3),0.5f); float[][][] y = sub(randfloat(n1,n2,n3),0.5f); float[][][] dx = zerofloat(n1,n2,n3); float[][][] dy = zerofloat(n1,n2,n3); ldk.apply(null,1.0f,s,x,dx); ldk.apply(null,1.0f,s,y,dy); float xdx = dot(x,dx); float ydy = dot(y,dy); float ydx = dot(y,dx); float xdy = dot(x,dy); assertTrue(xdx>=0.0f); assertTrue(ydy>=0.0f); assertEquals(xdy,ydx,0.0001); } } private static float dot(float[][] x, float[][] y) {
private static void testSpd2RandomTensors(LocalDiffusionKernel ldk) { int n1 = 5; int n2 = 6; for (int iter=0; iter<10; ++iter) { float[][] s = randfloat(n1,n2); float[][] x = sub(randfloat(n1,n2),0.5f); float[][] y = sub(randfloat(n1,n2),0.5f); float[][] dx = zerofloat(n1,n2); float[][] dy = zerofloat(n1,n2); Tensors2 t = new RandomTensors2(n1,n2); ldk.apply(t,1.0f,s,x,dx); ldk.apply(t,1.0f,s,y,dy); float xdx = dot(x,dx); float ydy = dot(y,dy); float ydx = dot(y,dx); float xdy = dot(x,dy); assertTrue(xdx>=0.0f); assertTrue(ydy>=0.0f); assertEquals(xdy,ydx,0.0001); } } private static void testSpd3(LocalDiffusionKernel ldk) {