/*-
 * #%L
 * Java implementation of the SciJava Ops matching engine.
 * %%
 * Copyright (C) 2016 - 2024 SciJava developers.
 * %%
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 * 
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 * #L%
 */
/*
 * This is autogenerated source code -- DO NOT EDIT. Instead, edit the
 * corresponding template in templates/ and rerun bin/generate.groovy.
 */

package org.scijava.ops.engine.adapt.functional;

import static org.junit.jupiter.api.Assertions.assertTrue;

import java.util.Arrays;

import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.scijava.ops.api.OpBuilder;
import org.scijava.ops.engine.AbstractTestEnvironment;
import org.scijava.ops.engine.OpBuilderTestOps;
import org.scijava.ops.engine.copy.CopyOpCollection;
import org.scijava.ops.engine.create.CreateOpCollection;
import org.scijava.types.Nil;

public class InplaceToFunctionAdaptTest extends AbstractTestEnvironment {

	@BeforeAll
	public static void AddNeededOps() {
		ops.register(new OpBuilderTestOps());
		ops.register(new CreateOpCollection());
		ops.register(new CopyOpCollection());
		Object[] adapters = objsFromNoArgConstructors(InplacesToFunctions.class.getDeclaredClasses());
		ops.register(adapters);
	}


	/** Matches a 1-arity inplace1 as a function1 */
	@Test
	public void testInplace1_1ToFunction1() {
		final double[] input = { 1, 2, 3 };
		double[] expected = { 1.0, 2.0, 3.0 };
		final double[] output = ops.op("test.mulArrays1_1") //
			.input(input) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 2-arity inplace1 as a function2 */
	@Test
	public void testInplace2_1ToFunction2() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		double[] expected = { 1.0, 4.0, 9.0 };
		final double[] output = ops.op("test.mulArrays2_1") //
			.input(input1, input2) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 2-arity inplace2 as a function2 */
	@Test
	public void testInplace2_2ToFunction2() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		double[] expected = { 1.0, 4.0, 9.0 };
		final double[] output = ops.op("test.mulArrays2_2") //
			.input(input1, input2) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 3-arity inplace1 as a function3 */
	@Test
	public void testInplace3_1ToFunction3() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		double[] expected = { 1.0, 8.0, 27.0 };
		final double[] output = ops.op("test.mulArrays3_1") //
			.input(input1, input2, input3) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 3-arity inplace2 as a function3 */
	@Test
	public void testInplace3_2ToFunction3() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		double[] expected = { 1.0, 8.0, 27.0 };
		final double[] output = ops.op("test.mulArrays3_2") //
			.input(input1, input2, input3) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 3-arity inplace3 as a function3 */
	@Test
	public void testInplace3_3ToFunction3() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		double[] expected = { 1.0, 8.0, 27.0 };
		final double[] output = ops.op("test.mulArrays3_3") //
			.input(input1, input2, input3) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 4-arity inplace1 as a function4 */
	@Test
	public void testInplace4_1ToFunction4() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		double[] expected = { 1.0, 16.0, 81.0 };
		final double[] output = ops.op("test.mulArrays4_1") //
			.input(input1, input2, input3, input4) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 4-arity inplace2 as a function4 */
	@Test
	public void testInplace4_2ToFunction4() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		double[] expected = { 1.0, 16.0, 81.0 };
		final double[] output = ops.op("test.mulArrays4_2") //
			.input(input1, input2, input3, input4) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 4-arity inplace3 as a function4 */
	@Test
	public void testInplace4_3ToFunction4() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		double[] expected = { 1.0, 16.0, 81.0 };
		final double[] output = ops.op("test.mulArrays4_3") //
			.input(input1, input2, input3, input4) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 4-arity inplace4 as a function4 */
	@Test
	public void testInplace4_4ToFunction4() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		double[] expected = { 1.0, 16.0, 81.0 };
		final double[] output = ops.op("test.mulArrays4_4") //
			.input(input1, input2, input3, input4) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 5-arity inplace1 as a function5 */
	@Test
	public void testInplace5_1ToFunction5() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		double[] expected = { 1.0, 32.0, 243.0 };
		final double[] output = ops.op("test.mulArrays5_1") //
			.input(input1, input2, input3, input4, input5) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 5-arity inplace2 as a function5 */
	@Test
	public void testInplace5_2ToFunction5() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		double[] expected = { 1.0, 32.0, 243.0 };
		final double[] output = ops.op("test.mulArrays5_2") //
			.input(input1, input2, input3, input4, input5) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 5-arity inplace3 as a function5 */
	@Test
	public void testInplace5_3ToFunction5() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		double[] expected = { 1.0, 32.0, 243.0 };
		final double[] output = ops.op("test.mulArrays5_3") //
			.input(input1, input2, input3, input4, input5) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 5-arity inplace4 as a function5 */
	@Test
	public void testInplace5_4ToFunction5() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		double[] expected = { 1.0, 32.0, 243.0 };
		final double[] output = ops.op("test.mulArrays5_4") //
			.input(input1, input2, input3, input4, input5) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 5-arity inplace5 as a function5 */
	@Test
	public void testInplace5_5ToFunction5() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		double[] expected = { 1.0, 32.0, 243.0 };
		final double[] output = ops.op("test.mulArrays5_5") //
			.input(input1, input2, input3, input4, input5) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 6-arity inplace1 as a function6 */
	@Test
	public void testInplace6_1ToFunction6() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		double[] expected = { 1.0, 64.0, 729.0 };
		final double[] output = ops.op("test.mulArrays6_1") //
			.input(input1, input2, input3, input4, input5, input6) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 6-arity inplace2 as a function6 */
	@Test
	public void testInplace6_2ToFunction6() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		double[] expected = { 1.0, 64.0, 729.0 };
		final double[] output = ops.op("test.mulArrays6_2") //
			.input(input1, input2, input3, input4, input5, input6) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 6-arity inplace3 as a function6 */
	@Test
	public void testInplace6_3ToFunction6() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		double[] expected = { 1.0, 64.0, 729.0 };
		final double[] output = ops.op("test.mulArrays6_3") //
			.input(input1, input2, input3, input4, input5, input6) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 6-arity inplace4 as a function6 */
	@Test
	public void testInplace6_4ToFunction6() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		double[] expected = { 1.0, 64.0, 729.0 };
		final double[] output = ops.op("test.mulArrays6_4") //
			.input(input1, input2, input3, input4, input5, input6) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 6-arity inplace5 as a function6 */
	@Test
	public void testInplace6_5ToFunction6() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		double[] expected = { 1.0, 64.0, 729.0 };
		final double[] output = ops.op("test.mulArrays6_5") //
			.input(input1, input2, input3, input4, input5, input6) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 6-arity inplace6 as a function6 */
	@Test
	public void testInplace6_6ToFunction6() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		double[] expected = { 1.0, 64.0, 729.0 };
		final double[] output = ops.op("test.mulArrays6_6") //
			.input(input1, input2, input3, input4, input5, input6) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 7-arity inplace1 as a function7 */
	@Test
	public void testInplace7_1ToFunction7() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		double[] expected = { 1.0, 128.0, 2187.0 };
		final double[] output = ops.op("test.mulArrays7_1") //
			.input(input1, input2, input3, input4, input5, input6, input7) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 7-arity inplace2 as a function7 */
	@Test
	public void testInplace7_2ToFunction7() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		double[] expected = { 1.0, 128.0, 2187.0 };
		final double[] output = ops.op("test.mulArrays7_2") //
			.input(input1, input2, input3, input4, input5, input6, input7) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 7-arity inplace3 as a function7 */
	@Test
	public void testInplace7_3ToFunction7() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		double[] expected = { 1.0, 128.0, 2187.0 };
		final double[] output = ops.op("test.mulArrays7_3") //
			.input(input1, input2, input3, input4, input5, input6, input7) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 7-arity inplace4 as a function7 */
	@Test
	public void testInplace7_4ToFunction7() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		double[] expected = { 1.0, 128.0, 2187.0 };
		final double[] output = ops.op("test.mulArrays7_4") //
			.input(input1, input2, input3, input4, input5, input6, input7) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 7-arity inplace5 as a function7 */
	@Test
	public void testInplace7_5ToFunction7() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		double[] expected = { 1.0, 128.0, 2187.0 };
		final double[] output = ops.op("test.mulArrays7_5") //
			.input(input1, input2, input3, input4, input5, input6, input7) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 7-arity inplace6 as a function7 */
	@Test
	public void testInplace7_6ToFunction7() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		double[] expected = { 1.0, 128.0, 2187.0 };
		final double[] output = ops.op("test.mulArrays7_6") //
			.input(input1, input2, input3, input4, input5, input6, input7) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 7-arity inplace7 as a function7 */
	@Test
	public void testInplace7_7ToFunction7() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		double[] expected = { 1.0, 128.0, 2187.0 };
		final double[] output = ops.op("test.mulArrays7_7") //
			.input(input1, input2, input3, input4, input5, input6, input7) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 8-arity inplace1 as a function8 */
	@Test
	public void testInplace8_1ToFunction8() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		double[] expected = { 1.0, 256.0, 6561.0 };
		final double[] output = ops.op("test.mulArrays8_1") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 8-arity inplace2 as a function8 */
	@Test
	public void testInplace8_2ToFunction8() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		double[] expected = { 1.0, 256.0, 6561.0 };
		final double[] output = ops.op("test.mulArrays8_2") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 8-arity inplace3 as a function8 */
	@Test
	public void testInplace8_3ToFunction8() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		double[] expected = { 1.0, 256.0, 6561.0 };
		final double[] output = ops.op("test.mulArrays8_3") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 8-arity inplace4 as a function8 */
	@Test
	public void testInplace8_4ToFunction8() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		double[] expected = { 1.0, 256.0, 6561.0 };
		final double[] output = ops.op("test.mulArrays8_4") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 8-arity inplace5 as a function8 */
	@Test
	public void testInplace8_5ToFunction8() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		double[] expected = { 1.0, 256.0, 6561.0 };
		final double[] output = ops.op("test.mulArrays8_5") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 8-arity inplace6 as a function8 */
	@Test
	public void testInplace8_6ToFunction8() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		double[] expected = { 1.0, 256.0, 6561.0 };
		final double[] output = ops.op("test.mulArrays8_6") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 8-arity inplace7 as a function8 */
	@Test
	public void testInplace8_7ToFunction8() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		double[] expected = { 1.0, 256.0, 6561.0 };
		final double[] output = ops.op("test.mulArrays8_7") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 8-arity inplace8 as a function8 */
	@Test
	public void testInplace8_8ToFunction8() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		double[] expected = { 1.0, 256.0, 6561.0 };
		final double[] output = ops.op("test.mulArrays8_8") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 9-arity inplace1 as a function9 */
	@Test
	public void testInplace9_1ToFunction9() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		double[] expected = { 1.0, 512.0, 19683.0 };
		final double[] output = ops.op("test.mulArrays9_1") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 9-arity inplace2 as a function9 */
	@Test
	public void testInplace9_2ToFunction9() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		double[] expected = { 1.0, 512.0, 19683.0 };
		final double[] output = ops.op("test.mulArrays9_2") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 9-arity inplace3 as a function9 */
	@Test
	public void testInplace9_3ToFunction9() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		double[] expected = { 1.0, 512.0, 19683.0 };
		final double[] output = ops.op("test.mulArrays9_3") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 9-arity inplace4 as a function9 */
	@Test
	public void testInplace9_4ToFunction9() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		double[] expected = { 1.0, 512.0, 19683.0 };
		final double[] output = ops.op("test.mulArrays9_4") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 9-arity inplace5 as a function9 */
	@Test
	public void testInplace9_5ToFunction9() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		double[] expected = { 1.0, 512.0, 19683.0 };
		final double[] output = ops.op("test.mulArrays9_5") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 9-arity inplace6 as a function9 */
	@Test
	public void testInplace9_6ToFunction9() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		double[] expected = { 1.0, 512.0, 19683.0 };
		final double[] output = ops.op("test.mulArrays9_6") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 9-arity inplace7 as a function9 */
	@Test
	public void testInplace9_7ToFunction9() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		double[] expected = { 1.0, 512.0, 19683.0 };
		final double[] output = ops.op("test.mulArrays9_7") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 9-arity inplace8 as a function9 */
	@Test
	public void testInplace9_8ToFunction9() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		double[] expected = { 1.0, 512.0, 19683.0 };
		final double[] output = ops.op("test.mulArrays9_8") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 9-arity inplace9 as a function9 */
	@Test
	public void testInplace9_9ToFunction9() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		double[] expected = { 1.0, 512.0, 19683.0 };
		final double[] output = ops.op("test.mulArrays9_9") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 10-arity inplace1 as a function10 */
	@Test
	public void testInplace10_1ToFunction10() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		double[] expected = { 1.0, 1024.0, 59049.0 };
		final double[] output = ops.op("test.mulArrays10_1") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 10-arity inplace2 as a function10 */
	@Test
	public void testInplace10_2ToFunction10() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		double[] expected = { 1.0, 1024.0, 59049.0 };
		final double[] output = ops.op("test.mulArrays10_2") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 10-arity inplace3 as a function10 */
	@Test
	public void testInplace10_3ToFunction10() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		double[] expected = { 1.0, 1024.0, 59049.0 };
		final double[] output = ops.op("test.mulArrays10_3") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 10-arity inplace4 as a function10 */
	@Test
	public void testInplace10_4ToFunction10() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		double[] expected = { 1.0, 1024.0, 59049.0 };
		final double[] output = ops.op("test.mulArrays10_4") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 10-arity inplace5 as a function10 */
	@Test
	public void testInplace10_5ToFunction10() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		double[] expected = { 1.0, 1024.0, 59049.0 };
		final double[] output = ops.op("test.mulArrays10_5") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 10-arity inplace6 as a function10 */
	@Test
	public void testInplace10_6ToFunction10() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		double[] expected = { 1.0, 1024.0, 59049.0 };
		final double[] output = ops.op("test.mulArrays10_6") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 10-arity inplace7 as a function10 */
	@Test
	public void testInplace10_7ToFunction10() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		double[] expected = { 1.0, 1024.0, 59049.0 };
		final double[] output = ops.op("test.mulArrays10_7") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 10-arity inplace8 as a function10 */
	@Test
	public void testInplace10_8ToFunction10() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		double[] expected = { 1.0, 1024.0, 59049.0 };
		final double[] output = ops.op("test.mulArrays10_8") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 10-arity inplace9 as a function10 */
	@Test
	public void testInplace10_9ToFunction10() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		double[] expected = { 1.0, 1024.0, 59049.0 };
		final double[] output = ops.op("test.mulArrays10_9") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 10-arity inplace10 as a function10 */
	@Test
	public void testInplace10_10ToFunction10() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		double[] expected = { 1.0, 1024.0, 59049.0 };
		final double[] output = ops.op("test.mulArrays10_10") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 11-arity inplace1 as a function11 */
	@Test
	public void testInplace11_1ToFunction11() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		double[] expected = { 1.0, 2048.0, 177147.0 };
		final double[] output = ops.op("test.mulArrays11_1") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 11-arity inplace2 as a function11 */
	@Test
	public void testInplace11_2ToFunction11() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		double[] expected = { 1.0, 2048.0, 177147.0 };
		final double[] output = ops.op("test.mulArrays11_2") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 11-arity inplace3 as a function11 */
	@Test
	public void testInplace11_3ToFunction11() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		double[] expected = { 1.0, 2048.0, 177147.0 };
		final double[] output = ops.op("test.mulArrays11_3") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 11-arity inplace4 as a function11 */
	@Test
	public void testInplace11_4ToFunction11() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		double[] expected = { 1.0, 2048.0, 177147.0 };
		final double[] output = ops.op("test.mulArrays11_4") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 11-arity inplace5 as a function11 */
	@Test
	public void testInplace11_5ToFunction11() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		double[] expected = { 1.0, 2048.0, 177147.0 };
		final double[] output = ops.op("test.mulArrays11_5") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 11-arity inplace6 as a function11 */
	@Test
	public void testInplace11_6ToFunction11() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		double[] expected = { 1.0, 2048.0, 177147.0 };
		final double[] output = ops.op("test.mulArrays11_6") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 11-arity inplace7 as a function11 */
	@Test
	public void testInplace11_7ToFunction11() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		double[] expected = { 1.0, 2048.0, 177147.0 };
		final double[] output = ops.op("test.mulArrays11_7") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 11-arity inplace8 as a function11 */
	@Test
	public void testInplace11_8ToFunction11() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		double[] expected = { 1.0, 2048.0, 177147.0 };
		final double[] output = ops.op("test.mulArrays11_8") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 11-arity inplace9 as a function11 */
	@Test
	public void testInplace11_9ToFunction11() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		double[] expected = { 1.0, 2048.0, 177147.0 };
		final double[] output = ops.op("test.mulArrays11_9") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 11-arity inplace10 as a function11 */
	@Test
	public void testInplace11_10ToFunction11() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		double[] expected = { 1.0, 2048.0, 177147.0 };
		final double[] output = ops.op("test.mulArrays11_10") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 11-arity inplace11 as a function11 */
	@Test
	public void testInplace11_11ToFunction11() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		double[] expected = { 1.0, 2048.0, 177147.0 };
		final double[] output = ops.op("test.mulArrays11_11") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 12-arity inplace1 as a function12 */
	@Test
	public void testInplace12_1ToFunction12() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		double[] expected = { 1.0, 4096.0, 531441.0 };
		final double[] output = ops.op("test.mulArrays12_1") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 12-arity inplace2 as a function12 */
	@Test
	public void testInplace12_2ToFunction12() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		double[] expected = { 1.0, 4096.0, 531441.0 };
		final double[] output = ops.op("test.mulArrays12_2") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 12-arity inplace3 as a function12 */
	@Test
	public void testInplace12_3ToFunction12() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		double[] expected = { 1.0, 4096.0, 531441.0 };
		final double[] output = ops.op("test.mulArrays12_3") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 12-arity inplace4 as a function12 */
	@Test
	public void testInplace12_4ToFunction12() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		double[] expected = { 1.0, 4096.0, 531441.0 };
		final double[] output = ops.op("test.mulArrays12_4") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 12-arity inplace5 as a function12 */
	@Test
	public void testInplace12_5ToFunction12() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		double[] expected = { 1.0, 4096.0, 531441.0 };
		final double[] output = ops.op("test.mulArrays12_5") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 12-arity inplace6 as a function12 */
	@Test
	public void testInplace12_6ToFunction12() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		double[] expected = { 1.0, 4096.0, 531441.0 };
		final double[] output = ops.op("test.mulArrays12_6") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 12-arity inplace7 as a function12 */
	@Test
	public void testInplace12_7ToFunction12() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		double[] expected = { 1.0, 4096.0, 531441.0 };
		final double[] output = ops.op("test.mulArrays12_7") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 12-arity inplace8 as a function12 */
	@Test
	public void testInplace12_8ToFunction12() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		double[] expected = { 1.0, 4096.0, 531441.0 };
		final double[] output = ops.op("test.mulArrays12_8") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 12-arity inplace9 as a function12 */
	@Test
	public void testInplace12_9ToFunction12() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		double[] expected = { 1.0, 4096.0, 531441.0 };
		final double[] output = ops.op("test.mulArrays12_9") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 12-arity inplace10 as a function12 */
	@Test
	public void testInplace12_10ToFunction12() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		double[] expected = { 1.0, 4096.0, 531441.0 };
		final double[] output = ops.op("test.mulArrays12_10") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 12-arity inplace11 as a function12 */
	@Test
	public void testInplace12_11ToFunction12() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		double[] expected = { 1.0, 4096.0, 531441.0 };
		final double[] output = ops.op("test.mulArrays12_11") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 12-arity inplace12 as a function12 */
	@Test
	public void testInplace12_12ToFunction12() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		double[] expected = { 1.0, 4096.0, 531441.0 };
		final double[] output = ops.op("test.mulArrays12_12") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 13-arity inplace1 as a function13 */
	@Test
	public void testInplace13_1ToFunction13() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		double[] expected = { 1.0, 8192.0, 1594323.0 };
		final double[] output = ops.op("test.mulArrays13_1") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 13-arity inplace2 as a function13 */
	@Test
	public void testInplace13_2ToFunction13() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		double[] expected = { 1.0, 8192.0, 1594323.0 };
		final double[] output = ops.op("test.mulArrays13_2") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 13-arity inplace3 as a function13 */
	@Test
	public void testInplace13_3ToFunction13() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		double[] expected = { 1.0, 8192.0, 1594323.0 };
		final double[] output = ops.op("test.mulArrays13_3") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 13-arity inplace4 as a function13 */
	@Test
	public void testInplace13_4ToFunction13() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		double[] expected = { 1.0, 8192.0, 1594323.0 };
		final double[] output = ops.op("test.mulArrays13_4") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 13-arity inplace5 as a function13 */
	@Test
	public void testInplace13_5ToFunction13() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		double[] expected = { 1.0, 8192.0, 1594323.0 };
		final double[] output = ops.op("test.mulArrays13_5") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 13-arity inplace6 as a function13 */
	@Test
	public void testInplace13_6ToFunction13() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		double[] expected = { 1.0, 8192.0, 1594323.0 };
		final double[] output = ops.op("test.mulArrays13_6") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 13-arity inplace7 as a function13 */
	@Test
	public void testInplace13_7ToFunction13() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		double[] expected = { 1.0, 8192.0, 1594323.0 };
		final double[] output = ops.op("test.mulArrays13_7") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 13-arity inplace8 as a function13 */
	@Test
	public void testInplace13_8ToFunction13() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		double[] expected = { 1.0, 8192.0, 1594323.0 };
		final double[] output = ops.op("test.mulArrays13_8") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 13-arity inplace9 as a function13 */
	@Test
	public void testInplace13_9ToFunction13() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		double[] expected = { 1.0, 8192.0, 1594323.0 };
		final double[] output = ops.op("test.mulArrays13_9") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 13-arity inplace10 as a function13 */
	@Test
	public void testInplace13_10ToFunction13() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		double[] expected = { 1.0, 8192.0, 1594323.0 };
		final double[] output = ops.op("test.mulArrays13_10") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 13-arity inplace11 as a function13 */
	@Test
	public void testInplace13_11ToFunction13() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		double[] expected = { 1.0, 8192.0, 1594323.0 };
		final double[] output = ops.op("test.mulArrays13_11") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 13-arity inplace12 as a function13 */
	@Test
	public void testInplace13_12ToFunction13() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		double[] expected = { 1.0, 8192.0, 1594323.0 };
		final double[] output = ops.op("test.mulArrays13_12") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 13-arity inplace13 as a function13 */
	@Test
	public void testInplace13_13ToFunction13() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		double[] expected = { 1.0, 8192.0, 1594323.0 };
		final double[] output = ops.op("test.mulArrays13_13") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 14-arity inplace1 as a function14 */
	@Test
	public void testInplace14_1ToFunction14() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		double[] expected = { 1.0, 16384.0, 4782969.0 };
		final double[] output = ops.op("test.mulArrays14_1") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 14-arity inplace2 as a function14 */
	@Test
	public void testInplace14_2ToFunction14() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		double[] expected = { 1.0, 16384.0, 4782969.0 };
		final double[] output = ops.op("test.mulArrays14_2") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 14-arity inplace3 as a function14 */
	@Test
	public void testInplace14_3ToFunction14() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		double[] expected = { 1.0, 16384.0, 4782969.0 };
		final double[] output = ops.op("test.mulArrays14_3") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 14-arity inplace4 as a function14 */
	@Test
	public void testInplace14_4ToFunction14() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		double[] expected = { 1.0, 16384.0, 4782969.0 };
		final double[] output = ops.op("test.mulArrays14_4") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 14-arity inplace5 as a function14 */
	@Test
	public void testInplace14_5ToFunction14() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		double[] expected = { 1.0, 16384.0, 4782969.0 };
		final double[] output = ops.op("test.mulArrays14_5") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 14-arity inplace6 as a function14 */
	@Test
	public void testInplace14_6ToFunction14() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		double[] expected = { 1.0, 16384.0, 4782969.0 };
		final double[] output = ops.op("test.mulArrays14_6") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 14-arity inplace7 as a function14 */
	@Test
	public void testInplace14_7ToFunction14() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		double[] expected = { 1.0, 16384.0, 4782969.0 };
		final double[] output = ops.op("test.mulArrays14_7") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 14-arity inplace8 as a function14 */
	@Test
	public void testInplace14_8ToFunction14() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		double[] expected = { 1.0, 16384.0, 4782969.0 };
		final double[] output = ops.op("test.mulArrays14_8") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 14-arity inplace9 as a function14 */
	@Test
	public void testInplace14_9ToFunction14() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		double[] expected = { 1.0, 16384.0, 4782969.0 };
		final double[] output = ops.op("test.mulArrays14_9") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 14-arity inplace10 as a function14 */
	@Test
	public void testInplace14_10ToFunction14() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		double[] expected = { 1.0, 16384.0, 4782969.0 };
		final double[] output = ops.op("test.mulArrays14_10") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 14-arity inplace11 as a function14 */
	@Test
	public void testInplace14_11ToFunction14() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		double[] expected = { 1.0, 16384.0, 4782969.0 };
		final double[] output = ops.op("test.mulArrays14_11") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 14-arity inplace12 as a function14 */
	@Test
	public void testInplace14_12ToFunction14() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		double[] expected = { 1.0, 16384.0, 4782969.0 };
		final double[] output = ops.op("test.mulArrays14_12") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 14-arity inplace13 as a function14 */
	@Test
	public void testInplace14_13ToFunction14() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		double[] expected = { 1.0, 16384.0, 4782969.0 };
		final double[] output = ops.op("test.mulArrays14_13") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 14-arity inplace14 as a function14 */
	@Test
	public void testInplace14_14ToFunction14() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		double[] expected = { 1.0, 16384.0, 4782969.0 };
		final double[] output = ops.op("test.mulArrays14_14") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 15-arity inplace1 as a function15 */
	@Test
	public void testInplace15_1ToFunction15() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		double[] expected = { 1.0, 32768.0, 1.4348907E7 };
		final double[] output = ops.op("test.mulArrays15_1") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 15-arity inplace2 as a function15 */
	@Test
	public void testInplace15_2ToFunction15() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		double[] expected = { 1.0, 32768.0, 1.4348907E7 };
		final double[] output = ops.op("test.mulArrays15_2") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 15-arity inplace3 as a function15 */
	@Test
	public void testInplace15_3ToFunction15() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		double[] expected = { 1.0, 32768.0, 1.4348907E7 };
		final double[] output = ops.op("test.mulArrays15_3") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 15-arity inplace4 as a function15 */
	@Test
	public void testInplace15_4ToFunction15() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		double[] expected = { 1.0, 32768.0, 1.4348907E7 };
		final double[] output = ops.op("test.mulArrays15_4") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 15-arity inplace5 as a function15 */
	@Test
	public void testInplace15_5ToFunction15() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		double[] expected = { 1.0, 32768.0, 1.4348907E7 };
		final double[] output = ops.op("test.mulArrays15_5") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 15-arity inplace6 as a function15 */
	@Test
	public void testInplace15_6ToFunction15() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		double[] expected = { 1.0, 32768.0, 1.4348907E7 };
		final double[] output = ops.op("test.mulArrays15_6") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 15-arity inplace7 as a function15 */
	@Test
	public void testInplace15_7ToFunction15() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		double[] expected = { 1.0, 32768.0, 1.4348907E7 };
		final double[] output = ops.op("test.mulArrays15_7") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 15-arity inplace8 as a function15 */
	@Test
	public void testInplace15_8ToFunction15() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		double[] expected = { 1.0, 32768.0, 1.4348907E7 };
		final double[] output = ops.op("test.mulArrays15_8") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 15-arity inplace9 as a function15 */
	@Test
	public void testInplace15_9ToFunction15() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		double[] expected = { 1.0, 32768.0, 1.4348907E7 };
		final double[] output = ops.op("test.mulArrays15_9") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 15-arity inplace10 as a function15 */
	@Test
	public void testInplace15_10ToFunction15() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		double[] expected = { 1.0, 32768.0, 1.4348907E7 };
		final double[] output = ops.op("test.mulArrays15_10") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 15-arity inplace11 as a function15 */
	@Test
	public void testInplace15_11ToFunction15() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		double[] expected = { 1.0, 32768.0, 1.4348907E7 };
		final double[] output = ops.op("test.mulArrays15_11") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 15-arity inplace12 as a function15 */
	@Test
	public void testInplace15_12ToFunction15() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		double[] expected = { 1.0, 32768.0, 1.4348907E7 };
		final double[] output = ops.op("test.mulArrays15_12") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 15-arity inplace13 as a function15 */
	@Test
	public void testInplace15_13ToFunction15() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		double[] expected = { 1.0, 32768.0, 1.4348907E7 };
		final double[] output = ops.op("test.mulArrays15_13") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 15-arity inplace14 as a function15 */
	@Test
	public void testInplace15_14ToFunction15() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		double[] expected = { 1.0, 32768.0, 1.4348907E7 };
		final double[] output = ops.op("test.mulArrays15_14") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 15-arity inplace15 as a function15 */
	@Test
	public void testInplace15_15ToFunction15() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		double[] expected = { 1.0, 32768.0, 1.4348907E7 };
		final double[] output = ops.op("test.mulArrays15_15") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 16-arity inplace1 as a function16 */
	@Test
	public void testInplace16_1ToFunction16() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		final double[] input16 = { 1, 2, 3 };
		double[] expected = { 1.0, 65536.0, 4.3046721E7 };
		final double[] output = ops.op("test.mulArrays16_1") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15, input16) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 16-arity inplace2 as a function16 */
	@Test
	public void testInplace16_2ToFunction16() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		final double[] input16 = { 1, 2, 3 };
		double[] expected = { 1.0, 65536.0, 4.3046721E7 };
		final double[] output = ops.op("test.mulArrays16_2") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15, input16) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 16-arity inplace3 as a function16 */
	@Test
	public void testInplace16_3ToFunction16() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		final double[] input16 = { 1, 2, 3 };
		double[] expected = { 1.0, 65536.0, 4.3046721E7 };
		final double[] output = ops.op("test.mulArrays16_3") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15, input16) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 16-arity inplace4 as a function16 */
	@Test
	public void testInplace16_4ToFunction16() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		final double[] input16 = { 1, 2, 3 };
		double[] expected = { 1.0, 65536.0, 4.3046721E7 };
		final double[] output = ops.op("test.mulArrays16_4") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15, input16) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 16-arity inplace5 as a function16 */
	@Test
	public void testInplace16_5ToFunction16() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		final double[] input16 = { 1, 2, 3 };
		double[] expected = { 1.0, 65536.0, 4.3046721E7 };
		final double[] output = ops.op("test.mulArrays16_5") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15, input16) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 16-arity inplace6 as a function16 */
	@Test
	public void testInplace16_6ToFunction16() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		final double[] input16 = { 1, 2, 3 };
		double[] expected = { 1.0, 65536.0, 4.3046721E7 };
		final double[] output = ops.op("test.mulArrays16_6") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15, input16) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 16-arity inplace7 as a function16 */
	@Test
	public void testInplace16_7ToFunction16() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		final double[] input16 = { 1, 2, 3 };
		double[] expected = { 1.0, 65536.0, 4.3046721E7 };
		final double[] output = ops.op("test.mulArrays16_7") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15, input16) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 16-arity inplace8 as a function16 */
	@Test
	public void testInplace16_8ToFunction16() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		final double[] input16 = { 1, 2, 3 };
		double[] expected = { 1.0, 65536.0, 4.3046721E7 };
		final double[] output = ops.op("test.mulArrays16_8") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15, input16) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 16-arity inplace9 as a function16 */
	@Test
	public void testInplace16_9ToFunction16() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		final double[] input16 = { 1, 2, 3 };
		double[] expected = { 1.0, 65536.0, 4.3046721E7 };
		final double[] output = ops.op("test.mulArrays16_9") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15, input16) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 16-arity inplace10 as a function16 */
	@Test
	public void testInplace16_10ToFunction16() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		final double[] input16 = { 1, 2, 3 };
		double[] expected = { 1.0, 65536.0, 4.3046721E7 };
		final double[] output = ops.op("test.mulArrays16_10") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15, input16) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 16-arity inplace11 as a function16 */
	@Test
	public void testInplace16_11ToFunction16() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		final double[] input16 = { 1, 2, 3 };
		double[] expected = { 1.0, 65536.0, 4.3046721E7 };
		final double[] output = ops.op("test.mulArrays16_11") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15, input16) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 16-arity inplace12 as a function16 */
	@Test
	public void testInplace16_12ToFunction16() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		final double[] input16 = { 1, 2, 3 };
		double[] expected = { 1.0, 65536.0, 4.3046721E7 };
		final double[] output = ops.op("test.mulArrays16_12") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15, input16) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 16-arity inplace13 as a function16 */
	@Test
	public void testInplace16_13ToFunction16() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		final double[] input16 = { 1, 2, 3 };
		double[] expected = { 1.0, 65536.0, 4.3046721E7 };
		final double[] output = ops.op("test.mulArrays16_13") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15, input16) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 16-arity inplace14 as a function16 */
	@Test
	public void testInplace16_14ToFunction16() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		final double[] input16 = { 1, 2, 3 };
		double[] expected = { 1.0, 65536.0, 4.3046721E7 };
		final double[] output = ops.op("test.mulArrays16_14") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15, input16) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 16-arity inplace15 as a function16 */
	@Test
	public void testInplace16_15ToFunction16() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		final double[] input16 = { 1, 2, 3 };
		double[] expected = { 1.0, 65536.0, 4.3046721E7 };
		final double[] output = ops.op("test.mulArrays16_15") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15, input16) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	/** Matches a 16-arity inplace16 as a function16 */
	@Test
	public void testInplace16_16ToFunction16() {
		final double[] input1 = { 1, 2, 3 };
		final double[] input2 = { 1, 2, 3 };
		final double[] input3 = { 1, 2, 3 };
		final double[] input4 = { 1, 2, 3 };
		final double[] input5 = { 1, 2, 3 };
		final double[] input6 = { 1, 2, 3 };
		final double[] input7 = { 1, 2, 3 };
		final double[] input8 = { 1, 2, 3 };
		final double[] input9 = { 1, 2, 3 };
		final double[] input10 = { 1, 2, 3 };
		final double[] input11 = { 1, 2, 3 };
		final double[] input12 = { 1, 2, 3 };
		final double[] input13 = { 1, 2, 3 };
		final double[] input14 = { 1, 2, 3 };
		final double[] input15 = { 1, 2, 3 };
		final double[] input16 = { 1, 2, 3 };
		double[] expected = { 1.0, 65536.0, 4.3046721E7 };
		final double[] output = ops.op("test.mulArrays16_16") //
			.input(input1, input2, input3, input4, input5, input6, input7, input8, input9, input10, input11, input12, input13, input14, input15, input16) //
			.outType(new Nil<double[]>()
			{}).apply();
		assertTrue(Arrays.equals(output, expected));
	}

	private OpBuilder name(String opName) {
		return ops.op(opName);
	}
}
