public void SearchTest()
		{
			var numbers = new [] { -10, -8, 0, 10, 500 };
			var indexerDelegates = new IndexerDelegates<int, int>( index => numbers[ index ], index => index );

			// Object found.
			BinarySearchResult<int> result = BinarySearch<int, int>.Search( 0, numbers.GetIndexInterval(), indexerDelegates );
			Assert.AreEqual( true, result.IsObjectFound );
			Assert.AreEqual( true, result.IsObjectInRange );
			Assert.AreEqual( 0, result.Found.Object );
			Assert.IsNull( result.NotFound );

			// Object found, border.
			result = BinarySearch<int, int>.Search( 500, numbers.GetIndexInterval(), indexerDelegates );
			Assert.AreEqual( true, result.IsObjectFound );
			Assert.AreEqual( true, result.IsObjectInRange );
			Assert.AreEqual( 500, result.Found.Object );
			Assert.IsNull( result.NotFound );

			// Object not found, but in range.
			result = BinarySearch<int, int>.Search( -9, numbers.GetIndexInterval(), indexerDelegates );
			Assert.AreEqual( false, result.IsObjectFound );
			Assert.AreEqual( true, result.IsObjectInRange );
			Assert.AreEqual( -10, result.NotFound.Smaller );
			Assert.AreEqual( -8, result.NotFound.Bigger );
			Assert.IsNull( result.Found );

			// Object not found, out of range, left.
			result = BinarySearch<int, int>.Search( -20, numbers.GetIndexInterval(), indexerDelegates );
			Assert.AreEqual( false, result.IsObjectFound );
			Assert.AreEqual( false, result.IsObjectInRange );
			Assert.IsNull( result.NotFound );
			Assert.IsNull( result.Found );

			// Object not found, out of range, right.
			result = BinarySearch<int, int>.Search( 600, numbers.GetIndexInterval(), indexerDelegates );
			Assert.AreEqual( false, result.IsObjectFound );
			Assert.AreEqual( false, result.IsObjectInRange );
			Assert.IsNull( result.NotFound );
			Assert.IsNull( result.Found );
		}