| 866 | } |
| 867 | |
| 868 | func TestPathAnd(t *testing.T) { |
| 869 | var tts = []struct { |
| 870 | p, q string |
| 871 | r string |
| 872 | }{ |
| 873 | {"L0 10L10 10L10 0z", "", ""}, |
| 874 | {"", "L0 10L10 10L10 0z", ""}, |
| 875 | |
| 876 | // overlapping polygons |
| 877 | {"L10 0L5 10z", "M0 5L10 5L5 15z", "M2.5 5L7.5 5L5 10z"}, |
| 878 | {"L10 0L5 10z", "M0 5L5 15L10 5z", "M2.5 5L7.5 5L5 10z"}, |
| 879 | {"L5 10L10 0z", "M0 5L10 5L5 15z", "M2.5 5L7.5 5L5 10z"}, |
| 880 | {"L5 10L10 0z", "M0 5L5 15L10 5z", "M2.5 5L7.5 5L5 10z"}, |
| 881 | |
| 882 | // non-overlapping polygons |
| 883 | {"L10 0L5 10z", "M0 10L10 10L5 20z", ""}, |
| 884 | |
| 885 | // touching edges |
| 886 | {"L2 0L2 2L0 2z", "M2 0L4 0L4 2L2 2z", ""}, |
| 887 | {"L2 0L2 2L0 2z", "M2 1L4 1L4 3L2 3z", ""}, |
| 888 | |
| 889 | // containment |
| 890 | {"L10 0L5 10z", "M2 2L8 2L5 8z", "M2 2L8 2L5 8z"}, |
| 891 | {"M2 2L8 2L5 8z", "L10 0L5 10z", "M2 2L8 2L5 8z"}, |
| 892 | {"L2 0L2 1L0 1z", "L1 0L1 1L0 1z", "L1 0L1 1L0 1z"}, |
| 893 | {"L2 0L2 1L0 1z", "L0 1L1 1L1 0z", "L1 0L1 1L0 1z"}, |
| 894 | {"L1 0L1 1L0 1z", "L2 0L2 1L0 1z", "L1 0L1 1L0 1z"}, |
| 895 | {"L3 0L3 1L0 1z", "M1 0L2 0L2 1L1 1z", "M1 0L2 0L2 1L1 1z"}, |
| 896 | {"L3 0L3 1L0 1z", "M1 0L1 1L2 1L2 0z", "M1 0L2 0L2 1L1 1z"}, |
| 897 | {"L2 0L2 2L0 2z", "L1 0L1 1L0 1z", "L1 0L1 1L0 1z"}, |
| 898 | {"L1 0L1 1L0 1z", "L2 0L2 2L0 2z", "L1 0L1 1L0 1z"}, |
| 899 | |
| 900 | // equal |
| 901 | {"L10 0L5 10z", "L10 0L5 10z", "L10 0L5 10z"}, |
| 902 | {"L10 0L5 10z", "L5 10L10 0z", "L10 0L5 10z"}, |
| 903 | {"L5 10L10 0z", "L10 0L5 10z", "L10 0L5 10z"}, |
| 904 | {"L5 10L10 0z", "L5 10L10 0z", "L10 0L5 10z"}, |
| 905 | {"L10 -10L20 0L10 10z", "A10 10 0 0 0 20 0A10 10 0 0 0 0 0z", "L10 -10L20 0L10 10z"}, |
| 906 | //{"L10 -10L20 0L10 10z", "Q10 0 10 10Q10 0 20 0Q10 0 10 -10Q10 0 0 0z", "Q10 0 10 -10Q10 0 20 0Q10 0 10 10Q10 0 0 0z"}, // TODO |
| 907 | |
| 908 | // partly parallel |
| 909 | {"M1 3L4 3L4 4L6 6L6 7L1 7z", "M9 3L4 3L4 7L9 7z", "M4 4L6 6L6 7L4 7z"}, |
| 910 | {"M1 3L6 3L6 4L4 6L4 7L1 7z", "M9 3L4 3L4 7L9 7z", "M4 3L6 3L6 4L4 6z"}, |
| 911 | {"M1 3L6 3L6 4L4 6L5 7L1 7z", "M9 3L4 3L4 6L5 7L9 7z", "M4 3L6 3L6 4L4 6z"}, |
| 912 | {"L3 0L3 1L0 1z", "M1 -0.1L2 -0.1L2 1.1L1 1.1z", "M1 0L2 0L2 1L1 1z"}, |
| 913 | {"L10 0L10 10L0 10z", "M2 0L8 0L8 6L 2 6z", "M2 0L8 0L8 6L 2 6z"}, |
| 914 | |
| 915 | // figure 10 from Martinez et al. |
| 916 | {"L3 0L3 3L0 3z", "M1 2L2 2L2 3L1 3z", "M1 2L2 2L2 3L1 3z"}, |
| 917 | {"L3 0L3 3L0 3z", "M1 3L2 3L2 4L1 4z", ""}, |
| 918 | |
| 919 | // fully parallel |
| 920 | {"L10 0L10 5L7.5 7.5L5 5L2.5 7.5L5 10L7.5 7.5L10 10L10 15L0 15z", "M7.5 7.5L5 10L2.5 7.5L5 5z", ""}, |
| 921 | |
| 922 | // subpaths on A cross at the same point on B |
| 923 | {"L1 0L1 1L0 1zM2 -1L2 2L1 2L1 1.1L1.6 0.5L1 -0.1L1 -1z", "M2 -1L2 2L1 2L1 -1z", "M1 -1L2 -1L2 2L1 2L1 1.1L1.6 0.5L1 -0.1z"}, |
| 924 | {"L1 0L1 1L0 1zM2 -1L2 2L1 2L1 1L1.5 0.5L1 0L1 -1z", "M2 -1L2 2L1 2L1 -1z", "M1 -1L2 -1L2 2L1 2L1 1L1.5 0.5L1 0z"}, |
| 925 | {"L1 0L1 1L0 1zM2 -1L2 2L1 2L1 0.9L1.4 0.5L1 0.1L1 -1z", "M2 -1L2 2L1 2L1 -1z", "M1 -1L2 -1L2 2L1 2L1 0.9L1.4 0.5L1 0.1z"}, |