| 997 | } |
| 998 | |
| 999 | func TestPathOr(t *testing.T) { |
| 1000 | var tts = []struct { |
| 1001 | p, q string |
| 1002 | r string |
| 1003 | }{ |
| 1004 | {"L0 10L10 10L10 0z", "", "L10 0L10 10L0 10z"}, |
| 1005 | {"", "L0 10L10 10L10 0z", "L10 0L10 10L0 10z"}, |
| 1006 | |
| 1007 | // overlap |
| 1008 | {"L10 0L5 10z", "M0 5L10 5L5 15z", "L10 0L7.5 5L10 5L5 15L0 5L2.5 5z"}, |
| 1009 | {"L10 0L5 10z", "M0 5L5 15L10 5z", "L10 0L7.5 5L10 5L5 15L0 5L2.5 5z"}, |
| 1010 | {"L5 10L10 0z", "M0 5L10 5L5 15z", "L10 0L7.5 5L10 5L5 15L0 5L2.5 5z"}, |
| 1011 | {"L5 10L10 0z", "M0 5L5 15L10 5z", "L10 0L7.5 5L10 5L5 15L0 5L2.5 5z"}, |
| 1012 | //{"M0 1L4 1L4 3L0 3z", "M4 3A1 1 0 0 0 2 3A1 1 0 0 0 4 3z", "M4 3A1 1 0 0 1 2 3L0 3L0 1L4 1z"}, // TODO |
| 1013 | |
| 1014 | // touching edges |
| 1015 | {"L2 0L2 2L0 2z", "M2 0L4 0L4 2L2 2z", "L4 0L4 2L0 2z"}, |
| 1016 | {"L2 0L2 2L0 2z", "M2 1L4 1L4 3L2 3z", "L2 0L2 1L4 1L4 3L2 3L2 2L0 2z"}, |
| 1017 | {"L2 0L2 2L0 2zM2 0L4 0L4 2L2 2z", "M2.5 0.5L3.5 0.5L3.5 1.5L2.5 1.5z", "L4 0L4 2L0 2z"}, |
| 1018 | |
| 1019 | // no overlap |
| 1020 | {"L10 0L5 10z", "M0 10L10 10L5 20z", "L10 0L5 10zM0 10L10 10L5 20z"}, |
| 1021 | |
| 1022 | // containment |
| 1023 | {"L10 0L5 10z", "M2 2L8 2L5 8z", "L10 0L5 10z"}, |
| 1024 | {"M2 2L8 2L5 8z", "L10 0L5 10z", "L10 0L5 10z"}, |
| 1025 | //{"M10 0A5 5 0 0 1 0 0A5 5 0 0 1 10 0z", "M10 0L5 5L0 0L5 -5z", "M10 0A5 5 0 0 1 0 0A5 5 0 0 1 10 0z"}, // TODO |
| 1026 | |
| 1027 | // equal |
| 1028 | {"L10 0L5 10z", "L10 0L5 10z", "L10 0L5 10z"}, |
| 1029 | //{"L10 -10L20 0L10 10z", "A10 10 0 0 0 20 0A10 10 0 0 0 0 0z", "A10 10 0 0 1 20 0A10 10 0 0 1 0 0z"}, // TODO |
| 1030 | {"L10 -10L20 0L10 10z", "Q10 0 10 10Q10 0 20 0Q10 0 10 -10Q10 0 0 0z", "L10 -10L20 0L10 10z"}, |
| 1031 | |
| 1032 | // partly parallel |
| 1033 | {"M1 3L4 3L4 4L6 6L6 7L1 7z", "M9 3L4 3L4 7L9 7z", "M1 3L9 3L9 7L1 7z"}, |
| 1034 | {"M1 3L6 3L6 4L4 6L4 7L1 7z", "M9 3L4 3L4 7L9 7z", "M1 3L9 3L9 7L1 7z"}, |
| 1035 | {"L2 0L2 1L0 1z", "L1 0L1 1L0 1z", "L2 0L2 1L0 1z"}, |
| 1036 | {"L1 0L1 1L0 1z", "L2 0L2 1L0 1z", "L2 0L2 1L0 1z"}, |
| 1037 | {"L3 0L3 1L0 1z", "M1 0L2 0L2 1L1 1z", "L3 0L3 1L0 1z"}, |
| 1038 | {"L2 0L2 2L0 2z", "L1 0L1 1L0 1z", "L2 0L2 2L0 2z"}, |
| 1039 | {"M2 0L2 2L0 2L0 0z", "M2 0L4 0L4 2L0 2L0 0z", "L4 0L4 2L0 2z"}, |
| 1040 | {"M2 2L0 2L0 0L2 0z", "M2 0L4 0L4 2L0 2L0 0z", "L4 0L4 2L0 2z"}, |
| 1041 | {"M2 0L2 1L0 1L0 0z", "M1 0L3 0L3 1L1 1z", "L3 0L3 1L0 1z"}, |
| 1042 | {"M2 1L0 1L0 0L2 0z", "M1 0L3 0L3 1L1 1z", "L0 0L3 0L3 1L0 1z"}, |
| 1043 | |
| 1044 | // figure 10 from Martinez et al. |
| 1045 | {"L3 0L3 3L0 3z", "M1 2L2 2L2 3L1 3z", "L3 0L3 3L0 3z"}, |
| 1046 | {"L3 0L3 3L0 3z", "M1 3L2 3L2 4L1 4z", "L3 0L3 3L2 3L2 4L1 4L1 3L0 3z"}, |
| 1047 | |
| 1048 | // fully parallel |
| 1049 | {"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", "M0 0L10 0L10 5L7.5 7.5L10 10L10 15L0 15z"}, |
| 1050 | |
| 1051 | // subpaths |
| 1052 | {"M1 0L3 0L3 4L1 4z", "M0 1L4 1L4 3L0 3zM2 2L2 5L5 5L5 2z", "M0 1L1 1L1 0L3 0L3 1L4 1L4 2L3 2L3 3L4 3L4 2L5 2L5 5L2 5L2 4L1 4L1 3L0 3z"}, // different winding |
| 1053 | {"L2 0L2 1L0 1zM0 2L2 2L2 3L0 3z", "M1 0L3 0L3 1L1 1zM1 2L3 2L3 3L1 3z", "L3 0L3 1L0 1zM0 2L3 2L3 3L0 3z"}, // two overlapping |
| 1054 | {"L2 0L2 1L0 1zM0 2L2 2L2 3L0 3z", "M1 0L3 0L3 1L1 1zM0 2L2 2L2 3L0 3z", "L3 0L3 1L0 1zM0 2L2 2L2 3L0 3z"}, // one overlapping, one equal |
| 1055 | {"L2 0L2 1L0 1zM0 2L2 2L2 3L0 3z", "M1 0L3 0L3 1L1 1zM0.1 2.1L1.9 2.1L1.9 2.9L0.1 2.9z", "L3 0L3 1L0 1zM0 2L2 2L2 3L0 3z"}, // one overlapping, one inside the other |
| 1056 | {"L2 0L2 1L0 1zM0 2L2 2L2 3L0 3z", "M1 0L3 0L3 1L1 1zM2 2L4 2L4 3L2 3z", "L3 0L3 1L0 1zM0 2L4 2L4 3L0 3z"}, // one overlapping, the others separate |