Bug 1484316: Serialize clip-path and shape-outside using Servo. r=xidorn
authorEmilio Cobos Álvarez <emilio@crisal.io>
Fri, 17 Aug 2018 20:26:29 +0200
changeset 432799 53f23b446b29fd9dd32709be5c39b9eb3da9735e
parent 432798 4b7383b27f89dcb1732b27f6d68f1684f36ff377
child 432800 4bb2acbf4eb0d386046945e52bdd546fc41ae8e5
push id34488
push usernerli@mozilla.com
push dateWed, 22 Aug 2018 16:28:54 +0000
treeherdermozilla-central@d6e4d3e69d4c [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersxidorn
bugs1484316
milestone63.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1484316: Serialize clip-path and shape-outside using Servo. r=xidorn Differential Revision: https://phabricator.services.mozilla.com/D3653
layout/style/ServoCSSPropList.mako.py
layout/style/nsCSSProps.cpp
layout/style/nsCSSProps.h
layout/style/nsComputedDOMStyle.cpp
layout/style/nsComputedDOMStyle.h
layout/style/test/test_transitions_per_property.html
servo/components/style/gecko/conversions.rs
servo/components/style/values/computed/border.rs
testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-margin-003.html.ini
testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-circle-010.html.ini
testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-ellipse-000.html.ini
testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-ellipse-001.html.ini
testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-ellipse-002.html.ini
testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-ellipse-004.html.ini
testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-ellipse-009.html.ini
testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-ellipse-010.html.ini
testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-ellipse-011.html.ini
testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-inset-008.html.ini
testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-inset-009.html.ini
testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-polygon-006.html.ini
testing/web-platform/tests/css/css-shapes/shape-outside/values/support/parsing-utils.js
--- a/layout/style/ServoCSSPropList.mako.py
+++ b/layout/style/ServoCSSPropList.mako.py
@@ -92,16 +92,18 @@ SERIALIZED_PREDEFINED_TYPES = [
     "Length",
     "LengthOrPercentage",
     "NonNegativeLength",
     "NonNegativeLengthOrPercentage",
     "ListStyleType",
     "OffsetPath",
     "Opacity",
     "Resize",
+    "basic_shape::ClippingShape",
+    "basic_shape::FloatAreaShape",
     "url::ImageUrlOrNone",
 ]
 
 def serialized_by_servo(prop):
     # If the property requires layout information, no such luck.
     if "GETCS_NEEDS_LAYOUT_FLUSH" in prop.flags:
         return False
     # No shorthands yet.
--- a/layout/style/nsCSSProps.cpp
+++ b/layout/style/nsCSSProps.cpp
@@ -691,27 +691,16 @@ static_assert(ArrayLength(nsCSSProps::kF
               ArrayLength(nsCSSProps::kWidthKTable) + 1,
               "kFlexBasisKTable should have the same entries as "
               "kWidthKTable, plus one more for 'content'");
 
 // Specific keyword tables for XUL.properties
 
 // keyword tables for SVG properties
 
-const KTableEntry nsCSSProps::kClipPathGeometryBoxKTable[] = {
-  { eCSSKeyword_content_box, StyleGeometryBox::ContentBox },
-  { eCSSKeyword_padding_box, StyleGeometryBox::PaddingBox },
-  { eCSSKeyword_border_box, StyleGeometryBox::BorderBox },
-  { eCSSKeyword_margin_box, StyleGeometryBox::MarginBox },
-  { eCSSKeyword_fill_box, StyleGeometryBox::FillBox },
-  { eCSSKeyword_stroke_box, StyleGeometryBox::StrokeBox },
-  { eCSSKeyword_view_box, StyleGeometryBox::ViewBox },
-  { eCSSKeyword_UNKNOWN, -1 }
-};
-
 const KTableEntry nsCSSProps::kShapeRadiusKTable[] = {
   { eCSSKeyword_closest_side, StyleShapeRadius::ClosestSide },
   { eCSSKeyword_farthest_side, StyleShapeRadius::FarthestSide },
   { eCSSKeyword_UNKNOWN, -1 }
 };
 
 const KTableEntry nsCSSProps::kFilterFunctionKTable[] = {
   { eCSSKeyword_blur, NS_STYLE_FILTER_BLUR },
@@ -722,24 +711,16 @@ const KTableEntry nsCSSProps::kFilterFun
   { eCSSKeyword_opacity, NS_STYLE_FILTER_OPACITY },
   { eCSSKeyword_saturate, NS_STYLE_FILTER_SATURATE },
   { eCSSKeyword_sepia, NS_STYLE_FILTER_SEPIA },
   { eCSSKeyword_hue_rotate, NS_STYLE_FILTER_HUE_ROTATE },
   { eCSSKeyword_drop_shadow, NS_STYLE_FILTER_DROP_SHADOW },
   { eCSSKeyword_UNKNOWN, -1 }
 };
 
-const KTableEntry nsCSSProps::kShapeOutsideShapeBoxKTable[] = {
-  { eCSSKeyword_content_box, StyleGeometryBox::ContentBox },
-  { eCSSKeyword_padding_box, StyleGeometryBox::PaddingBox },
-  { eCSSKeyword_border_box, StyleGeometryBox::BorderBox },
-  { eCSSKeyword_margin_box, StyleGeometryBox::MarginBox },
-  { eCSSKeyword_UNKNOWN, -1 }
-};
-
 int32_t
 nsCSSProps::FindIndexOfKeyword(nsCSSKeyword aKeyword,
                                const KTableEntry aTable[])
 {
   if (eCSSKeyword_UNKNOWN == aKeyword) {
     // NOTE: we can have keyword tables where eCSSKeyword_UNKNOWN is used
     // not only for the sentinel, but also in the middle of the table to
     // knock out values that have been disabled by prefs, e.g. kDisplayKTable.
--- a/layout/style/nsCSSProps.h
+++ b/layout/style/nsCSSProps.h
@@ -308,20 +308,18 @@ public:
 
   // Keyword/Enum value tables
   static const KTableEntry kTransformStyleKTable[];
   static const KTableEntry kImageLayerRepeatKTable[];
   // Not const because we modify its entries when the pref
   // "layout.css.background-clip.text" changes:
   static const KTableEntry kBorderImageRepeatKTable[];
   static const KTableEntry kBorderStyleKTable[];
-  static const KTableEntry kClipPathGeometryBoxKTable[];
   static const KTableEntry kShapeRadiusKTable[];
   static const KTableEntry kFilterFunctionKTable[];
-  static const KTableEntry kShapeOutsideShapeBoxKTable[];
   static const KTableEntry kBoxShadowTypeKTable[];
   static const KTableEntry kCursorKTable[];
   // Not const because we modify its entries when various
   // "layout.css.*.enabled" prefs changes:
   static KTableEntry kDisplayKTable[];
   // -- tables for parsing the {align,justify}-{content,items,self} properties --
   static const KTableEntry kAlignAllKeywords[];
   static const KTableEntry kAlignOverflowPosition[]; // <overflow-position>
--- a/layout/style/nsComputedDOMStyle.cpp
+++ b/layout/style/nsComputedDOMStyle.cpp
@@ -5014,68 +5014,16 @@ nsComputedDOMStyle::CreatePrimitiveValue
 
   RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue;
   val->SetIdent(nsCSSProps::ValueToKeywordEnum(aReferenceBox, aBoxKeywordTable));
   valueList->AppendCSSValue(val.forget());
 
   return valueList.forget();
 }
 
-already_AddRefed<CSSValue>
-nsComputedDOMStyle::GetShapeSource(
-  const StyleShapeSource& aShapeSource,
-  const KTableEntry aBoxKeywordTable[])
-{
-  switch (aShapeSource.GetType()) {
-    case StyleShapeSourceType::Shape:
-      return CreatePrimitiveValueForShapeSource(aShapeSource.GetBasicShape(),
-                                                aShapeSource.GetReferenceBox(),
-                                                aBoxKeywordTable);
-    case StyleShapeSourceType::Box:
-      return CreatePrimitiveValueForShapeSource(nullptr,
-                                                aShapeSource.GetReferenceBox(),
-                                                aBoxKeywordTable);
-    case StyleShapeSourceType::URL: {
-      RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue;
-      SetValueToURLValue(aShapeSource.GetURL(), val);
-      return val.forget();
-    }
-    case StyleShapeSourceType::None: {
-      RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue;
-      val->SetIdent(eCSSKeyword_none);
-      return val.forget();
-    }
-    case StyleShapeSourceType::Image: {
-      RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue;
-      SetValueToStyleImage(*aShapeSource.GetShapeImage(), val);
-      return val.forget();
-    }
-    case StyleShapeSourceType::Path: {
-      // Bug 1246764: we have to support this for clip-path. For now, no one
-      // uses this.
-      MOZ_ASSERT_UNREACHABLE("Unexpected SVG Path type.");
-    }
-  }
-  return nullptr;
-}
-
-already_AddRefed<CSSValue>
-nsComputedDOMStyle::DoGetClipPath()
-{
-  return GetShapeSource(StyleSVGReset()->mClipPath,
-                        nsCSSProps::kClipPathGeometryBoxKTable);
-}
-
-already_AddRefed<CSSValue>
-nsComputedDOMStyle::DoGetShapeOutside()
-{
-  return GetShapeSource(StyleDisplay()->mShapeOutside,
-                        nsCSSProps::kShapeOutsideShapeBoxKTable);
-}
-
 void
 nsComputedDOMStyle::SetCssTextToCoord(nsAString& aCssText,
                                       const nsStyleCoord& aCoord,
                                       bool aClampNegativeCalc)
 {
   RefPtr<nsROCSSPrimitiveValue> value = new nsROCSSPrimitiveValue;
   SetValueToCoord(value, aCoord, aClampNegativeCalc);
   value->GetCssText(aCssText);
--- a/layout/style/nsComputedDOMStyle.h
+++ b/layout/style/nsComputedDOMStyle.h
@@ -409,17 +409,16 @@ private:
   already_AddRefed<CSSValue> DoGetScrollSnapTypeX();
   already_AddRefed<CSSValue> DoGetScrollSnapTypeY();
   already_AddRefed<CSSValue> DoGetScrollSnapPointsX();
   already_AddRefed<CSSValue> DoGetScrollSnapPointsY();
   already_AddRefed<CSSValue> DoGetScrollSnapDestination();
   already_AddRefed<CSSValue> DoGetScrollSnapCoordinate();
   already_AddRefed<CSSValue> DoGetScrollbarFaceColor();
   already_AddRefed<CSSValue> DoGetScrollbarTrackColor();
-  already_AddRefed<CSSValue> DoGetShapeOutside();
 
   /* User interface properties */
   already_AddRefed<CSSValue> DoGetCaretColor();
   already_AddRefed<CSSValue> DoGetCursor();
   already_AddRefed<CSSValue> DoGetForceBrokenImageIcon();
 
   /* Column properties */
   already_AddRefed<CSSValue> DoGetColumnCount();
@@ -469,17 +468,16 @@ private:
 
   already_AddRefed<CSSValue> DoGetFillOpacity();
   already_AddRefed<CSSValue> DoGetStrokeMiterlimit();
   already_AddRefed<CSSValue> DoGetStrokeOpacity();
 
 
 
 
-  already_AddRefed<CSSValue> DoGetClipPath();
   already_AddRefed<CSSValue> DoGetFilter();
   already_AddRefed<CSSValue> DoGetPaintOrder();
 
 
   // For working around a MSVC bug. See related comment in
   // GenerateComputedDOMStyleGenerated.py.
   already_AddRefed<CSSValue> DummyGetter();
 
@@ -554,20 +552,16 @@ private:
   bool GetFrameBorderRectHeight(nscoord& aHeight);
 
   /* Helper functions for computing and serializing a nsStyleCoord. */
   void SetCssTextToCoord(nsAString& aCssText, const nsStyleCoord& aCoord,
                          bool aClampNegativeCalc);
   already_AddRefed<CSSValue> CreatePrimitiveValueForStyleFilter(
     const nsStyleFilter& aStyleFilter);
 
-  already_AddRefed<CSSValue>
-  GetShapeSource(const mozilla::StyleShapeSource& aShapeSource,
-                 const KTableEntry aBoxKeywordTable[]);
-
   template<typename ReferenceBox>
   already_AddRefed<CSSValue>
   CreatePrimitiveValueForShapeSource(
     const mozilla::UniquePtr<mozilla::StyleBasicShape>& aStyleBasicShape,
     ReferenceBox aReferenceBox,
     const KTableEntry aBoxKeywordTable[]);
 
   // Helper function for computing basic shape styles.
--- a/layout/style/test/test_transitions_per_property.html
+++ b/layout/style/test/test_transitions_per_property.html
@@ -724,26 +724,26 @@ const basicShapesTests = [
   },
   { start: "inset(100% 100% 100% 100% round 100% 100%) border-box",
     end: "inset(500% 500% 500% 500% round 500% 500%) border-box",
     expected: ["inset", ["200% round 200%"], "border-box"] },
   // matching functions with calc() values
   { start: "circle(calc(80px + 20px))", end: "circle(calc(200px + 300px))",
     expected: ["circle", ["200px at 50% 50%"]] },
   { start: "circle(calc(80% + 20%))", end: "circle(calc(200% + 300%))",
-    expected: ["circle", ["calc(0px + 200%) at 50% 50%"]] },
+    expected: ["circle", ["200% at 50% 50%"]] },
   { start: "circle(calc(10px + 20%))", end: "circle(calc(50px + 40%))",
-    expected: ["circle", ["calc(20px + 25%) at 50% 50%"]] },
+    expected: ["circle", ["calc(25% + 20px) at 50% 50%"]] },
   // matching functions with interpolation between percentage/pixel values
   { start: "circle(20px)", end: "circle(100%)",
-    expected: ["circle", ["calc(15px + 25%) at 50% 50%"]] },
+    expected: ["circle", ["calc(25% + 15px) at 50% 50%"]] },
   { start: "ellipse(100% 100px at 8px 20%) border-box",
     end:   "ellipse(40px 4%    at 80% 60px) border-box",
-    expected: ["ellipse", ["calc(10px + 75%) calc(75px + 1%) at " +
-                           "calc(6px + 20%) calc(15px + 15%)"],
+    expected: ["ellipse", ["calc(75% + 10px) calc(1% + 75px) at " +
+                           "calc(20% + 6px) calc(15% + 15px)"],
                "border-box"] },
   // no interpolation for keywords
   { start: "circle()", end: "circle(50px)",
     expected: ["circle", ["50px at 50% 50%"]] },
   { start: "circle(closest-side)", end: "circle(500px)",
     expected: ["circle", ["500px at 50% 50%"]] },
   { start: "circle(farthest-side)", end: "circle(500px)",
     expected: ["circle", ["500px at 50% 50%"]] },
@@ -757,17 +757,17 @@ const basicShapesTests = [
     expected: ["ellipse", ["500px 500px at 50% 50%"]] },
   { start: "ellipse(farthest-side closest-side)", end: "ellipse(500px 500px)",
     expected: ["ellipse", ["500px 500px at 50% 50%"]] },
   { start: "ellipse(farthest-side farthest-side)", end: "ellipse(500px 500px)",
     expected: ["ellipse", ["500px 500px at 50% 50%"]] },
   { start: "ellipse(500px 500px)", end: "ellipse(farthest-side farthest-side)",
     expected: ["ellipse", ["farthest-side farthest-side at 50% 50%"]] },
   { start: "ellipse(500px 500px)", end: "ellipse(closest-side closest-side)",
-    expected: ["ellipse", ["closest-side closest-side at 50% 50%"]] },
+    expected: ["ellipse", ["at 50% 50%"]] },
   // mismatching boxes
   { start: "circle(100px at 100px 100px) border-box",
     end: "circle(500px at 500px 500px) content-box",
     expected: ["circle", ["500px at 500px 500px"], "content-box"]
   },
   { start: "ellipse(100px 100px at 100px 100px) border-box",
     end: "ellipse(500px 500px at 500px 500px) content-box",
     expected: ["ellipse", ["500px 500px at 500px 500px"], "content-box"]
--- a/servo/components/style/gecko/conversions.rs
+++ b/servo/components/style/gecko/conversions.rs
@@ -14,16 +14,17 @@ use gecko_bindings::bindings;
 use gecko_bindings::structs::{self, nsCSSUnit, nsStyleCoord_CalcValue};
 use gecko_bindings::structs::{nsresult, SheetType, nsStyleImage};
 use gecko_bindings::sugar::ns_style_coord::{CoordData, CoordDataMut, CoordDataValue};
 use std::f32::consts::PI;
 use stylesheets::{Origin, RulesMutateError};
 use values::computed::{Angle, CalcLengthOrPercentage, Gradient, Image};
 use values::computed::{Integer, LengthOrPercentage, LengthOrPercentageOrAuto};
 use values::computed::{Percentage, TextAlign};
+use values::computed::image::LineDirection;
 use values::computed::url::ComputedImageUrl;
 use values::generics::box_::VerticalAlign;
 use values::generics::grid::{TrackListValue, TrackSize};
 use values::generics::image::{CompatMode, GradientItem, Image as GenericImage};
 use values::generics::rect::Rect;
 
 impl From<CalcLengthOrPercentage> for nsStyleCoord_CalcValue {
     fn from(other: CalcLengthOrPercentage) -> nsStyleCoord_CalcValue {
@@ -134,16 +135,78 @@ impl Angle {
             nsCSSUnit::eCSSUnit_Grad => Angle::Grad(value),
             nsCSSUnit::eCSSUnit_Radian => Angle::Rad(value),
             nsCSSUnit::eCSSUnit_Turn => Angle::Turn(value),
             _ => panic!("Unexpected unit for angle"),
         }
     }
 }
 
+fn line_direction(
+    horizontal: LengthOrPercentage,
+    vertical: LengthOrPercentage,
+) -> LineDirection {
+    use values::computed::position::Position;
+    use values::specified::position::{X, Y};
+
+    let horizontal_percentage = match horizontal {
+        LengthOrPercentage::Percentage(percentage) => Some(percentage.0),
+        _ => None,
+    };
+
+    let vertical_percentage = match vertical {
+        LengthOrPercentage::Percentage(percentage) => Some(percentage.0),
+        _ => None,
+    };
+
+    let horizontal_as_corner = horizontal_percentage.and_then(|percentage| {
+        if percentage == 0.0 {
+            Some(X::Left)
+        } else if percentage == 1.0 {
+            Some(X::Right)
+        } else {
+            None
+        }
+    });
+
+    let vertical_as_corner = vertical_percentage.and_then(|percentage| {
+        if percentage == 0.0 {
+            Some(Y::Top)
+        } else if percentage == 1.0 {
+            Some(Y::Bottom)
+        } else {
+            None
+        }
+    });
+
+    if let (Some(hc), Some(vc)) = (horizontal_as_corner, vertical_as_corner) {
+        return LineDirection::Corner(hc, vc)
+    }
+
+    if let Some(hc) = horizontal_as_corner {
+        if vertical_percentage == Some(0.5) {
+            return LineDirection::Horizontal(hc)
+        }
+    }
+
+    if let Some(vc) = vertical_as_corner {
+        if horizontal_percentage == Some(0.5) {
+            return LineDirection::Vertical(vc)
+        }
+    }
+
+    LineDirection::MozPosition(
+        Some(Position {
+            horizontal,
+            vertical,
+        }),
+        None,
+    )
+}
+
 impl nsStyleImage {
     /// Set a given Servo `Image` value into this `nsStyleImage`.
     pub fn set(&mut self, image: Image) {
         match image {
             GenericImage::Gradient(boxed_gradient) => self.set_gradient(*boxed_gradient),
             GenericImage::Url(ref url) => unsafe {
                 bindings::Gecko_SetLayerImageImageValue(self, url.0.image_value.get());
             },
@@ -169,23 +232,23 @@ impl nsStyleImage {
                 }
             },
             GenericImage::Element(ref element) => unsafe {
                 bindings::Gecko_SetImageElement(self, element.as_ptr());
             },
         }
     }
 
+    // FIXME(emilio): This is really complex, we should use cbindgen for this.
     fn set_gradient(&mut self, gradient: Gradient) {
         use self::structs::NS_STYLE_GRADIENT_SIZE_CLOSEST_CORNER as CLOSEST_CORNER;
         use self::structs::NS_STYLE_GRADIENT_SIZE_CLOSEST_SIDE as CLOSEST_SIDE;
         use self::structs::NS_STYLE_GRADIENT_SIZE_FARTHEST_CORNER as FARTHEST_CORNER;
         use self::structs::NS_STYLE_GRADIENT_SIZE_FARTHEST_SIDE as FARTHEST_SIDE;
         use self::structs::nsStyleCoord;
-        use values::computed::image::LineDirection;
         use values::generics::image::{Circle, Ellipse, EndingShape, GradientKind, ShapeExtent};
         use values::specified::position::{X, Y};
 
         let stop_count = gradient.items.len();
         if stop_count >= ::std::u32::MAX as usize {
             warn!("stylo: Prevented overflow due to too many gradient stops");
             return;
         }
@@ -432,70 +495,35 @@ impl nsStyleImage {
         ComputedImageUrl::from_image_request(image_request)
     }
 
     unsafe fn get_gradient(self: &nsStyleImage) -> Box<Gradient> {
         use self::structs::NS_STYLE_GRADIENT_SIZE_CLOSEST_CORNER as CLOSEST_CORNER;
         use self::structs::NS_STYLE_GRADIENT_SIZE_CLOSEST_SIDE as CLOSEST_SIDE;
         use self::structs::NS_STYLE_GRADIENT_SIZE_FARTHEST_CORNER as FARTHEST_CORNER;
         use self::structs::NS_STYLE_GRADIENT_SIZE_FARTHEST_SIDE as FARTHEST_SIDE;
-        use values::computed::{Length, LengthOrPercentage};
+        use values::computed::Length;
         use values::computed::image::LineDirection;
         use values::computed::position::Position;
         use values::generics::image::{Circle, ColorStop, CompatMode, Ellipse};
         use values::generics::image::{EndingShape, GradientKind, ShapeExtent};
-        use values::specified::position::{X, Y};
 
         let gecko_gradient = bindings::Gecko_GetGradientImageValue(self)
             .as_ref()
             .unwrap();
         let angle = Angle::from_gecko_style_coord(&gecko_gradient.mAngle);
         let horizontal_style = LengthOrPercentage::from_gecko_style_coord(&gecko_gradient.mBgPosX);
         let vertical_style = LengthOrPercentage::from_gecko_style_coord(&gecko_gradient.mBgPosY);
 
         let kind = match gecko_gradient.mShape as u32 {
             structs::NS_STYLE_GRADIENT_SHAPE_LINEAR => {
                 let line_direction = match (angle, horizontal_style, vertical_style) {
                     (Some(a), None, None) => LineDirection::Angle(a),
                     (None, Some(horizontal), Some(vertical)) => {
-                        let horizontal_as_corner = match horizontal {
-                            LengthOrPercentage::Percentage(percentage) => {
-                                if percentage.0 == 0.0 {
-                                    Some(X::Left)
-                                } else if percentage.0 == 1.0 {
-                                    Some(X::Right)
-                                } else {
-                                    None
-                                }
-                            },
-                            _ => None,
-                        };
-                        let vertical_as_corner = match vertical {
-                            LengthOrPercentage::Percentage(percentage) => {
-                                if percentage.0 == 0.0 {
-                                    Some(Y::Top)
-                                } else if percentage.0 == 1.0 {
-                                    Some(Y::Bottom)
-                                } else {
-                                    None
-                                }
-                            },
-                            _ => None,
-                        };
-
-                        match (horizontal_as_corner, vertical_as_corner) {
-                            (Some(hc), Some(vc)) => LineDirection::Corner(hc, vc),
-                            _ => LineDirection::MozPosition(
-                                Some(Position {
-                                    horizontal,
-                                    vertical,
-                                }),
-                                None,
-                            ),
-                        }
+                        line_direction(horizontal, vertical)
                     },
                     (Some(_), Some(horizontal), Some(vertical)) => LineDirection::MozPosition(
                         Some(Position {
                             horizontal,
                             vertical,
                         }),
                         angle,
                     ),
@@ -738,27 +766,25 @@ pub mod basic_shape {
     impl<'a> From<&'a StyleBasicShape> for BasicShape {
         fn from(other: &'a StyleBasicShape) -> Self {
             match other.mType {
                 StyleBasicShapeType::Inset => {
                     let t = LengthOrPercentage::from_gecko_style_coord(&other.mCoordinates[0]);
                     let r = LengthOrPercentage::from_gecko_style_coord(&other.mCoordinates[1]);
                     let b = LengthOrPercentage::from_gecko_style_coord(&other.mCoordinates[2]);
                     let l = LengthOrPercentage::from_gecko_style_coord(&other.mCoordinates[3]);
-                    let round = (&other.mRadius).into();
+                    let round: BorderRadius = (&other.mRadius).into();
+                    let round = if round.all_zero() { None } else { Some(round) };
                     let rect = Rect::new(
                         t.expect("inset() offset should be a length, percentage, or calc value"),
                         r.expect("inset() offset should be a length, percentage, or calc value"),
                         b.expect("inset() offset should be a length, percentage, or calc value"),
                         l.expect("inset() offset should be a length, percentage, or calc value"),
                     );
-                    GenericBasicShape::Inset(InsetRect {
-                        rect: rect,
-                        round: Some(round),
-                    })
+                    GenericBasicShape::Inset(InsetRect { rect, round })
                 },
                 StyleBasicShapeType::Circle => GenericBasicShape::Circle(Circle {
                     radius: (&other.mCoordinates[0]).into(),
                     position: (&other.mPosition).into(),
                 }),
                 StyleBasicShapeType::Ellipse => GenericBasicShape::Ellipse(Ellipse {
                     semiaxis_x: (&other.mCoordinates[0]).into(),
                     semiaxis_y: (&other.mCoordinates[1]).into(),
--- a/servo/components/style/values/computed/border.rs
+++ b/servo/components/style/values/computed/border.rs
@@ -76,8 +76,24 @@ impl BorderCornerRadius {
 
 impl ToAnimatedZero for BorderCornerRadius {
     #[inline]
     fn to_animated_zero(&self) -> Result<Self, ()> {
         // FIXME(nox): Why?
         Err(())
     }
 }
+
+impl BorderRadius {
+    /// Returns whether all the values are `0px`.
+    pub fn all_zero(&self) -> bool {
+        fn all(corner: &BorderCornerRadius) -> bool {
+            fn is_zero(l: &LengthOrPercentage) -> bool {
+                *l == LengthOrPercentage::zero()
+            }
+            is_zero(corner.0.width()) && is_zero(corner.0.height())
+        }
+        all(&self.top_left) &&
+            all(&self.top_right) &&
+            all(&self.bottom_left) &&
+            all(&self.bottom_right)
+    }
+}
--- a/testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-margin-003.html.ini
+++ b/testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-margin-003.html.ini
@@ -1,7 +1,4 @@
 [shape-margin-003.html]
   [calc((12.5%*6 + 10in) / 4) - inline style]
     expected: FAIL
 
-  [calc((12.5%*6 + 10in) / 4) - computed style]
-    expected: FAIL
-
--- a/testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-circle-010.html.ini
+++ b/testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-circle-010.html.ini
@@ -1,13 +1,4 @@
 [shape-outside-circle-010.html]
   [circle(calc((12.5%*6 + 10in) / 4)) - inline style]
     expected: FAIL
 
-  [circle(calc(30%)) - computed style]
-    expected: FAIL
-
-  [circle(calc(100%/4)) - computed style]
-    expected: FAIL
-
-  [circle(calc(25%*3)) - computed style]
-    expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-ellipse-000.html.ini
+++ /dev/null
@@ -1,7 +0,0 @@
-[shape-outside-ellipse-000.html]
-  [No arguments - computed]
-    expected: FAIL
-
-  [Position argument - computed]
-    expected: FAIL
-
--- a/testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-ellipse-001.html.ini
+++ b/testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-ellipse-001.html.ini
@@ -15,19 +15,16 @@
     expected: FAIL
 
   [ellipse(25px closest-side) - inline]
     expected: FAIL
 
   [ellipse(farthest-side closest-side) - inline]
     expected: FAIL
 
-  [ellipse() - computed]
-    expected: FAIL
-
   [ellipse(50px) - computed]
     expected: FAIL
 
   [ellipse(50%) - computed]
     expected: FAIL
 
   [ellipse(closest-side) - computed]
     expected: FAIL
@@ -36,14 +33,11 @@
     expected: FAIL
 
   [ellipse(25% closest-side) - computed]
     expected: FAIL
 
   [ellipse(25px closest-side) - computed]
     expected: FAIL
 
-  [ellipse(closest-side closest-side) - computed]
-    expected: FAIL
-
   [ellipse(farthest-side closest-side) - computed]
     expected: FAIL
 
--- a/testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-ellipse-002.html.ini
+++ b/testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-ellipse-002.html.ini
@@ -1,354 +1,36 @@
 [shape-outside-ellipse-002.html]
-  [ellipse(at 50%) serializes as ellipse(at 50% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at 50px) serializes as ellipse(at 50px 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at 50% 50%) serializes as ellipse(at 50% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at 50% 50px) serializes as ellipse(at 50% 50px) - computed]
-    expected: FAIL
-
-  [ellipse(at 50px 50%) serializes as ellipse(at 50px 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at 50px 50px) serializes as ellipse(at 50px 50px) - computed]
-    expected: FAIL
-
-  [ellipse(at left) serializes as ellipse(at 0% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at top) serializes as ellipse(at 50% 0%) - computed]
-    expected: FAIL
-
-  [ellipse(at right) serializes as ellipse(at 100% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at bottom) serializes as ellipse(at 50% 100%) - computed]
-    expected: FAIL
-
-  [ellipse(at center) serializes as ellipse(at 50% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at left top) serializes as ellipse(at 0% 0%) - computed]
-    expected: FAIL
-
-  [ellipse(at left bottom) serializes as ellipse(at 0% 100%) - computed]
-    expected: FAIL
-
-  [ellipse(at left center) serializes as ellipse(at 0% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at top left) serializes as ellipse(at 0% 0%) - computed]
-    expected: FAIL
-
-  [ellipse(at top right) serializes as ellipse(at 100% 0%) - computed]
-    expected: FAIL
-
-  [ellipse(at top center) serializes as ellipse(at 50% 0%) - computed]
-    expected: FAIL
-
-  [ellipse(at right top) serializes as ellipse(at 100% 0%) - computed]
-    expected: FAIL
-
-  [ellipse(at right bottom) serializes as ellipse(at 100% 100%) - computed]
-    expected: FAIL
-
-  [ellipse(at right center) serializes as ellipse(at 100% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at bottom left) serializes as ellipse(at 0% 100%) - computed]
-    expected: FAIL
-
-  [ellipse(at bottom right) serializes as ellipse(at 100% 100%) - computed]
-    expected: FAIL
-
-  [ellipse(at bottom center) serializes as ellipse(at 50% 100%) - computed]
-    expected: FAIL
-
-  [ellipse(at center top) serializes as ellipse(at 50% 0%) - computed]
-    expected: FAIL
-
-  [ellipse(at center left) serializes as ellipse(at 0% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at center right) serializes as ellipse(at 100% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at center bottom) serializes as ellipse(at 50% 100%) - computed]
-    expected: FAIL
-
-  [ellipse(at center center) serializes as ellipse(at 50% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at left 50%) serializes as ellipse(at 0% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at left 50px) serializes as ellipse(at 0% 50px) - computed]
-    expected: FAIL
-
-  [ellipse(at 50% top) serializes as ellipse(at 50% 0%) - computed]
-    expected: FAIL
-
-  [ellipse(at 50px top) serializes as ellipse(at 50px 0%) - computed]
-    expected: FAIL
-
-  [ellipse(at right 80%) serializes as ellipse(at 100% 80%) - computed]
-    expected: FAIL
-
-  [ellipse(at right 80px) serializes as ellipse(at 100% 80px) - computed]
-    expected: FAIL
-
-  [ellipse(at 70% bottom) serializes as ellipse(at 70% 100%) - computed]
-    expected: FAIL
-
-  [ellipse(at 70px bottom) serializes as ellipse(at 70px 100%) - computed]
-    expected: FAIL
-
-  [ellipse(at center 60%) serializes as ellipse(at 50% 60%) - computed]
-    expected: FAIL
-
-  [ellipse(at center 60px) serializes as ellipse(at 50% 60px) - computed]
-    expected: FAIL
-
-  [ellipse(at 60% center) serializes as ellipse(at 60% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at 60px center) serializes as ellipse(at 60px 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at center top 50%) serializes as ellipse(at 50% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at center top 50px) serializes as ellipse(at 50% 50px) - computed]
-    expected: FAIL
-
-  [ellipse(at center left 50%) serializes as ellipse(at 50% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at center left 50px) serializes as ellipse(at 50px 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at center right 70%) serializes as ellipse(at 30% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at center right 70px) serializes as ellipse(at right 70px top 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at center bottom 70%) serializes as ellipse(at 50% 30%) - computed]
-    expected: FAIL
-
-  [ellipse(at center bottom 70px) serializes as ellipse(at left 50% bottom 70px) - computed]
-    expected: FAIL
-
-  [ellipse(at left top 50%) serializes as ellipse(at 0% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at left top 50px) serializes as ellipse(at 0% 50px) - computed]
-    expected: FAIL
-
-  [ellipse(at left bottom 70%) serializes as ellipse(at 0% 30%) - computed]
-    expected: FAIL
-
-  [ellipse(at left bottom 70px) serializes as ellipse(at left 0% bottom 70px) - computed]
-    expected: FAIL
-
-  [ellipse(at top left 50%) serializes as ellipse(at 50% 0%) - computed]
-    expected: FAIL
-
-  [ellipse(at top left 50px) serializes as ellipse(at 50px 0%) - computed]
-    expected: FAIL
-
-  [ellipse(at top right 70%) serializes as ellipse(at 30% 0%) - computed]
-    expected: FAIL
-
-  [ellipse(at top right 70px) serializes as ellipse(at right 70px top 0%) - computed]
-    expected: FAIL
-
-  [ellipse(at bottom left 50%) serializes as ellipse(at 50% 100%) - computed]
-    expected: FAIL
-
-  [ellipse(at bottom left 50px) serializes as ellipse(at 50px 100%) - computed]
-    expected: FAIL
-
-  [ellipse(at bottom right 70%) serializes as ellipse(at 30% 100%) - computed]
-    expected: FAIL
-
-  [ellipse(at bottom right 70px) serializes as ellipse(at right 70px top 100%) - computed]
-    expected: FAIL
-
-  [ellipse(at right bottom 70%) serializes as ellipse(at 100% 30%) - computed]
-    expected: FAIL
-
-  [ellipse(at right bottom 70px) serializes as ellipse(at left 100% bottom 70px) - computed]
-    expected: FAIL
-
-  [ellipse(at right top 50%) serializes as ellipse(at 100% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at right top 50px) serializes as ellipse(at 100% 50px) - computed]
-    expected: FAIL
-
-  [ellipse(at left 50% center) serializes as ellipse(at 50% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at left 50px center) serializes as ellipse(at 50px 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at left 50% top) serializes as ellipse(at 50% 0%) - computed]
-    expected: FAIL
-
-  [ellipse(at left 50px top) serializes as ellipse(at 50px 0%) - computed]
-    expected: FAIL
-
-  [ellipse(at left 50% bottom) serializes as ellipse(at 50% 100%) - computed]
-    expected: FAIL
-
-  [ellipse(at left 50px bottom) serializes as ellipse(at 50px 100%) - computed]
-    expected: FAIL
-
-  [ellipse(at top 50% center) serializes as ellipse(at 50% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at top 50px center) serializes as ellipse(at 50% 50px) - computed]
-    expected: FAIL
-
-  [ellipse(at top 50% left) serializes as ellipse(at 0% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at top 50px left) serializes as ellipse(at 0% 50px) - computed]
-    expected: FAIL
-
-  [ellipse(at top 50% right) serializes as ellipse(at 100% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at top 50px right) serializes as ellipse(at 100% 50px) - computed]
-    expected: FAIL
-
-  [ellipse(at bottom 70% center) serializes as ellipse(at 50% 30%) - computed]
-    expected: FAIL
-
-  [ellipse(at bottom 70px center) serializes as ellipse(at left 50% bottom 70px) - computed]
-    expected: FAIL
-
-  [ellipse(at bottom 70% left) serializes as ellipse(at 0% 30%) - computed]
-    expected: FAIL
-
-  [ellipse(at bottom 70px left) serializes as ellipse(at left 0% bottom 70px) - computed]
-    expected: FAIL
-
-  [ellipse(at bottom 70% right) serializes as ellipse(at 100% 30%) - computed]
-    expected: FAIL
-
-  [ellipse(at bottom 70px right) serializes as ellipse(at left 100% bottom 70px) - computed]
-    expected: FAIL
-
-  [ellipse(at right 80% center) serializes as ellipse(at 20% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at right 80px center) serializes as ellipse(at right 80px top 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at right 80% bottom) serializes as ellipse(at 20% 100%) - computed]
-    expected: FAIL
-
-  [ellipse(at right 80px bottom) serializes as ellipse(at right 80px top 100%) - computed]
-    expected: FAIL
-
-  [ellipse(at right 80% top) serializes as ellipse(at 20% 0%) - computed]
-    expected: FAIL
-
-  [ellipse(at right 80px top) serializes as ellipse(at right 80px top 0%) - computed]
-    expected: FAIL
-
-  [ellipse(at left 50% top 50%) serializes as ellipse(at 50% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at left 50% top 50px) serializes as ellipse(at 50% 50px) - computed]
-    expected: FAIL
-
-  [ellipse(at left 50% bottom 70%) serializes as ellipse(at 50% 30%) - computed]
-    expected: FAIL
-
   [ellipse(at left 50% bottom 70px) serializes as ellipse(at left 50% bottom 70px) - computed]
     expected: FAIL
 
-  [ellipse(at left 50px top 50%) serializes as ellipse(at 50px 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at left 50px top 50px) serializes as ellipse(at 50px 50px) - computed]
-    expected: FAIL
-
-  [ellipse(at left 50px bottom 70%) serializes as ellipse(at 50px 30%) - computed]
-    expected: FAIL
-
   [ellipse(at left 50px bottom 70px) serializes as ellipse(at left 50px bottom 70px) - computed]
     expected: FAIL
 
-  [ellipse(at top 50% left 50%) serializes as ellipse(at 50% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at top 50% left 50px) serializes as ellipse(at 50px 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at top 50% right 80%) serializes as ellipse(at 20% 50%) - computed]
-    expected: FAIL
-
   [ellipse(at top 50% right 80px) serializes as ellipse(at right 80px top 50%) - computed]
     expected: FAIL
 
-  [ellipse(at top 50px left 50%) serializes as ellipse(at 50% 50px) - computed]
-    expected: FAIL
-
-  [ellipse(at top 50px left 50px) serializes as ellipse(at 50px 50px) - computed]
-    expected: FAIL
-
-  [ellipse(at top 50px right 80%) serializes as ellipse(at 20% 50px) - computed]
-    expected: FAIL
-
   [ellipse(at top 50px right 80px) serializes as ellipse(at right 80px top 50px) - computed]
     expected: FAIL
 
-  [ellipse(at bottom 70% left 50%) serializes as ellipse(at 50% 30%) - computed]
-    expected: FAIL
-
-  [ellipse(at bottom 70% left 50px) serializes as ellipse(at 50px 30%) - computed]
-    expected: FAIL
-
-  [ellipse(at bottom 70% right 80%) serializes as ellipse(at 20% 30%) - computed]
-    expected: FAIL
-
   [ellipse(at bottom 70% right 80px) serializes as ellipse(at right 80px top 30%) - computed]
     expected: FAIL
 
   [ellipse(at bottom 70px left 50%) serializes as ellipse(at left 50% bottom 70px) - computed]
     expected: FAIL
 
   [ellipse(at bottom 70px left 50px) serializes as ellipse(at left 50px bottom 70px) - computed]
     expected: FAIL
 
   [ellipse(at bottom 70px right 80%) serializes as ellipse(at left 20% bottom 70px) - computed]
     expected: FAIL
 
   [ellipse(at bottom 70px right 80px) serializes as ellipse(at right 80px bottom 70px) - computed]
     expected: FAIL
 
-  [ellipse(at right 80% top 50%) serializes as ellipse(at 20% 50%) - computed]
-    expected: FAIL
-
-  [ellipse(at right 80% top 50px) serializes as ellipse(at 20% 50px) - computed]
-    expected: FAIL
-
-  [ellipse(at right 80% bottom 70%) serializes as ellipse(at 20% 30%) - computed]
-    expected: FAIL
-
   [ellipse(at right 80% bottom 70px) serializes as ellipse(at left 20% bottom 70px) - computed]
     expected: FAIL
 
   [ellipse(at right 80px top 50%) serializes as ellipse(at right 80px top 50%) - computed]
     expected: FAIL
 
   [ellipse(at right 80px top 50px) serializes as ellipse(at right 80px top 50px) - computed]
     expected: FAIL
--- a/testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-ellipse-004.html.ini
+++ b/testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-ellipse-004.html.ini
@@ -1,2263 +1,724 @@
 [shape-outside-ellipse-004.html]
-  [test unit (computed): cm - ellipse(at 50cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at 50% 50cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at 50cm 50%)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at 50cm 50cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at left 50cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at 50cm top)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at right 80cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at 70cm bottom)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at center 60cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at 60cm center)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at center top 50cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at center left 50cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at center right 70cm)]
+  [test unit (computed): vmax - ellipse(at bottom 70vmax left 50vmax)]
     expected: FAIL
 
-  [test unit (computed): cm - ellipse(at center bottom 70cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at left top 50cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at left bottom 70cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at top left 50cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at top right 70cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at bottom left 50cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at bottom right 70cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at right bottom 70cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at right top 50cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at left 50cm center)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at left 50cm top)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at left 50cm bottom)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at top 50cm center)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at top 50cm left)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at top 50cm right)]
+  [test unit (computed): pt - ellipse(at left 50pt bottom 70pt)]
     expected: FAIL
 
-  [test unit (computed): cm - ellipse(at bottom 70cm center)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at bottom 70cm left)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at bottom 70cm right)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at right 80cm center)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at right 80cm bottom)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at right 80cm top)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at left 50% top 50cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at left 50% bottom 70cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at left 50cm top 50%)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at left 50cm top 50cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at left 50cm bottom 70%)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at left 50cm bottom 70cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at top 50% left 50cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at top 50% right 80cm)]
+  [test unit (computed): rem - ellipse(at bottom 70rem left 50%)]
     expected: FAIL
 
