public static void constructor_expected_capacity()
        {
            var mls = new MultiLineString2(10);

            Assert.Equal(0, mls.Count);
            mls.GetMagnitude().Should().Be(Double.NaN);
        }
        public static void constructor_default()
        {
            var mls = new MultiLineString2();

            Assert.Equal(0, mls.Count);
            mls.GetMagnitude().Should().Be(Double.NaN);
        }
        public static void magnitude() {
            var mls = new MultiLineString2(_lineStrings);
            var expected = mls.Sum(ls => ls.GetMagnitude());

            var actual = mls.GetMagnitude();

            Assert.Equal(expected, actual);
        }
        public static void magnitude()
        {
            var mls      = new MultiLineString2(_lineStrings);
            var expected = mls.Sum(ls => ls.GetMagnitude());

            var actual = mls.GetMagnitude();

            Assert.Equal(expected, actual);
        }
        public static void distance_point() {
            var mls = new MultiLineString2(_lineStrings);

            Assert.Equal(1, mls.Distance(new Point2(1, 2)));
            Assert.Equal(1, mls.Distance(new Point2(3, 3)));
            Assert.Equal(0, mls.Distance(new Point2(1, 0)));
            Assert.Equal(0, mls.Distance(new Point2(5, 1)));
            _lineStrings.SelectMany(ls => ls).Select(p => mls.Distance(p)).Should().OnlyContain(x => x == 0);
        }
        public static void intersects_point() {
            var mls = new MultiLineString2(_lineStrings);

            Assert.False(mls.Intersects(new Point2(1, 2)));
            Assert.False(mls.Intersects(new Point2(3, 3)));
            Assert.True(mls.Intersects(new Point2(1, 0)));
            Assert.True(mls.Intersects(new Point2(5, 1)));
            _lineStrings.SelectMany(ls => ls).All(p => mls.Intersects(p)).Should().BeTrue();
        }
        public static void distance_point()
        {
            var mls = new MultiLineString2(_lineStrings);

            Assert.Equal(1, mls.Distance(new Point2(1, 2)));
            Assert.Equal(1, mls.Distance(new Point2(3, 3)));
            Assert.Equal(0, mls.Distance(new Point2(1, 0)));
            Assert.Equal(0, mls.Distance(new Point2(5, 1)));
            _lineStrings.SelectMany(ls => ls).Select(p => mls.Distance(p)).Should().OnlyContain(x => x == 0);
        }
        public static void intersects_point()
        {
            var mls = new MultiLineString2(_lineStrings);

            Assert.False(mls.Intersects(new Point2(1, 2)));
            Assert.False(mls.Intersects(new Point2(3, 3)));
            Assert.True(mls.Intersects(new Point2(1, 0)));
            Assert.True(mls.Intersects(new Point2(5, 1)));
            _lineStrings.SelectMany(ls => ls).All(p => mls.Intersects(p)).Should().BeTrue();
        }
        public static void constructor_copy()
        {
            var mls = new MultiLineString2(_lineStrings);

            Assert.Equal(3, mls.Count);
            for (int i = 0; i < _lineStrings.Count; i++)
            {
                Assert.Equal(_lineStrings[i].Count, mls[i].Count);
            }
        }
        public static void mbr() {
            var mls = new MultiLineString2(_lineStrings);
            var expected = mls.Skip(1).Aggregate(
                new Mbr(mls.First().GetMbr()),
                (mbr, l) => mbr.Encompass(l.GetMbr()));

            var actual = mls.GetMbr();

            Assert.Equal(expected, actual);
        }
        public static void mbr()
        {
            var mls      = new MultiLineString2(_lineStrings);
            var expected = mls.Skip(1).Aggregate(
                new Mbr(mls.First().GetMbr()),
                (mbr, l) => mbr.Encompass(l.GetMbr()));

            var actual = mls.GetMbr();

            Assert.Equal(expected, actual);
        }
        public static void centroid() {
            var mls = new MultiLineString2(_lineStrings);
            var magnitudeSum = 0.0;
            var expected = (Point2)mls.Aggregate(new Vector2(), (p, ls) => {
                var magnitude = ls.GetMagnitude();
                magnitudeSum += magnitude;
                var centroid = ls.GetCentroid();
                return p + (new Vector2(centroid.X, centroid.Y).GetScaled(magnitude));
            }).GetDivided(magnitudeSum);

            var actual = mls.GetCentroid();

            Assert.Equal(expected, actual);
        }
        public static void centroid()
        {
            var mls          = new MultiLineString2(_lineStrings);
            var magnitudeSum = 0.0;
            var expected     = (Point2)mls.Aggregate(new Vector2(), (p, ls) => {
                var magnitude = ls.GetMagnitude();
                magnitudeSum += magnitude;
                var centroid  = ls.GetCentroid();
                return(p + (new Vector2(centroid.X, centroid.Y).GetScaled(magnitude)));
            }).GetDivided(magnitudeSum);

            var actual = mls.GetCentroid();

            Assert.Equal(expected, actual);
        }
        public static void constructor_copy() {
            var mls = new MultiLineString2(_lineStrings);

            Assert.Equal(3, mls.Count);
            for (int i = 0; i < _lineStrings.Count; i++) {
                Assert.Equal(_lineStrings[i].Count, mls[i].Count);
            }
        }
        public static void constructor_expected_capacity() {
            var mls = new MultiLineString2(10);

            Assert.Equal(0, mls.Count);
            mls.GetMagnitude().Should().Be(Double.NaN);
        }
        public static void constructor_default() {
            var mls = new MultiLineString2();

            Assert.Equal(0, mls.Count);
            mls.GetMagnitude().Should().Be(Double.NaN);
        }