Browse Source

more graphics + some physics tests

- added obj tests for graphics.SpriteBatch, and graphics.Video
- added obj tests for physics.World
- added test for setStencilMode and removed deprecated stencil+setStencilTest
- added graphics.drawInstanced
- fixed deprecated physic shape calls (body now added as first param)
ell 1 year ago
parent
commit
8124804d49

File diff suppressed because it is too large
+ 0 - 0
testing/examples/lovetest_runAllTests.html


+ 17 - 17
testing/examples/lovetest_runAllTests.md

@@ -1,28 +1,28 @@
-<!-- PASSED 282 || FAILED 1 || SKIPPED 20 || TIME 9.881 -->
+<!-- PASSED 285 || FAILED 1 || SKIPPED 15 || TIME 14.670 -->
 
 
 ### Info
 ### Info
-**303** tests were completed in **9.881s** with **282** passed, **1** failed, and **20** skipped
+**301** tests were completed in **14.670s** with **285** passed, **1** failed, and **15** skipped
 
 
 Renderer: OpenGL | 4.1 Metal - 76.3 | Apple | Apple M1 Max
 Renderer: OpenGL | 4.1 Metal - 76.3 | Apple | Apple M1 Max
 
 
 ### Report
 ### Report
 | Module                | Pass | Fail | Skip | Time   |
 | Module                | Pass | Fail | Skip | Time   |
 | --------------------- | ------ | ------ | ------- | ------ |
 | --------------------- | ------ | ------ | ------- | ------ |
-| 🟢 audio | 28 | 0 | 0 | 0.857s |
-| 🟢 data | 12 | 0 | 0 | 0.139s |
-| 🟢 event | 4 | 0 | 2 | 0.010s |
-| 🟢 filesystem | 29 | 0 | 2 | 0.068s |
-| 🔴 font | 6 | 1 | 0 | 0.015s |
-| 🟢 graphics | 99 | 0 | 6 | 0.294s |
-| 🟢 image | 5 | 0 | 0 | 0.011s |
-| 🟢 math | 20 | 0 | 0 | 0.070s |
-| 🟢 physics | 22 | 0 | 6 | 0.071s |
-| 🟢 sound | 4 | 0 | 0 | 0.015s |
-| 🟢 system | 6 | 0 | 2 | 0.026s |
-| 🟢 thread | 5 | 0 | 0 | 0.317s |
-| 🟢 timer | 6 | 0 | 0 | 2.021s |
-| 🟢 video | 2 | 0 | 0 | 0.012s |
-| 🟢 window | 34 | 0 | 2 | 5.955s |
+| 🟢 audio | 28 | 0 | 0 | 0.890s |
+| 🟢 data | 12 | 0 | 0 | 0.205s |
+| 🟢 event | 4 | 0 | 2 | 0.102s |
+| 🟢 filesystem | 29 | 0 | 2 | 0.530s |
+| 🔴 font | 6 | 1 | 0 | 0.121s |
+| 🟢 graphics | 102 | 0 | 3 | 3.232s |
+| 🟢 image | 5 | 0 | 0 | 0.086s |
+| 🟢 math | 20 | 0 | 0 | 0.339s |
+| 🟢 physics | 22 | 0 | 4 | 0.434s |
+| 🟢 sound | 4 | 0 | 0 | 0.071s |
+| 🟢 system | 6 | 0 | 2 | 0.139s |
+| 🟢 thread | 5 | 0 | 0 | 0.376s |
+| 🟢 timer | 6 | 0 | 0 | 2.091s |
+| 🟢 video | 2 | 0 | 0 | 0.039s |
+| 🟢 window | 34 | 0 | 2 | 6.015s |
 
 
 ### Failures
 ### Failures
 > 🔴 GlyphData  
 > 🔴 GlyphData  

+ 300 - 309
testing/examples/lovetest_runAllTests.xml

@@ -1,659 +1,650 @@
-<testsuites name="love.test" tests="282" failures="1" skipped="20" time="9.881">
-	<testsuite name="love.audio" tests="28" failures="0" skipped="0" time="0.857">
-		<testcase classname="RecordingDevice" name="RecordingDevice" assertions="20" time="0.394">
+<testsuites name="love.test" tests="285" failures="1" skipped="15" time="14.670">
+	<testsuite name="love.audio" tests="28" failures="0" skipped="0" time="0.890">
+		<testcase classname="RecordingDevice" name="RecordingDevice" assertions="20" time="0.401">
 		</testcase>
 		</testcase>
-		<testcase classname="Source" name="Source" assertions="54" time="0.019">
+		<testcase classname="Source" name="Source" assertions="54" time="0.022">
 		</testcase>
 		</testcase>
 		<testcase classname="getActiveEffects" name="getActiveEffects" assertions="3" time="0.017">
 		<testcase classname="getActiveEffects" name="getActiveEffects" assertions="3" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getActiveSourceCount" name="getActiveSourceCount" assertions="3" time="0.018">
+		<testcase classname="getActiveSourceCount" name="getActiveSourceCount" assertions="3" time="0.019">
 		</testcase>
 		</testcase>
 		<testcase classname="getDistanceModel" name="getDistanceModel" assertions="3" time="0.017">
 		<testcase classname="getDistanceModel" name="getDistanceModel" assertions="3" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getDopplerScale" name="getDopplerScale" assertions="2" time="0.017">
+		<testcase classname="getDopplerScale" name="getDopplerScale" assertions="2" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="getEffect" name="getEffect" assertions="4" time="0.017">
+		<testcase classname="getEffect" name="getEffect" assertions="4" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="getMaxSceneEffects" name="getMaxSceneEffects" assertions="1" time="0.017">
+		<testcase classname="getMaxSceneEffects" name="getMaxSceneEffects" assertions="1" time="0.019">
 		</testcase>
 		</testcase>
-		<testcase classname="getMaxSourceEffects" name="getMaxSourceEffects" assertions="1" time="0.016">
+		<testcase classname="getMaxSourceEffects" name="getMaxSourceEffects" assertions="1" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="getOrientation" name="getOrientation" assertions="6" time="0.016">
+		<testcase classname="getOrientation" name="getOrientation" assertions="6" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="getPosition" name="getPosition" assertions="3" time="0.017">
+		<testcase classname="getPosition" name="getPosition" assertions="3" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="getRecordingDevices" name="getRecordingDevices" assertions="1" time="0.017">
+		<testcase classname="getRecordingDevices" name="getRecordingDevices" assertions="1" time="0.020">
 		</testcase>
 		</testcase>
 		<testcase classname="getVelocity" name="getVelocity" assertions="3" time="0.017">
 		<testcase classname="getVelocity" name="getVelocity" assertions="3" time="0.017">
 		</testcase>
 		</testcase>
 		<testcase classname="getVolume" name="getVolume" assertions="1" time="0.018">
 		<testcase classname="getVolume" name="getVolume" assertions="1" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="isEffectsSupported" name="isEffectsSupported" assertions="1" time="0.016">
+		<testcase classname="isEffectsSupported" name="isEffectsSupported" assertions="1" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="newQueueableSource" name="newQueueableSource" assertions="3" time="0.017">
+		<testcase classname="newQueueableSource" name="newQueueableSource" assertions="3" time="0.019">
 		</testcase>
 		</testcase>
-		<testcase classname="newSource" name="newSource" assertions="6" time="0.018">
+		<testcase classname="newSource" name="newSource" assertions="6" time="0.019">
 		</testcase>
 		</testcase>
-		<testcase classname="pause" name="pause" assertions="2" time="0.018">
+		<testcase classname="pause" name="pause" assertions="2" time="0.020">
 		</testcase>
 		</testcase>
-		<testcase classname="play" name="play" assertions="1" time="0.019">
+		<testcase classname="play" name="play" assertions="1" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="setDistanceModel" name="setDistanceModel" assertions="7" time="0.017">
+		<testcase classname="setDistanceModel" name="setDistanceModel" assertions="7" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="setDopplerScale" name="setDopplerScale" assertions="2" time="0.016">
+		<testcase classname="setDopplerScale" name="setDopplerScale" assertions="2" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="setEffect" name="setEffect" assertions="3" time="0.017">
+		<testcase classname="setEffect" name="setEffect" assertions="3" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="setMixWithSystem" name="setMixWithSystem" assertions="1" time="0.016">
+		<testcase classname="setMixWithSystem" name="setMixWithSystem" assertions="1" time="0.018">
 		</testcase>
 		</testcase>
 		<testcase classname="setOrientation" name="setOrientation" assertions="6" time="0.017">
 		<testcase classname="setOrientation" name="setOrientation" assertions="6" time="0.017">
 		</testcase>
 		</testcase>
 		<testcase classname="setPosition" name="setPosition" assertions="3" time="0.017">
 		<testcase classname="setPosition" name="setPosition" assertions="3" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="setVelocity" name="setVelocity" assertions="3" time="0.017">
+		<testcase classname="setVelocity" name="setVelocity" assertions="3" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="setVolume" name="setVolume" assertions="1" time="0.017">
+		<testcase classname="setVolume" name="setVolume" assertions="1" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="stop" name="stop" assertions="2" time="0.018">
+		<testcase classname="stop" name="stop" assertions="2" time="0.017">
 		</testcase>
 		</testcase>
 	</testsuite>
 	</testsuite>
-	<testsuite name="love.data" tests="12" failures="0" skipped="0" time="0.139">
-		<testcase classname="ByteData" name="ByteData" assertions="10" time="0.017">
+	<testsuite name="love.data" tests="12" failures="0" skipped="0" time="0.205">
+		<testcase classname="ByteData" name="ByteData" assertions="10" time="0.019">
 		</testcase>
 		</testcase>
 		<testcase classname="CompressedData" name="CompressedData" assertions="12" time="0.017">
 		<testcase classname="CompressedData" name="CompressedData" assertions="12" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="compress" name="compress" assertions="45" time="0.017">
+		<testcase classname="compress" name="compress" assertions="45" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="decode" name="decode" assertions="4" time="0.017">
+		<testcase classname="decode" name="decode" assertions="4" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="decompress" name="decompress" assertions="18" time="0.018">
+		<testcase classname="decompress" name="decompress" assertions="18" time="0.015">
 		</testcase>
 		</testcase>
-		<testcase classname="encode" name="encode" assertions="15" time="0.019">
+		<testcase classname="encode" name="encode" assertions="15" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="getPackedSize" name="getPackedSize" assertions="3" time="0.011">
+		<testcase classname="getPackedSize" name="getPackedSize" assertions="3" time="0.017">
 		</testcase>
 		</testcase>
 		<testcase classname="hash" name="hash" assertions="6" time="0.016">
 		<testcase classname="hash" name="hash" assertions="6" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="newByteData" name="newByteData" assertions="3" time="0.001">
+		<testcase classname="newByteData" name="newByteData" assertions="3" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="newDataView" name="newDataView" assertions="3" time="0.002">
+		<testcase classname="newDataView" name="newDataView" assertions="3" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="pack" name="pack" assertions="4" time="0.001">
+		<testcase classname="pack" name="pack" assertions="4" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="unpack" name="unpack" assertions="3" time="0.002">
+		<testcase classname="unpack" name="unpack" assertions="3" time="0.018">
 		</testcase>
 		</testcase>
 	</testsuite>
 	</testsuite>
