Browse Source

added test.physics.Joint

ell 1 year ago
parent
commit
adc6fbea4c

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


+ 17 - 20
testing/examples/lovetest_runAllTests.md

@@ -1,30 +1,27 @@
-<!-- PASSED 285 || FAILED 1 || SKIPPED 15 || TIME 14.670 -->
+<!-- PASSED 287 || FAILED 0 || SKIPPED 14 || TIME 14.726 -->
 
 ### Info
-**301** tests were completed in **14.670s** with **285** passed, **1** failed, and **15** skipped
+**301** tests were completed in **14.726s** with **287** passed, **0** failed, and **14** skipped
 
 Renderer: OpenGL | 4.1 Metal - 76.3 | Apple | Apple M1 Max
 
 ### Report
 | Module                | Pass | Fail | Skip | Time   |
 | --------------------- | ------ | ------ | ------- | ------ |
-| 🟢 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 |
+| 🟢 audio | 28 | 0 | 0 | 0.894s |
+| 🟢 data | 12 | 0 | 0 | 0.209s |
+| 🟢 event | 4 | 0 | 2 | 0.103s |
+| 🟢 filesystem | 29 | 0 | 2 | 0.550s |
+| 🟢 font | 7 | 0 | 0 | 0.124s |
+| 🟢 graphics | 102 | 0 | 3 | 3.231s |
+| 🟢 image | 5 | 0 | 0 | 0.098s |
+| 🟢 math | 20 | 0 | 0 | 0.353s |
+| 🟢 physics | 23 | 0 | 3 | 0.449s |
+| 🟢 sound | 4 | 0 | 0 | 0.074s |
+| 🟢 system | 6 | 0 | 2 | 0.144s |
+| 🟢 thread | 5 | 0 | 0 | 0.377s |
+| 🟢 timer | 6 | 0 | 0 | 2.093s |
+| 🟢 video | 2 | 0 | 0 | 0.040s |
+| 🟢 window | 34 | 0 | 2 | 5.986s |
 
 ### Failures
-> 🔴 GlyphData  
-> assert 8 [check glyph number] expected '97' got '0'  
-

+ 241 - 243
testing/examples/lovetest_runAllTests.xml

@@ -1,30 +1,30 @@
-<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">
+<testsuites name="love.test" tests="287" failures="0" skipped="14" time="14.726">
+	<testsuite name="love.audio" tests="28" failures="0" skipped="0" time="0.894">
+		<testcase classname="RecordingDevice" name="RecordingDevice" assertions="20" time="0.398">
 		</testcase>
-		<testcase classname="Source" name="Source" assertions="54" time="0.022">
+		<testcase classname="Source" name="Source" assertions="54" time="0.024">
 		</testcase>
 		<testcase classname="getActiveEffects" name="getActiveEffects" assertions="3" time="0.017">
 		</testcase>
-		<testcase classname="getActiveSourceCount" name="getActiveSourceCount" assertions="3" time="0.019">
+		<testcase classname="getActiveSourceCount" name="getActiveSourceCount" assertions="3" time="0.018">
 		</testcase>
-		<testcase classname="getDistanceModel" name="getDistanceModel" assertions="3" time="0.017">
+		<testcase classname="getDistanceModel" name="getDistanceModel" assertions="3" time="0.018">
 		</testcase>
-		<testcase classname="getDopplerScale" name="getDopplerScale" assertions="2" time="0.018">
+		<testcase classname="getDopplerScale" name="getDopplerScale" assertions="2" time="0.019">
 		</testcase>
-		<testcase classname="getEffect" name="getEffect" assertions="4" time="0.018">
+		<testcase classname="getEffect" name="getEffect" assertions="4" time="0.019">
 		</testcase>
-		<testcase classname="getMaxSceneEffects" name="getMaxSceneEffects" assertions="1" time="0.019">
+		<testcase classname="getMaxSceneEffects" name="getMaxSceneEffects" assertions="1" time="0.016">
 		</testcase>
-		<testcase classname="getMaxSourceEffects" name="getMaxSourceEffects" assertions="1" time="0.018">
+		<testcase classname="getMaxSourceEffects" name="getMaxSourceEffects" assertions="1" time="0.017">
 		</testcase>
-		<testcase classname="getOrientation" name="getOrientation" assertions="6" time="0.018">
+		<testcase classname="getOrientation" name="getOrientation" assertions="6" time="0.019">
 		</testcase>
-		<testcase classname="getPosition" name="getPosition" assertions="3" time="0.018">
+		<testcase classname="getPosition" name="getPosition" assertions="3" time="0.019">
 		</testcase>
-		<testcase classname="getRecordingDevices" name="getRecordingDevices" assertions="1" time="0.020">
+		<testcase classname="getRecordingDevices" name="getRecordingDevices" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="getVelocity" name="getVelocity" assertions="3" time="0.017">
+		<testcase classname="getVelocity" name="getVelocity" assertions="3" time="0.019">
 		</testcase>
 		<testcase classname="getVolume" name="getVolume" assertions="1" time="0.018">
 		</testcase>
@@ -38,15 +38,15 @@
 		</testcase>
 		<testcase classname="play" name="play" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="setDistanceModel" name="setDistanceModel" assertions="7" time="0.016">
+		<testcase classname="setDistanceModel" name="setDistanceModel" assertions="7" time="0.017">
 		</testcase>
-		<testcase classname="setDopplerScale" name="setDopplerScale" assertions="2" time="0.017">
+		<testcase classname="setDopplerScale" name="setDopplerScale" assertions="2" time="0.019">
 		</testcase>
 		<testcase classname="setEffect" name="setEffect" assertions="3" time="0.018">
 		</testcase>
 		<testcase classname="setMixWithSystem" name="setMixWithSystem" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="setOrientation" name="setOrientation" assertions="6" time="0.017">
+		<testcase classname="setOrientation" name="setOrientation" assertions="6" time="0.018">
 		</testcase>
 		<testcase classname="setPosition" name="setPosition" assertions="3" time="0.017">
 		</testcase>
@@ -54,108 +54,108 @@
 		</testcase>
 		<testcase classname="setVolume" name="setVolume" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="stop" name="stop" assertions="2" time="0.017">
+		<testcase classname="stop" name="stop" assertions="2" time="0.019">
 		</testcase>
 	</testsuite>
-	<testsuite name="love.data" tests="12" failures="0" skipped="0" time="0.205">
-		<testcase classname="ByteData" name="ByteData" assertions="10" time="0.019">
+	<testsuite name="love.data" tests="12" failures="0" skipped="0" time="0.209">
+		<testcase classname="ByteData" name="ByteData" assertions="10" time="0.015">
 		</testcase>
-		<testcase classname="CompressedData" name="CompressedData" assertions="12" time="0.017">
+		<testcase classname="CompressedData" name="CompressedData" assertions="12" time="0.018">
 		</testcase>
-		<testcase classname="compress" name="compress" assertions="45" time="0.018">
+		<testcase classname="compress" name="compress" assertions="45" time="0.019">
 		</testcase>
-		<testcase classname="decode" name="decode" assertions="4" time="0.016">
+		<testcase classname="decode" name="decode" assertions="4" time="0.014">
 		</testcase>
-		<testcase classname="decompress" name="decompress" assertions="18" time="0.015">
+		<testcase classname="decompress" name="decompress" assertions="18" time="0.018">
 		</testcase>
-		<testcase classname="encode" name="encode" assertions="15" time="0.016">
+		<testcase classname="encode" name="encode" assertions="15" time="0.019">
 		</testcase>