-  [test unit (computed): cm - ellipse(at top 50cm left 50%)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at top 50cm left 50cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at top 50cm right 80%)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at top 50cm right 80cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at bottom 70% left 50cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at bottom 70% right 80cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at bottom 70cm left 50%)]
+  [test unit (computed): mm - ellipse(at left 50mm bottom 70%)]
     expected: FAIL
 
-  [test unit (computed): cm - ellipse(at bottom 70cm left 50cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at bottom 70cm right 80%)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at bottom 70cm right 80cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at right 80% top 50cm)]
+  [test unit (computed): vmin - ellipse(at left 50vmin bottom 70vmin)]
     expected: FAIL
 
-  [test unit (computed): cm - ellipse(at right 80% bottom 70cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at right 80cm top 50%)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at right 80cm top 50cm)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at right 80cm bottom 70%)]
-    expected: FAIL
-
-  [test unit (computed): cm - ellipse(at right 80cm bottom 70cm)]
+  [test unit (computed): vmax - ellipse(at bottom 70vmax left 50%)]
     expected: FAIL
 
   [test unit (computed): mm - ellipse(at 50mm)]
     expected: FAIL
 
-  [test unit (computed): mm - ellipse(at 50% 50mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at 50mm 50%)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at 50mm 50mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at left 50mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at 50mm top)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at right 80mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at 70mm bottom)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at center 60mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at 60mm center)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at center top 50mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at center left 50mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at center right 70mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at center bottom 70mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at left top 50mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at left bottom 70mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at top left 50mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at top right 70mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at bottom left 50mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at bottom right 70mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at right bottom 70mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at right top 50mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at left 50mm center)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at left 50mm top)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at left 50mm bottom)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at top 50mm center)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at top 50mm left)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at top 50mm right)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at bottom 70mm center)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at bottom 70mm left)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at bottom 70mm right)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at right 80mm center)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at right 80mm bottom)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at right 80mm top)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at left 50% top 50mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at left 50% bottom 70mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at left 50mm top 50%)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at left 50mm top 50mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at left 50mm bottom 70%)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at left 50mm bottom 70mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at top 50% left 50mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at top 50% right 80mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at top 50mm left 50%)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at top 50mm left 50mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at top 50mm right 80%)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at top 50mm right 80mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at bottom 70% left 50mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at bottom 70% right 80mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at bottom 70mm left 50%)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at bottom 70mm left 50mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at bottom 70mm right 80%)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at bottom 70mm right 80mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at right 80% top 50mm)]
+  [test unit (computed): cm - ellipse(at right 80cm bottom 70cm)]
     expected: FAIL
 
   [test unit (computed): mm - ellipse(at right 80% bottom 70mm)]
     expected: FAIL
 