-	<testsuite name="love.event" tests="4" failures="0" skipped="2" time="0.010">
-		<testcase classname="clear" name="clear" assertions="1" time="0.002">
+	<testsuite name="love.event" tests="4" failures="0" skipped="2" time="0.102">
+		<testcase classname="clear" name="clear" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="poll" name="poll" assertions="1" time="0.001">
+		<testcase classname="poll" name="poll" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="pump" name="pump" assertions="0" time="0.002">
+		<testcase classname="pump" name="pump" assertions="0" time="0.016">
 			<skipped message="used internally" />
 			<skipped message="used internally" />
 		</testcase>
 		</testcase>
-		<testcase classname="push" name="push" assertions="1" time="0.002">
+		<testcase classname="push" name="push" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="quit" name="quit" assertions="1" time="0.003">
+		<testcase classname="quit" name="quit" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="wait" name="wait" assertions="0" time="0.001">
+		<testcase classname="wait" name="wait" assertions="0" time="0.017">
 			<skipped message="used internally" />
 			<skipped message="used internally" />
 		</testcase>
 		</testcase>
 	</testsuite>
 	</testsuite>
-	<testsuite name="love.filesystem" tests="29" failures="0" skipped="2" time="0.068">
-		<testcase classname="File" name="File" assertions="36" time="0.002">
+	<testsuite name="love.filesystem" tests="29" failures="0" skipped="2" time="0.530">
+		<testcase classname="File" name="File" assertions="36" time="0.020">
 		</testcase>
 		</testcase>
-		<testcase classname="FileData" name="FileData" assertions="12" time="0.003">
+		<testcase classname="FileData" name="FileData" assertions="12" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="append" name="append" assertions="6" time="0.002">
+		<testcase classname="append" name="append" assertions="6" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="areSymlinksEnabled" name="areSymlinksEnabled" assertions="1" time="0.001">
+		<testcase classname="areSymlinksEnabled" name="areSymlinksEnabled" assertions="1" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="createDirectory" name="createDirectory" assertions="3" time="0.002">
+		<testcase classname="createDirectory" name="createDirectory" assertions="3" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getAppdataDirectory" name="getAppdataDirectory" assertions="1" time="0.001">
+		<testcase classname="getAppdataDirectory" name="getAppdataDirectory" assertions="1" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="getCRequirePath" name="getCRequirePath" assertions="1" time="0.001">
+		<testcase classname="getCRequirePath" name="getCRequirePath" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getDirectoryItems" name="getDirectoryItems" assertions="2" time="0.002">
+		<testcase classname="getDirectoryItems" name="getDirectoryItems" assertions="2" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getIdentity" name="getIdentity" assertions="1" time="0.002">
+		<testcase classname="getIdentity" name="getIdentity" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getInfo" name="getInfo" assertions="3" time="0.007">
+		<testcase classname="getInfo" name="getInfo" assertions="3" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="getRealDirectory" name="getRealDirectory" assertions="1" time="0.002">
+		<testcase classname="getRealDirectory" name="getRealDirectory" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getRequirePath" name="getRequirePath" assertions="1" time="0.001">
+		<testcase classname="getRequirePath" name="getRequirePath" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getSaveDirectory" name="getSaveDirectory" assertions="1" time="0.001">
+		<testcase classname="getSaveDirectory" name="getSaveDirectory" assertions="1" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="getSource" name="getSource" assertions="0" time="0.002">
+		<testcase classname="getSource" name="getSource" assertions="0" time="0.018">
 			<skipped message="used internally" />
 			<skipped message="used internally" />
 		</testcase>
 		</testcase>
-		<testcase classname="getSourceBaseDirectory" name="getSourceBaseDirectory" assertions="1" time="0.002">
+		<testcase classname="getSourceBaseDirectory" name="getSourceBaseDirectory" assertions="1" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="getUserDirectory" name="getUserDirectory" assertions="1" time="0.002">
+		<testcase classname="getUserDirectory" name="getUserDirectory" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getWorkingDirectory" name="getWorkingDirectory" assertions="1" time="0.007">
+		<testcase classname="getWorkingDirectory" name="getWorkingDirectory" assertions="1" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="isFused" name="isFused" assertions="1" time="0.002">
+		<testcase classname="isFused" name="isFused" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="lines" name="lines" assertions="6" time="0.002">
+		<testcase classname="lines" name="lines" assertions="6" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="load" name="load" assertions="4" time="0.002">
+		<testcase classname="load" name="load" assertions="4" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="mount" name="mount" assertions="5" time="0.002">
+		<testcase classname="mount" name="mount" assertions="5" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="newFileData" name="newFileData" assertions="1" time="0.002">
+		<testcase classname="newFileData" name="newFileData" assertions="1" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="openFile" name="openFile" assertions="4" time="0.002">
+		<testcase classname="openFile" name="openFile" assertions="4" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="read" name="read" assertions="6" time="0.002">
+		<testcase classname="read" name="read" assertions="6" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="remove" name="remove" assertions="5" time="0.002">
+		<testcase classname="remove" name="remove" assertions="5" time="0.019">
 		</testcase>
 		</testcase>
-		<testcase classname="setCRequirePath" name="setCRequirePath" assertions="1" time="0.001">
+		<testcase classname="setCRequirePath" name="setCRequirePath" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="setIdentity" name="setIdentity" assertions="1" time="0.001">
+		<testcase classname="setIdentity" name="setIdentity" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="setRequirePath" name="setRequirePath" assertions="1" time="0.006">
+		<testcase classname="setRequirePath" name="setRequirePath" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="setSource" name="setSource" assertions="0" time="0.001">
+		<testcase classname="setSource" name="setSource" assertions="0" time="0.016">
 			<skipped message="used internally" />
 			<skipped message="used internally" />
 		</testcase>
 		</testcase>
-		<testcase classname="unmount" name="unmount" assertions="2" time="0.002">
+		<testcase classname="unmount" name="unmount" assertions="2" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="write" name="write" assertions="3" time="0.002">
+		<testcase classname="write" name="write" assertions="3" time="0.017">
 		</testcase>
 		</testcase>
 	</testsuite>
 	</testsuite>
-	<testsuite name="love.font" tests="6" failures="1" skipped="0" time="0.015">
-		<testcase classname="GlyphData" name="GlyphData" assertions="19" time="0.002">
+	<testsuite name="love.font" tests="6" failures="1" skipped="0" time="0.121">
+		<testcase classname="GlyphData" name="GlyphData" assertions="19" time="0.018">
 			<failure message="assert 8 [check glyph number] expected '97' got '0'">assert 8 [check glyph number] expected '97' got '0'</failure>
 			<failure message="assert 8 [check glyph number] expected '97' got '0'">assert 8 [check glyph number] expected '97' got '0'</failure>
 		</testcase>
 		</testcase>
-		<testcase classname="Rasterizer" name="Rasterizer" assertions="13" time="0.002">
+		<testcase classname="Rasterizer" name="Rasterizer" assertions="13" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="newBMFontRasterizer" name="newBMFontRasterizer" assertions="3" time="0.002">
+		<testcase classname="newBMFontRasterizer" name="newBMFontRasterizer" assertions="3" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="newGlyphData" name="newGlyphData" assertions="3" time="0.006">
+		<testcase classname="newGlyphData" name="newGlyphData" assertions="3" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="newImageRasterizer" name="newImageRasterizer" assertions="3" time="0.002">
+		<testcase classname="newImageRasterizer" name="newImageRasterizer" assertions="3" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="newRasterizer" name="newRasterizer" assertions="3" time="0.002">
+		<testcase classname="newRasterizer" name="newRasterizer" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="newTrueTypeRasterizer" name="newTrueTypeRasterizer" assertions="6" time="0.002">
+		<testcase classname="newTrueTypeRasterizer" name="newTrueTypeRasterizer" assertions="6" time="0.016">
 		</testcase>
 		</testcase>
 	</testsuite>
 	</testsuite>
-	<testsuite name="love.graphics" tests="99" failures="0" skipped="6" time="0.294">
-		<testcase classname="Canvas" name="Canvas" assertions="44" time="0.003">
+	<testsuite name="love.graphics" tests="102" failures="0" skipped="3" time="3.232">
+		<testcase classname="Canvas" name="Canvas" assertions="44" time="0.020">
 		</testcase>
 		</testcase>
-		<testcase classname="Font" name="Font" assertions="90" time="0.004">
+		<testcase classname="Font" name="Font" assertions="90" time="0.024">
 		</testcase>
 		</testcase>
-		<testcase classname="Image" name="Image" assertions="40" time="0.006">
+		<testcase classname="Image" name="Image" assertions="40" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="Mesh" name="Mesh" assertions="0" time="0.001">
+		<testcase classname="Mesh" name="Mesh" assertions="0" time="0.016">
 			<skipped message="test class needs writing" />
 			<skipped message="test class needs writing" />
 		</testcase>
 		</testcase>
-		<testcase classname="ParticleSystem" name="ParticleSystem" assertions="0" time="0.001">
+		<testcase classname="ParticleSystem" name="ParticleSystem" assertions="0" time="0.017">
 			<skipped message="test class needs writing" />
 			<skipped message="test class needs writing" />
 		</testcase>
 		</testcase>
-		<testcase classname="Quad" name="Quad" assertions="47" time="0.003">
+		<testcase classname="Quad" name="Quad" assertions="47" time="0.019">
 		</testcase>
 		</testcase>
-		<testcase classname="Shader" name="Shader" assertions="39" time="0.013">
+		<testcase classname="Shader" name="Shader" assertions="39" time="0.031">
 		</testcase>
 		</testcase>
-		<testcase classname="SpriteBatch" name="SpriteBatch" assertions="0" time="0.001">
-			<skipped message="test class needs writing" />
+		<testcase classname="SpriteBatch" name="SpriteBatch" assertions="203" time="0.030">
 		</testcase>
 		</testcase>
-		<testcase classname="Text" name="Text" assertions="90" time="0.003">
+		<testcase classname="Text" name="Text" assertions="90" time="0.024">
 		</testcase>
 		</testcase>
-		<testcase classname="Video" name="Video" assertions="0" time="0.001">
-			<skipped message="test class needs writing" />
+		<testcase classname="Video" name="Video" assertions="48" time="1.040">
 		</testcase>
 		</testcase>
-		<testcase classname="applyTransform" name="applyTransform" assertions="4" time="0.004">
+		<testcase classname="applyTransform" name="applyTransform" assertions="4" time="0.011">
 		</testcase>
 		</testcase>
-		<testcase classname="arc" name="arc" assertions="264" time="0.003">
+		<testcase classname="arc" name="arc" assertions="264" time="0.019">
 		</testcase>
 		</testcase>
-		<testcase classname="captureScreenshot" name="captureScreenshot" assertions="1" time="0.020">
+		<testcase classname="captureScreenshot" name="captureScreenshot" assertions="1" time="0.184">
 		</testcase>
 		</testcase>
-		<testcase classname="circle" name="circle" assertions="192" time="0.005">
+		<testcase classname="circle" name="circle" assertions="192" time="0.020">
 		</testcase>
 		</testcase>
-		<testcase classname="clear" name="clear" assertions="20" time="0.002">
+		<testcase classname="clear" name="clear" assertions="20" time="0.022">
 		</testcase>
 		</testcase>
-		<testcase classname="discard" name="discard" assertions="0" time="0.001">
+		<testcase classname="discard" name="discard" assertions="0" time="0.017">
 			<skipped message="cant test this worked" />
 			<skipped message="cant test this worked" />
 		</testcase>
 		</testcase>