-		<testcase classname="getPackedSize" name="getPackedSize" assertions="3" time="0.017">
+		<testcase classname="getPackedSize" name="getPackedSize" assertions="3" time="0.019">
 		</testcase>
 		<testcase classname="hash" name="hash" assertions="6" time="0.016">
 		</testcase>
 		<testcase classname="newByteData" name="newByteData" assertions="3" time="0.017">
 		</testcase>
-		<testcase classname="newDataView" name="newDataView" assertions="3" time="0.018">
+		<testcase classname="newDataView" name="newDataView" assertions="3" time="0.017">
 		</testcase>
 		<testcase classname="pack" name="pack" assertions="4" time="0.018">
 		</testcase>
 		<testcase classname="unpack" name="unpack" assertions="3" time="0.018">
 		</testcase>
 	</testsuite>
-	<testsuite name="love.event" tests="4" failures="0" skipped="2" time="0.102">
-		<testcase classname="clear" name="clear" assertions="1" time="0.017">
+	<testsuite name="love.event" tests="4" failures="0" skipped="2" time="0.103">
+		<testcase classname="clear" name="clear" assertions="1" time="0.016">
 		</testcase>
-		<testcase classname="poll" name="poll" assertions="1" time="0.017">
+		<testcase classname="poll" name="poll" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="pump" name="pump" assertions="0" time="0.016">
+		<testcase classname="pump" name="pump" assertions="0" time="0.018">
 			<skipped message="used internally" />
 		</testcase>
-		<testcase classname="push" name="push" assertions="1" time="0.017">
+		<testcase classname="push" name="push" assertions="1" time="0.016">
 		</testcase>
-		<testcase classname="quit" name="quit" assertions="1" time="0.017">
+		<testcase classname="quit" name="quit" assertions="1" time="0.016">
 		</testcase>
-		<testcase classname="wait" name="wait" assertions="0" time="0.017">
+		<testcase classname="wait" name="wait" assertions="0" time="0.019">
 			<skipped message="used internally" />
 		</testcase>
 	</testsuite>
-	<testsuite name="love.filesystem" tests="29" failures="0" skipped="2" time="0.530">
-		<testcase classname="File" name="File" assertions="36" time="0.020">
+	<testsuite name="love.filesystem" tests="29" failures="0" skipped="2" time="0.550">
+		<testcase classname="File" name="File" assertions="36" time="0.019">
 		</testcase>
-		<testcase classname="FileData" name="FileData" assertions="12" time="0.016">
+		<testcase classname="FileData" name="FileData" assertions="12" time="0.017">
 		</testcase>
-		<testcase classname="append" name="append" assertions="6" time="0.018">
+		<testcase classname="append" name="append" assertions="6" time="0.020">
 		</testcase>
-		<testcase classname="areSymlinksEnabled" name="areSymlinksEnabled" assertions="1" time="0.016">
+		<testcase classname="areSymlinksEnabled" name="areSymlinksEnabled" assertions="1" time="0.017">
 		</testcase>
 		<testcase classname="createDirectory" name="createDirectory" assertions="3" time="0.017">
 		</testcase>
-		<testcase classname="getAppdataDirectory" name="getAppdataDirectory" assertions="1" time="0.016">
+		<testcase classname="getAppdataDirectory" name="getAppdataDirectory" assertions="1" time="0.017">
 		</testcase>
-		<testcase classname="getCRequirePath" name="getCRequirePath" assertions="1" time="0.017">
+		<testcase classname="getCRequirePath" name="getCRequirePath" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="getDirectoryItems" name="getDirectoryItems" assertions="2" time="0.017">
+		<testcase classname="getDirectoryItems" name="getDirectoryItems" assertions="2" time="0.018">
 		</testcase>
 		<testcase classname="getIdentity" name="getIdentity" assertions="1" time="0.017">
 		</testcase>
-		<testcase classname="getInfo" name="getInfo" assertions="3" time="0.018">
+		<testcase classname="getInfo" name="getInfo" assertions="3" time="0.019">
 		</testcase>
-		<testcase classname="getRealDirectory" name="getRealDirectory" assertions="1" time="0.017">
+		<testcase classname="getRealDirectory" name="getRealDirectory" assertions="1" time="0.019">
 		</testcase>
-		<testcase classname="getRequirePath" name="getRequirePath" assertions="1" time="0.017">
+		<testcase classname="getRequirePath" name="getRequirePath" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="getSaveDirectory" name="getSaveDirectory" assertions="1" time="0.016">
+		<testcase classname="getSaveDirectory" name="getSaveDirectory" assertions="1" time="0.017">
 		</testcase>
-		<testcase classname="getSource" name="getSource" assertions="0" time="0.018">
+		<testcase classname="getSource" name="getSource" assertions="0" time="0.017">
 			<skipped message="used internally" />
 		</testcase>
-		<testcase classname="getSourceBaseDirectory" name="getSourceBaseDirectory" assertions="1" time="0.016">
+		<testcase classname="getSourceBaseDirectory" name="getSourceBaseDirectory" assertions="1" time="0.020">
 		</testcase>
-		<testcase classname="getUserDirectory" name="getUserDirectory" assertions="1" time="0.017">
+		<testcase classname="getUserDirectory" name="getUserDirectory" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="getWorkingDirectory" name="getWorkingDirectory" assertions="1" time="0.016">
+		<testcase classname="getWorkingDirectory" name="getWorkingDirectory" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="isFused" name="isFused" assertions="1" time="0.017">
+		<testcase classname="isFused" name="isFused" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="lines" name="lines" assertions="6" time="0.018">
+		<testcase classname="lines" name="lines" assertions="6" time="0.020">
 		</testcase>
-		<testcase classname="load" name="load" assertions="4" time="0.017">
+		<testcase classname="load" name="load" assertions="4" time="0.018">
 		</testcase>
 		<testcase classname="mount" name="mount" assertions="5" time="0.018">
 		</testcase>
 		<testcase classname="newFileData" name="newFileData" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="openFile" name="openFile" assertions="4" time="0.016">
+		<testcase classname="openFile" name="openFile" assertions="4" time="0.018">
 		</testcase>
-		<testcase classname="read" name="read" assertions="6" time="0.016">
+		<testcase classname="read" name="read" assertions="6" time="0.017">
 		</testcase>
-		<testcase classname="remove" name="remove" assertions="5" time="0.019">
+		<testcase classname="remove" name="remove" assertions="5" time="0.018">
 		</testcase>
 		<testcase classname="setCRequirePath" name="setCRequirePath" assertions="1" time="0.017">
 		</testcase>
-		<testcase classname="setIdentity" name="setIdentity" assertions="1" time="0.017">
+		<testcase classname="setIdentity" name="setIdentity" assertions="1" time="0.015">
 		</testcase>
-		<testcase classname="setRequirePath" name="setRequirePath" assertions="1" time="0.017">
+		<testcase classname="setRequirePath" name="setRequirePath" assertions="1" time="0.016">
 		</testcase>
 		<testcase classname="setSource" name="setSource" assertions="0" time="0.016">
 			<skipped message="used internally" />
@@ -165,72 +165,71 @@
 		<testcase classname="write" name="write" assertions="3" time="0.017">
 		</testcase>
 	</testsuite>
-	<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>
+	<testsuite name="love.font" tests="7" failures="0" skipped="0" time="0.124">
+		<testcase classname="GlyphData" name="GlyphData" assertions="17" time="0.016">
 		</testcase>