-  [test unit (computed): mm - ellipse(at right 80mm top 50%)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at right 80mm top 50mm)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at right 80mm bottom 70%)]
-    expected: FAIL
-
-  [test unit (computed): mm - ellipse(at right 80mm bottom 70mm)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at 50in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at 50% 50in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at 50in 50%)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at 50in 50in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at left 50in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at 50in top)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at right 80in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at 70in bottom)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at center 60in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at 60in center)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at center top 50in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at center left 50in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at center right 70in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at center bottom 70in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at left top 50in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at left bottom 70in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at top left 50in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at top right 70in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at bottom left 50in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at bottom right 70in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at right bottom 70in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at right top 50in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at left 50in center)]
+  [test unit (computed): vmin - ellipse(at right 80vmin top 50vmin)]
     expected: FAIL
 
-  [test unit (computed): in - ellipse(at left 50in top)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at left 50in bottom)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at top 50in center)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at top 50in left)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at top 50in right)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at bottom 70in center)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at bottom 70in left)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at bottom 70in right)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at right 80in center)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at right 80in bottom)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at right 80in top)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at left 50% top 50in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at left 50% bottom 70in)]
+  [test unit (computed): mm - ellipse(at top 50mm right 80mm)]
     expected: FAIL
 
-  [test unit (computed): in - ellipse(at left 50in top 50%)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at left 50in top 50in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at left 50in bottom 70%)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at left 50in bottom 70in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at top 50% left 50in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at top 50% right 80in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at top 50in left 50%)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at top 50in left 50in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at top 50in right 80%)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at top 50in right 80in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at bottom 70% left 50in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at bottom 70% right 80in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at bottom 70in left 50%)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at bottom 70in left 50in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at bottom 70in right 80%)]
+  [test unit (computed): ch - ellipse(at left 50ch bottom 70ch)]
     expected: FAIL
 
