private void TestGeometryUnaryOperation(string operationCriterion, SpatialProjectionUnaryDelegate projection)
        {
            IList results = session.CreateCriteria(typeof(NtsTestCase))
                            .Add(Restrictions.Eq("Operation", operationCriterion))
                            .SetProjection(Projections.ProjectionList()
                                           .Add(Projections.Property("Description"))
                                           .Add(Projections.Property("GeometryResult"))
                                           .Add(projection("GeometryA"))
                                           )
                            .List();

            Assert.Greater(results.Count, 0);

            foreach (object[] result in results)
            {
                string    description = (string)result[0];
                IGeometry expected    = (IGeometry)result[1];
                IGeometry operation   = (IGeometry)result[2];

                expected.Normalize();
                operation.Normalize();

                bool equals = expected.EqualsExact(operation, 1.5);
                if (!equals)
                {
                    Console.WriteLine(operationCriterion + ": " + description);
                }
                //Assert.IsTrue(equals, description);
            }
        }
        private void TestBooleanUnaryOperation(string operationCriterion, SpatialProjectionUnaryDelegate projection, SpatialCriterionUnaryDelegate criterion)
        {
            IList results = session.CreateCriteria(typeof(NtsTestCase))
                            .Add(Restrictions.Eq("Operation", operationCriterion))
                            .SetProjection(Projections.ProjectionList()
                                           .Add(Projections.Property("Description"))
                                           .Add(Projections.Property("BooleanResult"))
                                           .Add(projection("GeometryA"))
                                           )
                            .List();

            Assert.Greater(results.Count, 0);

            long countTrue = 0;

            foreach (object[] result in results)
            {
                string description = (string)result[0];
                bool   expected    = (bool)result[1];
                bool   operation   = (bool)result[2];

                Assert.AreEqual(expected, operation, description);

                if (operation)
                {
                    countTrue++;
                }
            }

            // RowCount uses "count(*)" which in PostgreSQL returns Int64 and
            // in MS SQL Server return Int32.
            long countRows = Convert.ToInt64(session.CreateCriteria(typeof(NtsTestCase))
                                             .Add(Restrictions.Eq("Operation", operationCriterion))
                                             .Add(criterion("GeometryA"))
                                             .SetProjection(Projections.RowCount())
                                             .UniqueResult());

            Assert.AreEqual(countTrue, countRows);
        }
		private void TestBooleanUnaryOperation(string operationCriterion, SpatialProjectionUnaryDelegate projection, SpatialCriterionUnaryDelegate criterion)
		{
			IList results = session.CreateCriteria(typeof(NtsTestCase))
				.Add(Restrictions.Eq("Operation", operationCriterion))
				.SetProjection(Projections.ProjectionList()
					.Add(Projections.Property("Description"))
					.Add(Projections.Property("BooleanResult"))
					.Add(projection("GeometryA"))
					)
				.List();

			Assert.Greater(results.Count, 0);

			long countTrue = 0;

			foreach (object[] result in results)
			{
				string description = (string)result[0];
				bool expected = (bool)result[1];
				bool operation = (bool)result[2];

				Assert.AreEqual(expected, operation, description);

				if (operation)
					countTrue++;
			}

			// RowCount uses "count(*)" which in PostgreSQL returns Int64 and
			// in MS SQL Server return Int32.
			long countRows = Convert.ToInt64(session.CreateCriteria(typeof(NtsTestCase))
				.Add(Restrictions.Eq("Operation", operationCriterion))
				.Add(criterion("GeometryA"))
				.SetProjection(Projections.RowCount())
				.UniqueResult());

			Assert.AreEqual(countTrue, countRows);
		}
		private void TestGeometryUnaryOperation(string operationCriterion, SpatialProjectionUnaryDelegate projection)
		{
			IList results = session.CreateCriteria(typeof(NtsTestCase))
				.Add(Restrictions.Eq("Operation", operationCriterion))
				.SetProjection(Projections.ProjectionList()
					.Add(Projections.Property("Description"))
					.Add(Projections.Property("GeometryResult"))
					.Add(projection("GeometryA"))
					)
				.List();

			Assert.Greater(results.Count, 0);

			foreach (object[] result in results)
			{
				string description = (string)result[0];
				IGeometry expected = (IGeometry)result[1];
				IGeometry operation = (IGeometry)result[2];

				expected.Normalize();
				operation.Normalize();

				bool equals = expected.EqualsExact(operation, 1.5);
				if (!equals)
					Console.WriteLine(operationCriterion + ": " + description);
				//Assert.IsTrue(equals, description);
			}
		}