-		<testcase classname="Rasterizer" name="Rasterizer" assertions="13" time="0.018">
+		<testcase classname="Rasterizer" name="Rasterizer" assertions="13" time="0.016">
 		</testcase>
 		<testcase classname="newBMFontRasterizer" name="newBMFontRasterizer" assertions="3" time="0.018">
 		</testcase>
 		<testcase classname="newGlyphData" name="newGlyphData" assertions="3" time="0.018">
 		</testcase>
-		<testcase classname="newImageRasterizer" name="newImageRasterizer" assertions="3" time="0.017">
+		<testcase classname="newImageRasterizer" name="newImageRasterizer" assertions="3" time="0.018">
 		</testcase>
-		<testcase classname="newRasterizer" name="newRasterizer" assertions="3" time="0.016">
+		<testcase classname="newRasterizer" name="newRasterizer" assertions="3" time="0.018">
 		</testcase>
-		<testcase classname="newTrueTypeRasterizer" name="newTrueTypeRasterizer" assertions="6" time="0.016">
+		<testcase classname="newTrueTypeRasterizer" name="newTrueTypeRasterizer" assertions="6" time="0.020">
 		</testcase>
 	</testsuite>
-	<testsuite name="love.graphics" tests="102" failures="0" skipped="3" time="3.232">
-		<testcase classname="Canvas" name="Canvas" assertions="44" time="0.020">
+	<testsuite name="love.graphics" tests="102" failures="0" skipped="3" time="3.231">
+		<testcase classname="Canvas" name="Canvas" assertions="44" time="0.019">
 		</testcase>
-		<testcase classname="Font" name="Font" assertions="90" time="0.024">
+		<testcase classname="Font" name="Font" assertions="90" time="0.021">
 		</testcase>
-		<testcase classname="Image" name="Image" assertions="40" time="0.018">
+		<testcase classname="Image" name="Image" assertions="40" time="0.020">
 		</testcase>
-		<testcase classname="Mesh" name="Mesh" assertions="0" time="0.016">
+		<testcase classname="Mesh" name="Mesh" assertions="0" time="0.018">
 			<skipped message="test class needs writing" />
 		</testcase>
 		<testcase classname="ParticleSystem" name="ParticleSystem" assertions="0" time="0.017">
 			<skipped message="test class needs writing" />
 		</testcase>
-		<testcase classname="Quad" name="Quad" assertions="47" time="0.019">
+		<testcase classname="Quad" name="Quad" assertions="47" time="0.018">
 		</testcase>
-		<testcase classname="Shader" name="Shader" assertions="39" time="0.031">
+		<testcase classname="Shader" name="Shader" assertions="39" time="0.029">
 		</testcase>
-		<testcase classname="SpriteBatch" name="SpriteBatch" assertions="203" time="0.030">
+		<testcase classname="SpriteBatch" name="SpriteBatch" assertions="203" time="0.027">
 		</testcase>
-		<testcase classname="Text" name="Text" assertions="90" time="0.024">
+		<testcase classname="Text" name="Text" assertions="90" time="0.018">
 		</testcase>
 		<testcase classname="Video" name="Video" assertions="48" time="1.040">
 		</testcase>
-		<testcase classname="applyTransform" name="applyTransform" assertions="4" time="0.011">
+		<testcase classname="applyTransform" name="applyTransform" assertions="4" time="0.006">
 		</testcase>
 		<testcase classname="arc" name="arc" assertions="264" time="0.019">
 		</testcase>
-		<testcase classname="captureScreenshot" name="captureScreenshot" assertions="1" time="0.184">
+		<testcase classname="captureScreenshot" name="captureScreenshot" assertions="1" time="0.183">
 		</testcase>
 		<testcase classname="circle" name="circle" assertions="192" time="0.020">
 		</testcase>
-		<testcase classname="clear" name="clear" assertions="20" time="0.022">
+		<testcase classname="clear" name="clear" assertions="20" time="0.031">
 		</testcase>
-		<testcase classname="discard" name="discard" assertions="0" time="0.017">
+		<testcase classname="discard" name="discard" assertions="0" time="0.016">
 			<skipped message="cant test this worked" />
 		</testcase>
-		<testcase classname="draw" name="draw" assertions="112" time="0.018">
+		<testcase classname="draw" name="draw" assertions="112" time="0.017">
 		</testcase>
 		<testcase classname="drawInstanced" name="drawInstanced" assertions="16" time="0.030">
 		</testcase>
-		<testcase classname="drawLayer" name="drawLayer" assertions="144" time="0.021">
+		<testcase classname="drawLayer" name="drawLayer" assertions="144" time="0.025">
 		</testcase>
-		<testcase classname="ellipse" name="ellipse" assertions="80" time="0.019">
+		<testcase classname="ellipse" name="ellipse" assertions="80" time="0.017">
 		</testcase>
 		<testcase classname="flushBatch" name="flushBatch" assertions="1" time="0.018">
 		</testcase>
 		<testcase classname="getBackgroundColor" name="getBackgroundColor" assertions="8" time="0.018">
 		</testcase>
-		<testcase classname="getBlendMode" name="getBlendMode" assertions="4" time="0.017">
+		<testcase classname="getBlendMode" name="getBlendMode" assertions="4" time="0.019">
 		</testcase>
 		<testcase classname="getCanvas" name="getCanvas" assertions="4" time="0.018">
 		</testcase>
@@ -240,297 +239,296 @@
 		</testcase>
 		<testcase classname="getDPIScale" name="getDPIScale" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="getDefaultFilter" name="getDefaultFilter" assertions="3" time="0.016">
+		<testcase classname="getDefaultFilter" name="getDefaultFilter" assertions="3" time="0.018">
 		</testcase>
-		<testcase classname="getDepthMode" name="getDepthMode" assertions="2" time="0.016">
+		<testcase classname="getDepthMode" name="getDepthMode" assertions="2" time="0.017">
 		</testcase>
-		<testcase classname="getDimensions" name="getDimensions" assertions="2" time="0.016">
+		<testcase classname="getDimensions" name="getDimensions" assertions="2" time="0.017">
 		</testcase>
 		<testcase classname="getFont" name="getFont" assertions="3" time="0.018">
 		</testcase>
-		<testcase classname="getFrontFaceWinding" name="getFrontFaceWinding" assertions="2" time="0.017">
+		<testcase classname="getFrontFaceWinding" name="getFrontFaceWinding" assertions="2" time="0.019">
 		</testcase>
 		<testcase classname="getHeight" name="getHeight" assertions="1" time="0.017">
 		</testcase>
-		<testcase classname="getLineJoin" name="getLineJoin" assertions="2" time="0.018">
+		<testcase classname="getLineJoin" name="getLineJoin" assertions="2" time="0.017">
 		</testcase>
-		<testcase classname="getLineStyle" name="getLineStyle" assertions="2" time="0.017">
+		<testcase classname="getLineStyle" name="getLineStyle" assertions="2" time="0.018">
 		</testcase>
-		<testcase classname="getLineWidth" name="getLineWidth" assertions="2" time="0.016">
+		<testcase classname="getLineWidth" name="getLineWidth" assertions="2" time="0.019">
 		</testcase>
-		<testcase classname="getMeshCullMode" name="getMeshCullMode" assertions="2" time="0.017">
+		<testcase classname="getMeshCullMode" name="getMeshCullMode" assertions="2" time="0.018">
 		</testcase>
-		<testcase classname="getPixelDimensions" name="getPixelDimensions" assertions="2" time="0.016">
+		<testcase classname="getPixelDimensions" name="getPixelDimensions" assertions="2" time="0.018">
 		</testcase>
 		<testcase classname="getPixelHeight" name="getPixelHeight" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="getPixelWidth" name="getPixelWidth" assertions="1" time="0.013">