-  [test unit (computed): in - ellipse(at bottom 70in right 80in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at right 80% top 50in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at right 80% bottom 70in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at right 80in top 50%)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at right 80in top 50in)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at right 80in bottom 70%)]
-    expected: FAIL
-
-  [test unit (computed): in - ellipse(at right 80in bottom 70in)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at 50pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at 50% 50pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at 50pt 50%)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at 50pt 50pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at left 50pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at 50pt top)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at right 80pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at 70pt bottom)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at center 60pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at 60pt center)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at center top 50pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at center left 50pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at center right 70pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at center bottom 70pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at left top 50pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at left bottom 70pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at top left 50pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at top right 70pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at bottom left 50pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at bottom right 70pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at right bottom 70pt)]
+  [test unit (computed): vmin - ellipse(at bottom 70% right 80vmin)]
     expected: FAIL
 
-  [test unit (computed): pt - ellipse(at right top 50pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at left 50pt center)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at left 50pt top)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at left 50pt bottom)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at top 50pt center)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at top 50pt left)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at top 50pt right)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at bottom 70pt center)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at bottom 70pt left)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at bottom 70pt right)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at right 80pt center)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at right 80pt bottom)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at right 80pt top)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at left 50% top 50pt)]
+  [test unit (computed): rem - ellipse(at top 50rem right 80rem)]
     expected: FAIL
 
