Blob Blame Raw
/*
    ......... 2015 Ivan Mahonin

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

{
	name:
		(Two squares)
	a:
		(  ( ((0, 0), (200, 0), (200, 200), (0, 200)) )  )
	b:
		((((100, 100), (300, 100), (300, 300), (100, 300))))
	add:
		((((0, 0), (200, 0), (200, 100), (300, 100), (300, 300), (100, 300), (100, 200), (0, 200))))
	subtract:
		((((0, 0), (200, 0), (200, 100), (100, 100), (100, 200), (0, 200))))
	intersection:
		((((100, 100), (200, 100), (200, 200), (100, 200))))
	xor:
		( (((0, 0), (200, 0), (200, 100), (100, 100), (100, 200), (0, 200))),
	  	  (((200, 200), (200, 100), (300, 100), (300, 300), (100, 300), (100, 200))) )
}

{
	name:
		(Self touch)
	a:
		((( (100, 100), (200, 0), (400, 0), (400, 300), (0, 300), (0, 200),
		    (100, 100), (100, 200), (200, 200), (200, 100) )))
	b:
		( (( (100, 0), (200, 0), (200, 300), (100, 300) )),
		  (( (250, 100), (350, 100), (350, 200), (250, 200) )) )
	add:
		((( (100, 100), (100, 0), (400, 0), (400, 300), (0, 300), (0, 200) )))
	subtract:
		( ( ( (100, 100), (100, 300), (0, 300), (0, 200) ) ),
		  ( ( (200, 0), (400, 0), (400, 300), (200, 300) ),
		    ( (250, 100), (250, 200), (350, 200), (350, 100) ) ) )
	intersection:
		( (( (100, 100), (200, 0), (200, 100) )),
		  (( (100, 200), (200, 200), (200, 300), (100, 300) )),
		  (( (250, 100), (350, 100), (350, 200), (250, 200) )) )
	xor:
		( ( ( (100, 0), (200, 0), (100, 100) ) ),
		  ( ( (100, 100), (200, 100), (200, 0), (400, 0), (400, 300), (200, 300), (200, 200), (100, 200), (100, 300), (0, 300), (0, 200) ),
		    ( (250, 100), (250, 200), (350, 200), (350, 100) ) ) )
}

{
	name:
		(Bad contours - cross)
	badA:
		((( (0, 0), (0, 100), (200, 0), (200, 100) )))
	a:
		( (( (0, 0), (100, 50), (0, 100) )),
		  (( (200, 0), (200, 100), (100, 50) )) )
}

{
	name:
		(Bad contours - hole)
	badA:
		( (( (0, 0), (300, 0), (300, 300), (0, 300) )),
		  (( (100, 100), (200, 100), (200, 200), (100, 200) )) )
	a:
		(( ( (0, 0), (300, 0), (300, 300), (0, 300) ),
		   ( (100, 100), (100, 200), (200, 200), (200, 100) ) ))
}