+		<testcase classname="getPixelWidth" name="getPixelWidth" assertions="1" time="0.018">
 		</testcase>
 		<testcase classname="getPointSize" name="getPointSize" assertions="2" time="0.018">
 		</testcase>
-		<testcase classname="getRendererInfo" name="getRendererInfo" assertions="4" time="0.017">
+		<testcase classname="getRendererInfo" name="getRendererInfo" assertions="4" time="0.019">
 		</testcase>
-		<testcase classname="getScissor" name="getScissor" assertions="8" time="0.016">
+		<testcase classname="getScissor" name="getScissor" assertions="8" time="0.017">
 		</testcase>
-		<testcase classname="getShader" name="getShader" assertions="1" time="0.016">
+		<testcase classname="getShader" name="getShader" assertions="1" time="0.017">
 		</testcase>
-		<testcase classname="getStackDepth" name="getStackDepth" assertions="4" time="0.017">
+		<testcase classname="getStackDepth" name="getStackDepth" assertions="4" time="0.018">
 		</testcase>
-		<testcase classname="getStats" name="getStats" assertions="7" time="0.018">
+		<testcase classname="getStats" name="getStats" assertions="7" time="0.017">
 		</testcase>
-		<testcase classname="getStencilMode" name="getStencilMode" assertions="6" time="0.016">
+		<testcase classname="getStencilMode" name="getStencilMode" assertions="6" time="0.019">
 		</testcase>
-		<testcase classname="getSupported" name="getSupported" assertions="17" time="0.018">
+		<testcase classname="getSupported" name="getSupported" assertions="17" time="0.016">
 		</testcase>
 		<testcase classname="getSystemLimits" name="getSystemLimits" assertions="13" time="0.017">
 		</testcase>
-		<testcase classname="getTextureFormats" name="getTextureFormats" assertions="79" time="0.017">
+		<testcase classname="getTextureFormats" name="getTextureFormats" assertions="79" time="0.019">
 		</testcase>
-		<testcase classname="getTextureTypes" name="getTextureTypes" assertions="4" time="0.017">
+		<testcase classname="getTextureTypes" name="getTextureTypes" assertions="4" time="0.018">
 		</testcase>
-		<testcase classname="getWidth" name="getWidth" assertions="1" time="0.016">
+		<testcase classname="getWidth" name="getWidth" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="intersectScissor" name="intersectScissor" assertions="20" time="0.018">
+		<testcase classname="intersectScissor" name="intersectScissor" assertions="20" time="0.019">
 		</testcase>
-		<testcase classname="inverseTransformPoint" name="inverseTransformPoint" assertions="4" time="0.016">
+		<testcase classname="inverseTransformPoint" name="inverseTransformPoint" assertions="4" time="0.018">
 		</testcase>
-		<testcase classname="isActive" name="isActive" assertions="1" time="0.018">
+		<testcase classname="isActive" name="isActive" assertions="1" time="0.019">
 		</testcase>
-		<testcase classname="isGammaCorrect" name="isGammaCorrect" assertions="1" time="0.016">
+		<testcase classname="isGammaCorrect" name="isGammaCorrect" assertions="1" time="0.017">
 		</testcase>
 		<testcase classname="isWireframe" name="isWireframe" assertions="2" time="0.017">
 		</testcase>
-		<testcase classname="line" name="line" assertions="64" time="0.019">
+		<testcase classname="line" name="line" assertions="64" time="0.020">
 		</testcase>
-		<testcase classname="newArrayImage" name="newArrayImage" assertions="3" time="0.016">
+		<testcase classname="newArrayImage" name="newArrayImage" assertions="3" time="0.018">
 		</testcase>
-		<testcase classname="newCanvas" name="newCanvas" assertions="6" time="0.016">
+		<testcase classname="newCanvas" name="newCanvas" assertions="6" time="0.015">
 		</testcase>
-		<testcase classname="newCubeImage" name="newCubeImage" assertions="3" time="0.018">
+		<testcase classname="newCubeImage" name="newCubeImage" assertions="3" time="0.019">
 		</testcase>
-		<testcase classname="newFont" name="newFont" assertions="6" time="0.016">
+		<testcase classname="newFont" name="newFont" assertions="6" time="0.019">
 		</testcase>
 		<testcase classname="newImage" name="newImage" assertions="3" time="0.016">
 		</testcase>
-		<testcase classname="newImageFont" name="newImageFont" assertions="3" time="0.016">
+		<testcase classname="newImageFont" name="newImageFont" assertions="3" time="0.017">
 		</testcase>
-		<testcase classname="newMesh" name="newMesh" assertions="3" time="0.016">
+		<testcase classname="newMesh" name="newMesh" assertions="3" time="0.017">
 		</testcase>
 		<testcase classname="newParticleSystem" name="newParticleSystem" assertions="3" time="0.018">
 		</testcase>
-		<testcase classname="newQuad" name="newQuad" assertions="3" time="0.020">
+		<testcase classname="newQuad" name="newQuad" assertions="3" time="0.018">
 		</testcase>
-		<testcase classname="newShader" name="newShader" assertions="3" time="0.024">
+		<testcase classname="newShader" name="newShader" assertions="3" time="0.023">
 		</testcase>
-		<testcase classname="newSpriteBatch" name="newSpriteBatch" assertions="3" time="0.017">
+		<testcase classname="newSpriteBatch" name="newSpriteBatch" assertions="3" time="0.016">
 		</testcase>
-		<testcase classname="newTextBatch" name="newTextBatch" assertions="3" time="0.019">
+		<testcase classname="newTextBatch" name="newTextBatch" assertions="3" time="0.018">
 		</testcase>
 		<testcase classname="newVideo" name="newVideo" assertions="3" time="0.021">
 		</testcase>
-		<testcase classname="newVolumeImage" name="newVolumeImage" assertions="3" time="0.018">
+		<testcase classname="newVolumeImage" name="newVolumeImage" assertions="3" time="0.016">
 		</testcase>
-		<testcase classname="origin" name="origin" assertions="4" time="0.019">
+		<testcase classname="origin" name="origin" assertions="4" time="0.018">
 		</testcase>
-		<testcase classname="points" name="points" assertions="48" time="0.022">
+		<testcase classname="points" name="points" assertions="48" time="0.020">
 		</testcase>
 		<testcase classname="polygon" name="polygon" assertions="56" time="0.018">
 		</testcase>
-		<testcase classname="pop" name="pop" assertions="4" time="0.032">
+		<testcase classname="pop" name="pop" assertions="4" time="0.019">
 		</testcase>
 		<testcase classname="print" name="print" assertions="148" time="0.019">
 		</testcase>
 		<testcase classname="printf" name="printf" assertions="180" time="0.018">
 		</testcase>
-		<testcase classname="push" name="push" assertions="4" time="0.018">
+		<testcase classname="push" name="push" assertions="4" time="0.026">
 		</testcase>
-		<testcase classname="rectangle" name="rectangle" assertions="116" time="0.032">
+		<testcase classname="rectangle" name="rectangle" assertions="116" time="0.025">
 		</testcase>
-		<testcase classname="replaceTransform" name="replaceTransform" assertions="4" time="0.024">
+		<testcase classname="replaceTransform" name="replaceTransform" assertions="4" time="0.019">
 		</testcase>
-		<testcase classname="reset" name="reset" assertions="3" time="0.016">
+		<testcase classname="reset" name="reset" assertions="3" time="0.018">
 		</testcase>