-  [test unit (computed): pt - ellipse(at left 50% bottom 70pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at left 50pt top 50%)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at left 50pt top 50pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at left 50pt bottom 70%)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at left 50pt bottom 70pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at top 50% left 50pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at top 50% right 80pt)]
+  [test unit (computed): vmin - ellipse(at top 50% right 80vmin)]
     expected: FAIL
 
-  [test unit (computed): pt - ellipse(at top 50pt left 50%)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at top 50pt left 50pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at top 50pt right 80%)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at top 50pt right 80pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at bottom 70% left 50pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at bottom 70% right 80pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at bottom 70pt left 50%)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at bottom 70pt left 50pt)]
+  [test unit (computed): cm - ellipse(at bottom 70% right 80cm)]
     expected: FAIL
 
   [test unit (computed): pt - ellipse(at bottom 70pt right 80%)]
     expected: FAIL
 
-  [test unit (computed): pt - ellipse(at bottom 70pt right 80pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at right 80% top 50pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at right 80% bottom 70pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at right 80pt top 50%)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at right 80pt top 50pt)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at right 80pt bottom 70%)]
-    expected: FAIL
-
-  [test unit (computed): pt - ellipse(at right 80pt bottom 70pt)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at 50pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at 50% 50pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at 50pc 50%)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at 50pc 50pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at left 50pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at 50pc top)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at right 80pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at 70pc bottom)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at center 60pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at 60pc center)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at center top 50pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at center left 50pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at center right 70pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at center bottom 70pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at left top 50pc)]
+  [test unit (computed): cm - ellipse(at bottom 70cm right 80%)]
     expected: FAIL
 
-  [test unit (computed): pc - ellipse(at left bottom 70pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at top left 50pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at top right 70pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at bottom left 50pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at bottom right 70pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at right bottom 70pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at right top 50pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at left 50pc center)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at left 50pc top)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at left 50pc bottom)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at top 50pc center)]
+  [test unit (computed): vh - ellipse(at right 80vh bottom 70vh)]
     expected: FAIL
 
-  [test unit (computed): pc - ellipse(at top 50pc left)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at top 50pc right)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at bottom 70pc center)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at bottom 70pc left)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at bottom 70pc right)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at right 80pc center)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at right 80pc bottom)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at right 80pc top)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at left 50% top 50pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at left 50% bottom 70pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at left 50pc top 50%)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at left 50pc top 50pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at left 50pc bottom 70%)]
+  [test unit (computed): mm - ellipse(at top 50mm right 80%)]
     expected: FAIL
 
   [test unit (computed): pc - ellipse(at left 50pc bottom 70pc)]
     expected: FAIL
 
-  [test unit (computed): pc - ellipse(at top 50% left 50pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at top 50% right 80pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at top 50pc left 50%)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at top 50pc left 50pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at top 50pc right 80%)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at top 50pc right 80pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at bottom 70% left 50pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at bottom 70% right 80pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at bottom 70pc left 50%)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at bottom 70pc left 50pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at bottom 70pc right 80%)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at bottom 70pc right 80pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at right 80% top 50pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at right 80% bottom 70pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at right 80pc top 50%)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at right 80pc top 50pc)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at right 80pc bottom 70%)]
-    expected: FAIL
-
-  [test unit (computed): pc - ellipse(at right 80pc bottom 70pc)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at 50em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at 50% 50em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at 50em 50%)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at 50em 50em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at left 50em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at 50em top)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at right 80em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at 70em bottom)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at center 60em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at 60em center)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at center top 50em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at center left 50em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at center right 70em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at center bottom 70em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at left top 50em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at left bottom 70em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at top left 50em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at top right 70em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at bottom left 50em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at bottom right 70em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at right bottom 70em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at right top 50em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at left 50em center)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at left 50em top)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at left 50em bottom)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at top 50em center)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at top 50em left)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at top 50em right)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at bottom 70em center)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at bottom 70em left)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at bottom 70em right)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at right 80em center)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at right 80em bottom)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at right 80em top)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at left 50% top 50em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at left 50% bottom 70em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at left 50em top 50%)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at left 50em top 50em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at left 50em bottom 70%)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at left 50em bottom 70em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at top 50% left 50em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at top 50% right 80em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at top 50em left 50%)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at top 50em left 50em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at top 50em right 80%)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at top 50em right 80em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at bottom 70% left 50em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at bottom 70% right 80em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at bottom 70em left 50%)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at bottom 70em left 50em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at bottom 70em right 80%)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at bottom 70em right 80em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at right 80% top 50em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at right 80% bottom 70em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at right 80em top 50%)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at right 80em top 50em)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at right 80em bottom 70%)]
-    expected: FAIL
-
-  [test unit (computed): em - ellipse(at right 80em bottom 70em)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at 50ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at 50% 50ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at 50ex 50%)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at 50ex 50ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at left 50ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at 50ex top)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at right 80ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at 70ex bottom)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at center 60ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at 60ex center)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at center top 50ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at center left 50ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at center right 70ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at center bottom 70ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at left top 50ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at left bottom 70ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at top left 50ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at top right 70ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at bottom left 50ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at bottom right 70ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at right bottom 70ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at right top 50ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at left 50ex center)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at left 50ex top)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at left 50ex bottom)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at top 50ex center)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at top 50ex left)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at top 50ex right)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at bottom 70ex center)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at bottom 70ex left)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at bottom 70ex right)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at right 80ex center)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at right 80ex bottom)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at right 80ex top)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at left 50% top 50ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at left 50% bottom 70ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at left 50ex top 50%)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at left 50ex top 50ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at left 50ex bottom 70%)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at left 50ex bottom 70ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at top 50% left 50ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at top 50% right 80ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at top 50ex left 50%)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at top 50ex left 50ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at top 50ex right 80%)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at top 50ex right 80ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at bottom 70% left 50ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at bottom 70% right 80ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at bottom 70ex left 50%)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at bottom 70ex left 50ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at bottom 70ex right 80%)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at bottom 70ex right 80ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at right 80% top 50ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at right 80% bottom 70ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at right 80ex top 50%)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at right 80ex top 50ex)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at right 80ex bottom 70%)]
-    expected: FAIL
-
-  [test unit (computed): ex - ellipse(at right 80ex bottom 70ex)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at 50ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at 50% 50ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at 50ch 50%)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at 50ch 50ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at left 50ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at 50ch top)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at right 80ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at 70ch bottom)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at center 60ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at 60ch center)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at center top 50ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at center left 50ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at center right 70ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at center bottom 70ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at left top 50ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at left bottom 70ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at top left 50ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at top right 70ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at bottom left 50ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at bottom right 70ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at right bottom 70ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at right top 50ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at left 50ch center)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at left 50ch top)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at left 50ch bottom)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at top 50ch center)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at top 50ch left)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at top 50ch right)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at bottom 70ch center)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at bottom 70ch left)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at bottom 70ch right)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at right 80ch center)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at right 80ch bottom)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at right 80ch top)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at left 50% top 50ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at left 50% bottom 70ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at left 50ch top 50%)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at left 50ch top 50ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at left 50ch bottom 70%)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at left 50ch bottom 70ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at top 50% left 50ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at top 50% right 80ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at top 50ch left 50%)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at top 50ch left 50ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at top 50ch right 80%)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at top 50ch right 80ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at bottom 70% left 50ch)]
-    expected: FAIL
-
   [test unit (computed): ch - ellipse(at bottom 70% right 80ch)]
     expected: FAIL
 
-  [test unit (computed): ch - ellipse(at bottom 70ch left 50%)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at bottom 70ch left 50ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at bottom 70ch right 80%)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at bottom 70ch right 80ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at right 80% top 50ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at right 80% bottom 70ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at right 80ch top 50%)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at right 80ch top 50ch)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at right 80ch bottom 70%)]
-    expected: FAIL
-
-  [test unit (computed): ch - ellipse(at right 80ch bottom 70ch)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at 50rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at 50% 50rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at 50rem 50%)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at 50rem 50rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at left 50rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at 50rem top)]
+  [test unit (computed): cm - ellipse(at 50% 50cm)]
     expected: FAIL
 
-  [test unit (computed): rem - ellipse(at right 80rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at 70rem bottom)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at center 60rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at 60rem center)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at center top 50rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at center left 50rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at center right 70rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at center bottom 70rem)]
+  [test unit (computed): mm - ellipse(at top 50% right 80mm)]
     expected: FAIL
 
-  [test unit (computed): rem - ellipse(at left top 50rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at left bottom 70rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at top left 50rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at top right 70rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at bottom left 50rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at bottom right 70rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at right bottom 70rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at right top 50rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at left 50rem center)]
+  [test unit (computed): mm - ellipse(at center 60mm)]
     expected: FAIL
 
-  [test unit (computed): rem - ellipse(at left 50rem top)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at left 50rem bottom)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at top 50rem center)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at top 50rem left)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at top 50rem right)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at bottom 70rem center)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at bottom 70rem left)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at bottom 70rem right)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at right 80rem center)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at right 80rem bottom)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at right 80rem top)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at left 50% top 50rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at left 50% bottom 70rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at left 50rem top 50%)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at left 50rem top 50rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at left 50rem bottom 70%)]
+  [test unit (computed): vh - ellipse(at right 80vh bottom 70%)]
     expected: FAIL
 
-  [test unit (computed): rem - ellipse(at left 50rem bottom 70rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at top 50% left 50rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at top 50% right 80rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at top 50rem left 50%)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at top 50rem left 50rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at top 50rem right 80%)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at top 50rem right 80rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at bottom 70% left 50rem)]
+  [test unit (computed): vmax - ellipse(at right 80vmax top 50vmax)]
     expected: FAIL
 
-  [test unit (computed): rem - ellipse(at bottom 70% right 80rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at bottom 70rem left 50%)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at bottom 70rem left 50rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at bottom 70rem right 80%)]
+  [test unit (computed): in - ellipse(at left 50in bottom 70in)]
     expected: FAIL
 
-  [test unit (computed): rem - ellipse(at bottom 70rem right 80rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at right 80% top 50rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at right 80% bottom 70rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at right 80rem top 50%)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at right 80rem top 50rem)]
-    expected: FAIL
-
-  [test unit (computed): rem - ellipse(at right 80rem bottom 70%)]
+  [test unit (computed): pt - ellipse(at right 80pt top 50pt)]
     expected: FAIL
 
   [test unit (computed): rem - ellipse(at right 80rem bottom 70rem)]
     expected: FAIL
 
-  [test unit (computed): vw - ellipse(at 50vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at 50% 50vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at 50vw 50%)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at 50vw 50vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at left 50vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at 50vw top)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at right 80vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at 70vw bottom)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at center 60vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at 60vw center)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at center top 50vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at center left 50vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at center right 70vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at center bottom 70vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at left top 50vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at left bottom 70vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at top left 50vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at top right 70vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at bottom left 50vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at bottom right 70vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at right bottom 70vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at right top 50vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at left 50vw center)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at left 50vw top)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at left 50vw bottom)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at top 50vw center)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at top 50vw left)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at top 50vw right)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at bottom 70vw center)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at bottom 70vw left)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at bottom 70vw right)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at right 80vw center)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at right 80vw bottom)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at right 80vw top)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at left 50% top 50vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at left 50% bottom 70vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at left 50vw top 50%)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at left 50vw top 50vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at left 50vw bottom 70%)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at left 50vw bottom 70vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at top 50% left 50vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at top 50% right 80vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at top 50vw left 50%)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at top 50vw left 50vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at top 50vw right 80%)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at top 50vw right 80vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at bottom 70% left 50vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at bottom 70% right 80vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at bottom 70vw left 50%)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at bottom 70vw left 50vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at bottom 70vw right 80%)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at bottom 70vw right 80vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at right 80% top 50vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at right 80% bottom 70vw)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at right 80vw top 50%)]
-    expected: FAIL
-
-  [test unit (computed): vw - ellipse(at right 80vw top 50vw)]
-    expected: FAIL
-
   [test unit (computed): vw - ellipse(at right 80vw bottom 70%)]
     expected: FAIL
 
   [test unit (computed): vw - ellipse(at right 80vw bottom 70vw)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at 50vh)]
