This is an automated email from the ASF dual-hosted git repository. nightowl888 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/lucenenet.git
commit 4302e0f6aae946a3f0fb4e867927e2598a0b1e7f Author: Shad Storhaug <[email protected]> AuthorDate: Sun Jul 26 08:05:18 2020 +0700 Lucene.Net.Support.ListExtensions: Factored out BinarySearch in favor of implementation from J2N --- src/Lucene.Net.TestFramework/Util/Fst/FSTTester.cs | 6 +- src/Lucene.Net.Tests/Support/TestListExtensions.cs | 169 --------------------- src/Lucene.Net/Support/ListExtensions.cs | 72 --------- 3 files changed, 3 insertions(+), 244 deletions(-) diff --git a/src/Lucene.Net.TestFramework/Util/Fst/FSTTester.cs b/src/Lucene.Net.TestFramework/Util/Fst/FSTTester.cs index 69c9f7a..8465d97 100644 --- a/src/Lucene.Net.TestFramework/Util/Fst/FSTTester.cs +++ b/src/Lucene.Net.TestFramework/Util/Fst/FSTTester.cs @@ -1,7 +1,7 @@ using J2N; using J2N.Collections; +using J2N.Collections.Generic.Extensions; using Lucene.Net.Store; -using Lucene.Net.Support; using Lucene.Net.Util.Packed; using System; using System.Collections; @@ -9,11 +9,11 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using System.Text; -using JCG = J2N.Collections.Generic; +using Assert = Lucene.Net.TestFramework.Assert; using Console = Lucene.Net.Util.SystemConsole; using Debug = Lucene.Net.Diagnostics.Debug; // LUCENENET NOTE: We cannot use System.Diagnostics.Debug because those calls will be optimized out of the release! -using Assert = Lucene.Net.TestFramework.Assert; using Directory = Lucene.Net.Store.Directory; +using JCG = J2N.Collections.Generic; namespace Lucene.Net.Util.Fst { diff --git a/src/Lucene.Net.Tests/Support/TestListExtensions.cs b/src/Lucene.Net.Tests/Support/TestListExtensions.cs deleted file mode 100644 index 91e3e5f..0000000 --- a/src/Lucene.Net.Tests/Support/TestListExtensions.cs +++ /dev/null @@ -1,169 +0,0 @@ -using Lucene.Net.Support; -using Lucene.Net.Util; -using NUnit.Framework; -using System; -using System.Collections; -using System.Collections.Generic; - -namespace Lucene.Net.Support -{ - /* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - public class TestListExtensions : LuceneTestCase - { - IList<int> ll; - - IList<IComparable<object>> myReversedLinkedList; - - static int[] objArray = LoadObjArray(); - static IComparable<object>[] myobjArray = LoadMyObjArray(); - - private static int[] LoadObjArray() - { - var objArray = new int[1000]; - for (int i = 0; i < objArray.Length; i++) - { - objArray[i] = i; - } - return objArray; - } - - private static IComparable<object>[] LoadMyObjArray() - { - var myobjArray = new IComparable<object>[1000]; - for (int i = 0; i < objArray.Length; i++) - { - myobjArray[i] = new MyInt(i); - } - return myobjArray; - } - - public override void SetUp() - { - base.SetUp(); - ll = new List<int>(); - myReversedLinkedList = new List<IComparable<object>>(); // to be sorted in reverse - - for (int i = 0; i < objArray.Length; i++) - { - ll.Add(objArray[i]); - //myll.add(myobjArray[i]); - //s.add(objArray[i]); - //mys.add(myobjArray[i]); - //reversedLinkedList.add(objArray[objArray.length - i - 1]); - myReversedLinkedList.Add(myobjArray[myobjArray.Length - i - 1]); - //hm.put(objArray[i].toString(), objArray[i]); - } - } - - public class ReversedMyIntComparator : IComparer, IComparer<object> - { - - public int Compare(Object o1, Object o2) - { - return -((MyInt)o1).CompareTo((MyInt)o2); - } - - new public static int Equals(Object o1, Object o2) - { - return ((MyInt)o1).CompareTo((MyInt)o2); - } - } - - internal class MyInt : IComparable<object> - { - internal int data; - - public MyInt(int value) - { - data = value; - } - - public int CompareTo(object obj) - { - return data > ((MyInt)obj).data ? 1 : (data < ((MyInt)obj).data ? -1 : 0); - } - } - - /** - * @tests java.util.Collections#binarySearch(java.util.List, - * java.lang.Object) - */ - [Test] - public void Test_binarySearchLjava_util_ListLjava_lang_Object() - { - // Test for method int - // java.util.Collections.binarySearch(java.util.List, java.lang.Object) - // assumes ll is sorted and has no duplicate keys - int llSize = ll.size(); - // Ensure a NPE is thrown if the list is NULL - IList<IComparable<object>> list = null; - try - { - list.BinarySearch(new MyInt(3)); - fail("Expected NullPointerException for null list parameter"); - } -#pragma warning disable 168 - catch (ArgumentNullException e) -#pragma warning restore 168 - { - //Expected - } - for (int counter = 0; counter < llSize; counter++) - { - assertEquals("Returned incorrect binary search item position", ll[counter], ll[ll.BinarySearch(ll[counter])]); - } - } - - /** - * @tests java.util.Collections#binarySearch(java.util.List, - * java.lang.Object, java.util.Comparator) - */ - [Test] - public void Test_binarySearchLSystem_Collections_Generic_IListLSystem_ObjectLSystem_Collections_Generic_IComparer() - { - // Test for method int - // java.util.Collections.binarySearch(java.util.List, java.lang.Object, - // java.util.Comparator) - // assumes reversedLinkedList is sorted in reversed order and has no - // duplicate keys - int rSize = myReversedLinkedList.size(); - ReversedMyIntComparator comp = new ReversedMyIntComparator(); - // Ensure a NPE is thrown if the list is NULL - IList<IComparable<object>> list = null; - try - { - //Collections.binarySearch(null, new Object(), comp); - list.BinarySearch(new MyInt(3), comp); - fail("Expected NullPointerException for null list parameter"); - } -#pragma warning disable 168 - catch (ArgumentNullException e) -#pragma warning restore 168 - { - //Expected - } - for (int counter = 0; counter < rSize; counter++) - { - assertEquals( - "Returned incorrect binary search item position using custom comparator", - myReversedLinkedList[counter], myReversedLinkedList[myReversedLinkedList.BinarySearch(myReversedLinkedList[counter], comp)]); - } - } - } -} diff --git a/src/Lucene.Net/Support/ListExtensions.cs b/src/Lucene.Net/Support/ListExtensions.cs index b83febb..fb9ece0 100644 --- a/src/Lucene.Net/Support/ListExtensions.cs +++ b/src/Lucene.Net/Support/ListExtensions.cs @@ -22,78 +22,6 @@ namespace Lucene.Net.Support internal static class ListExtensions { - /// <summary> - /// Performs a binary search for the specified element in the specified - /// sorted list. The list needs to be already sorted in natural sorting - /// order. Searching in an unsorted array has an undefined result. It's also - /// undefined which element is found if there are multiple occurrences of the - /// same element. - /// </summary> - /// <typeparam name="T">The element type. Must implement <see cref="IComparable{T}"/>"/>.</typeparam> - /// <param name="list">The sorted list to search.</param> - /// <param name="item">The element to find.</param> - /// <returns>The non-negative index of the element, or a negative index which - /// is the <c>-index - 1</c> where the element would be inserted.</returns> - /// <exception cref="ArgumentNullException"><paramref name="list"/> is <c>null</c>.</exception> - public static int BinarySearch<T>(this IList<T> list, T item) where T : IComparable<T> - { - if (list == null) - throw new ArgumentNullException(nameof(list)); - - if (list.Count == 0) - return -1; - - int low = 0, mid = list.Count, high = mid - 1, result = -1; - while (low <= high) - { - mid = (low + high) >> 1; - if ((result = -list[mid].CompareTo(item)) > 0) - low = mid + 1; - else if (result == 0) - return mid; - else - high = mid - 1; - } - return -mid - (result < 0 ? 1 : 2); - } - - /// <summary> - /// Performs a binary search for the specified element in the specified - /// sorted list using the specified comparator. The list needs to be already - /// sorted according to the <paramref name="comparer"/> passed. Searching in an unsorted array - /// has an undefined result. It's also undefined which element is found if - /// there are multiple occurrences of the same element. - /// </summary> - /// <typeparam name="T">The element type. Must implement <see cref="IComparable{T}"/>"/>.</typeparam> - /// <param name="list">The sorted <see cref="IList{T}"/> to search.</param> - /// <param name="item">The element to find.</param> - /// <param name="comparer">The comparer. If the comparer is <c>null</c> then the - /// search uses the objects' natural ordering.</param> - /// <returns>the non-negative index of the element, or a negative index which - /// is the <c>-index - 1</c> where the element would be inserted.</returns> - /// <exception cref="ArgumentNullException"><paramref name="list"/> is <c>null</c>.</exception> - public static int BinarySearch<T>(this IList<T> list, T item, IComparer<T> comparer) where T : IComparable<T> - { - if (list == null) - throw new ArgumentNullException(nameof(list)); - - if (comparer == null) - return BinarySearch(list, item); - - int low = 0, mid = list.Count, high = mid - 1, result = -1; - while (low <= high) - { - mid = (low + high) >> 1; - if ((result = -comparer.Compare(list[mid], item)) > 0) - low = mid + 1; - else if (result == 0) - return mid; - else - high = mid - 1; - } - return -mid - (result < 0 ? 1 : 2); - } - public static IList<T> SubList<T>(this IList<T> list, int fromIndex, int toIndex) { // .NET Port: This is to mimic Java's List.subList method, which has a different usage
