// Description: Testing for distance between aligned box and a sphere
// DocumentationOf: distance_alignedbox_sphere.h
#include "test/test_init.h"
#include <pastel/geometry/distance/distance_alignedbox_sphere.h>
TEST_CASE("distance_alignedbox_sphere (distance_alignedbox_sphere)")
{
    using Box = AlignedBox<dreal, 2>;
    using Sphere = Sphere<dreal, 2>;
    using Point = Vector<dreal, 2>;
    {
        // 5
        // 4 BBBB
        // 3 BBBB
        // 2
        // 1 
        // 0 S
        //  01234567
        Box box(Point(1, 3), Point(5, 5));
        Sphere sphere(Point(1, 0), 1);
        REQUIRE(distance2(box, sphere) == std::sqrt(square(0) + square(3)) - 1);
    }
    {
        // 5
        // 4 BBBB
        // 3 BBBB
        // 2
        // 1 
        // 0S
        //  01234567
        Box box(Point(1, 3), Point(5, 5));
        Sphere sphere(Point(0, 0), 1);
        REQUIRE(distance2(box, sphere) == std::sqrt(square(1) + square(3)) - 1);
    }
    {
        // 5
        // 4 BBBB
        // 3 BBBB
        // 2       S
        // 1 
        // 0 
        //  01234567
        Box box(Point(1, 3), Point(5, 5));
        Sphere sphere(Point(7, 2), 1);
        REQUIRE(distance2(box, sphere) == std::sqrt(square(2) + square(1)) - 1);
    }
    {
        // 5
        // 4 BBBB
        // 3 BBBS
        // 2 
        // 1 
        // 0 
        //  01234567
        Box box(Point(1, 3), Point(5, 5));
        Sphere sphere(Point(5, 3), 1);
        REQUIRE(distance2(box, sphere) == 0);
    }
    {
        // 5
        // 4 BBBB
        // 3 BBBB  S
        // 2 
        // 1 
        // 0 
        //  01234567
        Box box(Point(1, 3), Point(5, 5));
        Sphere sphere(Point(7, 3), 1);
        REQUIRE(distance2(box, sphere) == std::sqrt(square(2) + square(0)) - 1);
    }
}