void Start()
    {
        CloneExisting();

        input  = new NativeArray <TestableData>(Testable.All.Count, Allocator.Persistent);
        output = new NativeArray <TestableData>(Testable.All.Count, Allocator.Persistent);

        int i = 0;

        foreach (var t in Testable.All)
        {
            var d = new TestableData();
            d.position = new float4(t.transform.position.x, t.transform.position.y, t.transform.position.z, 0);
            d.mass     = t.mass;
            d.rotation = t.transform.rotation;
            input[i]   = d;
            i         += 1;
        }
    }
        public void Execute()
        {
            for (int i = 0; i < Input.Length; i++)
            {
                TestableData result = Input[i];

                result.position += result.velocity * deltaTime;
                result.rotation  = result.rotation *
                                   Quaternion.AngleAxis(30 * deltaTime, Vector3.up) *
                                   Quaternion.AngleAxis(45 * deltaTime, Vector3.forward);
                result.velocity += result.acceleration * deltaTime;

                result.acceleration = (center - result.position) * 0.5f;

#if !NO_INTERACTION
                for (int j = 0; j < Input.Length; j++)
                {
                    if (i == j)
                    {
                        continue;
                    }
                    var other    = Input[j];
                    var delta    = other.position - result.position;
                    var distance = math.length(delta);
                    if (distance <= 0.001f)
                    {
                        continue;
                    }
                    var dir = delta / distance;
                    result.acceleration -= dir * 0.01f / distance;
                }
#endif

                result.acceleration /= result.mass * 10;

                Output[i] = result;
            }
        }