Test cases for concentric. sdr> /program=Program.C2 C2 sdr> /// when ending in 1x4, only one reasonable reassembly //////////// sdr> heads right and left thru twice | 4B> 3Gv 3Bv 2G< | | 4G> 1B^ 1G^ 2B< sdr> centers run and roll | 3G> 4B> 2G< 3B< | | 1B> 4G> 2B< 1G< sdr> concentric pass the ocean | 1G^ 3Bv 2B^ 2Gv 4G^ 4Bv 1B^ 3Gv sdr> hinge and roll | 1Gv 2Bv 4Gv 1Bv | | 3B^ 2G^ 4B^ 3G^ sdr> concentric pass the ocean | 3B> | | 3G< | | 2G> | | 4B< | | 2B> | | 4G< | | 1G> | | 1B< sdr> /// XXX test diamonds sdr> /// lines to lines, columns to columns //////////////////// sdr> hinge | 3G^ 3Bv | | 4B^ 2Gv | | 4G^ 2Bv | | 1B^ 1Gv sdr> concentric walk and dodge | 1B^ 3G^ | | 4G^ 4B^ | | 2Bv 2Gv | | 1Gv 3Bv sdr> /setFormation(Formation.SQUARED_SET) | 3Gv 3Bv | | 4B> 2G< | | 4G> 2B< | | 1B^ 1G^ sdr> heads lead right | 4B> 3G< 1B> 2G< | | 4G> 3B< 1G> 2B< sdr> veer left | 4B> 1B> | | 4G> 1G> | | 3G< 2G< | | 3B< 2B< sdr> concentric walk and dodge | 3B< 4B> | | 3G< 4G> | | 2G< 1G> | | 2B< 1B> sdr> /// here lines-to-lines ends up in an opposite elongation sdr> concentric partner tag | 2B^ 2G^ 1G^ 1B^ | | 3Bv 3Gv 4Gv 4Bv sdr> bend the line | 2B> 1B< | | 2G> 1G< | | 3G> 4G< | | 3B> 4B< sdr> touch 1/4 | 1B^ 2Bv | | 1G^ 2Gv | | 4G^ 3Gv | | 4B^ 3Bv sdr> concentric partner tag | 2B< 2G< 1G> 1B> | | 3B< 3G< 4G> 4B> sdr> /// opposite elognation rule ////////////////// sdr> /setFormation(Formation.SQUARED_SET) | 3Gv 3Bv | | 4B> 2G< | | 4G> 2B< | | 1B^ 1G^ sdr> heads lead right | 4B> 3G< 1B> 2G< | | 4G> 3B< 1G> 2B< sdr> extend ; fan the top | 3B^ 4Gv 3G^ 4Bv 2B^ 1Gv 2G^ 1Bv sdr> concentric recycle | 4Gv 3Bv | | 4Bv 3Gv | | 1G^ 2B^ | | 1B^ 2G^ sdr> face right | 4G< 3B< | | 4B< 3G< | | 1G> 2B> | | 1B> 2G> sdr> fan the top | 4Gv 1Gv 4B^ 1B^ 3Bv 2Bv 3G^ 2G^ sdr> concentric bend the line | 1G> 2G< | | 4B> 3B< | | 1B> 2B< | | 4G> 3G< sdr> /exit