Check if rectangles fill a rectangular space without gaps or overlaps
JavaScript (ES6), 249 bytes

with(Math)a=&gt;!(a=a.map(([l,t,r,b])=&gt;[l&lt;r?l:r,t&lt;b?t:b,l&gt;r?l:r,t&gt;b?t:b]).filter(g=([l,t,r,b])=&gt;(r-l)*(b-t))).reduce((s,b)=&gt;s-g(b),g([min,min,max,max].map((f,i)=&gt;f(...a.map(a=&gt;a[i])))))&gt;a.some(([l,t,r,b],i)=&gt;a.some(([m,u,s,c],j)=&gt;i!=j&amp;l&lt;s&amp;m&lt;r&amp;t&lt;c&amp;u&lt;b))


Note: To use this, either evaluate it as a string and assign the result to a variable, or insert the assignment after the with(Math). Explanation:

with(Math)a=&gt;!( Bring min and max into scope.
a=a.map(([l,t,r,b])=&gt;[l&lt;r?l:r,t&lt;b?t:b,l&gt;r?l:r,t&gt;b?t:b]) Normalise the coordinates
.filter(g=([l,t,r,b])=&gt;(r-l)*(b-t))) Remove empty rectangles, also defining a function to calculate area
.reduce((s,b)=&gt;s-g(b), Subtract the areas of all the rectangles
g([min,min,max,max].map((f,i)=&gt;f(...a.map(a=&gt;a[i]))))) from the area of the bounding box
&gt;a.some(([l,t,r,b],i)=&gt;a.some(([m,u,s,c],j)=&gt;i!=j&amp;l&lt;s&amp;m&lt;r&amp;t&lt;c&amp;u&lt;b)) and check that no rectangles overlap.