-		<testcase classname="rotate" name="rotate" assertions="16" time="0.036">
+		<testcase classname="rotate" name="rotate" assertions="16" time="0.030">
 		</testcase>
-		<testcase classname="scale" name="scale" assertions="16" time="0.014">
+		<testcase classname="scale" name="scale" assertions="16" time="0.013">
 		</testcase>
-		<testcase classname="setBackgroundColor" name="setBackgroundColor" assertions="4" time="0.018">
+		<testcase classname="setBackgroundColor" name="setBackgroundColor" assertions="4" time="0.017">
 		</testcase>
-		<testcase classname="setBlendMode" name="setBlendMode" assertions="16" time="0.027">
+		<testcase classname="setBlendMode" name="setBlendMode" assertions="16" time="0.028">
 		</testcase>
 		<testcase classname="setCanvas" name="setCanvas" assertions="19" time="0.018">
 		</testcase>
-		<testcase classname="setColor" name="setColor" assertions="68" time="0.018">
+		<testcase classname="setColor" name="setColor" assertions="68" time="0.017">
 		</testcase>
-		<testcase classname="setColorMask" name="setColorMask" assertions="20" time="0.023">
+		<testcase classname="setColorMask" name="setColorMask" assertions="20" time="0.034">
 		</testcase>
-		<testcase classname="setDefaultFilter" name="setDefaultFilter" assertions="3" time="0.016">
+		<testcase classname="setDefaultFilter" name="setDefaultFilter" assertions="3" time="0.014">
 		</testcase>
-		<testcase classname="setDepthMode" name="setDepthMode" assertions="8" time="0.016">
+		<testcase classname="setDepthMode" name="setDepthMode" assertions="8" time="0.018">
 		</testcase>
-		<testcase classname="setFont" name="setFont" assertions="40" time="0.030">
+		<testcase classname="setFont" name="setFont" assertions="40" time="0.029">
 		</testcase>
-		<testcase classname="setFrontFaceWinding" name="setFrontFaceWinding" assertions="2" time="0.018">
+		<testcase classname="setFrontFaceWinding" name="setFrontFaceWinding" assertions="2" time="0.017">
 		</testcase>
 		<testcase classname="setLineJoin" name="setLineJoin" assertions="16" time="0.019">
 		</testcase>
-		<testcase classname="setLineStyle" name="setLineStyle" assertions="24" time="0.029">
+		<testcase classname="setLineStyle" name="setLineStyle" assertions="24" time="0.033">
 		</testcase>
-		<testcase classname="setLineWidth" name="setLineWidth" assertions="72" time="0.021">
+		<testcase classname="setLineWidth" name="setLineWidth" assertions="72" time="0.023">
 		</testcase>
-		<testcase classname="setMeshCullMode" name="setMeshCullMode" assertions="3" time="0.016">
+		<testcase classname="setMeshCullMode" name="setMeshCullMode" assertions="3" time="0.014">
 		</testcase>
-		<testcase classname="setScissor" name="setScissor" assertions="32" time="0.034">
+		<testcase classname="setScissor" name="setScissor" assertions="32" time="0.027">
 		</testcase>
-		<testcase classname="setShader" name="setShader" assertions="16" time="0.023">
+		<testcase classname="setShader" name="setShader" assertions="16" time="0.024">
 		</testcase>
 		<testcase classname="setStencilMode" name="setStencilMode" assertions="32" time="0.019">
 		</testcase>
-		<testcase classname="setWireframe" name="setWireframe" assertions="28" time="0.030">
+		<testcase classname="setWireframe" name="setWireframe" assertions="28" time="0.036">
 		</testcase>
 		<testcase classname="shear" name="shear" assertions="32" time="0.022">
 		</testcase>
-		<testcase classname="transformPoint" name="transformPoint" assertions="4" time="0.016">
+		<testcase classname="transformPoint" name="transformPoint" assertions="4" time="0.017">
 		</testcase>
-		<testcase classname="translate" name="translate" assertions="16" time="0.031">
+		<testcase classname="translate" name="translate" assertions="16" time="0.017">
 		</testcase>
-		<testcase classname="validateShader" name="validateShader" assertions="2" time="0.019">
+		<testcase classname="validateShader" name="validateShader" assertions="2" time="0.020">
 		</testcase>
 	</testsuite>
-	<testsuite name="love.image" tests="5" failures="0" skipped="0" time="0.086">
+	<testsuite name="love.image" tests="5" failures="0" skipped="0" time="0.098">
 		<testcase classname="CompressedImageData" name="CompressedImageData" assertions="11" time="0.017">
 		</testcase>
-		<testcase classname="ImageData" name="ImageData" assertions="14" time="0.018">
+		<testcase classname="ImageData" name="ImageData" assertions="14" time="0.036">
 		</testcase>
-		<testcase classname="isCompressed" name="isCompressed" assertions="1" time="0.017">
+		<testcase classname="isCompressed" name="isCompressed" assertions="1" time="0.013">
 		</testcase>
-		<testcase classname="newCompressedData" name="newCompressedData" assertions="3" time="0.018">
+		<testcase classname="newCompressedData" name="newCompressedData" assertions="3" time="0.016">
 		</testcase>
-		<testcase classname="newImageData" name="newImageData" assertions="6" time="0.018">
+		<testcase classname="newImageData" name="newImageData" assertions="6" time="0.016">
 		</testcase>
 	</testsuite>
-	<testsuite name="love.math" tests="20" failures="0" skipped="0" time="0.339">
-		<testcase classname="BezierCurve" name="BezierCurve" assertions="31" time="0.017">
+	<testsuite name="love.math" tests="20" failures="0" skipped="0" time="0.353">
+		<testcase classname="BezierCurve" name="BezierCurve" assertions="31" time="0.016">
 		</testcase>
-		<testcase classname="RandomGenerator" name="RandomGenerator" assertions="10" time="0.017">
+		<testcase classname="RandomGenerator" name="RandomGenerator" assertions="10" time="0.018">
 		</testcase>
-		<testcase classname="Transform" name="Transform" assertions="14" time="0.018">
+		<testcase classname="Transform" name="Transform" assertions="14" time="0.016">
 		</testcase>
-		<testcase classname="colorFromBytes" name="colorFromBytes" assertions="12" time="0.018">
+		<testcase classname="colorFromBytes" name="colorFromBytes" assertions="12" time="0.017">
 		</testcase>
-		<testcase classname="colorToBytes" name="colorToBytes" assertions="12" time="0.018">
+		<testcase classname="colorToBytes" name="colorToBytes" assertions="12" time="0.019">
 		</testcase>
-		<testcase classname="gammaToLinear" name="gammaToLinear" assertions="3" time="0.017">
+		<testcase classname="gammaToLinear" name="gammaToLinear" assertions="3" time="0.018">
 		</testcase>
-		<testcase classname="getRandomSeed" name="getRandomSeed" assertions="2" time="0.016">
+		<testcase classname="getRandomSeed" name="getRandomSeed" assertions="2" time="0.018">
 		</testcase>
-		<testcase classname="getRandomState" name="getRandomState" assertions="1" time="0.016">
+		<testcase classname="getRandomState" name="getRandomState" assertions="1" time="0.017">
 		</testcase>
-		<testcase classname="isConvex" name="isConvex" assertions="2" time="0.017">
+		<testcase classname="isConvex" name="isConvex" assertions="2" time="0.018">
 		</testcase>
-		<testcase classname="linearToGamma" name="linearToGamma" assertions="3" time="0.016">
+		<testcase classname="linearToGamma" name="linearToGamma" assertions="3" time="0.018">
 		</testcase>