-		<testcase classname="draw" name="draw" assertions="112" time="0.002">
+		<testcase classname="draw" name="draw" assertions="112" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="drawInstanced" name="drawInstanced" assertions="0" time="0.002">
-			<skipped message="test class needs writing" />
+		<testcase classname="drawInstanced" name="drawInstanced" assertions="16" time="0.030">
 		</testcase>
 		</testcase>
-		<testcase classname="drawLayer" name="drawLayer" assertions="144" time="0.003">
+		<testcase classname="drawLayer" name="drawLayer" assertions="144" time="0.021">
 		</testcase>
 		</testcase>
-		<testcase classname="ellipse" name="ellipse" assertions="80" time="0.002">
+		<testcase classname="ellipse" name="ellipse" assertions="80" time="0.019">
 		</testcase>
 		</testcase>
-		<testcase classname="flushBatch" name="flushBatch" assertions="1" time="0.004">
+		<testcase classname="flushBatch" name="flushBatch" assertions="1" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="getBackgroundColor" name="getBackgroundColor" assertions="8" time="0.001">
+		<testcase classname="getBackgroundColor" name="getBackgroundColor" assertions="8" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="getBlendMode" name="getBlendMode" assertions="4" time="0.001">
+		<testcase classname="getBlendMode" name="getBlendMode" assertions="4" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getCanvas" name="getCanvas" assertions="4" time="0.001">
+		<testcase classname="getCanvas" name="getCanvas" assertions="4" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="getColor" name="getColor" assertions="8" time="0.001">
+		<testcase classname="getColor" name="getColor" assertions="8" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="getColorMask" name="getColorMask" assertions="8" time="0.001">
+		<testcase classname="getColorMask" name="getColorMask" assertions="8" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getDPIScale" name="getDPIScale" assertions="1" time="0.002">
+		<testcase classname="getDPIScale" name="getDPIScale" assertions="1" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="getDefaultFilter" name="getDefaultFilter" assertions="3" time="0.001">
+		<testcase classname="getDefaultFilter" name="getDefaultFilter" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="getDepthMode" name="getDepthMode" assertions="2" time="0.004">
+		<testcase classname="getDepthMode" name="getDepthMode" assertions="2" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="getDimensions" name="getDimensions" assertions="2" time="0.002">
+		<testcase classname="getDimensions" name="getDimensions" assertions="2" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="getFont" name="getFont" assertions="3" time="0.001">
+		<testcase classname="getFont" name="getFont" assertions="3" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="getFrontFaceWinding" name="getFrontFaceWinding" assertions="2" time="0.002">
+		<testcase classname="getFrontFaceWinding" name="getFrontFaceWinding" assertions="2" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getHeight" name="getHeight" assertions="1" time="0.001">
+		<testcase classname="getHeight" name="getHeight" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getLineJoin" name="getLineJoin" assertions="2" time="0.002">
+		<testcase classname="getLineJoin" name="getLineJoin" assertions="2" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="getLineStyle" name="getLineStyle" assertions="2" time="0.002">
+		<testcase classname="getLineStyle" name="getLineStyle" assertions="2" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getLineWidth" name="getLineWidth" assertions="2" time="0.001">
+		<testcase classname="getLineWidth" name="getLineWidth" assertions="2" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="getMeshCullMode" name="getMeshCullMode" assertions="2" time="0.001">
+		<testcase classname="getMeshCullMode" name="getMeshCullMode" assertions="2" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getPixelDimensions" name="getPixelDimensions" assertions="2" time="0.005">
+		<testcase classname="getPixelDimensions" name="getPixelDimensions" assertions="2" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="getPixelHeight" name="getPixelHeight" assertions="1" time="0.001">
+		<testcase classname="getPixelHeight" name="getPixelHeight" assertions="1" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="getPixelWidth" name="getPixelWidth" assertions="1" time="0.001">
+		<testcase classname="getPixelWidth" name="getPixelWidth" assertions="1" time="0.013">
 		</testcase>
 		</testcase>
-		<testcase classname="getPointSize" name="getPointSize" assertions="2" time="0.001">
+		<testcase classname="getPointSize" name="getPointSize" assertions="2" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="getRendererInfo" name="getRendererInfo" assertions="4" time="0.002">
+		<testcase classname="getRendererInfo" name="getRendererInfo" assertions="4" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getScissor" name="getScissor" assertions="8" time="0.002">
+		<testcase classname="getScissor" name="getScissor" assertions="8" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="getShader" name="getShader" assertions="1" time="0.002">
+		<testcase classname="getShader" name="getShader" assertions="1" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="getStackDepth" name="getStackDepth" assertions="4" time="0.002">
+		<testcase classname="getStackDepth" name="getStackDepth" assertions="4" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getStats" name="getStats" assertions="7" time="0.002">
+		<testcase classname="getStats" name="getStats" assertions="7" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="getStencilMode" name="getStencilMode" assertions="6" time="0.001">
+		<testcase classname="getStencilMode" name="getStencilMode" assertions="6" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="getSupported" name="getSupported" assertions="17" time="0.002">
+		<testcase classname="getSupported" name="getSupported" assertions="17" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="getSystemLimits" name="getSystemLimits" assertions="13" time="0.005">
+		<testcase classname="getSystemLimits" name="getSystemLimits" assertions="13" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getTextureFormats" name="getTextureFormats" assertions="79" time="0.002">
+		<testcase classname="getTextureFormats" name="getTextureFormats" assertions="79" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getTextureTypes" name="getTextureTypes" assertions="4" time="0.001">
+		<testcase classname="getTextureTypes" name="getTextureTypes" assertions="4" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getWidth" name="getWidth" assertions="1" time="0.001">
+		<testcase classname="getWidth" name="getWidth" assertions="1" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="intersectScissor" name="intersectScissor" assertions="20" time="0.002">
+		<testcase classname="intersectScissor" name="intersectScissor" assertions="20" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="inverseTransformPoint" name="inverseTransformPoint" assertions="4" time="0.002">
+		<testcase classname="inverseTransformPoint" name="inverseTransformPoint" assertions="4" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="isActive" name="isActive" assertions="1" time="0.001">
+		<testcase classname="isActive" name="isActive" assertions="1" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="isGammaCorrect" name="isGammaCorrect" assertions="1" time="0.006">
+		<testcase classname="isGammaCorrect" name="isGammaCorrect" assertions="1" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="isWireframe" name="isWireframe" assertions="2" time="0.001">
+		<testcase classname="isWireframe" name="isWireframe" assertions="2" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="line" name="line" assertions="64" time="0.003">
+		<testcase classname="line" name="line" assertions="64" time="0.019">
 		</testcase>
 		</testcase>
-		<testcase classname="newArrayImage" name="newArrayImage" assertions="3" time="0.007">
+		<testcase classname="newArrayImage" name="newArrayImage" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="newCanvas" name="newCanvas" assertions="6" time="0.002">
+		<testcase classname="newCanvas" name="newCanvas" assertions="6" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="newCubeImage" name="newCubeImage" assertions="3" time="0.003">
+		<testcase classname="newCubeImage" name="newCubeImage" assertions="3" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="newFont" name="newFont" assertions="6" time="0.002">
+		<testcase classname="newFont" name="newFont" assertions="6" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="newImage" name="newImage" assertions="3" time="0.002">
+		<testcase classname="newImage" name="newImage" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="newImageFont" name="newImageFont" assertions="3" time="0.002">
+		<testcase classname="newImageFont" name="newImageFont" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="newMesh" name="newMesh" assertions="3" time="0.002">
+		<testcase classname="newMesh" name="newMesh" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="newParticleSystem" name="newParticleSystem" assertions="3" time="0.002">
+		<testcase classname="newParticleSystem" name="newParticleSystem" assertions="3" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="newQuad" name="newQuad" assertions="3" time="0.002">
+		<testcase classname="newQuad" name="newQuad" assertions="3" time="0.020">
 		</testcase>
 		</testcase>
-		<testcase classname="newShader" name="newShader" assertions="3" time="0.009">
+		<testcase classname="newShader" name="newShader" assertions="3" time="0.024">
 		</testcase>
 		</testcase>
-		<testcase classname="newSpriteBatch" name="newSpriteBatch" assertions="3" time="0.002">
+		<testcase classname="newSpriteBatch" name="newSpriteBatch" assertions="3" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="newTextBatch" name="newTextBatch" assertions="3" time="0.002">
+		<testcase classname="newTextBatch" name="newTextBatch" assertions="3" time="0.019">
 		</testcase>
 		</testcase>
-		<testcase classname="newVideo" name="newVideo" assertions="3" time="0.004">
+		<testcase classname="newVideo" name="newVideo" assertions="3" time="0.021">
 		</testcase>
 		</testcase>
-		<testcase classname="newVolumeImage" name="newVolumeImage" assertions="3" time="0.002">
+		<testcase classname="newVolumeImage" name="newVolumeImage" assertions="3" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="origin" name="origin" assertions="4" time="0.002">
+		<testcase classname="origin" name="origin" assertions="4" time="0.019">
 		</testcase>
 		</testcase>
-		<testcase classname="points" name="points" assertions="48" time="0.003">
+		<testcase classname="points" name="points" assertions="48" time="0.022">
 		</testcase>
 		</testcase>
-		<testcase classname="polygon" name="polygon" assertions="56" time="0.002">
+		<testcase classname="polygon" name="polygon" assertions="56" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="pop" name="pop" assertions="4" time="0.002">
+		<testcase classname="pop" name="pop" assertions="4" time="0.032">
 		</testcase>
 		</testcase>
-		<testcase classname="print" name="print" assertions="148" time="0.002">
+		<testcase classname="print" name="print" assertions="148" time="0.019">
 		</testcase>
 		</testcase>
-		<testcase classname="printf" name="printf" assertions="180" time="0.002">
+		<testcase classname="printf" name="printf" assertions="180" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="push" name="push" assertions="4" time="0.007">
+		<testcase classname="push" name="push" assertions="4" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="rectangle" name="rectangle" assertions="116" time="0.002">
+		<testcase classname="rectangle" name="rectangle" assertions="116" time="0.032">
 		</testcase>
 		</testcase>
-		<testcase classname="replaceTransform" name="replaceTransform" assertions="4" time="0.002">
+		<testcase classname="replaceTransform" name="replaceTransform" assertions="4" time="0.024">
 		</testcase>
 		</testcase>
-		<testcase classname="reset" name="reset" assertions="3" time="0.002">
+		<testcase classname="reset" name="reset" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="rotate" name="rotate" assertions="16" time="0.002">
+		<testcase classname="rotate" name="rotate" assertions="16" time="0.036">
 		</testcase>
 		</testcase>
-		<testcase classname="scale" name="scale" assertions="16" time="0.002">
+		<testcase classname="scale" name="scale" assertions="16" time="0.014">
 		</testcase>
 		</testcase>
-		<testcase classname="setBackgroundColor" name="setBackgroundColor" assertions="4" time="0.002">
+		<testcase classname="setBackgroundColor" name="setBackgroundColor" assertions="4" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="setBlendMode" name="setBlendMode" assertions="16" time="0.003">
+		<testcase classname="setBlendMode" name="setBlendMode" assertions="16" time="0.027">
 		</testcase>
 		</testcase>
