// Path: kendzi-straight-skeleton/src/main/java/kendzi/math/geometry/skeleton/circular/Edge.java
// public class Edge extends CircularNode {
// 
//     private Point2d begin;
//     private Point2d end;
// 
//     private Ray2d bisectorPrevious;
//     private Ray2d bisectorNext;
// 
//     private LineLinear2d lineLinear2d;
// 
//     private Vector2d norm;
// 
//     public Edge(Point2d begin, Point2d end) {
//         this.begin = begin;
//         this.end = end;
// 
//         this.lineLinear2d = new LineLinear2d(begin, end);
// 
//         this.norm = new Vector2d(end);
//         this.norm.sub(begin);
//         this.norm.normalize();
// 
//     }
// 
//     @Override
//     public Edge next() {
//         return (Edge) super.next();
//     }
// 
//     @Override
//     public Edge previous() {
//         return (Edge) super.previous();
//     }
// 
//     public LineParametric2d getLineParametric2d() {
//         return new LineParametric2d(begin, norm);
//     }
// 
//     public LineLinear2d getLineLinear() {
//         return this.lineLinear2d;
//     }
// 
//     public Vector2d getNorm() {
//         return this.norm;
//     }
// 
//     /*
//      * (non-Javadoc)
//      * @see java.lang.Object#toString()
//      */
//     @Override
//     public String toString() {
//         return "EdgeEntry [p1=" + this.begin + ", p2=" + this.end + "]";
//     }
// 
//     public Point2d getBegin() {
//         return begin;
//     }
// 
//     public Point2d getEnd() {
//         return end;
//     }
// 
//     public Ray2d getBisectorPrevious() {
//         return bisectorPrevious;
//     }
// 
//     public Ray2d getBisectorNext() {
//         return bisectorNext;
//     }
// 
//     public LineLinear2d getLineLinear2d() {
//         return lineLinear2d;
//     }
// 
//     public void setBisectorPrevious(Ray2d bisectorPrevious) {
//         this.bisectorPrevious = bisectorPrevious;
//     }
// 
//     public void setBisectorNext(Ray2d bisectorNext) {
//         this.bisectorNext = bisectorNext;
//     }
// }


import org.junit.Test;
import static org.junit.Assert.*;
import javax.vecmath.Point2d;
import kendzi.math.geometry.skeleton.circular.Edge;

    @Test(expected = IllegalStateException.class)
    public void test5() {
        FaceNode n1 = debugNewQueue("n1", true);
        FaceNode n2 = debugNewQueue("n2", true);

        n1.addPush(n2);

        fail();
    }

    private FaceNode debugNode(final String name) {
        return new FaceNode(null) {
            @Override
            public String toString() {
                return name;
            }
        };
    }

    private FaceNode debugNewQueue(final String name, boolean edge) {
        FaceQueue fq = new FaceQueue();
        FaceNode fn = new FaceNode(null) {
            @Override
            public String toString() {
                return name;
            }
        };
        fq.addFirst(fn);
        if (edge) {
// Path: kendzi-straight-skeleton/src/main/java/kendzi/math/geometry/skeleton/circular/Edge.java
// public class Edge extends CircularNode {
// 
//     private Point2d begin;
//     private Point2d end;
// 
//     private Ray2d bisectorPrevious;
//     private Ray2d bisectorNext;
// 
//     private LineLinear2d lineLinear2d;
// 
//     private Vector2d norm;
// 
//     public Edge(Point2d begin, Point2d end) {
//         this.begin = begin;
//         this.end = end;
// 
//         this.lineLinear2d = new LineLinear2d(begin, end);
// 
//         this.norm = new Vector2d(end);
//         this.norm.sub(begin);
//         this.norm.normalize();
// 
//     }
// 
//     @Override
//     public Edge next() {
//         return (Edge) super.next();
//     }
// 
//     @Override
//     public Edge previous() {
//         return (Edge) super.previous();
//     }
// 
//     public LineParametric2d getLineParametric2d() {
//         return new LineParametric2d(begin, norm);
//     }
// 
//     public LineLinear2d getLineLinear() {
//         return this.lineLinear2d;
//     }
// 
//     public Vector2d getNorm() {
//         return this.norm;
//     }
// 
//     /*
//      * (non-Javadoc)
//      * @see java.lang.Object#toString()
//      */
//     @Override
//     public String toString() {
//         return "EdgeEntry [p1=" + this.begin + ", p2=" + this.end + "]";
//     }
// 
//     public Point2d getBegin() {
//         return begin;
//     }
// 
//     public Point2d getEnd() {
//         return end;
//     }
// 
//     public Ray2d getBisectorPrevious() {
//         return bisectorPrevious;
//     }
// 
//     public Ray2d getBisectorNext() {
//         return bisectorNext;
//     }
// 
//     public LineLinear2d getLineLinear2d() {
//         return lineLinear2d;
//     }
// 
//     public void setBisectorPrevious(Ray2d bisectorPrevious) {
//         this.bisectorPrevious = bisectorPrevious;
//     }
// 
//     public void setBisectorNext(Ray2d bisectorNext) {
//         this.bisectorNext = bisectorNext;
//     }
// }


// Path: kendzi-straight-skeleton/src/test/java/kendzi/math/geometry/skeleton/path/FaceQueueUtilTest.java
import org.junit.Test;
import static org.junit.Assert.*;
import javax.vecmath.Point2d;
import kendzi.math.geometry.skeleton.circular.Edge;


    @Test(expected = IllegalStateException.class)
    public void test5() {
        FaceNode n1 = debugNewQueue("n1", true);
        FaceNode n2 = debugNewQueue("n2", true);

        n1.addPush(n2);

        fail();
    }

    private FaceNode debugNode(final String name) {
        return new FaceNode(null) {
            @Override
            public String toString() {
                return name;
            }
        };
    }

    private FaceNode debugNewQueue(final String name, boolean edge) {
        FaceQueue fq = new FaceQueue();
        FaceNode fn = new FaceNode(null) {
            @Override
            public String toString() {
                return name;
            }
        };
        fq.addFirst(fn);
        if (edge) {
            fq.setEdge(new Edge(new Point2d(), new Point2d()));