+  [test unit (computed): ch - ellipse(at bottom 70ch left 50ch)]
+    expected: FAIL
+
+  [test unit (computed): vmin - ellipse(at left 50% bottom 70vmin)]
+    expected: FAIL
+
+  [test unit (computed): mm - ellipse(at 50mm 50mm)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at 50% 50vh)]
+  [test unit (computed): cm - ellipse(at right 80cm top 50%)]
+    expected: FAIL
+
+  [test unit (computed): ex - ellipse(at left 50% bottom 70ex)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at 50vh 50%)]
+  [test unit (computed): cm - ellipse(at top 50% left 50cm)]
+    expected: FAIL
+
+  [test unit (computed): vmin - ellipse(at right 80% bottom 70vmin)]
+    expected: FAIL
+
+  [test unit (computed): em - ellipse(at right 80% bottom 70em)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at 50vh 50vh)]
+  [test unit (computed): in - ellipse(at bottom 70in left 50%)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at left 50vh)]
+  [test unit (computed): mm - ellipse(at top 50% left 50mm)]
+    expected: FAIL
+
+  [test unit (computed): ex - ellipse(at right 80ex)]
+    expected: FAIL
+
+  [test unit (computed): em - ellipse(at top 50em right 80em)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at 50vh top)]
+  [test unit (computed): ex - ellipse(at 50% 50ex)]
+    expected: FAIL
+
+  [test unit (computed): vw - ellipse(at bottom 70vw left 50%)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at right 80vh)]
+  [test unit (computed): cm - ellipse(at 50cm)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at 70vh bottom)]
+  [test unit (computed): vmax - ellipse(at right 80% bottom 70vmax)]
+    expected: FAIL
+
+  [test unit (computed): cm - ellipse(at center 60cm)]
+    expected: FAIL
+
+  [test unit (computed): in - ellipse(at bottom 70in right 80in)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at center 60vh)]
+  [test unit (computed): ex - ellipse(at left 50ex top 50%)]
+    expected: FAIL
+
+  [test unit (computed): cm - ellipse(at left 50cm bottom 70cm)]
+    expected: FAIL
+
+  [test unit (computed): pt - ellipse(at right 80% bottom 70pt)]
+    expected: FAIL
+
+  [test unit (computed): cm - ellipse(at left 50cm)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at 60vh center)]
+  [test unit (computed): ex - ellipse(at 70ex bottom)]
+    expected: FAIL
+
+  [test unit (computed): ex - ellipse(at right 80% top 50ex)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at center top 50vh)]
+  [test unit (computed): pc - ellipse(at left 50% bottom 70pc)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at center left 50vh)]
+  [test unit (computed): em - ellipse(at right 80em bottom 70em)]
+    expected: FAIL
+
+  [test unit (computed): vw - ellipse(at bottom 70vw left 50vw)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at center right 70vh)]
+  [test unit (computed): cm - ellipse(at 50cm 50cm)]
+    expected: FAIL
+
+  [test unit (computed): rem - ellipse(at right 80rem top 50rem)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at center bottom 70vh)]
+  [test unit (computed): ex - ellipse(at right 80ex bottom 70ex)]
+    expected: FAIL
+
+  [test unit (computed): ch - ellipse(at bottom 70ch right 80ch)]
+    expected: FAIL
+
+  [test unit (computed): vw - ellipse(at right 80vw top 50%)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at left top 50vh)]
+  [test unit (computed): ex - ellipse(at bottom 70ex right 80ex)]
+    expected: FAIL
+
+  [test unit (computed): mm - ellipse(at right 80mm bottom 70%)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at left bottom 70vh)]
+  [test unit (computed): mm - ellipse(at bottom 70% left 50mm)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at top left 50vh)]
+  [test unit (computed): vmin - ellipse(at bottom 70vmin right 80vmin)]
+    expected: FAIL
+
+  [test unit (computed): mm - ellipse(at right 80mm)]
+    expected: FAIL
+
+  [test unit (computed): in - ellipse(at right 80in top 50in)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at top right 70vh)]
+  [test unit (computed): vmax - ellipse(at top 50% right 80vmax)]
+    expected: FAIL
+
+  [test unit (computed): pt - ellipse(at left 50% bottom 70pt)]
+    expected: FAIL
+
+  [test unit (computed): pc - ellipse(at bottom 70pc left 50%)]
+    expected: FAIL
+
+  [test unit (computed): ex - ellipse(at bottom 70ex right 80%)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at bottom left 50vh)]
+  [test unit (computed): vmax - ellipse(at bottom 70% right 80vmax)]
+    expected: FAIL
+
+  [test unit (computed): mm - ellipse(at left 50% top 50mm)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at bottom right 70vh)]
+  [test unit (computed): mm - ellipse(at bottom 70mm left 50%)]
+    expected: FAIL
+
+  [test unit (computed): mm - ellipse(at 60mm center)]
+    expected: FAIL
+
+  [test unit (computed): pc - ellipse(at bottom 70pc left 50pc)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at right bottom 70vh)]
+  [test unit (computed): vw - ellipse(at right 80% bottom 70vw)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at right top 50vh)]
+  [test unit (computed): in - ellipse(at right 80in bottom 70%)]
+    expected: FAIL
+
+  [test unit (computed): ex - ellipse(at 50ex 50%)]
+    expected: FAIL
+
+  [test unit (computed): em - ellipse(at top 50% right 80em)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at left 50vh center)]
+  [test unit (computed): pt - ellipse(at right 80pt bottom 70%)]
+    expected: FAIL
+
+  [test unit (computed): mm - ellipse(at bottom 70mm right 80%)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at left 50vh top)]
+  [test unit (computed): cm - ellipse(at top 50% right 80cm)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at left 50vh bottom)]
+  [test unit (computed): cm - ellipse(at right 80% bottom 70cm)]
+    expected: FAIL
+
+  [test unit (computed): vh - ellipse(at bottom 70% right 80vh)]
+    expected: FAIL
+
+  [test unit (computed): ex - ellipse(at 60ex center)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at top 50vh center)]
+  [test unit (computed): ch - ellipse(at bottom 70ch right 80%)]
+    expected: FAIL
+
+  [test unit (computed): mm - ellipse(at right 80mm top 50mm)]
+    expected: FAIL
+
+  [test unit (computed): vw - ellipse(at left 50vw bottom 70vw)]
+    expected: FAIL
+
+  [test unit (computed): pt - ellipse(at bottom 70pt left 50%)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at top 50vh left)]
+  [test unit (computed): em - ellipse(at bottom 70% right 80em)]
+    expected: FAIL
+
+  [test unit (computed): pc - ellipse(at top 50pc right 80pc)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at top 50vh right)]
+  [test unit (computed): vh - ellipse(at top 50vh right 80vh)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at bottom 70vh center)]
+  [test unit (computed): pc - ellipse(at right 80pc top 50%)]
+    expected: FAIL
+
+  [test unit (computed): in - ellipse(at right 80in top 50%)]
+    expected: FAIL
+
+  [test unit (computed): cm - ellipse(at right 80cm top 50cm)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at bottom 70vh left)]
+  [test unit (computed): ch - ellipse(at right 80ch top 50%)]
+    expected: FAIL
+
+  [test unit (computed): pt - ellipse(at top 50pt right 80pt)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at bottom 70vh right)]
+  [test unit (computed): cm - ellipse(at top 50cm left 50cm)]
+    expected: FAIL
+
+  [test unit (computed): mm - ellipse(at top 50mm left 50mm)]
+    expected: FAIL
+
+  [test unit (computed): cm - ellipse(at bottom 70% left 50cm)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at right 80vh center)]
+  [test unit (computed): ex - ellipse(at top 50% right 80ex)]
+    expected: FAIL
+
+  [test unit (computed): cm - ellipse(at left 50% top 50cm)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at right 80vh bottom)]
+  [test unit (computed): cm - ellipse(at right 80cm)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at right 80vh top)]
+  [test unit (computed): rem - ellipse(at left 50% bottom 70rem)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at left 50% top 50vh)]
+  [test unit (computed): cm - ellipse(at 70cm bottom)]
+    expected: FAIL
+
+  [test unit (computed): mm - ellipse(at bottom 70% right 80mm)]
     expected: FAIL
 
   [test unit (computed): vh - ellipse(at left 50% bottom 70vh)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at left 50vh top 50%)]
+  [test unit (computed): vw - ellipse(at left 50% bottom 70vw)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at left 50vh top 50vh)]
+  [test unit (computed): mm - ellipse(at bottom 70mm right 80mm)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at left 50vh bottom 70%)]
+  [test unit (computed): em - ellipse(at left 50em bottom 70em)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at left 50vh bottom 70vh)]
+  [test unit (computed): vmax - ellipse(at right 80vmax bottom 70vmax)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at top 50% left 50vh)]
+  [test unit (computed): in - ellipse(at left 50% bottom 70in)]
+    expected: FAIL
+
+  [test unit (computed): vh - ellipse(at bottom 70vh left 50vh)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at top 50% right 80vh)]
+  [test unit (computed): ex - ellipse(at bottom 70% left 50ex)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at top 50vh left 50%)]
+  [test unit (computed): pt - ellipse(at bottom 70pt left 50pt)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at top 50vh left 50vh)]
+  [test unit (computed): ex - ellipse(at top 50ex left 50%)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at top 50vh right 80%)]
+  [test unit (computed): cm - ellipse(at bottom 70cm left 50%)]
+    expected: FAIL
+
+  [test unit (computed): vw - ellipse(at top 50vw right 80vw)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at top 50vh right 80vh)]
+  [test unit (computed): vmin - ellipse(at right 80vmin bottom 70%)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at bottom 70% left 50vh)]
+  [test unit (computed): cm - ellipse(at left 50cm top 50cm)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at bottom 70% right 80vh)]
+  [test unit (computed): cm - ellipse(at right 80cm bottom 70%)]
     expected: FAIL
 
   [test unit (computed): vh - ellipse(at bottom 70vh left 50%)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at bottom 70vh left 50vh)]
-    expected: FAIL
-
-  [test unit (computed): vh - ellipse(at bottom 70vh right 80%)]
-    expected: FAIL
-
-  [test unit (computed): vh - ellipse(at bottom 70vh right 80vh)]
-    expected: FAIL
-
-  [test unit (computed): vh - ellipse(at right 80% top 50vh)]
-    expected: FAIL
-
-  [test unit (computed): vh - ellipse(at right 80% bottom 70vh)]
-    expected: FAIL
-
-  [test unit (computed): vh - ellipse(at right 80vh top 50%)]
+  [test unit (computed): ch - ellipse(at right 80ch bottom 70%)]
     expected: FAIL
 
   [test unit (computed): vh - ellipse(at right 80vh top 50vh)]
     expected: FAIL
 