-		<testcase classname="setCanvas" name="setCanvas" assertions="19" time="0.002">
+		<testcase classname="setCanvas" name="setCanvas" assertions="19" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="setColor" name="setColor" assertions="68" time="0.002">
+		<testcase classname="setColor" name="setColor" assertions="68" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="setColorMask" name="setColorMask" assertions="20" time="0.002">
+		<testcase classname="setColorMask" name="setColorMask" assertions="20" time="0.023">
 		</testcase>
 		</testcase>
-		<testcase classname="setDefaultFilter" name="setDefaultFilter" assertions="3" time="0.001">
+		<testcase classname="setDefaultFilter" name="setDefaultFilter" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="setDepthMode" name="setDepthMode" assertions="8" time="0.002">
+		<testcase classname="setDepthMode" name="setDepthMode" assertions="8" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="setFont" name="setFont" assertions="40" time="0.003">
+		<testcase classname="setFont" name="setFont" assertions="40" time="0.030">
 		</testcase>
 		</testcase>
-		<testcase classname="setFrontFaceWinding" name="setFrontFaceWinding" assertions="2" time="0.002">
+		<testcase classname="setFrontFaceWinding" name="setFrontFaceWinding" assertions="2" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="setLineJoin" name="setLineJoin" assertions="16" time="0.003">
+		<testcase classname="setLineJoin" name="setLineJoin" assertions="16" time="0.019">
 		</testcase>
 		</testcase>
-		<testcase classname="setLineStyle" name="setLineStyle" assertions="24" time="0.002">
+		<testcase classname="setLineStyle" name="setLineStyle" assertions="24" time="0.029">
 		</testcase>
 		</testcase>
-		<testcase classname="setLineWidth" name="setLineWidth" assertions="72" time="0.002">
+		<testcase classname="setLineWidth" name="setLineWidth" assertions="72" time="0.021">
 		</testcase>
 		</testcase>
-		<testcase classname="setMeshCullMode" name="setMeshCullMode" assertions="3" time="0.002">
+		<testcase classname="setMeshCullMode" name="setMeshCullMode" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="setScissor" name="setScissor" assertions="32" time="0.002">
+		<testcase classname="setScissor" name="setScissor" assertions="32" time="0.034">
 		</testcase>
 		</testcase>
-		<testcase classname="setShader" name="setShader" assertions="16" time="0.010">
+		<testcase classname="setShader" name="setShader" assertions="16" time="0.023">
 		</testcase>
 		</testcase>
-		<testcase classname="setStencilTest" name="setStencilTest" assertions="32" time="0.003">
+		<testcase classname="setStencilMode" name="setStencilMode" assertions="32" time="0.019">
 		</testcase>
 		</testcase>
-		<testcase classname="setWireframe" name="setWireframe" assertions="28" time="0.002">
+		<testcase classname="setWireframe" name="setWireframe" assertions="28" time="0.030">
 		</testcase>
 		</testcase>
-		<testcase classname="shear" name="shear" assertions="32" time="0.003">
+		<testcase classname="shear" name="shear" assertions="32" time="0.022">
 		</testcase>
 		</testcase>
-		<testcase classname="transformPoint" name="transformPoint" assertions="4" time="0.002">
+		<testcase classname="transformPoint" name="transformPoint" assertions="4" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="translate" name="translate" assertions="16" time="0.007">
+		<testcase classname="translate" name="translate" assertions="16" time="0.031">
 		</testcase>
 		</testcase>
-		<testcase classname="validateShader" name="validateShader" assertions="2" time="0.005">
+		<testcase classname="validateShader" name="validateShader" assertions="2" time="0.019">
 		</testcase>
 		</testcase>
 	</testsuite>
 	</testsuite>
-	<testsuite name="love.image" tests="5" failures="0" skipped="0" time="0.011">
-		<testcase classname="CompressedImageData" name="CompressedImageData" assertions="11" time="0.002">
+	<testsuite name="love.image" tests="5" failures="0" skipped="0" time="0.086">
+		<testcase classname="CompressedImageData" name="CompressedImageData" assertions="11" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="ImageData" name="ImageData" assertions="14" time="0.003">
+		<testcase classname="ImageData" name="ImageData" assertions="14" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="isCompressed" name="isCompressed" assertions="1" time="0.002">
+		<testcase classname="isCompressed" name="isCompressed" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="newCompressedData" name="newCompressedData" assertions="3" time="0.002">
+		<testcase classname="newCompressedData" name="newCompressedData" assertions="3" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="newImageData" name="newImageData" assertions="6" time="0.002">
+		<testcase classname="newImageData" name="newImageData" assertions="6" time="0.018">
 		</testcase>
 		</testcase>
 	</testsuite>
 	</testsuite>
-	<testsuite name="love.math" tests="20" failures="0" skipped="0" time="0.070">
-		<testcase classname="BezierCurve" name="BezierCurve" assertions="31" time="0.007">
+	<testsuite name="love.math" tests="20" failures="0" skipped="0" time="0.339">
+		<testcase classname="BezierCurve" name="BezierCurve" assertions="31" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="RandomGenerator" name="RandomGenerator" assertions="10" time="0.002">
+		<testcase classname="RandomGenerator" name="RandomGenerator" assertions="10" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="Transform" name="Transform" assertions="14" time="0.002">
+		<testcase classname="Transform" name="Transform" assertions="14" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="colorFromBytes" name="colorFromBytes" assertions="12" time="0.007">
+		<testcase classname="colorFromBytes" name="colorFromBytes" assertions="12" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="colorToBytes" name="colorToBytes" assertions="12" time="0.002">
+		<testcase classname="colorToBytes" name="colorToBytes" assertions="12" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="gammaToLinear" name="gammaToLinear" assertions="3" time="0.002">
+		<testcase classname="gammaToLinear" name="gammaToLinear" assertions="3" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getRandomSeed" name="getRandomSeed" assertions="2" time="0.006">
+		<testcase classname="getRandomSeed" name="getRandomSeed" assertions="2" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="getRandomState" name="getRandomState" assertions="1" time="0.002">
+		<testcase classname="getRandomState" name="getRandomState" assertions="1" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="isConvex" name="isConvex" assertions="2" time="0.002">
+		<testcase classname="isConvex" name="isConvex" assertions="2" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="linearToGamma" name="linearToGamma" assertions="3" time="0.007">
+		<testcase classname="linearToGamma" name="linearToGamma" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="newBezierCurve" name="newBezierCurve" assertions="3" time="0.002">
+		<testcase classname="newBezierCurve" name="newBezierCurve" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="newRandomGenerator" name="newRandomGenerator" assertions="3" time="0.002">
+		<testcase classname="newRandomGenerator" name="newRandomGenerator" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="newTransform" name="newTransform" assertions="3" time="0.006">
+		<testcase classname="newTransform" name="newTransform" assertions="3" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="perlinNoise" name="perlinNoise" assertions="4" time="0.002">
+		<testcase classname="perlinNoise" name="perlinNoise" assertions="4" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="random" name="random" assertions="10" time="0.002">
+		<testcase classname="random" name="random" assertions="10" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="randomNormal" name="randomNormal" assertions="1" time="0.006">
+		<testcase classname="randomNormal" name="randomNormal" assertions="1" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="setRandomSeed" name="setRandomSeed" assertions="2" time="0.002">
+		<testcase classname="setRandomSeed" name="setRandomSeed" assertions="2" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="setRandomState" name="setRandomState" assertions="1" time="0.002">
+		<testcase classname="setRandomState" name="setRandomState" assertions="1" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="simplexNoise" name="simplexNoise" assertions="4" time="0.007">
+		<testcase classname="simplexNoise" name="simplexNoise" assertions="4" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="triangulate" name="triangulate" assertions="2" time="0.002">
+		<testcase classname="triangulate" name="triangulate" assertions="2" time="0.017">
 		</testcase>
 		</testcase>
 	</testsuite>
 	</testsuite>
-	<testsuite name="love.physics" tests="22" failures="0" skipped="6" time="0.071">
-		<testcase classname="Body" name="Body" assertions="0" time="0.002">
+	<testsuite name="love.physics" tests="22" failures="0" skipped="4" time="0.434">
+		<testcase classname="Body" name="Body" assertions="0" time="0.017">
 			<skipped message="test class needs writing" />
 			<skipped message="test class needs writing" />
 		</testcase>
 		</testcase>
-		<testcase classname="Contact" name="Contact" assertions="0" time="0.002">
+		<testcase classname="Contact" name="Contact" assertions="0" time="0.017">
 			<skipped message="test class needs writing" />
 			<skipped message="test class needs writing" />
 		</testcase>
 		</testcase>
-		<testcase classname="Fixture" name="Fixture" assertions="0" time="0.002">
+		<testcase classname="Joint" name="Joint" assertions="0" time="0.017">
 			<skipped message="test class needs writing" />
 			<skipped message="test class needs writing" />
 		</testcase>
 		</testcase>
-		<testcase classname="Joint" name="Joint" assertions="0" time="0.002">
+		<testcase classname="Shape" name="Shape" assertions="0" time="0.016">
 			<skipped message="test class needs writing" />
 			<skipped message="test class needs writing" />
 		</testcase>
 		</testcase>
-		<testcase classname="Shape" name="Shape" assertions="0" time="0.002">
-			<skipped message="test class needs writing" />
+		<testcase classname="World" name="World" assertions="33" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="World" name="World" assertions="0" time="0.002">
-			<skipped message="test class needs writing" />
-		</testcase>
-		<testcase classname="getDistance" name="getDistance" assertions="1" time="0.002">
+		<testcase classname="getDistance" name="getDistance" assertions="1" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="getMeter" name="getMeter" assertions="1" time="0.002">
+		<testcase classname="getMeter" name="getMeter" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="newBody" name="newBody" assertions="3" time="0.002">
+		<testcase classname="newBody" name="newBody" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="newChainShape" name="newChainShape" assertions="3" time="0.008">
+		<testcase classname="newChainShape" name="newChainShape" assertions="3" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="newCircleShape" name="newCircleShape" assertions="3" time="0.002">
+		<testcase classname="newCircleShape" name="newCircleShape" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="newDistanceJoint" name="newDistanceJoint" assertions="3" time="0.002">
+		<testcase classname="newDistanceJoint" name="newDistanceJoint" assertions="3" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="newEdgeShape" name="newEdgeShape" assertions="3" time="0.002">
+		<testcase classname="newEdgeShape" name="newEdgeShape" assertions="3" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="newFixture" name="newFixture" assertions="3" time="0.002">
+		<testcase classname="newFrictionJoint" name="newFrictionJoint" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="newFrictionJoint" name="newFrictionJoint" assertions="3" time="0.008">
+		<testcase classname="newGearJoint" name="newGearJoint" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="newGearJoint" name="newGearJoint" assertions="3" time="0.002">
+		<testcase classname="newMotorJoint" name="newMotorJoint" assertions="3" time="0.015">
 		</testcase>
 		</testcase>
