public static void main(String[] args)
	{
		final MicroBenchmark bench = new MicroBenchmark();
		final int len = 1024;
		bench.logTime("start");
		testAddSubtract();
		testLinearCombination();
		testMatrixMultiply();
		testMatrixMultiplyFast();
		testMatrixMultiplyStrassen();
		//final int len = 1024;
		final DoubleMatrix2D one = DoubleMatrix2D.random(len,len);
		final DoubleMatrix2D two = DoubleMatrix2D.random(len,len);
		//		final DoubleMatrix2D one = DoubleMatrix2D.diagonal(new double[]{1,2,1,1});
		//		final DoubleMatrix2D two = DoubleMatrix2D.diagonal(new double[]{2,1,1,1});
		DoubleMatrix2D foo = null;
		testMatrixMultiply(one,two);
		System.out.println("passed");
		bench.logTime("one");
		for (int i = 0; i < 2; i++)
			foo = matrixMultiplyFast(one,two);
		bench.logTime("Warmed up");
		for (int i = 0; i < 5; i++)
			foo = matrixMultiplyFast(two,one);
		bench.logTime("done");

		if (true) return;

		bench.logTime("start");
		final double[] data = shift(random(len),-.5);
		bench.logTime("random");
		double fast,medium,slow;
		fast = medium = slow = 0;

		for (int i = 0; i < 100; i++)
		{
			fast = sumFast(data);
			slow = sum(data);
			medium = sumNaive(data);
		}
		compare("FS",fast,slow);
		compare("MS",medium,slow);
		compare("FM",fast,medium);

		bench.logTime("warmup");
		for (int i = 0; i < 100; i++)
			sum(data);
		bench.logTime("slow");
		for (int i = 0; i < 100; i++)
			sumFast(data);
		bench.logTime("fast");
		for (int i = 0; i < 100; i++)
			sumNaive(data);
		bench.logTime("mine");
	}