-  [test unit (computed): vh - ellipse(at right 80vh bottom 70%)]
-    expected: FAIL
-
-  [test unit (computed): vh - ellipse(at right 80vh bottom 70vh)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at 50vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at 50% 50vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at 50vmin 50%)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at 50vmin 50vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at left 50vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at 50vmin top)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at right 80vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at 70vmin bottom)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at center 60vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at 60vmin center)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at center top 50vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at center left 50vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at center right 70vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at center bottom 70vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at left top 50vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at left bottom 70vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at top left 50vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at top right 70vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at bottom left 50vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at bottom right 70vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at right bottom 70vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at right top 50vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at left 50vmin center)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at left 50vmin top)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at left 50vmin bottom)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at top 50vmin center)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at top 50vmin left)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at top 50vmin right)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at bottom 70vmin center)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at bottom 70vmin left)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at bottom 70vmin right)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at right 80vmin center)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at right 80vmin bottom)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at right 80vmin top)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at left 50% top 50vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at left 50% bottom 70vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at left 50vmin top 50%)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at left 50vmin top 50vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at left 50vmin bottom 70%)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at left 50vmin bottom 70vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at top 50% left 50vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at top 50% right 80vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at top 50vmin left 50%)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at top 50vmin left 50vmin)]
-    expected: FAIL
-
-  [test unit (computed): vmin - ellipse(at top 50vmin right 80%)]
-    expected: FAIL
-
   [test unit (computed): vmin - ellipse(at top 50vmin right 80vmin)]
     expected: FAIL
 
-  [test unit (computed): vmin - ellipse(at bottom 70% left 50vmin)]
+  [test unit (computed): cm - ellipse(at left 50% bottom 70cm)]
+    expected: FAIL
+
+  [test unit (computed): em - ellipse(at bottom 70em right 80%)]
+    expected: FAIL
+
+  [test unit (computed): vw - ellipse(at bottom 70% right 80vw)]
     expected: FAIL
 
-  [test unit (computed): vmin - ellipse(at bottom 70% right 80vmin)]
+  [test unit (computed): in - ellipse(at right 80% bottom 70in)]
+    expected: FAIL
+
+  [test unit (computed): rem - ellipse(at right 80% bottom 70rem)]
     expected: FAIL
 
-  [test unit (computed): vmin - ellipse(at bottom 70vmin left 50%)]
+  [test unit (computed): rem - ellipse(at bottom 70% right 80rem)]
+    expected: FAIL
+
+  [test unit (computed): pc - ellipse(at bottom 70pc right 80pc)]
+    expected: FAIL
+
+  [test unit (computed): vh - ellipse(at top 50% right 80vh)]
     expected: FAIL
 
-  [test unit (computed): vmin - ellipse(at bottom 70vmin left 50vmin)]
+  [test unit (computed): cm - ellipse(at right 80% top 50cm)]
     expected: FAIL
 
-  [test unit (computed): vmin - ellipse(at bottom 70vmin right 80%)]
+  [test unit (computed): em - ellipse(at bottom 70em right 80em)]
+    expected: FAIL
+
+  [test unit (computed): ch - ellipse(at right 80% bottom 70ch)]
+    expected: FAIL
+
+  [test unit (computed): ch - ellipse(at left 50% bottom 70ch)]
     expected: FAIL
 
-  [test unit (computed): vmin - ellipse(at bottom 70vmin right 80vmin)]
+  [test unit (computed): cm - ellipse(at 50cm 50%)]
+    expected: FAIL
+
+  [test unit (computed): vw - ellipse(at bottom 70vw right 80%)]
     expected: FAIL
 
-  [test unit (computed): vmin - ellipse(at right 80% top 50vmin)]
+  [test unit (computed): rem - ellipse(at right 80rem bottom 70%)]
     expected: FAIL
 
-  [test unit (computed): vmin - ellipse(at right 80% bottom 70vmin)]
+  [test unit (computed): vmax - ellipse(at left 50vmax bottom 70vmax)]
+    expected: FAIL
+
+  [test unit (computed): mm - ellipse(at right 80mm top 50%)]
     expected: FAIL
 
   [test unit (computed): vmin - ellipse(at right 80vmin top 50%)]
     expected: FAIL
 
-  [test unit (computed): vmin - ellipse(at right 80vmin top 50vmin)]
+  [test unit (computed): vh - ellipse(at right 80% bottom 70vh)]
+    expected: FAIL
+
+  [test unit (computed): vmax - ellipse(at left 50% bottom 70vmax)]
+    expected: FAIL
+
+  [test unit (computed): ex - ellipse(at top 50ex left 50ex)]
+    expected: FAIL
+
+  [test unit (computed): ex - ellipse(at bottom 70ex left 50ex)]
+    expected: FAIL
+
+  [test unit (computed): mm - ellipse(at 50mm top)]
+    expected: FAIL
+
+  [test unit (computed): rem - ellipse(at left 50rem bottom 70rem)]
+    expected: FAIL
+
+  [test unit (computed): vh - ellipse(at bottom 70vh right 80%)]
+    expected: FAIL
+
+  [test unit (computed): vmax - ellipse(at bottom 70vmax right 80vmax)]
+    expected: FAIL
+
+  [test unit (computed): in - ellipse(at top 50in right 80in)]
+    expected: FAIL
+
+  [test unit (computed): mm - ellipse(at 50% 50mm)]
+    expected: FAIL
+
+  [test unit (computed): mm - ellipse(at top 50mm left 50%)]
+    expected: FAIL
+
+  [test unit (computed): em - ellipse(at right 80em top 50%)]
+    expected: FAIL
+
+  [test unit (computed): pc - ellipse(at right 80pc bottom 70%)]
+    expected: FAIL
+
+  [test unit (computed): vh - ellipse(at left 50vh bottom 70vh)]
+    expected: FAIL
+
+  [test unit (computed): mm - ellipse(at left 50% bottom 70mm)]
+    expected: FAIL
+
+  [test unit (computed): in - ellipse(at right 80in bottom 70in)]
+    expected: FAIL
+
+  [test unit (computed): pt - ellipse(at bottom 70pt right 80pt)]
+    expected: FAIL
+
+  [test unit (computed): ex - ellipse(at center 60ex)]
+    expected: FAIL
+
+  [test unit (computed): pc - ellipse(at bottom 70pc right 80%)]
+    expected: FAIL
+
+  [test unit (computed): ex - ellipse(at 50ex top)]
+    expected: FAIL
+
+  [test unit (computed): ch - ellipse(at right 80ch top 50ch)]
+    expected: FAIL
+
+  [test unit (computed): vw - ellipse(at bottom 70vw right 80vw)]
+    expected: FAIL
+
+  [test unit (computed): ex - ellipse(at 50ex)]
     expected: FAIL
 
-  [test unit (computed): vmin - ellipse(at right 80vmin bottom 70%)]
+  [test unit (computed): pt - ellipse(at bottom 70% right 80pt)]
+    expected: FAIL
+
+  [test unit (computed): rem - ellipse(at top 50% right 80rem)]
+    expected: FAIL
+
+  [test unit (computed): em - ellipse(at right 80em bottom 70%)]
+    expected: FAIL
+
+  [test unit (computed): pc - ellipse(at right 80pc bottom 70pc)]
+    expected: FAIL
+
+  [test unit (computed): ch - ellipse(at right 80ch bottom 70ch)]
+    expected: FAIL
+
+  [test unit (computed): in - ellipse(at bottom 70in left 50in)]
+    expected: FAIL
+
+  [test unit (computed): vw - ellipse(at right 80vw top 50vw)]
+    expected: FAIL
+
+  [test unit (computed): pc - ellipse(at right 80pc top 50pc)]
+    expected: FAIL
+
+  [test unit (computed): em - ellipse(at bottom 70em left 50%)]
+    expected: FAIL
+
+  [test unit (computed): ex - ellipse(at right 80ex bottom 70%)]
+    expected: FAIL
+
+  [test unit (computed): ex - ellipse(at left 50ex bottom 70%)]
+    expected: FAIL
+
+  [test unit (computed): vh - ellipse(at bottom 70vh right 80vh)]
+    expected: FAIL
+
+  [test unit (computed): vmax - ellipse(at right 80vmax bottom 70%)]
+    expected: FAIL
+
+  [test unit (computed): em - ellipse(at right 80em top 50em)]
+    expected: FAIL
+
+  [test unit (computed): ex - ellipse(at right 80% bottom 70ex)]
+    expected: FAIL
+
+  [test unit (computed): cm - ellipse(at 60cm center)]
+    expected: FAIL
+
+  [test unit (computed): em - ellipse(at bottom 70em left 50em)]
+    expected: FAIL
+
+  [test unit (computed): pt - ellipse(at right 80pt bottom 70pt)]
+    expected: FAIL
+
+  [test unit (computed): ex - ellipse(at left 50ex bottom 70ex)]
+    expected: FAIL
+
+  [test unit (computed): pt - ellipse(at top 50% right 80pt)]
+    expected: FAIL
+
+  [test unit (computed): in - ellipse(at bottom 70% right 80in)]
+    expected: FAIL
+
+  [test unit (computed): ex - ellipse(at top 50% left 50ex)]
+    expected: FAIL
+
+  [test unit (computed): ex - ellipse(at right 80ex top 50%)]
+    expected: FAIL
+
+  [test unit (computed): vmin - ellipse(at bottom 70vmin left 50%)]
+    expected: FAIL
+
+  [test unit (computed): mm - ellipse(at left 50mm top 50%)]
     expected: FAIL
 
   [test unit (computed): vmin - ellipse(at right 80vmin bottom 70vmin)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at 50vmax)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at 50% 50vmax)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at 50vmax 50%)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at 50vmax 50vmax)]
+  [test unit (computed): em - ellipse(at left 50% bottom 70em)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at left 50vmax)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at 50vmax top)]
+  [test unit (computed): cm - ellipse(at top 50cm left 50%)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at right 80vmax)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at 70vmax bottom)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at center 60vmax)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at 60vmax center)]
+  [test unit (computed): mm - ellipse(at left 50mm)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at center top 50vmax)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at center left 50vmax)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at center right 70vmax)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at center bottom 70vmax)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at left top 50vmax)]
+  [test unit (computed): cm - ellipse(at top 50cm right 80%)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at left bottom 70vmax)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at top left 50vmax)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at top right 70vmax)]
+  [test unit (computed): mm - ellipse(at bottom 70mm left 50mm)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at bottom left 50vmax)]
+  [test unit (computed): cm - ellipse(at bottom 70cm right 80cm)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at bottom right 70vmax)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at right bottom 70vmax)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at right top 50vmax)]
+  [test unit (computed): ex - ellipse(at top 50ex right 80%)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at left 50vmax center)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at left 50vmax top)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at left 50vmax bottom)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at top 50vmax center)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at top 50vmax left)]
+  [test unit (computed): ch - ellipse(at bottom 70ch left 50%)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at top 50vmax right)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at bottom 70vmax center)]
+  [test unit (computed): ex - ellipse(at right 80ex top 50ex)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at bottom 70vmax left)]
+  [test unit (computed): vmax - ellipse(at bottom 70vmax right 80%)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at bottom 70vmax right)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at right 80vmax center)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at right 80vmax bottom)]
+  [test unit (computed): cm - ellipse(at left 50cm bottom 70%)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at right 80vmax top)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at left 50% top 50vmax)]
+  [test unit (computed): mm - ellipse(at 50mm 50%)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at left 50% bottom 70vmax)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at left 50vmax top 50%)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at left 50vmax top 50vmax)]
+  [test unit (computed): ex - ellipse(at bottom 70ex left 50%)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at left 50vmax bottom 70%)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at left 50vmax bottom 70vmax)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at top 50% left 50vmax)]
+  [test unit (computed): cm - ellipse(at 50cm top)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at top 50% right 80vmax)]
+  [test unit (computed): pc - ellipse(at right 80% bottom 70pc)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at top 50vmax left 50%)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at top 50vmax left 50vmax)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at top 50vmax right 80%)]
+  [test unit (computed): pc - ellipse(at top 50% right 80pc)]
     expected: FAIL
 
   [test unit (computed): vmax - ellipse(at top 50vmax right 80vmax)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at bottom 70% left 50vmax)]