-		<testcase classname="newBezierCurve" name="newBezierCurve" assertions="3" time="0.016">
+		<testcase classname="newBezierCurve" name="newBezierCurve" assertions="3" time="0.018">
 		</testcase>
-		<testcase classname="newRandomGenerator" name="newRandomGenerator" assertions="3" time="0.016">
+		<testcase classname="newRandomGenerator" name="newRandomGenerator" assertions="3" time="0.017">
 		</testcase>
-		<testcase classname="newTransform" name="newTransform" assertions="3" time="0.017">
+		<testcase classname="newTransform" name="newTransform" assertions="3" time="0.018">
 		</testcase>
-		<testcase classname="perlinNoise" name="perlinNoise" assertions="4" time="0.017">
+		<testcase classname="perlinNoise" name="perlinNoise" assertions="4" time="0.019">
 		</testcase>
-		<testcase classname="random" name="random" assertions="10" time="0.017">
+		<testcase classname="random" name="random" assertions="10" time="0.019">
 		</testcase>
 		<testcase classname="randomNormal" name="randomNormal" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="setRandomSeed" name="setRandomSeed" assertions="2" time="0.016">
+		<testcase classname="setRandomSeed" name="setRandomSeed" assertions="2" time="0.017">
 		</testcase>
-		<testcase classname="setRandomState" name="setRandomState" assertions="1" time="0.016">
+		<testcase classname="setRandomState" name="setRandomState" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="simplexNoise" name="simplexNoise" assertions="4" time="0.016">
+		<testcase classname="simplexNoise" name="simplexNoise" assertions="4" time="0.017">
 		</testcase>
 		<testcase classname="triangulate" name="triangulate" assertions="2" time="0.017">
 		</testcase>
 	</testsuite>
-	<testsuite name="love.physics" tests="22" failures="0" skipped="4" time="0.434">
-		<testcase classname="Body" name="Body" assertions="0" time="0.017">
+	<testsuite name="love.physics" tests="23" failures="0" skipped="3" time="0.449">
+		<testcase classname="Body" name="Body" assertions="0" time="0.016">
 			<skipped message="test class needs writing" />
 		</testcase>
 		<testcase classname="Contact" name="Contact" assertions="0" time="0.017">
 			<skipped message="test class needs writing" />
 		</testcase>
-		<testcase classname="Joint" name="Joint" assertions="0" time="0.017">
-			<skipped message="test class needs writing" />
+		<testcase classname="Joint" name="Joint" assertions="17" time="0.018">
 		</testcase>
-		<testcase classname="Shape" name="Shape" assertions="0" time="0.016">
+		<testcase classname="Shape" name="Shape" assertions="0" time="0.018">
 			<skipped message="test class needs writing" />
 		</testcase>
 		<testcase classname="World" name="World" assertions="33" time="0.016">
 		</testcase>
-		<testcase classname="getDistance" name="getDistance" assertions="1" time="0.016">
+		<testcase classname="getDistance" name="getDistance" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="getMeter" name="getMeter" assertions="1" time="0.017">
+		<testcase classname="getMeter" name="getMeter" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="newBody" name="newBody" assertions="3" time="0.016">
+		<testcase classname="newBody" name="newBody" assertions="3" time="0.018">
 		</testcase>
-		<testcase classname="newChainShape" name="newChainShape" assertions="3" time="0.018">
+		<testcase classname="newChainShape" name="newChainShape" assertions="3" time="0.017">
 		</testcase>
-		<testcase classname="newCircleShape" name="newCircleShape" assertions="3" time="0.016">
+		<testcase classname="newCircleShape" name="newCircleShape" assertions="3" time="0.017">
 		</testcase>
 		<testcase classname="newDistanceJoint" name="newDistanceJoint" assertions="3" time="0.018">
 		</testcase>
-		<testcase classname="newEdgeShape" name="newEdgeShape" assertions="3" time="0.018">
+		<testcase classname="newEdgeShape" name="newEdgeShape" assertions="3" time="0.017">
 		</testcase>
-		<testcase classname="newFrictionJoint" name="newFrictionJoint" assertions="3" time="0.016">
+		<testcase classname="newFrictionJoint" name="newFrictionJoint" assertions="3" time="0.017">
 		</testcase>
-		<testcase classname="newGearJoint" name="newGearJoint" assertions="3" time="0.016">
+		<testcase classname="newGearJoint" name="newGearJoint" assertions="3" time="0.017">
 		</testcase>
 		<testcase classname="newMotorJoint" name="newMotorJoint" assertions="3" time="0.015">
 		</testcase>
-		<testcase classname="newMouseJoint" name="newMouseJoint" assertions="3" time="0.017">
+		<testcase classname="newMouseJoint" name="newMouseJoint" assertions="3" time="0.018">
 		</testcase>
-		<testcase classname="newPolygonShape" name="newPolygonShape" assertions="3" time="0.018">
+		<testcase classname="newPolygonShape" name="newPolygonShape" assertions="3" time="0.016">
 		</testcase>
-		<testcase classname="newPrismaticJoint" name="newPrismaticJoint" assertions="3" time="0.016">
+		<testcase classname="newPrismaticJoint" name="newPrismaticJoint" assertions="3" time="0.017">
 		</testcase>
-		<testcase classname="newPulleyJoint" name="newPulleyJoint" assertions="3" time="0.016">
+		<testcase classname="newPulleyJoint" name="newPulleyJoint" assertions="3" time="0.017">
 		</testcase>
-		<testcase classname="newRectangleShape" name="newRectangleShape" assertions="6" time="0.017">
+		<testcase classname="newRectangleShape" name="newRectangleShape" assertions="6" time="0.018">
 		</testcase>
-		<testcase classname="newRevoluteJoint" name="newRevoluteJoint" assertions="3" time="0.016">
+		<testcase classname="newRevoluteJoint" name="newRevoluteJoint" assertions="3" time="0.018">
 		</testcase>
 		<testcase classname="newRopeJoint" name="newRopeJoint" assertions="3" time="0.018">
 		</testcase>
-		<testcase classname="newWeldJoint" name="newWeldJoint" assertions="3" time="0.018">
+		<testcase classname="newWeldJoint" name="newWeldJoint" assertions="3" time="0.016">
 		</testcase>
-		<testcase classname="newWheelJoint" name="newWheelJoint" assertions="3" time="0.016">
+		<testcase classname="newWheelJoint" name="newWheelJoint" assertions="3" time="0.017">
 		</testcase>
-		<testcase classname="newWorld" name="newWorld" assertions="3" time="0.016">
+		<testcase classname="newWorld" name="newWorld" assertions="3" time="0.018">
 		</testcase>
-		<testcase classname="setMeter" name="setMeter" assertions="2" time="0.016">
+		<testcase classname="setMeter" name="setMeter" assertions="2" time="0.018">
 		</testcase>
 	</testsuite>
-	<testsuite name="love.sound" tests="4" failures="0" skipped="0" time="0.071">
-		<testcase classname="Decoder" name="Decoder" assertions="14" time="0.018">
+	<testsuite name="love.sound" tests="4" failures="0" skipped="0" time="0.074">
+		<testcase classname="Decoder" name="Decoder" assertions="14" time="0.017">
 		</testcase>
-		<testcase classname="SoundData" name="SoundData" assertions="20" time="0.018">
+		<testcase classname="SoundData" name="SoundData" assertions="20" time="0.019">
 		</testcase>