-		<testcase classname="newMotorJoint" name="newMotorJoint" assertions="3" time="0.002">
+		<testcase classname="newMouseJoint" name="newMouseJoint" assertions="3" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="newMouseJoint" name="newMouseJoint" assertions="3" time="0.002">
+		<testcase classname="newPolygonShape" name="newPolygonShape" assertions="3" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="newPolygonShape" name="newPolygonShape" assertions="3" time="0.002">
+		<testcase classname="newPrismaticJoint" name="newPrismaticJoint" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="newPrismaticJoint" name="newPrismaticJoint" assertions="3" time="0.005">
+		<testcase classname="newPulleyJoint" name="newPulleyJoint" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="newPulleyJoint" name="newPulleyJoint" assertions="3" time="0.002">
+		<testcase classname="newRectangleShape" name="newRectangleShape" assertions="6" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="newRectangleShape" name="newRectangleShape" assertions="6" time="0.002">
+		<testcase classname="newRevoluteJoint" name="newRevoluteJoint" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="newRevoluteJoint" name="newRevoluteJoint" assertions="3" time="0.002">
+		<testcase classname="newRopeJoint" name="newRopeJoint" assertions="3" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="newRopeJoint" name="newRopeJoint" assertions="3" time="0.002">
+		<testcase classname="newWeldJoint" name="newWeldJoint" assertions="3" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="newWeldJoint" name="newWeldJoint" assertions="3" time="0.002">
+		<testcase classname="newWheelJoint" name="newWheelJoint" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="newWheelJoint" name="newWheelJoint" assertions="3" time="0.002">
+		<testcase classname="newWorld" name="newWorld" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="newWorld" name="newWorld" assertions="3" time="0.002">
-		</testcase>
-		<testcase classname="setMeter" name="setMeter" assertions="2" time="0.002">
+		<testcase classname="setMeter" name="setMeter" assertions="2" time="0.016">
 		</testcase>
 		</testcase>
 	</testsuite>
 	</testsuite>
-	<testsuite name="love.sound" tests="4" failures="0" skipped="0" time="0.015">
-		<testcase classname="Decoder" name="Decoder" assertions="14" time="0.006">
+	<testsuite name="love.sound" tests="4" failures="0" skipped="0" time="0.071">
+		<testcase classname="Decoder" name="Decoder" assertions="14" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="SoundData" name="SoundData" assertions="20" time="0.003">
+		<testcase classname="SoundData" name="SoundData" assertions="20" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="newDecoder" name="newDecoder" assertions="3" time="0.002">
+		<testcase classname="newDecoder" name="newDecoder" assertions="3" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="newSoundData" name="newSoundData" assertions="6" time="0.004">
+		<testcase classname="newSoundData" name="newSoundData" assertions="6" time="0.018">
 		</testcase>
 		</testcase>
 	</testsuite>
 	</testsuite>
-	<testsuite name="love.system" tests="6" failures="0" skipped="2" time="0.026">
-		<testcase classname="getClipboardText" name="getClipboardText" assertions="1" time="0.003">
+	<testsuite name="love.system" tests="6" failures="0" skipped="2" time="0.139">
+		<testcase classname="getClipboardText" name="getClipboardText" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getOS" name="getOS" assertions="1" time="0.002">
+		<testcase classname="getOS" name="getOS" assertions="1" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="getPowerInfo" name="getPowerInfo" assertions="1" time="0.002">
+		<testcase classname="getPowerInfo" name="getPowerInfo" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getProcessorCount" name="getProcessorCount" assertions="1" time="0.002">
+		<testcase classname="getProcessorCount" name="getProcessorCount" assertions="1" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="hasBackgroundMusic" name="hasBackgroundMusic" assertions="1" time="0.005">
+		<testcase classname="hasBackgroundMusic" name="hasBackgroundMusic" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="openURL" name="openURL" assertions="0" time="0.002">
+		<testcase classname="openURL" name="openURL" assertions="0" time="0.016">
 			<skipped message="cant test this worked" />
 			<skipped message="cant test this worked" />
 		</testcase>
 		</testcase>
-		<testcase classname="setClipboardText" name="setClipboardText" assertions="1" time="0.002">
+		<testcase classname="setClipboardText" name="setClipboardText" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="vibrate" name="vibrate" assertions="0" time="0.007">
+		<testcase classname="vibrate" name="vibrate" assertions="0" time="0.017">
 			<skipped message="cant test this worked" />
 			<skipped message="cant test this worked" />
 		</testcase>
 		</testcase>
 	</testsuite>
 	</testsuite>
-	<testsuite name="love.thread" tests="5" failures="0" skipped="0" time="0.317">
-		<testcase classname="Channel" name="Channel" assertions="10" time="0.215">
+	<testsuite name="love.thread" tests="5" failures="0" skipped="0" time="0.376">
+		<testcase classname="Channel" name="Channel" assertions="10" time="0.235">
 		</testcase>
 		</testcase>
-		<testcase classname="Thread" name="Thread" assertions="7" time="0.092">
+		<testcase classname="Thread" name="Thread" assertions="7" time="0.091">
 		</testcase>
 		</testcase>
-		<testcase classname="getChannel" name="getChannel" assertions="3" time="0.002">
+		<testcase classname="getChannel" name="getChannel" assertions="3" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="newChannel" name="newChannel" assertions="3" time="0.006">
+		<testcase classname="newChannel" name="newChannel" assertions="3" time="0.015">
 		</testcase>
 		</testcase>
-		<testcase classname="newThread" name="newThread" assertions="3" time="0.002">
+		<testcase classname="newThread" name="newThread" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
 	</testsuite>
 	</testsuite>
-	<testsuite name="love.timer" tests="6" failures="0" skipped="0" time="2.021">
-		<testcase classname="getAverageDelta" name="getAverageDelta" assertions="1" time="0.002">
+	<testsuite name="love.timer" tests="6" failures="0" skipped="0" time="2.091">
+		<testcase classname="getAverageDelta" name="getAverageDelta" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getDelta" name="getDelta" assertions="1" time="0.006">
+		<testcase classname="getDelta" name="getDelta" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getFPS" name="getFPS" assertions="1" time="0.002">
+		<testcase classname="getFPS" name="getFPS" assertions="1" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="getTime" name="getTime" assertions="1" time="1.003">
+		<testcase classname="getTime" name="getTime" assertions="1" time="1.017">
 		</testcase>
 		</testcase>
-		<testcase classname="sleep" name="sleep" assertions="1" time="1.003">
+		<testcase classname="sleep" name="sleep" assertions="1" time="1.012">
 		</testcase>
 		</testcase>
-		<testcase classname="step" name="step" assertions="1" time="0.005">
+		<testcase classname="step" name="step" assertions="1" time="0.012">
 		</testcase>
 		</testcase>
 	</testsuite>
 	</testsuite>
-	<testsuite name="love.video" tests="2" failures="0" skipped="0" time="0.012">
-		<testcase classname="VideoStream" name="VideoStream" assertions="9" time="0.007">
+	<testsuite name="love.video" tests="2" failures="0" skipped="0" time="0.039">
+		<testcase classname="VideoStream" name="VideoStream" assertions="9" time="0.019">
 		</testcase>
 		</testcase>
-		<testcase classname="newVideoStream" name="newVideoStream" assertions="3" time="0.005">
+		<testcase classname="newVideoStream" name="newVideoStream" assertions="3" time="0.020">
 		</testcase>
 		</testcase>
 	</testsuite>
 	</testsuite>
-	<testsuite name="love.window" tests="34" failures="0" skipped="2" time="5.955">
-		<testcase classname="close" name="close" assertions="2" time="0.034">
+	<testsuite name="love.window" tests="34" failures="0" skipped="2" time="6.015">
+		<testcase classname="close" name="close" assertions="2" time="0.048">
 		</testcase>
 		</testcase>
 		<testcase classname="fromPixels" name="fromPixels" assertions="1" time="0.002">
 		<testcase classname="fromPixels" name="fromPixels" assertions="1" time="0.002">
 		</testcase>
 		</testcase>
-		<testcase classname="getDPIScale" name="getDPIScale" assertions="1" time="0.003">
+		<testcase classname="getDPIScale" name="getDPIScale" assertions="1" time="0.002">
 		</testcase>
 		</testcase>
-		<testcase classname="getDesktopDimensions" name="getDesktopDimensions" assertions="2" time="0.002">
+		<testcase classname="getDesktopDimensions" name="getDesktopDimensions" assertions="2" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getDisplayCount" name="getDisplayCount" assertions="1" time="0.002">
+		<testcase classname="getDisplayCount" name="getDisplayCount" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getDisplayName" name="getDisplayName" assertions="1" time="0.002">
+		<testcase classname="getDisplayName" name="getDisplayName" assertions="1" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="getDisplayOrientation" name="getDisplayOrientation" assertions="1" time="0.004">
+		<testcase classname="getDisplayOrientation" name="getDisplayOrientation" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getFullscreen" name="getFullscreen" assertions="2" time="1.365">
+		<testcase classname="getFullscreen" name="getFullscreen" assertions="2" time="1.345">
 		</testcase>
 		</testcase>
-		<testcase classname="getFullscreenModes" name="getFullscreenModes" assertions="1" time="0.014">
+		<testcase classname="getFullscreenModes" name="getFullscreenModes" assertions="1" time="0.012">
 		</testcase>
 		</testcase>
 		<testcase classname="getIcon" name="getIcon" assertions="2" time="0.019">
 		<testcase classname="getIcon" name="getIcon" assertions="2" time="0.019">
 		</testcase>
 		</testcase>
-		<testcase classname="getMode" name="getMode" assertions="3" time="0.017">
+		<testcase classname="getMode" name="getMode" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
 		<testcase classname="getPosition" name="getPosition" assertions="2" time="0.017">
 		<testcase classname="getPosition" name="getPosition" assertions="2" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getSafeArea" name="getSafeArea" assertions="4" time="0.018">
+		<testcase classname="getSafeArea" name="getSafeArea" assertions="4" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="getTitle" name="getTitle" assertions="1" time="0.018">
+		<testcase classname="getTitle" name="getTitle" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="getVSync" name="getVSync" assertions="1" time="0.014">
+		<testcase classname="getVSync" name="getVSync" assertions="1" time="0.015">
 		</testcase>
 		</testcase>
 		<testcase classname="hasFocus" name="hasFocus" assertions="1" time="0.017">
 		<testcase classname="hasFocus" name="hasFocus" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
 		<testcase classname="hasMouseFocus" name="hasMouseFocus" assertions="1" time="0.017">
 		<testcase classname="hasMouseFocus" name="hasMouseFocus" assertions="1" time="0.017">
 		</testcase>
 		</testcase>
-		<testcase classname="isDisplaySleepEnabled" name="isDisplaySleepEnabled" assertions="3" time="0.017">
+		<testcase classname="isDisplaySleepEnabled" name="isDisplaySleepEnabled" assertions="3" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="isMaximized" name="isMaximized" assertions="2" time="0.187">
+		<testcase classname="isMaximized" name="isMaximized" assertions="2" time="0.185">
 		</testcase>
 		</testcase>
-		<testcase classname="isMinimized" name="isMinimized" assertions="2" time="0.735">
+		<testcase classname="isMinimized" name="isMinimized" assertions="2" time="0.730">
 		</testcase>
 		</testcase>
-		<testcase classname="isOpen" name="isOpen" assertions="2" time="0.040">
+		<testcase classname="isOpen" name="isOpen" assertions="2" time="0.041">
 		</testcase>
 		</testcase>
-		<testcase classname="isVisible" name="isVisible" assertions="2" time="0.034">
+		<testcase classname="isVisible" name="isVisible" assertions="2" time="0.029">
 		</testcase>
 		</testcase>
-		<testcase classname="maximize" name="maximize" assertions="2" time="0.158">
+		<testcase classname="maximize" name="maximize" assertions="2" time="0.156">
 		</testcase>
 		</testcase>
