/extra/svg/svg-tests.factor

http://github.com/abeaumont/factor · Factor · 116 lines · 90 code · 25 blank · 1 comment · 0 complexity · fec31eef58bcaf5f42ec6b9136b5713f MD5 · raw file

  1. ! (c)2009 Joe Groff, see BSD license
  2. USING: accessors arrays literals math math.affine-transforms
  3. math.functions sequences svg tools.test xml xml.traversal multiline ;
  4. IN: svg.tests
  5. { 1.0 2.25 } { -3.0 4.0 } { 5.5 0.5 } <affine-transform> 1array [
  6. "matrix ( 1 +2.25 -3 , 0.4e+1 ,5.5, 5e-1 )" svg-transform>affine-transform
  7. ] unit-test
  8. { 1.0 0.0 } { 0.0 1.0 } { 5.0 10.0 } <affine-transform> 1array [
  9. "translate(5.0, 1e1 )" svg-transform>affine-transform
  10. ] unit-test
  11. { 1.0 0.0 } { 0.0 1.0 } { 5.0 10.0 } <affine-transform> 1array [
  12. "translate( 5.0 1e+1)" svg-transform>affine-transform
  13. ] unit-test
  14. { 2.0 0.0 } { 0.0 2.0 } { 0.0 0.0 } <affine-transform> 1array [
  15. "scale(2.0)" svg-transform>affine-transform
  16. ] unit-test
  17. { 2.0 0.0 } { 0.0 4.0 } { 0.0 0.0 } <affine-transform> 1array [
  18. "scale(2.0 4.0)" svg-transform>affine-transform
  19. ] unit-test
  20. { 2.0 0.0 } { 0.0 4.0 } { 0.0 0.0 } <affine-transform> 1array [
  21. "scale(2.0 4.0)" svg-transform>affine-transform
  22. ] unit-test
  23. [ t ] [
  24. "skewX(45)" svg-transform>affine-transform
  25. { 1.0 0.0 } { 1.0 1.0 } { 0.0 0.0 } <affine-transform> 0.001 a~
  26. ] unit-test
  27. [ t ] [
  28. "skewY(-4.5e1)" svg-transform>affine-transform
  29. { 1.0 -1.0 } { 0.0 1.0 } { 0.0 0.0 } <affine-transform> 0.001 a~
  30. ] unit-test
  31. [ t ] [
  32. "rotate(30)" svg-transform>affine-transform
  33. { $[ 0.75 sqrt ] 0.5 }
  34. { -0.5 $[ 0.75 sqrt ] }
  35. { 0.0 0.0 } <affine-transform>
  36. 0.001 a~
  37. ] unit-test
  38. [ t ] [
  39. "rotate(30 1.0,2.0)" svg-transform>affine-transform
  40. { $[ 30 degrees cos ] $[ 30 degrees sin ] }
  41. { $[ -30 degrees sin ] $[ 30 degrees cos ] } {
  42. $[ 1.0 30 degrees cos 1.0 * - 30 degrees sin 2.0 * + ]
  43. $[ 2.0 30 degrees cos 2.0 * - 30 degrees sin 1.0 * - ]
  44. } <affine-transform> 0.001 a~
  45. ] unit-test
  46. { $[ 30 degrees cos ] $[ 30 degrees sin ] }
  47. { $[ -30 degrees sin ] $[ 30 degrees cos ] }
  48. { 1.0 2.0 } <affine-transform> 1array [
  49. "translate(1 2) rotate(30)" svg-transform>affine-transform
  50. ] unit-test
  51. [ {
  52. T{ moveto f { 1.0 1.0 } f }
  53. T{ lineto f { 3.0 -1.0 } f }
  54. T{ lineto f { 2.0 2.0 } t }
  55. T{ lineto f { 2.0 -2.0 } t }
  56. T{ lineto f { 2.0 2.0 } t }
  57. T{ vertical-lineto f -9.0 t }
  58. T{ vertical-lineto f 1.0 t }
  59. T{ horizontal-lineto f 9.0 f }
  60. T{ horizontal-lineto f 8.0 f }
  61. T{ closepath }
  62. T{ moveto f { 0.0 0.0 } f }
  63. T{ curveto f { -4.0 0.0 } { -8.0 4.0 } { -8.0 8.0 } f }
  64. T{ curveto f { -8.0 4.0 } { -12.0 8.0 } { -16.0 8.0 } f }
  65. T{ smooth-curveto f { 0.0 2.0 } { 2.0 0.0 } t }
  66. T{ quadratic-bezier-curveto f { -2.0 0.0 } { 0.0 -2.0 } f }
  67. T{ quadratic-bezier-curveto f { -3.0 0.0 } { 0.0 3.0 } f }
  68. T{ smooth-quadratic-bezier-curveto f { 1.0 2.0 } t }
  69. T{ smooth-quadratic-bezier-curveto f { 3.0 4.0 } t }
  70. T{ elliptical-arc f { 5.0 6.0 } 7.0 t f { 8.0 9.0 } f }
  71. } ] [
  72. """
  73. M 1.0,+1 3,-10e-1 l 2 2, 2 -2, 2 2 v -9 1 H 9 8 z
  74. M 0 0 C -4.0 0.0 -8.0 4.0 -8.0 8.0 -8.0 4.0 -12.0 8.0 -16.0 8.0
  75. s 0.0,2.0 2.0,0.0
  76. Q -2 0 0 -2 -3. 0 0 3
  77. t 1 2 3 4
  78. A 5 6 7 1 0 8 9
  79. """ svg-path>array
  80. ] unit-test
  81. STRING: test-svg-string
  82. <svg xmlns="http://www.w3.org/2000/svg">
  83. <path transform="translate(1 2)" d="M -1 -1 l 2 2" />
  84. </svg>
  85. ;
  86. : test-svg-path ( -- obj )
  87. test-svg-string string>xml body>> children-tags first ;
  88. [ { T{ moveto f { -1.0 -1.0 } f } T{ lineto f { 2.0 2.0 } t } } ]
  89. [ test-svg-path tag-d ] unit-test
  90. [ T{ affine-transform f { 1.0 0.0 } { 0.0 1.0 } { 1.0 2.0 } } ]
  91. [ test-svg-path tag-transform ] unit-test