-		<testcase classname="newDecoder" name="newDecoder" assertions="3" time="0.017">
+		<testcase classname="newDecoder" name="newDecoder" assertions="3" time="0.019">
 		</testcase>
-		<testcase classname="newSoundData" name="newSoundData" assertions="6" time="0.018">
+		<testcase classname="newSoundData" name="newSoundData" assertions="6" time="0.019">
 		</testcase>
 	</testsuite>
-	<testsuite name="love.system" tests="6" failures="0" skipped="2" time="0.139">
-		<testcase classname="getClipboardText" name="getClipboardText" assertions="1" time="0.017">
+	<testsuite name="love.system" tests="6" failures="0" skipped="2" time="0.144">
+		<testcase classname="getClipboardText" name="getClipboardText" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="getOS" name="getOS" assertions="1" time="0.018">
+		<testcase classname="getOS" name="getOS" assertions="1" time="0.019">
 		</testcase>
-		<testcase classname="getPowerInfo" name="getPowerInfo" assertions="1" time="0.017">
+		<testcase classname="getPowerInfo" name="getPowerInfo" assertions="1" time="0.019">
 		</testcase>
 		<testcase classname="getProcessorCount" name="getProcessorCount" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="hasBackgroundMusic" name="hasBackgroundMusic" assertions="1" time="0.017">
+		<testcase classname="hasBackgroundMusic" name="hasBackgroundMusic" assertions="1" time="0.019">
 		</testcase>
-		<testcase classname="openURL" name="openURL" assertions="0" time="0.016">
+		<testcase classname="openURL" name="openURL" assertions="0" time="0.018">
 			<skipped message="cant test this worked" />
 		</testcase>
 		<testcase classname="setClipboardText" name="setClipboardText" assertions="1" time="0.017">
@@ -539,103 +537,103 @@
 			<skipped message="cant test this worked" />
 		</testcase>
 	</testsuite>
-	<testsuite name="love.thread" tests="5" failures="0" skipped="0" time="0.376">
-		<testcase classname="Channel" name="Channel" assertions="10" time="0.235">
+	<testsuite name="love.thread" tests="5" failures="0" skipped="0" time="0.377">
+		<testcase classname="Channel" name="Channel" assertions="10" time="0.230">
 		</testcase>
-		<testcase classname="Thread" name="Thread" assertions="7" time="0.091">
+		<testcase classname="Thread" name="Thread" assertions="7" time="0.099">
 		</testcase>
-		<testcase classname="getChannel" name="getChannel" assertions="3" time="0.018">
+		<testcase classname="getChannel" name="getChannel" assertions="3" time="0.016">
 		</testcase>
-		<testcase classname="newChannel" name="newChannel" assertions="3" time="0.015">
+		<testcase classname="newChannel" name="newChannel" assertions="3" time="0.016">
 		</testcase>
-		<testcase classname="newThread" name="newThread" assertions="3" time="0.016">
+		<testcase classname="newThread" name="newThread" assertions="3" time="0.017">
 		</testcase>
 	</testsuite>
-	<testsuite name="love.timer" tests="6" failures="0" skipped="0" time="2.091">
-		<testcase classname="getAverageDelta" name="getAverageDelta" assertions="1" time="0.017">
+	<testsuite name="love.timer" tests="6" failures="0" skipped="0" time="2.093">
+		<testcase classname="getAverageDelta" name="getAverageDelta" assertions="1" time="0.018">
 		</testcase>
 		<testcase classname="getDelta" name="getDelta" assertions="1" time="0.017">
 		</testcase>
-		<testcase classname="getFPS" name="getFPS" assertions="1" time="0.016">
+		<testcase classname="getFPS" name="getFPS" assertions="1" time="0.015">
 		</testcase>
-		<testcase classname="getTime" name="getTime" assertions="1" time="1.017">
+		<testcase classname="getTime" name="getTime" assertions="1" time="1.019">
 		</testcase>
-		<testcase classname="sleep" name="sleep" assertions="1" time="1.012">
+		<testcase classname="sleep" name="sleep" assertions="1" time="1.011">
 		</testcase>
-		<testcase classname="step" name="step" assertions="1" time="0.012">
+		<testcase classname="step" name="step" assertions="1" time="0.011">
 		</testcase>
 	</testsuite>
-	<testsuite name="love.video" tests="2" failures="0" skipped="0" time="0.039">
+	<testsuite name="love.video" tests="2" failures="0" skipped="0" time="0.040">
 		<testcase classname="VideoStream" name="VideoStream" assertions="9" time="0.019">
 		</testcase>
-		<testcase classname="newVideoStream" name="newVideoStream" assertions="3" time="0.020">
+		<testcase classname="newVideoStream" name="newVideoStream" assertions="3" time="0.021">
 		</testcase>
 	</testsuite>
-	<testsuite name="love.window" tests="34" failures="0" skipped="2" time="6.015">
-		<testcase classname="close" name="close" assertions="2" time="0.048">
+	<testsuite name="love.window" tests="34" failures="0" skipped="2" time="5.986">
+		<testcase classname="close" name="close" assertions="2" time="0.045">
 		</testcase>
 		<testcase classname="fromPixels" name="fromPixels" assertions="1" time="0.002">
 		</testcase>
 		<testcase classname="getDPIScale" name="getDPIScale" assertions="1" time="0.002">
 		</testcase>
-		<testcase classname="getDesktopDimensions" name="getDesktopDimensions" assertions="2" time="0.017">
+		<testcase classname="getDesktopDimensions" name="getDesktopDimensions" assertions="2" time="0.002">
 		</testcase>
-		<testcase classname="getDisplayCount" name="getDisplayCount" assertions="1" time="0.017">
+		<testcase classname="getDisplayCount" name="getDisplayCount" assertions="1" time="0.015">
 		</testcase>
-		<testcase classname="getDisplayName" name="getDisplayName" assertions="1" time="0.016">
+		<testcase classname="getDisplayName" name="getDisplayName" assertions="1" time="0.017">
 		</testcase>
-		<testcase classname="getDisplayOrientation" name="getDisplayOrientation" assertions="1" time="0.017">
+		<testcase classname="getDisplayOrientation" name="getDisplayOrientation" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="getFullscreen" name="getFullscreen" assertions="2" time="1.345">
+		<testcase classname="getFullscreen" name="getFullscreen" assertions="2" time="1.346">
 		</testcase>
-		<testcase classname="getFullscreenModes" name="getFullscreenModes" assertions="1" time="0.012">
+		<testcase classname="getFullscreenModes" name="getFullscreenModes" assertions="1" time="0.014">
 		</testcase>
-		<testcase classname="getIcon" name="getIcon" assertions="2" time="0.019">
+		<testcase classname="getIcon" name="getIcon" assertions="2" time="0.020">
 		</testcase>
-		<testcase classname="getMode" name="getMode" assertions="3" time="0.016">
+		<testcase classname="getMode" name="getMode" assertions="3" time="0.017">
 		</testcase>
 		<testcase classname="getPosition" name="getPosition" assertions="2" time="0.017">
 		</testcase>
-		<testcase classname="getSafeArea" name="getSafeArea" assertions="4" time="0.016">
+		<testcase classname="getSafeArea" name="getSafeArea" assertions="4" time="0.017">
 		</testcase>
-		<testcase classname="getTitle" name="getTitle" assertions="1" time="0.017">
+		<testcase classname="getTitle" name="getTitle" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="getVSync" name="getVSync" assertions="1" time="0.015">
+		<testcase classname="getVSync" name="getVSync" assertions="1" time="0.017">
 		</testcase>