-		<testcase classname="minimize" name="minimize" assertions="2" time="0.737">
+		<testcase classname="minimize" name="minimize" assertions="2" time="0.731">
 		</testcase>
 		</testcase>
-		<testcase classname="requestAttention" name="requestAttention" assertions="0" time="0.003">
+		<testcase classname="requestAttention" name="requestAttention" assertions="0" time="0.011">
 			<skipped message="cant test this worked" />
 			<skipped message="cant test this worked" />
 		</testcase>
 		</testcase>
-		<testcase classname="restore" name="restore" assertions="1" time="0.882">
+		<testcase classname="restore" name="restore" assertions="1" time="0.883">
 		</testcase>
 		</testcase>
 		<testcase classname="setDisplaySleepEnabled" name="setDisplaySleepEnabled" assertions="2" time="0.018">
 		<testcase classname="setDisplaySleepEnabled" name="setDisplaySleepEnabled" assertions="2" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="setFullscreen" name="setFullscreen" assertions="2" time="1.313">
+		<testcase classname="setFullscreen" name="setFullscreen" assertions="2" time="1.339">
 		</testcase>
 		</testcase>
-		<testcase classname="setIcon" name="setIcon" assertions="1" time="0.017">
+		<testcase classname="setIcon" name="setIcon" assertions="1" time="0.016">
 		</testcase>
 		</testcase>
 		<testcase classname="setMode" name="setMode" assertions="4" time="0.022">
 		<testcase classname="setMode" name="setMode" assertions="4" time="0.022">
 		</testcase>
 		</testcase>
 		<testcase classname="setPosition" name="setPosition" assertions="2" time="0.179">
 		<testcase classname="setPosition" name="setPosition" assertions="2" time="0.179">
 		</testcase>
 		</testcase>
-		<testcase classname="setTitle" name="setTitle" assertions="1" time="0.021">
+		<testcase classname="setTitle" name="setTitle" assertions="1" time="0.018">
 		</testcase>
 		</testcase>
-		<testcase classname="setVSync" name="setVSync" assertions="1" time="0.017">
+		<testcase classname="setVSync" name="setVSync" assertions="1" time="0.016">
 		</testcase>
 		</testcase>
-		<testcase classname="showMessageBox" name="showMessageBox" assertions="0" time="0.003">
+		<testcase classname="showMessageBox" name="showMessageBox" assertions="0" time="0.002">
 			<skipped message="cant test this worked" />
 			<skipped message="cant test this worked" />
 		</testcase>
 		</testcase>
 		<testcase classname="toPixels" name="toPixels" assertions="1" time="0.002">
 		<testcase classname="toPixels" name="toPixels" assertions="1" time="0.002">
 		</testcase>
 		</testcase>
-		<testcase classname="updateMode" name="updateMode" assertions="4" time="0.007">
+		<testcase classname="updateMode" name="updateMode" assertions="4" time="0.011">
 		</testcase>
 		</testcase>
 	</testsuite>
 	</testsuite>
 </testsuites>
 </testsuites>

BIN
testing/output/expected/love.test.graphics.SpriteBatch-1.png


BIN
testing/output/expected/love.test.graphics.SpriteBatch-2.png


BIN
testing/output/expected/love.test.graphics.SpriteBatch-3.png


BIN
testing/output/expected/love.test.graphics.SpriteBatch-4.png


BIN
testing/output/expected/love.test.graphics.SpriteBatch-5.png


BIN
testing/output/expected/love.test.graphics.Video-1.png


BIN
testing/output/expected/love.test.graphics.drawInstanced-1.png


+ 0 - 0
testing/output/expected/love.test.graphics.setStencilTest-1.png → testing/output/expected/love.test.graphics.setStencilMode-1.png


+ 11 - 13
testing/readme.md

@@ -26,10 +26,10 @@ This is the status of all module tests currently.
 | 🟢 event          |   4  |   0  |   2  |
 | 🟢 event          |   4  |   0  |   2  |
 | 🟢 filesystem     |  29  |   0  |   2  |
 | 🟢 filesystem     |  29  |   0  |   2  |
 | 🟢 font           |   7  |   0  |   0  |
 | 🟢 font           |   7  |   0  |   0  |
-| 🟡 graphics       |  99  |   5  |   1  |
+| 🟡 graphics       | 102  |   2  |   1  |
 | 🟢 image          |   5  |   0  |   0  |
 | 🟢 image          |   5  |   0  |   0  |
 | 🟢 math           |  20  |   0  |   0  |
 | 🟢 math           |  20  |   0  |   0  |
-| 🟡 physics        |  22  |   6  |   0  |
+| 🟡 physics        |  22  |   4  |   0  |
 | 🟢 sound          |   4  |   0  |   0  |
 | 🟢 sound          |   4  |   0  |   0  |
 | 🟢 system         |   6  |   0  |   2  |
 | 🟢 system         |   6  |   0  |   2  |
 | 🟢 thread         |   5  |   0  |   0  |
 | 🟢 thread         |   5  |   0  |   0  |
