public void RayMissesCSGObject()
        {
            var c  = new shape.CSG(shape.Operation.Union, new shape.Sphere(), new shape.Cube());
            var r  = new Ray(pt.Point(0, 2, -5), pt.Vector(0, 0, 1));
            var xs = c.Intersect(r);

            Assert.Empty(xs);
        }
        public void RayHitsCSGObject()
        {
            var s1 = new shape.Sphere();
            var s2 = new shape.Sphere(transform.Translation(0, 0, 0.5));
            var c  = new shape.CSG(shape.Operation.Union, s1, s2);
            var r  = new Ray(pt.Point(0, 0, -5), pt.Vector(0, 0, 1));
            var xs = c.Intersect(r);

            Assert.Equal(2, xs.Count());
            Assert.Equal(4, xs[0].T);
            Assert.Equal(s1, xs[0].Object);
            Assert.Equal(6.5, xs[1].T);
            Assert.Equal(s2, xs[1].Object);
        }