-		<testcase classname="hasFocus" name="hasFocus" assertions="1" time="0.017">
+		<testcase classname="hasFocus" name="hasFocus" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="hasMouseFocus" name="hasMouseFocus" assertions="1" time="0.017">
+		<testcase classname="hasMouseFocus" name="hasMouseFocus" assertions="1" time="0.018">
 		</testcase>
-		<testcase classname="isDisplaySleepEnabled" name="isDisplaySleepEnabled" assertions="3" time="0.016">
+		<testcase classname="isDisplaySleepEnabled" name="isDisplaySleepEnabled" assertions="3" time="0.017">
 		</testcase>
-		<testcase classname="isMaximized" name="isMaximized" assertions="2" time="0.185">
+		<testcase classname="isMaximized" name="isMaximized" assertions="2" time="0.184">
 		</testcase>
-		<testcase classname="isMinimized" name="isMinimized" assertions="2" time="0.730">
+		<testcase classname="isMinimized" name="isMinimized" assertions="2" time="0.728">
 		</testcase>
-		<testcase classname="isOpen" name="isOpen" assertions="2" time="0.041">
+		<testcase classname="isOpen" name="isOpen" assertions="2" time="0.049">
 		</testcase>
-		<testcase classname="isVisible" name="isVisible" assertions="2" time="0.029">
+		<testcase classname="isVisible" name="isVisible" assertions="2" time="0.024">
 		</testcase>
 		<testcase classname="maximize" name="maximize" assertions="2" time="0.156">
 		</testcase>
 		<testcase classname="minimize" name="minimize" assertions="2" time="0.731">
 		</testcase>
-		<testcase classname="requestAttention" name="requestAttention" assertions="0" time="0.011">
+		<testcase classname="requestAttention" name="requestAttention" assertions="0" time="0.012">
 			<skipped message="cant test this worked" />
 		</testcase>
-		<testcase classname="restore" name="restore" assertions="1" time="0.883">
+		<testcase classname="restore" name="restore" assertions="1" time="0.864">
 		</testcase>
-		<testcase classname="setDisplaySleepEnabled" name="setDisplaySleepEnabled" assertions="2" time="0.018">
+		<testcase classname="setDisplaySleepEnabled" name="setDisplaySleepEnabled" assertions="2" time="0.019">
 		</testcase>
-		<testcase classname="setFullscreen" name="setFullscreen" assertions="2" time="1.339">
+		<testcase classname="setFullscreen" name="setFullscreen" assertions="2" time="1.336">
 		</testcase>
-		<testcase classname="setIcon" name="setIcon" assertions="1" time="0.016">
+		<testcase classname="setIcon" name="setIcon" assertions="1" time="0.014">
 		</testcase>
 		<testcase classname="setMode" name="setMode" assertions="4" time="0.022">
 		</testcase>
-		<testcase classname="setPosition" name="setPosition" assertions="2" time="0.179">
+		<testcase classname="setPosition" name="setPosition" assertions="2" time="0.180">
 		</testcase>
-		<testcase classname="setTitle" name="setTitle" assertions="1" time="0.018">
+		<testcase classname="setTitle" name="setTitle" assertions="1" time="0.019">
 		</testcase>
 		<testcase classname="setVSync" name="setVSync" assertions="1" time="0.016">
 		</testcase>

+ 2 - 2
testing/readme.md

@@ -115,12 +115,12 @@ Test classes that still need to be written:
 - [ ] graphics.ParticleSystem
 - [ ] physics.Body
 - [ ] physics.Contact
-- [ ] physics.Joint
 - [ ] physics.Shape
 
 ---
 
-## Future Goals
+## Future
+- [ ] font class tests (Rasterizer + GlyphData) with BMfonts
 - [ ] graphics.isCompressed should have an example of all compressed files love can take
 - [ ] Tests can compare visual results to a reference image  
       This is partially done as we already save actual images for graphics tests to

BIN
testing/resources/font.bmp


+ 10 - 2
testing/tests/font.lua

@@ -19,8 +19,16 @@ love.test.font.GlyphData = function(test)
   test:assertEquals(128, gdata:getSize(), 'check data size')
   test:assertEquals(9, gdata:getAdvance(), 'check advance')
   test:assertEquals('la8', gdata:getFormat(), 'check format')
-  test:assertEquals(97, gdata:getGlyph(), 'check glyph number')
-  test:assertEquals('a', gdata:getGlyphString(), 'check glyph string')
+  -- @TODO 
+  --[[
+    currently these will return 0 and '' respectively as not implemented
+    https://github.com/love2d/love/blob/12.0-development/src/modules/font/freetype/TrueTypeRasterizer.cpp#L140-L141
+    "basically I haven't decided what to do here yet, because of the more 
+    advanced text shaping that happens in love 12 having a unicode codepoint 
+    associated with a glyph probably doesn't make sense in the first place"
+  ]]--
+  --test:assertEquals(97, gdata:getGlyph(), 'check glyph number') - returns 0
+  --test:assertEquals('a', gdata:getGlyphString(), 'check glyph string') - returns ''
   test:assertEquals(8, gdata:getHeight(), 'check height')
   test:assertEquals(8, gdata:getWidth(), 'check width')
   -- check boundary

+ 30 - 4
testing/tests/physics.lua

@@ -22,12 +22,38 @@ end
 
 -- Joint (love.physics.newDistanceJoint)
 love.test.physics.Joint = function(test)
-  test:skipTest('test class needs writing')
+  -- make joint
+  local world = love.physics.newWorld(1, 1, true)
+  local body1 = love.physics.newBody(world, 10, 10, 'dynamic')
+  local body2 = love.physics.newBody(world, 20, 20, 'dynamic')
+  local joint = love.physics.newDistanceJoint(body1, body2, 10, 10, 20, 20, true)
+  test:assertObject(joint)
+  -- check props
+  test:assertEquals('distance', joint:getType(), 'check joint type')
+  test:assertEquals(false, joint:isDestroyed(), 'check not destroyed')
+  test:assertEquals(0, joint:getReactionForce(1), 'check reaction force')
+  test:assertEquals(0, joint:getReactionTorque(1), 'check reaction torque')
+  local b1, b2 = joint:getBodies()
+  test:assertEquals(body1:getX(), b1:getX(), 'check body 1')
+  test:assertEquals(body2:getX(), b2:getX(), 'check body 2')
+  local x1, y1, x2, y2 = joint:getAnchors()
+  test:assertEquals(10, x1, 'check anchor x1')
+  test:assertEquals(10, y1, 'check anchor y1')
+  test:assertEquals(20, x2, 'check anchor x2')
+  test:assertEquals(20, y2, 'check anchor y2')
+  test:assertEquals(true, joint:getCollideConnected(), 'check not colliding')
+  -- test userdata
+  test:assertEquals(nil, joint:getUserData(), 'check no data by def')
+  joint:setUserData('hello')
+  test:assertEquals('hello', joint:getUserData(), 'check set userdata')
+  -- destroy
+  joint:destroy()
+  test:assertEquals(true, joint:isDestroyed(), 'check destroyed')
 end
 
 
 -- Shape (love.physics.newCircleShape)
--- @NOTE includes Fixture methods too enjoy
+-- @NOTE includes Fixture methods too now so enjoy
 love.test.physics.Shape = function(test)
   test:skipTest('test class needs writing')
 end
@@ -45,8 +71,8 @@ love.test.physics.World = function(test)
   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(10, math.floor(world:getBodies()[1]:getX()), 'check body prop change x')
+  test:assertEquals(10, math.floor(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')

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