From bc25a3103f2fdb2e94e7ebfbc65335bf13583f71 Mon Sep 17 00:00:00 2001
From: Ryan Oldenburg <ryan@guzba.com>
Date: Sun, 3 Oct 2021 19:56:02 -0500
Subject: [PATCH] f

---
 tests/images/diffs/smooth1.png    | Bin 0 -> 376 bytes
 tests/images/diffs/smooth2.png    | Bin 0 -> 841 bytes
 tests/images/diffs/smooth3.png    | Bin 0 -> 371 bytes
 tests/images/diffs/smooth4.png    | Bin 0 -> 415 bytes
 tests/images/masters/smooth1.png  | Bin 0 -> 367 bytes
 tests/images/masters/smooth2.png  | Bin 0 -> 763 bytes
 tests/images/masters/smooth3.png  | Bin 0 -> 379 bytes
 tests/images/masters/smooth4.png  | Bin 0 -> 420 bytes
 tests/images/rendered/smooth1.png | Bin 0 -> 369 bytes
 tests/images/rendered/smooth2.png | Bin 0 -> 896 bytes
 tests/images/rendered/smooth3.png | Bin 0 -> 366 bytes
 tests/images/rendered/smooth4.png | Bin 0 -> 390 bytes
 tests/test_images_draw.nim        |  48 +++++++++++++++++++++++++++++-
 13 files changed, 47 insertions(+), 1 deletion(-)
 create mode 100644 tests/images/diffs/smooth1.png
 create mode 100644 tests/images/diffs/smooth2.png
 create mode 100644 tests/images/diffs/smooth3.png
 create mode 100644 tests/images/diffs/smooth4.png
 create mode 100644 tests/images/masters/smooth1.png
 create mode 100644 tests/images/masters/smooth2.png
 create mode 100644 tests/images/masters/smooth3.png
 create mode 100644 tests/images/masters/smooth4.png
 create mode 100644 tests/images/rendered/smooth1.png
 create mode 100644 tests/images/rendered/smooth2.png
 create mode 100644 tests/images/rendered/smooth3.png
 create mode 100644 tests/images/rendered/smooth4.png

