@Test
        public void testSphereColliding(){
            // spheres at an arbitrary location and is obviously not colliding
            Sphere s4441 = new Sphere(new Vector3f(4.0f,4.0f,4.0f),1.0f);
            Sphere s8881 = new Sphere(new Vector3f(8.0f,8.0f,8.0f),1.0f);
            Sphere s0004 = new Sphere(new Vector3f(),4.0f);
            Sphere s0505051 = new Sphere(new Vector3f(0.5f,0.5f,0.5f),1.0f);
            Sphere s050501 = new Sphere(new Vector3f(0.5f,0.5f,0.0f),1.0f);

            assertFalse(GJKSimplex.isColliding(s4441, SphereTest.UNIT_SPHERE));
            // Order shouldn't matter for detection
            assertFalse(GJKSimplex.isColliding(SphereTest.UNIT_SPHERE, s4441));
            assertFalse(GJKSimplex.isColliding(s4441, s050501));
            assertFalse(GJKSimplex.isColliding(s4441, s0505051));

            // According to the simplex algorithm two of the same object should be colliding
            // We handle this before we test them against each other to keep the detection simpler
            assertTrue(SphereTest.UNIT_SPHERE.isColliding(SphereTest.UNIT_SPHERE));
            assertEquals(SphereTest.UNIT_SPHERE.isColliding(SphereTest.UNIT_SPHERE), GJKSimplex.isColliding(SphereTest.UNIT_SPHERE, SphereTest.UNIT_SPHERE));
            assertEquals(s4441.isColliding(s4441),GJKSimplex.isColliding(s4441, s4441));

            // partially colliding Spheres
            assertTrue(GJKSimplex.isColliding(SphereTest.UNIT_SPHERE, s0505051));
            assertTrue(GJKSimplex.isColliding(s0505051,SphereTest.UNIT_SPHERE));

            // Partially Colliding
            assertTrue(GJKSimplex.isColliding(s050501, s0505051));

            // non unit radius
            assertTrue(GJKSimplex.isColliding(SphereTest.UNIT_SPHERE, s0004));
            assertFalse(GJKSimplex.isColliding(s4441, s0004));
            assertFalse(GJKSimplex.isColliding(s0004,s8881));
            // NOTE the case of 0 radius and 0 distance of each other is undefined, the algorithms differ with their interpretation
            for(int range = 1; range < 64; range++){
                for(int i = 0; i < 64; i++){
                    Sphere sphere1 = new Sphere(Vector3Test.getRandom(range),gen.nextFloat() * range / 64.0f);
                    Sphere sphere2 = new Sphere(Vector3Test.getRandom(range),gen.nextFloat() * range / 64.0f);
                    try {
                        assertEquals(sphere1.isColliding(sphere2),GJKSimplex.isColliding(sphere1, sphere2));
                        assertEquals(sphere2.isColliding(sphere1),GJKSimplex.isColliding(sphere2, sphere1));
                    } catch (AssertionError e){
                        System.err.println(e);
                        System.err.println("Distance " + sphere1.distance(sphere2));
                        System.err.println(sphere1);
                        System.err.println(sphere2);
                        throw e;
                    }
                }
                //System.out.print(".");
            }
        }