MCPcopy Index your code
hub / github.com/tdewolff/canvas / TestPathAnd

Function TestPathAnd

path_intersection_test.go:868–997  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

866}
867
868func 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"},

Callers

nothing calls this directly

Calls 6

MustParseSVGPathFunction · 0.85
TMethod · 0.80
RelateMethod · 0.80
RunMethod · 0.45
AndMethod · 0.45
ClosedMethod · 0.45

Tested by

no test coverage detected