+  [test unit (computed): ch - ellipse(at top 50ch right 80ch)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at bottom 70% right 80vmax)]
+  [test unit (computed): mm - ellipse(at left 50mm top 50mm)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at bottom 70vmax left 50%)]
+  [test unit (computed): vmin - ellipse(at bottom 70vmin left 50vmin)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at bottom 70vmax left 50vmax)]
-    expected: FAIL
-
-  [test unit (computed): vmax - ellipse(at bottom 70vmax right 80%)]
+  [test unit (computed): ex - ellipse(at left 50ex)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at bottom 70vmax right 80vmax)]
+  [test unit (computed): cm - ellipse(at top 50cm right 80cm)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at right 80% top 50vmax)]
+  [test unit (computed): rem - ellipse(at bottom 70rem right 80%)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at right 80% bottom 70vmax)]
+  [test unit (computed): pt - ellipse(at right 80pt top 50%)]
     expected: FAIL
 
   [test unit (computed): vmax - ellipse(at right 80vmax top 50%)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at right 80vmax top 50vmax)]
+  [test unit (computed): mm - ellipse(at left 50mm bottom 70mm)]
+    expected: FAIL
+
+  [test unit (computed): vw - ellipse(at top 50% right 80vw)]
+    expected: FAIL
+
+  [test unit (computed): ex - ellipse(at 50ex 50ex)]
+    expected: FAIL
+
+  [test unit (computed): rem - ellipse(at bottom 70rem left 50rem)]
+    expected: FAIL
+
+  [test unit (computed): ex - ellipse(at bottom 70% right 80ex)]
+    expected: FAIL
+
+  [test unit (computed): in - ellipse(at bottom 70in right 80%)]
+    expected: FAIL
+
+  [test unit (computed): ex - ellipse(at left 50% top 50ex)]
+    expected: FAIL
+
+  [test unit (computed): ex - ellipse(at left 50ex top 50ex)]
+    expected: FAIL
+
+  [test unit (computed): vh - ellipse(at right 80vh top 50%)]
+    expected: FAIL
+
+  [test unit (computed): pc - ellipse(at bottom 70% right 80pc)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at right 80vmax bottom 70%)]
+  [test unit (computed): rem - ellipse(at bottom 70rem right 80rem)]
+    expected: FAIL
+
+  [test unit (computed): ex - ellipse(at top 50ex right 80ex)]
+    expected: FAIL
+
+  [test unit (computed): cm - ellipse(at bottom 70cm left 50cm)]
+    expected: FAIL
+
+  [test unit (computed): cm - ellipse(at left 50cm top 50%)]
+    expected: FAIL
+
+  [test unit (computed): mm - ellipse(at right 80% top 50mm)]
     expected: FAIL
 
-  [test unit (computed): vmax - ellipse(at right 80vmax bottom 70vmax)]
+  [test unit (computed): vmin - ellipse(at bottom 70vmin right 80%)]
+    expected: FAIL
+
+  [test unit (computed): in - ellipse(at top 50% right 80in)]
     expected: FAIL
 
+  [test unit (computed): ch - ellipse(at top 50% right 80ch)]
+    expected: FAIL
+
+  [test unit (computed): mm - ellipse(at right 80mm bottom 70mm)]
+    expected: FAIL
+
+  [test unit (computed): rem - ellipse(at right 80rem top 50%)]
+    expected: FAIL
+
deleted file mode 100644
--- a/testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-ellipse-009.html.ini
+++ /dev/null
@@ -1,58 +0,0 @@
-[shape-outside-ellipse-009.html]
-  [ellipse(at +50px) - computed]
-    expected: FAIL
-
-  [ellipse(at -50px) - computed]
-    expected: FAIL
-
-  [ellipse(at +50%) - computed]
-    expected: FAIL
-
-  [ellipse(at -50%) - computed]
-    expected: FAIL
-
-  [ellipse(at left +50px) - computed]
-    expected: FAIL
-
-  [ellipse(at left +50%) - computed]
-    expected: FAIL
-
-  [ellipse(at right -50px) - computed]
-    expected: FAIL
-
-  [ellipse(at right -50%) - computed]
-    expected: FAIL
-
-  [ellipse(at +50px top) - computed]
-    expected: FAIL
-
-  [ellipse(at +50% top) - computed]
-    expected: FAIL
-
-  [ellipse(at -50px bottom) - computed]
-    expected: FAIL
-
-  [ellipse(at -50% bottom) - computed]
-    expected: FAIL
-
-  [ellipse(at +50px +50px) - computed]
-    expected: FAIL
-
-  [ellipse(at +50% +50%) - computed]
-    expected: FAIL
-
-  [ellipse(at -50px -50px) - computed]
-    expected: FAIL
-
-  [ellipse(at +50px -50px) - computed]
-    expected: FAIL
-
-  [ellipse(at -50px +50px) - computed]
-    expected: FAIL
-
-  [ellipse(at +50% -50%) - computed]
-    expected: FAIL
-
-  [ellipse(at -50% +50%) - computed]
-    expected: FAIL
-
--- a/testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-ellipse-010.html.ini
+++ b/testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-ellipse-010.html.ini
@@ -42,26 +42,8 @@
     expected: FAIL
 
   [ellipse(calc(25%*3 - 10in)) - computed style]
     expected: FAIL
 
   [ellipse(calc((12.5%*6 + 10in) / 4)) - computed style]
     expected: FAIL
 
-  [ellipse(farthest-side calc(30%)) - computed style]
-    expected: FAIL
-
-  [ellipse(farthest-side calc(100%/4)) - computed style]
-    expected: FAIL
-
-  [ellipse(farthest-side calc(25%*3)) - computed style]
-    expected: FAIL
-
-  [ellipse(calc(30%) calc(30%)) - computed style]
-    expected: FAIL
-
-  [ellipse(calc(100%/4) calc(100%/4)) - computed style]
-    expected: FAIL
-
-  [ellipse(calc(25%*3) calc(25%*3)) - computed style]
-    expected: FAIL
-
--- a/testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-ellipse-011.html.ini
+++ b/testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-ellipse-011.html.ini
@@ -21,37 +21,16 @@
     expected: FAIL
 
   [ellipse(farthest-side at calc((12.5%*6 + 10in) / 4) 50%) - inline style]
     expected: FAIL
 
   [ellipse(closest-side farthest-side at calc((12.5%*6 + 10in) / 4) calc((12.5%*6 + 10in) / 4)) - inline style]
     expected: FAIL
 
-  [ellipse(at calc(10in) 50%) - computed style]
-    expected: FAIL
-
-  [ellipse(at calc(10in + 20px) 50%) - computed style]
-    expected: FAIL
-
-  [ellipse(at calc(30%) 50%) - computed style]
-    expected: FAIL
-
-  [ellipse(at calc(100%/4) 50%) - computed style]
-    expected: FAIL
-
-  [ellipse(at calc(25%*3) 50%) - computed style]
-    expected: FAIL
-
-  [ellipse(at calc(25%*3 - 10in) 50%) - computed style]
-    expected: FAIL
-
-  [ellipse(at calc((12.5%*6 + 10in) / 4) 50%) - computed style]
-    expected: FAIL
-
   [ellipse(farthest-side at calc(10in) 50%) - computed style]
     expected: FAIL
 
   [ellipse(farthest-side at calc(10in + 20px) 50%) - computed style]
     expected: FAIL
 
   [ellipse(farthest-side at calc(30%) 50%) - computed style]
     expected: FAIL
--- a/testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-inset-008.html.ini
+++ b/testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-inset-008.html.ini
@@ -1,25 +1,7 @@
 [shape-outside-inset-008.html]
   [inset(calc((12.5%*6 + 10in) / 4)) - inline style]
     expected: FAIL
 
   [inset(calc((12.5%*6 + 10in) / 4) calc((12.5%*6 + 10in) / 4)) - inline style]
     expected: FAIL
 
-  [inset(calc(30%)) - computed style]
-    expected: FAIL
-
-  [inset(calc(100%/4)) - computed style]
-    expected: FAIL
-
-  [inset(calc(25%*3)) - computed style]
-    expected: FAIL
-
-  [inset(calc(30%) calc(30%)) - computed style]
-    expected: FAIL
-
-  [inset(calc(100%/4) calc(100%/4)) - computed style]
-    expected: FAIL
-
-  [inset(calc(25%*3) calc(25%*3)) - computed style]
-    expected: FAIL
-
--- a/testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-inset-009.html.ini
+++ b/testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-inset-009.html.ini
@@ -1,25 +1,7 @@
 [shape-outside-inset-009.html]
   [inset(10px 10px 10px 10px round calc((12.5%*6 + 10in) / 4)) - inline style]
     expected: FAIL
 
   [inset(10px 10px 10px 10px round calc((12.5%*6 + 10in) / 4) calc((12.5%*6 + 10in) / 4)) - inline style]
     expected: FAIL
 
-  [inset(10px 10px 10px 10px round calc(30%)) - computed style]
-    expected: FAIL
-
-  [inset(10px 10px 10px 10px round calc(100%/4)) - computed style]
-    expected: FAIL
-
-  [inset(10px 10px 10px 10px round calc(25%*3)) - computed style]
-    expected: FAIL
-
-  [inset(10px 10px 10px 10px round calc(30%) calc(30%)) - computed style]
-    expected: FAIL
-
-  [inset(10px 10px 10px 10px round calc(100%/4) calc(100%/4)) - computed style]
-    expected: FAIL
-
-  [inset(10px 10px 10px 10px round calc(25%*3) calc(25%*3)) - computed style]
-    expected: FAIL
-
--- a/testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-polygon-006.html.ini
+++ b/testing/web-platform/meta/css/css-shapes/shape-outside/values/shape-outside-polygon-006.html.ini
@@ -1,25 +1,7 @@
 [shape-outside-polygon-006.html]
   [polygon(calc((12.5%*6 + 10in) / 4) calc((12.5%*6 + 10in) / 4)) - inline style]
     expected: FAIL
 
   [polygon(evenodd, calc((12.5%*6 + 10in) / 4) calc((12.5%*6 + 10in) / 4), calc((12.5%*6 + 10in) / 4) calc((12.5%*6 + 10in) / 4)) - inline style]
     expected: FAIL
 
-  [polygon(calc(30%) calc(30%)) - computed style]
-    expected: FAIL
-
-  [polygon(calc(100%/4) calc(100%/4)) - computed style]
-    expected: FAIL
-
-  [polygon(calc(25%*3) calc(25%*3)) - computed style]
-    expected: FAIL
-
-  [polygon(evenodd, calc(30%) calc(30%), calc(30%) calc(30%)) - computed style]
-    expected: FAIL
-
-  [polygon(evenodd, calc(100%/4) calc(100%/4), calc(100%/4) calc(100%/4)) - computed style]
-    expected: FAIL
-
-  [polygon(evenodd, calc(25%*3) calc(25%*3), calc(25%*3) calc(25%*3)) - computed style]
-    expected: FAIL
-
--- a/testing/web-platform/tests/css/css-shapes/shape-outside/values/support/parsing-utils.js
+++ b/testing/web-platform/tests/css/css-shapes/shape-outside/values/support/parsing-utils.js
@@ -810,17 +810,17 @@ var calcTestValues = [
     ["calc(100%/4)", "calc(25%)", "25%"],
     ["calc(25%*3)", "calc(75%)", "75%"],
     // These following two test cases represent an either/or situation in the spec
     // computed value is always supposed to be, at most, a tuple of a length and a percentage.
     // the computed value of a ‘calc()’ expression can be represented as either a number or a tuple
     // of a dimension and a percentage.
     // http://www.w3.org/TR/css3-values/#calc-notation
     ["calc(25%*3 - 10in)", "calc(75% - 10in)", ["calc(75% - 960px)", "calc(-960px + 75%)"]],
-    ["calc((12.5%*6 + 10in) / 4)", "calc((75% + 10in) / 4)", ["calc((75% + 960px) / 4)", "calc(240px + 18.75%)"]]
+    ["calc((12.5%*6 + 10in) / 4)", "calc((75% + 10in) / 4)", ["calc((75% + 960px) / 4)", "calc(18.75% + 240px)"]]
 ]
 
 return {
     testInlineStyle: testInlineStyle,
     testComputedStyle: setupFonts(testComputedStyle),
     testShapeMarginInlineStyle: testShapeMarginInlineStyle,
     testShapeMarginComputedStyle: setupFonts(testShapeMarginComputedStyle),
     testShapeThresholdInlineStyle: testShapeThresholdInlineStyle,