diff --git a/tests/images/diffs/smooth1.png b/tests/images/diffs/smooth1.png
new file mode 100644
index 0000000000000000000000000000000000000000..9a5edb05e5877f8035363457e36070b1ba47600a
GIT binary patch
literal 376
zcmeAS@N?(olHy`uVBq!ia0vp^DIm<j1|$m}O$}jSV6^viaSW+oe0y;tFJpp;+eP)L
z<`=pL7|MQqJ$7;S0UwpBi-q0Alfw5u*?s$V@x0xpuOIx|cQEzrt#{YgyiR*oSor^5
z!v3^v%S~U`Niz90ZQ&47_UKVCY&tR|7$?F%2QN3>Y`Zq{`)U9GpBjm9_!;XHrDv_y
i%-sC@H{0=<m5guw+P^tw>pupDD1)b~pUXO@geCx@jfn^V

literal 0
HcmV?d00001

diff --git a/tests/images/diffs/smooth2.png b/tests/images/diffs/smooth2.png
new file mode 100644
index 0000000000000000000000000000000000000000..08fc36e4de98f5d71a97716e451ebaa484e2e0dc
GIT binary patch
literal 841
zcmeAS@N?(olHy`uVBq!ia0vp^DIm<j1|$m}O$}jSU>5LnaSW+oe0$Z}>u7*T>qAy?
z7U}LSP0bs`WZJjxO)g-0#3R#Wyg}&p?VGnUs%JN>bcuY#wpZ!Z$;vggo9aC#JCqge
zvk7B}W1Mq**+w=NMK_h8h7M7MB-V}yMx`+9OnHUh4Br@fl2*^2P%n^V^OoT;*NytZ
z{zuYB3<_8tFi6b5v-k(=&!$4=2aE?cR*TG6xNo5IU*n%c-H{D7i+?cv6g~W@`w{z-
z^AgkiMdTI!AKUO};frRK<cNI%TO8ApBkBT595*FK*aet4Zc2{$rBS7D)IcX!M0dg?
ziD`OWd>*De-omcTORU<KwqKH4BH6aI^^({U%eJM>m-t-R4qtM}WL9cV-0HrPU#UBB
ztLsW`rT)aN&MVm;u^rB84q`td+ZHOn)TSevXSJSJq`-HHFxx3b3U?DCN&`+cl(Z*K
zbw9~}Nw+OjOjX|lC}}yRMxp!QhEofkFh<I>O_fizJCS6#W{<{a2eJOdr_P@2oIPtl
zEm+drvz*}^LrhNWjY-O<L=E^Du6c4#<TF~+_)_eE=cf<<9ywQW@{}K#Qda&_LB_&{
z`Ev4tJ?=f(2{#yKf0y-K+PuNxrv^XUZ1zK9{ge2c&$1_WyPoVm_^DyT(S=WrC;W7{
zkrZ$$VZ$DUHPus!By{XKUW+Z&Vbf+lw98qu|KO>{4S4~t5;km7IAiN&%M&KoveR{C
z_rX^U2IU%G4I^v?p0O?EWn0aC=t<zM#0|d`e8iUOvSl+LdJ=Fec|)0k51T7<^H$cx
zvw<ZB5!C|McwD)gGaEL%(x{T~VQ&d_zIY@dN@0yfmmb??=ES1`TMTEYah&d3)PJzV
zF~UqlUcyJZ<*eJs=7V1xBaFKAd7d%1{FOc`&-R)5(7&EZ+{{;_87<b^mHG)cJd~Uv
z$2f-}B7g2%kprd%ISps8DYE}$PPAY2<5+^7;|=pE&e!wXo{G2BI_@n0J@eO`e1SBL
u-IGt(A1nLkC=s}$G(cWK7Ju5jCcSfe*|vFSGm?Q>gu&C*&t;ucLK6VOKU$#x

literal 0
HcmV?d00001

diff --git a/tests/images/diffs/smooth3.png b/tests/images/diffs/smooth3.png
new file mode 100644
index 0000000000000000000000000000000000000000..59ca693ff4460a3e635adbb8332b577628007341
GIT binary patch
literal 371
zcmeAS@N?(olHy`uVBq!ia0vp^DIm<j1|$m}O$}jSV6^gdaSW+oe0%30CzGLo!$rpE
z4eX~kO<jA`PUoc56kP|wgC8RAHOsV5`15;C+A~Yz*_VGb+n$hX=5S16=@e9Pn;=0v
zBh7ch?=yFj^#7ksO_Q_tt;_bE@H((*4r?Zf=8$A5s^UJOCjz&hl>NV}wmo`tVBdO9
zA!Uyq1;eHz9G@=gl+T)(`*ZCcRj3GD3M=CbxAK$I6CQXS&jJP}gQu&X%Q~loCIC`>
BdWir4

literal 0
HcmV?d00001

diff --git a/tests/images/diffs/smooth4.png b/tests/images/diffs/smooth4.png
new file mode 100644
index 0000000000000000000000000000000000000000..78aa339e241b06c07324e072966ac322ff8290a9
GIT binary patch
literal 415
zcmeAS@N?(olHy`uVBq!ia0vp^DIm<j1|$m}O$}jSU`+FLaSW+oe0#@`>yU#8+e7)F
zn_W{Ak{|2t=?d=*|EQH&%qxBHR?tmm4YS`fS|lsJe)_aDrp)7$pOIBh{sjlAHb)_r
zX$l)y8dW)T91}R1yaghf4iF<`s*t_2>$`{1chNPBmg<&jJN0Uw1y4#3pC~oKds6gu
z+pb%jhrEb2j5sUtt6H<QL1vQAZI#)r=j~4JeeECgx#8xOvI^Di`THc+N(ub7hI#Lg
o&Qo5`W1oWGX5%*y5gxx7N~Y>xsM(ro1q^rwPgg&ebxsLQ0B*dB3jhEB

literal 0
HcmV?d00001

diff --git a/tests/images/masters/smooth1.png b/tests/images/masters/smooth1.png
new file mode 100644
index 0000000000000000000000000000000000000000..9271e45f79cc4d685363e572be87a2116eacce48
GIT binary patch
literal 367
zcmeAS@N?(olHy`uVBq!ia0vp^DIm<j1|$m}O$`B3oCO|{#S9GG!XV7ZFl&wkP>``W
z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBITlYB$B+ufw-+4+4;u(D7;YC%aMwMNllGRy
z^_ybgh4lA-t)J`MGdF%+W%TZMoJozirc+YO5spqlA!QXekDdt<iiSg2;QARIsd?S@
Y+GRZ6Y#pipfZ@a7>FVdQ&MBb@014=7?*IS*

literal 0
HcmV?d00001

diff --git a/tests/images/masters/smooth2.png b/tests/images/masters/smooth2.png
new file mode 100644
index 0000000000000000000000000000000000000000..de657ea7e9e73fb15382c439b4c0604e6265012a
GIT binary patch
literal 763
zcmeAS@N?(olHy`uVBq!ia0vp^DIm<j1|$m}O$`B3oCO|{#S9GG!XV7ZFl&wkP>``W
z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&di3``R|T^vIy7~kH#oqNbZq$SbXYyJh!0L~H@
zPd_z(M<<Rq#WN$%>qiDwd{J*Xusi+v)9oiOelfLN#p5*1@q`gaB%9)Cg%rsao#qLt
z0-I0-c^QlB=Ko(O_-oz~<|9vwDu2Z9a@}$HWlMWDzj$1*pV$-0V;mZj6xJJD34G#k
z?_hx2M5doC&Z4etDZFh;T`VWWcuYmACUEemieydj;1Lyxn!v-uD&jT4ho?-$Y62He
znuyi}FP<<FsR?{MZX#S0{CLc!lnJo$s7(nIP~#DsVkY3m!!|`sAgw2FN|69-kKdFa
z0o5M8DMkXWJ$zGy1X6plrj$$&G|&nRa&$Yi!pW0aQgAVoDr-tgPtKHr3APC-i&~oA
za4K`F@}%@jNNOl5R3GbbyUCN(6EVeC;aG=zByZ9F`%Cjep0-wR-sby$!t1YErHi%J
z-F~|*C-ZZ9N8lp^CkL^`Er|;@yjQGt>pbMJ@cxzW9YURrhw4w?6817-^ZL29oL@sy
zLgQ`ai4z);5*lASA9iTWl+gG)^OuLlO^FpLS5I<ih)S%;iJfNTCCa81yK_ZHP-o+*
z>)*5%h9obTcJ)1%hOESj+<FdUFLAc4yN*XYE_F8E`YvI#uq0WbD|QEu29HEX+WabY
zE^f9(vz}aNJk-+oB5iKSq78`(r!pNxHF_jE%HqP*xU|_8&C{6Pc&MlGMY^8bq7BIk
zohz3JYH&$-q~*OA6A|T6F}+#E+a<&{Y4+cLoLy3ElWb%k%8I!1s8rXT&=v{hQK>z2
z&R8UsM}@cP-{KX?3O}6>_8otG|9<7X<%b^{tTcB{Ei(C;;E9?<Fw@OzcFnXED+)rc
R>I2g%gQu&X%Q~loCIE3z93lV!

literal 0
HcmV?d00001

diff --git a/tests/images/masters/smooth3.png b/tests/images/masters/smooth3.png
new file mode 100644
index 0000000000000000000000000000000000000000..93668606794cfdc6e4b2a3db47ddd53fab3288ae
GIT binary patch
literal 379
zcmeAS@N?(olHy`uVBq!ia0vp^DIm<j1|$m}O$`B3oCO|{#S9GG!XV7ZFl&wkP>``W
z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBIRQ@>$B+ufw|6gc9x>oyb$qQ={PNwKNoqo7
z2F$AxD(}zwpF8nm^b!ssWse>O!=@u7FxIo&tX@C!=byR7*DmX*xJ{67Ok(L2qz5By
hPh9Rsvg~`tRCk0Yh=28-^T4oT@O1TaS?83{1OUvZZJz)D

literal 0
HcmV?d00001

diff --git a/tests/images/masters/smooth4.png b/tests/images/masters/smooth4.png
new file mode 100644
index 0000000000000000000000000000000000000000..71072c8250100a4602823b384976efc3d589e7a8
GIT binary patch
literal 420
zcmeAS@N?(olHy`uVBq!ia0vp^DIm<j1|$m}O$`B3oCO|{#S9GG!XV7ZFl&wkP>``W
z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBIZIC$$B+ufw|4@2TO34KFU~v5b%4ohLqmv6
z0w?<!1*RaC=PGL#O!|Ix=lsv<6F!=I2&%YEkZ??5=_G;i?>O_eT<PP5J=>$Nm-<{b
z$t$%>h@AGi{K@P4``$mlJ7*2429jhuisEMzU3X@8=FWTmv26SLlYeX0iEegmn=GpA
j(W7A4bc92QXh!^3EzYpi<DdQj1C_zk)z4*}Q$iB}Y^sJd

literal 0
HcmV?d00001

diff --git a/tests/images/rendered/smooth1.png b/tests/images/rendered/smooth1.png
new file mode 100644
index 0000000000000000000000000000000000000000..c83aeca821e91d58b915316983a999740530882a
GIT binary patch
literal 369
zcmeAS@N?(olHy`uVBq!ia0vp^DIm<j1|$m}O$}jSV6^abaSW+oe0y;tZzH3K+r{Y;
zCm9xr?RD%~CeFQrcage_rq_SnbDnX3C%s>nmS%2zeCEyFN6jntG|AXGUNg>n$eXub
zVfM_Me5~n?Q7oN;DsB@b9Fv9w<H`1)+dpTenHg{X`#pW15D_k~WZ!xIOlg{5-bY?N
Z|F+^UOM5n6wgm<ygQu&X%Q~loCIB>BbGZNj

literal 0
HcmV?d00001

diff --git a/tests/images/rendered/smooth2.png b/tests/images/rendered/smooth2.png
new file mode 100644
index 0000000000000000000000000000000000000000..56d925a122ce3eababd315ed33a5a6af65520fe9
GIT binary patch
literal 896
zcmeAS@N?(olHy`uVBq!ia0vp^DIm<j1|$m}O$}jSV0QO(aSW+oe0z1T*O35$wuc8d
zBwBCunVFTyeR^->-j<SkT?)5zQs3&{<cN-{;0(*Wk|Z8xmwG_d#rNEKbM?<ovsjGO
zpDTKn+Q{`w_b=np7VKAJS3K=_qDWwqOp6Xy<{Bl3d-v`=DX=(^W2Suj-v4wt7K!cK
zw-?pd>#x3g%BCw*;OLIsyC=7|v)_FG{aN6drkbM_b#>FGPZzJOsWItK5_)3Y7RJ<N
zIbptm$!m>e4t0kw=q#SW_*1(rP4p<siF!kmZjCPr&W0x08dnsO4Nbf?wkRw#FwxeS
zqOj1=gj=ITVWWXbnTXbe8xm5+T)ZAyJiVf=Oe&^r$2um-s))B8YnvphV%~PFWfE@-
zt8=pBNv1<>3k?^juqPh9P_$TuHSzd`qD3mq8=DqBb@F6N;&ndVC?tDCt8JQ;s#ZrS
zkFKhh$%G(-Eg>3#4qk^Z1TA1;*A#W`?iCVQQo^IF=4CKpWkSZrfTji?Ugz#cBdL^C
z5>Xjb0u_RfUvOH)!&caH*=ZpUTV-wS)Y-G8E32xkVsExEbA5aI>Xp~C&p#K;mEb8V
zD^q*^{Q0KaZ<oCP?ReOGb#C;|efy@JKJC47Rn~>ayle*#98FU6y=>8Sg8f+8?y2iu
zFIks8N9sy~z!Q!656^NmHo7$~Sh=|6h{IyX3n76{$qN(|GO{!b4FU`VOhl(dNN8wq
zXvwOov2pP=dAWA>HZE#da48@tVL^t%3Xv%x5*k_@oBAdRF}t!mh6M&CFHli9A?3x#
zGlhpG((z<#<D@2qvMF;UG%PuiTu=5kZfa046Jg_-!ppL8!G?qdYZNrhxrEtH@ii4K
z+>ofiB``&*Rgn2&!-5cvH4+_MEJxiEk2#bmXozuHvn^tATo|a6pb#Y>!gZ93Z4sMe
za-dG4LY07t$WbXaBgUqG-ARJXGZ`K0T{+toPp&qbeOB$~6~WL@)$XHCvzAS~o2OoT
zfBv1dxzRWCwqGipd!@9t=&aK-hYS81*9<3k3Ve}$`smT2FS8fUWOa-Wy!LwQ&GT2T
z`!p-KM(Ryh`!9Lln7^r^X>m&zgQh0dlnhVb_ZWS7Z9@}^yq5!W7K5j&pUXO@geCwn
C8D^gV

literal 0
HcmV?d00001

diff --git a/tests/images/rendered/smooth3.png b/tests/images/rendered/smooth3.png
new file mode 100644
index 0000000000000000000000000000000000000000..59db7c671e9764aa49a98a380c674d2bb478d955
GIT binary patch
literal 366
zcmeAS@N?(olHy`uVBq!ia0vp^DIm<j1|$m}O$}jSU^Mk~aSW+oe0%30XS0KdYv576
zHz&>3B(J%Xz{q*iCGUyMkJpkres7=iypqpo+G}-T$)+P5LdqUJ3Wmfp&geQmtDM*O
z_{Z<t+j66>e_hU*&slV|qN(;itEQle+XM;6B$iH^GvtI*dOmji{yOW<(`l}j`_$on
qIN^Tz?KHz<JN|~=6C%nr&sam3?=IHNc0LFUM+Q$<KbLh*2~7YL;d++<

literal 0
HcmV?d00001

diff --git a/tests/images/rendered/smooth4.png b/tests/images/rendered/smooth4.png
new file mode 100644
index 0000000000000000000000000000000000000000..d59f752cb0ee00e9c01d1402b19568776e45836a
GIT binary patch
literal 390
zcmeAS@N?(olHy`uVBq!ia0vp^DIm<j1|$m}O$}jSVD$BLaSW+oe0ygjZ&QGXLtqc{
zh23o47dEgJKiJaOn8?uE`y}g}XWZYqqWZt<e(!rPEqVR1DzjwM5e^|`j~)d>;u&W&
z9rdQ4F4%v+zHVBoWZw4M;llHTo^*WVzg8-`#ASknV-icJpo$x<89!$$^dC>2vFzpZ
z^m)${Wsa|}n;finN_P3je~J5K9~XED*r`MP_32u{uGiagZ@-ML^d!nvGt_^-*;l;E
T?m;Oqd>K4l{an^LB{Ts58>xvU

literal 0
HcmV?d00001

diff --git a/tests/test_images_draw.nim b/tests/test_images_draw.nim
index 4f619a6..1932781 100644
--- a/tests/test_images_draw.nim
+++ b/tests/test_images_draw.nim
@@ -1,4 +1,4 @@
-import pixie
+import pixie, strformat
 
 block:
   let
@@ -127,3 +127,49 @@ block:
 
   a.draw(b, translate(vec2(250, 250)) * scale(vec2(0.5, 0.5)))
   a.writeFile("tests/images/scaleHalf.png")
+
+proc doDiff(rendered: Image, name: string) =
+  rendered.writeFile(&"tests/images/rendered/{name}.png")
+  let
+    master = readImage(&"tests/images/masters/{name}.png")
+    (diffScore, diffImage) = diff(master, rendered)
+  echo &"{name} score: {diffScore}"
+  diffImage.writeFile(&"tests/images/diffs/{name}.png")
+
+block:
+  let
+    image = newImage(100, 100)
+    path = newPath()
+  path.rect(0, 0, 99, 99)
+  image.fillPath(path, rgba(0, 0, 0, 255), translate(vec2(0.5, 0.5)))
+  doDiff(image, "smooth1")
+
+block:
+  let
+    a = newImage(100, 100)
+    b = newImage(100, 100)
+    path = newPath()
+  path.rect(-25, -25, 50, 50)
+  path.transform(rotate(45 * PI.float32 / 180))
+  b.fillPath(path, rgba(0, 0, 0, 255), translate(vec2(50, 50)))
+  a.fill(rgba(255, 255, 255, 255))
+  a.draw(b, translate(vec2(0, 0.4)))
+  doDiff(a, "smooth2")
+
+block:
+  let
+    a = newImage(100, 100)
+    b = newImage(50, 50)
+  a.fill(rgba(255, 255, 255, 255))
+  b.fill(rgba(0, 0, 0, 255))
+  a.draw(b, translate(vec2(25.2, 25)))
+  doDiff(a, "smooth3")
+
+block:
+  let
+    a = newImage(100, 100)
+    b = newImage(50, 50)
+  a.fill(rgba(255, 255, 255, 255))
+  b.fill(rgba(0, 0, 0, 255))
+  a.draw(b, translate(vec2(25.2, 25.6)))
+  doDiff(a, "smooth4")