static void TestPositioner_HFlat1X2(float factor)
        {
            var rc = Positioner.DoPosition(HFlat1X2Pos, R1X1.Grow(factor), new[] { R1X1, R1X1 }).CheapToArray();

            Assert.AreEqual(2, rc.Length);
            var expected = new Rectangle(0, .25f, .5f, .5f).Scale(factor, factor);

            Assert.AreEqual(expected, rc.First());
            expected = expected.MoveBy(.5f * factor, 0);
            Assert.AreEqual(expected, rc.Skip(1).First());
        }
        internal static void Run(Rectangle clientArea, IEnumerable <Rectangle> rectangles, Positioner.Parms pos, IEnumerable <Rectangle> expected, string label)
        {
            var rc = Positioner.DoPosition(pos, clientArea, rectangles).CheapToArray();

            expected = expected.CheapToArray();
            Assert.AreEqual(expected.Count(), rc.Length, $"{label}: Results length");
            var results = expected.EquiZip(rc, (e, r) => new { expected = e, results = r })
                          .Select((r, i) => new { i, r.expected, r.results, success = r.expected.Equals(r.results) })
                          .ToArray();

            Assert.IsTrue(results.All(r => r.success), results.Select(r => $"{Environment.NewLine}{r.expected} {(r.success ? "==" : "<>")} {r.results}").ToDelimitedString(","), $"{label}: equality");
        }