@@ -60,7 +60,7 @@ All results will be printed in the console per method as PASS, FAIL, or SKIP wit
 
 
 When finished, the following files will be generated in the `/output` directory with a summary of the test results:
 When finished, the following files will be generated in the `/output` directory with a summary of the test results:
 - an `XML` file in the style of [JUnit XML](https://www.ibm.com/docs/en/developer-for-zos/14.1?topic=formats-junit-xml-format)
 - an `XML` file in the style of [JUnit XML](https://www.ibm.com/docs/en/developer-for-zos/14.1?topic=formats-junit-xml-format)
-- a `HTML` file that shows any visual test results
+- a `HTML` file that shows the report + any visual test results
 - a `Markdown` file you can use with [this github action](https://github.com/ellraiser/love-test-report)
 - a `Markdown` file you can use with [this github action](https://github.com/ellraiser/love-test-report)
 > An example of all types of output can be found in the `/examples`  
 > An example of all types of output can be found in the `/examples`  
 > The visual results of any graphic tests can be found in `/output/actual`
 > The visual results of any graphic tests can be found in `/output/actual`
@@ -110,15 +110,13 @@ For sanity-checking, if it's currently not covered or it's not possible to test
 ---
 ---
 
 
 ## Todo 
 ## Todo 
-Things still left to do:
-- [ ] physics.Body, physics.Contact, physics.Fixture,
-      physics.Joint, physics.Shape, physics.World
-- [ ] @deprecated physics methods (sasha changes)
-- [ ] graphics.Mesh, graphics.ParticleSystem
-      graphics.SpriteBatch, graphics.Video
-- [ ] graphics.drawInstanced
-- [ ] @deprecated love.graphics.stencil (replaced by love.graphics.setStencilMode)
-- [ ] @deprecated love.graphics.setStencilTest (replaced by love.graphics.setStencilMode)
+Test classes that still need to be written:
+- [ ] graphics.Mesh
+- [ ] graphics.ParticleSystem
+- [ ] physics.Body
+- [ ] physics.Contact
+- [ ] physics.Joint
+- [ ] physics.Shape
 
 
 ---
 ---
 
 
@@ -129,4 +127,4 @@ Things still left to do:
       use in the report output comparisons, so we just need to add a helper method
       use in the report output comparisons, so we just need to add a helper method
       to the test class to let you just do assertMatching on the imgdata
       to the test class to let you just do assertMatching on the imgdata
 - [ ] Ability to test loading different combinations of modules
 - [ ] Ability to test loading different combinations of modules
-- [ ] Performance tests
+- [ ] Performance tests

+ 210 - 16
testing/tests/graphics.lua

@@ -60,10 +60,11 @@ love.test.graphics.Canvas = function(test)
   test:assertEquals('linear', mode, 'check def minmap filter  mode')
   test:assertEquals('linear', mode, 'check def minmap filter  mode')
   test:assertEquals(0, sharpness, 'check def minmap filter sharpness')
   test:assertEquals(0, sharpness, 'check def minmap filter sharpness')
   local name, version, vendor, device = love.graphics.getRendererInfo()
   local name, version, vendor, device = love.graphics.getRendererInfo()
+  canvas:setMipmapFilter('nearest', 1)
+  mode, sharpness = canvas:getMipmapFilter()
+  test:assertEquals('nearest', mode, 'check changed minmap filter  mode')
+  -- mipmap sharpness wont work on opengl/metal
   if string.match(name, 'OpenGL ES') == nil and string.match(name, 'Metal') == nil then
   if string.match(name, 'OpenGL ES') == nil and string.match(name, 'Metal') == nil then
-    canvas:setMipmapFilter('nearest', 1)
-    mode, sharpness = canvas:getMipmapFilter()
-    test:assertEquals('nearest', mode, 'check changed minmap filter  mode')
     test:assertEquals(1, sharpness, 'check changed minmap filter sharpness')
     test:assertEquals(1, sharpness, 'check changed minmap filter sharpness')
   end
   end
   test:assertGreaterEqual(2, canvas:getMipmapCount()) -- docs say no mipmaps should return 1
   test:assertGreaterEqual(2, canvas:getMipmapCount()) -- docs say no mipmaps should return 1
@@ -209,10 +210,11 @@ love.test.graphics.Image = function(test)
   test:assertEquals(0, sharpness, 'check def minmap filter sharpness')
   test:assertEquals(0, sharpness, 'check def minmap filter sharpness')
   
   
   local name, version, vendor, device = love.graphics.getRendererInfo()
   local name, version, vendor, device = love.graphics.getRendererInfo()
+  -- mipmap sharpness wont work on opengl/metal
+  image:setMipmapFilter('nearest', 1)
+  mode, sharpness = image:getMipmapFilter()
+  test:assertEquals('nearest', mode, 'check changed minmap filter  mode')
   if string.match(name, 'OpenGL ES') == nil and string.match(name, 'Metal') == nil then
   if string.match(name, 'OpenGL ES') == nil and string.match(name, 'Metal') == nil then
-    image:setMipmapFilter('nearest', 1)
-    mode, sharpness = image:getMipmapFilter()
-    test:assertEquals('nearest', mode, 'check changed minmap filter  mode')
     test:assertEquals(1, sharpness, 'check changed minmap filter sharpness')
     test:assertEquals(1, sharpness, 'check changed minmap filter sharpness')
   end
   end
   test:assertGreaterEqual(2, image:getMipmapCount()) -- docs say no mipmaps should return 1
   test:assertGreaterEqual(2, image:getMipmapCount()) -- docs say no mipmaps should return 1
@@ -351,7 +353,133 @@ end
 
 
 -- SpriteBatch (love.graphics.newSpriteBatch)
 -- SpriteBatch (love.graphics.newSpriteBatch)
 love.test.graphics.SpriteBatch = function(test)
 love.test.graphics.SpriteBatch = function(test)
-  test:skipTest('test class needs writing')
+  -- create batch
+  local texture1 = love.graphics.newImage('resources/cubemap.png')
+  local texture2 = love.graphics.newImage('resources/love.png')
+  local quad1 = love.graphics.newQuad(32, 12, 1, 1, texture2) -- lovepink
+  local quad2 = love.graphics.newQuad(32, 32, 1, 1, texture2) -- white
+  local sbatch = love.graphics.newSpriteBatch(texture1, 5000)
+  test:assertObject(sbatch)
+  -- check basic props
+  test:assertEquals(0, sbatch:getCount(), 'check batch size')
+  test:assertEquals(5000, sbatch:getBufferSize(), 'check batch size')
+  test:assertEquals(texture1:getWidth(), sbatch:getTexture():getWidth(), 'check texture match w')
+  test:assertEquals(texture1:getHeight(), sbatch:getTexture():getHeight(), 'check texture match h')
+  sbatch:setTexture(texture2)
+  test:assertEquals(texture2:getWidth(), sbatch:getTexture():getWidth(), 'check texture change w')
+  test:assertEquals(texture2:getHeight(), sbatch:getTexture():getHeight(), 'check texture change h')
+  local r, g, b, a = sbatch:getColor()
+  test:assertEquals(1, r, 'check initial color r')
+  test:assertEquals(1, g, 'check initial color g')
+  test:assertEquals(1, b, 'check initial color b')
+  test:assertEquals(1, a, 'check initial color a')
+  sbatch:setColor(1, 0, 0, 1)
+  r, g, b, a = sbatch:getColor()
+  test:assertEquals(1, r, 'check set color r')
+  test:assertEquals(0, g, 'check set color g')
+  test:assertEquals(0, b, 'check set color b')
+  test:assertEquals(1, a, 'check set color a')
+  -- check adding sprites
+  local offset_x = 0
+  local offset_y = 0
+  local color = 'white'
+  sbatch:setColor(1, 1, 1, 1)
+  local sprites = {}
+  for s=1,4096 do
+    local spr = sbatch:add(quad1, offset_x, offset_y, 0, 1, 1)
+    table.insert(sprites, {spr, offset_x, offset_y})
+    offset_x = offset_x + 1
+    if s % 64 == 0 then
+      -- alternate row colors
+      if color == 'white' then
+        color = 'red'
+        sbatch:setColor(1, 0, 0, 1)
+      else
+        color = 'white'
+        sbatch:setColor(1, 1, 1, 1)
+      end
+      offset_y = offset_y + 1
+      offset_x = 0
+    end
+  end
+  test:assertEquals(4096, sbatch:getCount())
+  -- test drawing and setting
+  local canvas = love.graphics.newCanvas(64, 64)
+  love.graphics.setCanvas(canvas)
+    love.graphics.clear(0, 0, 0, 1)
+    love.graphics.draw(sbatch, 0, 0)
+  love.graphics.setCanvas()
+  local imgdata1 = love.graphics.readbackTexture(canvas, {64, 0, 0, 0, 64, 64})
+  test:assertPixels(imgdata1, {
+    lovepink = {{0,0},{63,2},{0,32},{63,32},{63,0},{63,2}}
+  }, 'sbatch draw normal')
+  test:exportImg(imgdata1)
+  -- use set to change some sprites
+  for s=1,2048 do
+    sbatch:set(sprites[s][1], quad2, sprites[s][2], sprites[s][3]+1, 0, 1, 1)
+  end
+  love.graphics.setCanvas(canvas)
+    love.graphics.clear(0, 0, 0, 1)
+    love.graphics.draw(sbatch, 0, 0)
+  love.graphics.setCanvas()
+  local imgdata2 = love.graphics.readbackTexture(canvas, {64, 0, 0, 0, 64, 64})
+  test:assertPixels(imgdata2, {
+    lovepink = {{0,32},{63,32}},
+    black = {{0,0},{63,0}},
+    white = {{0,1},{63,1},{0,31},{63,31}}
+  }, 'sbatch draw set')
+  test:exportImg(imgdata2)
+  -- set drawRange and redraw
+  sbatch:setDrawRange(1025, 2048)
+  love.graphics.setCanvas(canvas)
+    love.graphics.clear(0, 0, 0, 1)
+    love.graphics.draw(sbatch, 0, 0)
+  love.graphics.setCanvas()
+  local imgdata3 = love.graphics.readbackTexture(canvas, {64, 0, 0, 0, 64, 64})
+  test:assertPixels(imgdata3, {
+    lovepink = {{0,32},{63,32}},
+    black = {{0,0},{63,0},{0,48},{63,48}},
+    white = {{0,17},{63,17},{0,31},{63,31}}
+  }, 'sbatch draw drawrange')
+  test:exportImg(imgdata3)
+  -- clear and redraw
+  sbatch:clear()
+  love.graphics.setCanvas(canvas)
+    love.graphics.clear(0, 0, 0, 1)
+    love.graphics.draw(sbatch, 0, 0)
+  love.graphics.setCanvas()
+  local imgdata4 = love.graphics.readbackTexture(canvas, {64, 0, 0, 0, 64, 64})
+  test:assertPixels(imgdata4, {
+    black = {{0,0},{63,0},{0,32},{63,32},{0,63},{63,63}},
+  }, 'sbatch draw clear')
+  test:exportImg(imgdata4)
+  -- array texture sbatch
+  local texture3 = love.graphics.newArrayImage({
+    'resources/love.png',
+    'resources/loveinv.png'
+  })
+  local asbatch = love.graphics.newSpriteBatch(texture3, 4096)
+  local quad3 = love.graphics.newQuad(32, 52, 1, 1, texture3) -- loveblue
+  sprites = {}
+  for s=1,4096 do
+    local spr = asbatch:addLayer(1, quad3, 0, s, math.floor(s/64), 1, 1)
+    table.insert(sprites, {spr, s, math.floor(s/64)})
+  end
+  test:assertEquals(4096, asbatch:getCount(), 'check max batch size applies')
+  for s=1,2048 do
+    asbatch:setLayer(sprites[s][1], 2, sprites[s][2], sprites[s][3], 0, 1, 1)
+  end
+  love.graphics.setCanvas(canvas)
+    love.graphics.clear(0, 0, 0, 1)
+    love.graphics.draw(asbatch, 0, 0)
+  love.graphics.setCanvas()
+  local imgdata5 = love.graphics.readbackTexture(canvas, {64, 0, 0, 0, 64, 64})
+  test:assertPixels(imgdata5, {
+    loveblue = {{31,2},{63,2},{3,30},{3,33},{16,47},{63,47}},
+    lovepink = {{17,48},{63,48},{31,61},{63,61}},
+    black = {{0,0},{63,0},{63,63},{63,0},{30,2},{30,61}},
+  }, 'sbatch draw layers')
+  test:exportImg(imgdata5)
 end
 end
 
 
 
 
@@ -396,7 +524,54 @@ end
 
 
 -- Video (love.graphics.newVideo)
 -- Video (love.graphics.newVideo)
 love.test.graphics.Video = function(test)
 love.test.graphics.Video = function(test)
-  test:skipTest('test class needs writing')
+  -- create video
+  local video = love.graphics.newVideo('resources/sample.ogv')
+  test:assertObject(video)
+  -- check basic props
+  local w, h = video:getDimensions()
+  test:assertEquals(496, w, 'check vid dim w')
+  test:assertEquals(502, h, 'check vid dim h')
+  test:assertEquals(w, video:getWidth(), 'check vid width match')
+  test:assertEquals(h, video:getHeight(), 'check vid height match')
+  local min, mag, ani = video:getFilter()
+  test:assertEquals('nearest', min, 'check def filter min')
+  test:assertEquals('nearest', mag, 'check def filter mag')
+  test:assertEquals(1, ani, 'check def filter ani')
+  video:setFilter('linear', 'linear', 2)
+  min, mag, ani = video:getFilter()
+  test:assertEquals('linear', min, 'check changed filter min')
+  test:assertEquals('linear', mag, 'check changed filter mag')
+  test:assertEquals(2, ani, 'check changed filter ani')
+  test:assertEquals(false, video:isPlaying(), 'check paused by default')
+  test:assertEquals(0, video:tell(), 'check 0:00 by default')
+  -- covered by their own obj tests in video but check returns obj
+  local source = video:getSource()
+  test:assertObject(source)
+  local stream = video:getStream()
+  test:assertObject(stream)
+  -- check playing / pausing / seeking
+  video:play()
+  test:waitFrames(60)
+  video:pause()
+  test:assertEquals(1, math.ceil(video:tell()), 'check video playing for 1s')
+  video:seek(0.2)
+  test:assertEquals(0.2, video:tell(), 'check video seeking')
+  video:rewind()
+  test:assertEquals(0, video:tell(), 'check video rewind')
+  video:setFilter('nearest', 'nearest', 1)
+  video:play()
+  -- check actuall drawing with the vid 
+  local canvas = love.graphics.newCanvas(500, 500)
+  love.graphics.setCanvas(canvas)
+    love.graphics.clear(1, 0, 0, 1)
+    love.graphics.draw(video, 0, 0)
+  love.graphics.setCanvas()
+  local imgdata = love.graphics.readbackTexture(canvas, {500, 0, 0, 0, 500, 500})
+  test:assertPixels(imgdata, {
+    black = {{0,0},{495,0},{495,499},{0,499}},
+    red = {{499,0},{499,499}}
+  }, 'video draw')
+  test:exportImg(imgdata)
 end
 end
 
 
 
 
@@ -560,7 +735,27 @@ end
 
 
 -- love.graphics.drawInstanced
 -- love.graphics.drawInstanced
 love.test.graphics.drawInstanced = function(test)
 love.test.graphics.drawInstanced = function(test)
-  test:skipTest('test class needs writing')
+  local image = love.graphics.newImage('resources/love.png')
+  local vertices = {
+		{ 0, 0, 0, 0, 1, 0, 0 },
+		{ image:getWidth(), 0, 1, 0, 0, 1, 0 },
+		{ image:getWidth(), image:getHeight(), 1, 1, 0, 0, 1 },
+		{ 0, image:getHeight(), 0, 1, 1, 1, 0 },
+  }
+  local mesh = love.graphics.newMesh(vertices, 'fan')
+  local canvas = love.graphics.newCanvas(64, 64)
+  love.graphics.setCanvas(canvas)
+    love.graphics.clear(0, 0, 0, 1)
+    love.graphics.drawInstanced(mesh, 1000, 0, 0, 0, 1, 1)
+  love.graphics.setCanvas()
+  local imgdata = love.graphics.readbackTexture(canvas, {64, 0, 0, 0, 64, 64})
+  test:assertPixels(imgdata, {
+    red = {{0,0}},
+    green = {{63,0}},
+    blue = {{63,63}},
+    yellow = {{0,63}}
+  }, 'draw instances')
+  test:exportImg(imgdata)
 end
 end
 
 
 
 
@@ -1648,19 +1843,18 @@ love.test.graphics.setShader = function(test)
 end
 end
 
 
 
 
--- love.graphics.setStencilTest
-love.test.graphics.setStencilTest = function(test)
+-- love.graphics.setStencilMode
+love.test.graphics.setStencilMode = function(test)
   local canvas = love.graphics.newCanvas(16, 16)
   local canvas = love.graphics.newCanvas(16, 16)
   love.graphics.setCanvas({canvas, stencil=true})
   love.graphics.setCanvas({canvas, stencil=true})
     love.graphics.clear(0, 0, 0, 1)
     love.graphics.clear(0, 0, 0, 1)
-    love.graphics.stencil(function()
-      love.graphics.circle('fill', 8, 8, 6)
-    end, 'replace', 1)
-    love.graphics.setStencilTest('greater', 0)
+    love.graphics.setStencilMode('replace', 'always', 1)
+    love.graphics.circle('fill', 8, 8, 6)
+    love.graphics.setStencilMode('keep', 'greater', 0)
     love.graphics.setColor(1, 0, 0, 1)
     love.graphics.setColor(1, 0, 0, 1)
     love.graphics.rectangle('fill', 0, 0, 16, 16)
     love.graphics.rectangle('fill', 0, 0, 16, 16)
     love.graphics.setColor(1, 1, 1, 1)
     love.graphics.setColor(1, 1, 1, 1)
-    love.graphics.setStencilTest()
+    love.graphics.setStencilMode()
   love.graphics.setCanvas()
   love.graphics.setCanvas()
   local imgdata = love.graphics.readbackTexture(canvas, {16, 0, 0, 0, 16, 16})
   local imgdata = love.graphics.readbackTexture(canvas, {16, 0, 0, 0, 16, 16})
   test:assertPixels(imgdata, { 
   test:assertPixels(imgdata, { 

+ 93 - 27
testing/tests/physics.lua

@@ -20,12 +20,6 @@ love.test.physics.Contact = function(test)
 end
 end
 
 
 
 
--- Fixture (love.physics.newFixture)
-love.test.physics.Fixture = function(test)
-  test:skipTest('test class needs writing')
-end
-
-
 -- Joint (love.physics.newDistanceJoint)
 -- Joint (love.physics.newDistanceJoint)
 love.test.physics.Joint = function(test)
 love.test.physics.Joint = function(test)
   test:skipTest('test class needs writing')
   test:skipTest('test class needs writing')
@@ -33,6 +27,7 @@ end
 
 
 
 
 -- Shape (love.physics.newCircleShape)
 -- Shape (love.physics.newCircleShape)
+-- @NOTE includes Fixture methods too enjoy
 love.test.physics.Shape = function(test)
 love.test.physics.Shape = function(test)
   test:skipTest('test class needs writing')
   test:skipTest('test class needs writing')
 end
 end
@@ -40,7 +35,81 @@ end
 
 
 -- World (love.physics.newWorld)
 -- World (love.physics.newWorld)
 love.test.physics.World = function(test)
 love.test.physics.World = function(test)
-  test:skipTest('test class needs writing')
+  -- create new world
+  local world = love.physics.newWorld(0, 0, false)
+  local body1 = love.physics.newBody(world, 0, 0, 'dynamic')
+  local rectangle1 = love.physics.newRectangleShape(body1, 0, 0, 10, 10)
+  test:assertObject(world)
+  -- check defaults
+  test:assertEquals(1, #world:getBodies(), 'check 1 body')
+  test:assertEquals(0, world:getBodies()[1]:getX(), 'check body prop x')
+  test:assertEquals(0, world:getBodies()[1]:getY(), 'check body prop y')
+  world:translateOrigin(-10, -10)
+  test:assertEquals(10, world:getBodies()[1]:getX(), 'check body prop change x')
+  test:assertEquals(10, world:getBodies()[1]:getY(), 'check body prop change y')
+  test:assertEquals(1, world:getBodyCount(), 'check 1 body count')
+  test:assertEquals(false, world:isDestroyed(), 'check not destroyed')
+  test:assertEquals(false, world:isLocked(), 'check not updating')
+  test:assertEquals(0, #world:getJoints(), 'check no joints')
+  test:assertEquals(0, world:getJointCount(), 'check no joints count')
+  test:assertEquals(0, world:getGravity(), 'check def gravity')
+  test:assertEquals(0, #world:getContacts(), 'check no contacts')
+  test:assertEquals(0, world:getContactCount(), 'check no contact count')
+  test:assertEquals(false, world:isSleepingAllowed(), 'check no sleep (till brooklyn)')
+  world:setSleepingAllowed(true)
+  test:assertEquals(true, world:isSleepingAllowed(), 'check can sleep')
+  -- check callbacks are called
+  local beginContact, endContact, preSolve, postSolve = world:getCallbacks()
+  test:assertEquals(nil, beginContact, 'check no begin contact callback')
+  test:assertEquals(nil, endContact, 'check no end contact callback')
+  test:assertEquals(nil, preSolve, 'check no pre solve callback')
+  test:assertEquals(nil, postSolve, 'check no post solve callback')
+  local beginContactCheck = false
+  local endContactCheck = false
+  local preSolveCheck = false
+  local postSolveCheck = false
+  local collisions = 0
+  world:setCallbacks(
+    function() beginContactCheck = true; collisions = collisions + 1 end,
+    function() endContactCheck = true end,
+    function() preSolveCheck = true end,
+    function() postSolveCheck = true end
+  )
+  local body2 = love.physics.newBody(world, 10, 10, 'dynamic')
+  local rectangle2 = love.physics.newRectangleShape(body2, 0, 0, 10, 10)
+  test:assertEquals(false, beginContactCheck, 'check world didnt update after adding body')
+  world:update(1)
+  test:assertEquals(true, beginContactCheck, 'check contact start')
+  test:assertEquals(true, preSolveCheck, 'check pre solve')
+  test:assertEquals(true, postSolveCheck, 'check post solve')
+  body2:setPosition(100, 100)
+  world:update(1)
+  test:assertEquals(true, endContactCheck, 'check contact end')
+  -- check point checking
+  local shapes = 0
+  world:queryShapesInArea(0, 0, 10, 10, function(x)
+    shapes = shapes + 1
+  end)
+  test:assertEquals(1, shapes, 'check shapes in area')
+  world:rayCast(0, 0, 200, 200, function(x)
+    shapes = shapes + 1
+    return 1
+  end)
+  test:assertEquals(3, shapes, 'check shapes in raycast')
+  -- change collision logic
+  test:assertEquals(nil, world:getContactFilter(), 'check def filter')
+  world:update(1)
+  world:setContactFilter(function(s1, s2)
+    return false -- nothing collides
+  end)
+  body2:setPosition(10, 10)
+  world:update(1)
+  test:assertEquals(1, collisions, 'check collision logic change')
+  -- final bits
+  world:setGravity(1, 1)
+  test:assertEquals(1, world:getGravity(), 'check grav change')
+  world:destroy()
+  test:assertEquals(true, world:isDestroyed(), 'check world destroyed')
 end
 end
 
 
 
 
@@ -54,14 +123,12 @@ end
 -- love.physics.getDistance
 -- love.physics.getDistance
 love.test.physics.getDistance = function(test)
 love.test.physics.getDistance = function(test)
   -- setup two fixtues to check
   -- setup two fixtues to check
-  local shape1 = love.physics.newEdgeShape(0, 0, 5, 5)
-  local shape2 = love.physics.newEdgeShape(10, 10, 15, 15)
   local world = love.physics.newWorld(0, 0, false)
   local world = love.physics.newWorld(0, 0, false)
   local body = love.physics.newBody(world, 10, 10, 'static')
   local body = love.physics.newBody(world, 10, 10, 'static')
-  local fixture1 = love.physics.newFixture(body, shape1, 1)
-  local fixture2 = love.physics.newFixture(body, shape2, 1)
+  local shape1 = love.physics.newEdgeShape(body, 0, 0, 5, 5)
+  local shape2 = love.physics.newEdgeShape(body, 10, 10, 15, 15)
   -- check distance between them
   -- check distance between them
-  test:assertEquals(647106, math.floor(love.physics.getDistance(fixture1, fixture2)*100000), 'check distance matches')
+  test:assertEquals(647106, math.floor(love.physics.getDistance(shape1, shape2)*100000), 'check distance matches')
 end
 end
 
 
 
 
@@ -85,14 +152,18 @@ end
 -- love.physics.newChainShape
 -- love.physics.newChainShape
 -- @NOTE this is just basic nil checking, objs have their own test method
 -- @NOTE this is just basic nil checking, objs have their own test method
 love.test.physics.newChainShape = function(test)
 love.test.physics.newChainShape = function(test)
-  test:assertObject(love.physics.newChainShape(true, 0, 0, 1, 0, 1, 1, 0, 1))
+  local world = love.physics.newWorld(1, 1, true)
+  local body = love.physics.newBody(world, 10, 10, 'static')
+  test:assertObject(love.physics.newChainShape(body, true, 0, 0, 1, 0, 1, 1, 0, 1))
 end
 end
 
 
 
 
 -- love.physics.newCircleShape
 -- love.physics.newCircleShape
 -- @NOTE this is just basic nil checking, objs have their own test method
 -- @NOTE this is just basic nil checking, objs have their own test method
 love.test.physics.newCircleShape = function(test)
 love.test.physics.newCircleShape = function(test)
-  test:assertObject(love.physics.newCircleShape(10))
+  local world = love.physics.newWorld(1, 1, true)
+  local body = love.physics.newBody(world, 10, 10, 'static')
+  test:assertObject(love.physics.newCircleShape(body, 10))
 end
 end
 
 
 
 
@@ -110,18 +181,9 @@ end
 -- love.physics.newEdgeShape
 -- love.physics.newEdgeShape
 -- @NOTE this is just basic nil checking, objs have their own test method
 -- @NOTE this is just basic nil checking, objs have their own test method
 love.test.physics.newEdgeShape = function(test)
 love.test.physics.newEdgeShape = function(test)
-  local obj = love.physics.newEdgeShape(0, 0, 10, 10)
-  test:assertObject(obj)
-end
-
-
--- love.physics.newFixture
--- @NOTE this is just basic nil checking, objs have their own test method
-love.test.physics.newFixture = function(test)
   local world = love.physics.newWorld(1, 1, true)
   local world = love.physics.newWorld(1, 1, true)
   local body = love.physics.newBody(world, 10, 10, 'static')
   local body = love.physics.newBody(world, 10, 10, 'static')
-  local shape = love.physics.newCircleShape(10)
-  local obj = love.physics.newFixture(body, shape, 1)
+  local obj = love.physics.newEdgeShape(body, 0, 0, 10, 10)
   test:assertObject(obj)
   test:assertObject(obj)
 end
 end
 
 
@@ -176,7 +238,9 @@ end
 -- love.physics.newPolygonShape
 -- love.physics.newPolygonShape
 -- @NOTE this is just basic nil checking, objs have their own test method
 -- @NOTE this is just basic nil checking, objs have their own test method
 love.test.physics.newPolygonShape = function(test)
 love.test.physics.newPolygonShape = function(test)
-  local obj = love.physics.newPolygonShape({0, 0, 2, 3, 2, 1, 3, 1, 5, 1})
+  local world = love.physics.newWorld(1, 1, true)
+  local body = love.physics.newBody(world, 10, 10, 'static')
+  local obj = love.physics.newPolygonShape(body, {0, 0, 2, 3, 2, 1, 3, 1, 5, 1})
   test:assertObject(obj)
   test:assertObject(obj)
 end
 end
 
 
@@ -206,8 +270,10 @@ end
 -- love.physics.newRectangleShape
 -- love.physics.newRectangleShape
 -- @NOTE this is just basic nil checking, objs have their own test method
 -- @NOTE this is just basic nil checking, objs have their own test method
 love.test.physics.newRectangleShape = function(test)
 love.test.physics.newRectangleShape = function(test)
-  local shape1 = love.physics.newRectangleShape(10, 20)
-  local shape2 = love.physics.newRectangleShape(10, 10, 40, 30, 10)
+  local world = love.physics.newWorld(1, 1, true)
+  local body = love.physics.newBody(world, 10, 10, 'static')
+  local shape1 = love.physics.newRectangleShape(body, 10, 20)
+  local shape2 = love.physics.newRectangleShape(body, 10, 10, 40, 30, 10)
   test:assertObject(shape1)
   test:assertObject(shape1)
   test:assertObject(shape2)
   test:assertObject(shape2)
 end
 end

Some files were not shown because too many files changed in this diff