From 61e2015897ae5f9e9c726aa0cdfff48221828f39 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 20 Nov 2013 16:51:48 +0000 Subject: [PATCH 01/61] Updated the readme --- README.md | 143 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) diff --git a/README.md b/README.md index 49b9be2c..cd50bdda 100644 --- a/README.md +++ b/README.md @@ -2,3 +2,146 @@ java-algorithms-implementation ============================== Algorithms and Data Structures implemented in Java + + +This is a collection of algorithms and data structures which I've implement over the years in my academic and professional life. The code isn't overly-optimized but is written to be correct and readable. The algorithms and data structures are well tested and, unless noted, are believe to be 100% correct. All code is Java 1.6 compliant and was tested on a Intel Core 2 Duo Processor which has 2.0 GHz per core and 2 Gbytes of memory. The following VM Arguments were used: "-server -Xms1500m -Xmx1500m". + +Created by Justin Wetherell +github: http://github.com/phishman3579/java-algorithms-implementation +e-mail: phishman3579@gmail.com +Twitter: @phishman3579 + +# What's been implemented: + +## Data Structures +* AVL Tree +* B-Tree +* Binary Heap [backed by an array or a tree] +* Binary Search Tree +* Compact Suffix Trie [backed by a Patricia Trie] +* Graph + + Undirected + + Directed (Digraph) +* Hash Array Mapped Trie (HAMT) +* Hash Map (associative array) +* Interval Tree +* KD Tree (k-dimensional tree or k-d tree) +* List [backed by an array or a linked list] +* Matrix +* Patricia Trie +* Quad-Tree (Point-Region or MX-CIF) +* Queue [backed by an array or a linked list] +* Radix Trie (associative array) [backed by a Patricia Trie] +* Red-Black Tree +* Segment Tree +* Skip List +* Splay Tree +* Stack [backed by an array or a linked list] +* Suffix Tree (Ukkonen's algorithm) +* Suffix Trie [backed by a Trie] +* Treap +* Tree Map (associative array) [backed by an AVL Tree] +* Trie +* Trie Map (associative array) [backed by a Trie] + +## Mathematics +* Distance + + chebyshev + + euclidean +* Division + + using a loop + + using recursion + + using shifts and multiplication + + using only shifts + + using logarithm +* Multiplication + + using a loop + + using recursion + + using only shifts + + using logarithms +* Primes + + is prime + + prime factorization + + sieve of eratosthenes + +## Numbers +* Integers + + to binary String + - using divide and modulus + - using right shift and modulus + - using BigDecimal + - using divide and double + + is a power of 2 + - using a loop + - using recursion + - using logarithm + - using bits + + greatest common divisor + - using Euclid's algorithm + + to English (e.g. 1 would return "one") +* Longs + + to binary String + - using divide and modulus + - using right shift and modulus + - using BigDecimal + +## Path +* Find shortest path(s) in a Graph from a starting Vertex + - Dijkstra's algorithm (non-negative weight graphs) + - Bellman-Ford algorithm (negative and positive weight graphs) +* Find minimum spanning tree + - Prim's (undirected graphs) +* Find all pairs shortest path + - Johnsons's algorithm (negative and positive weight graphs) + - Floyd-Warshall (negative and positive weight graphs) +* Cycle detection + - Depth first search while keeping track of visited Verticies +* Topological sort + +## Search +* Get index of value in array + + Linear + + Quickselect + + Binary [sorted array input only] + + Optimized binary (binary until a threashold then linear) [sorted array input only] + + Interpolation [sorted array input only] + +## Sequences +* Find longest common subsequence (dynamic programming) +* Find number of times a subsequence occurs in a sequence (dynamic programming) +* Find i-th element in a Fibonacci sequence + + using a loop + + using recursion + + using matrix multiplication + + using Binet's formula +* Find total of all elements in a sequence + + using a loop + + using Triangular numbers + +## Sorts +* American Flag Sort +* Bubble Sort +* Counting Sort (Integers only) +* Heap Sort +* Insertion Sort +* Merge Sort +* Quick Sort +* Radix Sort (Integers only) +* Shell's Sort + +## String Functions +* Reverse characters in a string + + using additional storage (a String or StringBuilder) + + using in-place swaps + + using in-place XOR +* Reverse words in a string + + using char swaps and additional storage (a StringBuilder) + + using StringTokenizer and additional (a String) + + using split() method and additional storage (a StringBuilder and String[]) + + using in-place swaps +* Is Palindrome + + using additional storage (a StringBuilder) + + using in-place symetric element compares +* Subsets of characters in a String +* Edit (Levenshtein) Distance of two Strings + From 88e99e2be5c832e99a22637f94fdaa2dc0dcfa99 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Wed, 20 Nov 2013 16:56:52 +0000 Subject: [PATCH 02/61] More updates to the readme --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index cd50bdda..afa80de3 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,10 @@ Algorithms and Data Structures implemented in Java This is a collection of algorithms and data structures which I've implement over the years in my academic and professional life. The code isn't overly-optimized but is written to be correct and readable. The algorithms and data structures are well tested and, unless noted, are believe to be 100% correct. All code is Java 1.6 compliant and was tested on a Intel Core 2 Duo Processor which has 2.0 GHz per core and 2 Gbytes of memory. The following VM Arguments were used: "-server -Xms1500m -Xmx1500m". -Created by Justin Wetherell -github: http://github.com/phishman3579/java-algorithms-implementation -e-mail: phishman3579@gmail.com -Twitter: @phishman3579 +* Created by Justin Wetherell +* github: http://github.com/phishman3579/java-algorithms-implementation +* e-mail: phishman3579@gmail.com +* Twitter: @phishman3579 # What's been implemented: From 82df371aca9a1e2918211d9908e1ca4d8786ed00 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Wed, 20 Nov 2013 17:59:46 +0000 Subject: [PATCH 03/61] Added google linkedIn to the readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index afa80de3..49125d52 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,9 @@ Algorithms and Data Structures implemented in Java This is a collection of algorithms and data structures which I've implement over the years in my academic and professional life. The code isn't overly-optimized but is written to be correct and readable. The algorithms and data structures are well tested and, unless noted, are believe to be 100% correct. All code is Java 1.6 compliant and was tested on a Intel Core 2 Duo Processor which has 2.0 GHz per core and 2 Gbytes of memory. The following VM Arguments were used: "-server -Xms1500m -Xmx1500m". * Created by Justin Wetherell +* google: http://code.google.com/p/java-algorithms-implementation * github: http://github.com/phishman3579/java-algorithms-implementation +* linkedIn: http://www.linkedin.com/in/phishman3579 * e-mail: phishman3579@gmail.com * Twitter: @phishman3579 From ce212413e89f53ad2fec98056e00113b264bb521 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Wed, 20 Nov 2013 18:03:21 +0000 Subject: [PATCH 04/61] Updated e-mail and twitter in readme --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 49125d52..2c3720c3 100644 --- a/README.md +++ b/README.md @@ -7,11 +7,11 @@ Algorithms and Data Structures implemented in Java This is a collection of algorithms and data structures which I've implement over the years in my academic and professional life. The code isn't overly-optimized but is written to be correct and readable. The algorithms and data structures are well tested and, unless noted, are believe to be 100% correct. All code is Java 1.6 compliant and was tested on a Intel Core 2 Duo Processor which has 2.0 GHz per core and 2 Gbytes of memory. The following VM Arguments were used: "-server -Xms1500m -Xmx1500m". * Created by Justin Wetherell -* google: http://code.google.com/p/java-algorithms-implementation -* github: http://github.com/phishman3579/java-algorithms-implementation +* google: http://code.google.com/p/java-algorithms-implementation +* github: http://github.com/phishman3579/java-algorithms-implementation * linkedIn: http://www.linkedin.com/in/phishman3579 -* e-mail: phishman3579@gmail.com -* Twitter: @phishman3579 +* e-mail: mailto:phishman3579@gmail.com +* Twitter: http://twitter.com/phishman3579 # What's been implemented: From f8cf423422318ee6f2ae7afd692a160aa645c2b3 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Wed, 20 Nov 2013 18:03:58 +0000 Subject: [PATCH 05/61] Updated e-mail and twitter in readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2c3720c3..c71db35a 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ This is a collection of algorithms and data structures which I've implement over * google: http://code.google.com/p/java-algorithms-implementation * github: http://github.com/phishman3579/java-algorithms-implementation * linkedIn: http://www.linkedin.com/in/phishman3579 -* e-mail: mailto:phishman3579@gmail.com +* e-mail: phishman3579@gmail.com * Twitter: http://twitter.com/phishman3579 # What's been implemented: From f399665e05cb8c81bfa4b4035141f283aa48e3fe Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Wed, 20 Nov 2013 18:05:21 +0000 Subject: [PATCH 06/61] Updated e-mail and twitter in readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c71db35a..2c3720c3 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ This is a collection of algorithms and data structures which I've implement over * google: http://code.google.com/p/java-algorithms-implementation * github: http://github.com/phishman3579/java-algorithms-implementation * linkedIn: http://www.linkedin.com/in/phishman3579 -* e-mail: phishman3579@gmail.com +* e-mail: mailto:phishman3579@gmail.com * Twitter: http://twitter.com/phishman3579 # What's been implemented: From e94e245dba5847b877010bfb587aad8edfbd53d0 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Wed, 20 Nov 2013 18:05:59 +0000 Subject: [PATCH 07/61] Updated e-mail and twitter in readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2c3720c3..c71db35a 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ This is a collection of algorithms and data structures which I've implement over * google: http://code.google.com/p/java-algorithms-implementation * github: http://github.com/phishman3579/java-algorithms-implementation * linkedIn: http://www.linkedin.com/in/phishman3579 -* e-mail: mailto:phishman3579@gmail.com +* e-mail: phishman3579@gmail.com * Twitter: http://twitter.com/phishman3579 # What's been implemented: From 978f35bb37d5c4430f02dc7a850d252da9183b7a Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Wed, 20 Nov 2013 18:41:07 +0000 Subject: [PATCH 08/61] Fixed up readme --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c71db35a..1ac569a3 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,10 @@ Algorithms and Data Structures implemented in Java This is a collection of algorithms and data structures which I've implement over the years in my academic and professional life. The code isn't overly-optimized but is written to be correct and readable. The algorithms and data structures are well tested and, unless noted, are believe to be 100% correct. All code is Java 1.6 compliant and was tested on a Intel Core 2 Duo Processor which has 2.0 GHz per core and 2 Gbytes of memory. The following VM Arguments were used: "-server -Xms1500m -Xmx1500m". * Created by Justin Wetherell -* google: http://code.google.com/p/java-algorithms-implementation -* github: http://github.com/phishman3579/java-algorithms-implementation -* linkedIn: http://www.linkedin.com/in/phishman3579 -* e-mail: phishman3579@gmail.com +* Google: http://code.google.com/p/java-algorithms-implementation +* Github: http://github.com/phishman3579/java-algorithms-implementation +* LinkedIn: http://www.linkedin.com/in/phishman3579 +* E-mail: phishman3579@gmail.com * Twitter: http://twitter.com/phishman3579 # What's been implemented: From e1632a0d5ec17ab406d82985330df5f1c5b1b186 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Wed, 20 Nov 2013 18:41:36 +0000 Subject: [PATCH 09/61] Fixed up readme --- test.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 test.txt diff --git a/test.txt b/test.txt deleted file mode 100644 index e69de29b..00000000 From c1140f002a05d6b80576d1d82e71764077d5aa98 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Wed, 20 Nov 2013 20:31:40 -0500 Subject: [PATCH 10/61] Updated readme, again --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1ac569a3..ecc6437b 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ java-algorithms-implementation Algorithms and Data Structures implemented in Java -This is a collection of algorithms and data structures which I've implement over the years in my academic and professional life. The code isn't overly-optimized but is written to be correct and readable. The algorithms and data structures are well tested and, unless noted, are believe to be 100% correct. All code is Java 1.6 compliant and was tested on a Intel Core 2 Duo Processor which has 2.0 GHz per core and 2 Gbytes of memory. The following VM Arguments were used: "-server -Xms1500m -Xmx1500m". +This is a collection of algorithms and data structures which I've implement over the years in my academic and professional life. The code isn't overly-optimized but is written to be correct and readable. The algorithms and data structures are well tested and, unless noted, are believe to be 100% correct. * Created by Justin Wetherell * Google: http://code.google.com/p/java-algorithms-implementation From 42b87fa5879f6637a7598da90fd0b1624d75bc5a Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Tue, 26 Nov 2013 14:58:11 -0500 Subject: [PATCH 11/61] Updated the sort class headers. --- .../jwetherell/algorithms/sorts/AmericanFlagSort.java | 10 +++++++--- src/com/jwetherell/algorithms/sorts/BubbleSort.java | 4 +++- src/com/jwetherell/algorithms/sorts/CountingSort.java | 11 +++++++---- src/com/jwetherell/algorithms/sorts/HeapSort.java | 7 +++++-- .../jwetherell/algorithms/sorts/InsertionSort.java | 6 +++++- src/com/jwetherell/algorithms/sorts/MergeSort.java | 7 +++++-- src/com/jwetherell/algorithms/sorts/QuickSort.java | 11 +++++++---- src/com/jwetherell/algorithms/sorts/RadixSort.java | 11 +++++++---- 8 files changed, 46 insertions(+), 21 deletions(-) diff --git a/src/com/jwetherell/algorithms/sorts/AmericanFlagSort.java b/src/com/jwetherell/algorithms/sorts/AmericanFlagSort.java index ad91dbe4..a83ae12c 100644 --- a/src/com/jwetherell/algorithms/sorts/AmericanFlagSort.java +++ b/src/com/jwetherell/algorithms/sorts/AmericanFlagSort.java @@ -5,10 +5,14 @@ * distributes items into hundreds of buckets. Non-comparative sorting * algorithms such as radix sort and American flag sort are typically used to * sort large objects such as strings, for which comparison is not a unit-time - * operation. Family: Bucket. Space: In-place. Stable: False. + * operation. * - * Average case = O(n*k/d) Worst case = O(n*k/d) Best case = O(n*k/d) NOTE: n is - * the number of digits and k is the average bucket size + * Family: Bucket. + * Space: In-place. + * Stable: False. + * + * Average case = O(n*k/d) Worst case = O(n*k/d) Best case = O(n*k/d) + * NOTE: n is the number of digits and k is the average bucket size * * http://en.wikipedia.org/wiki/American_flag_sort * diff --git a/src/com/jwetherell/algorithms/sorts/BubbleSort.java b/src/com/jwetherell/algorithms/sorts/BubbleSort.java index 2a6b7fdc..b9ce8af8 100644 --- a/src/com/jwetherell/algorithms/sorts/BubbleSort.java +++ b/src/com/jwetherell/algorithms/sorts/BubbleSort.java @@ -6,7 +6,9 @@ * swapping them if they are in the wrong order. The pass through the list is * repeated until no swaps are needed, which indicates that the list is sorted. * - * Family: Exchanging. Space: In-place. Stable: True. + * Family: Exchanging. + * Space: In-place. + * Stable: True. * * Average case = O(n^2) Worst case = O(n^2) Best case = O(n) * diff --git a/src/com/jwetherell/algorithms/sorts/CountingSort.java b/src/com/jwetherell/algorithms/sorts/CountingSort.java index a52c84f2..d7ea3ba3 100644 --- a/src/com/jwetherell/algorithms/sorts/CountingSort.java +++ b/src/com/jwetherell/algorithms/sorts/CountingSort.java @@ -5,11 +5,14 @@ * to keys that are small integers; that is, it is an integer sorting algorithm. * It operates by counting the number of objects that have each distinct key * value, and using arithmetic on those counts to determine the positions of - * each key value in the output sequence. Family: Counting. Space: An Array of - * length r. Stable: True. + * each key value in the output sequence. * - * Average case = O(n+r) Worst case = O(n+r) Best case = O(n+r) NOTE: r is the - * range of numbers (0 to r) to be sorted. + * Family: Counting. + * Space: An Array of length r. + * Stable: True. + * + * Average case = O(n+r) Worst case = O(n+r) Best case = O(n+r) + * NOTE: r is the range of numbers (0 to r) to be sorted. * * http://en.wikipedia.org/wiki/Counting_sort * diff --git a/src/com/jwetherell/algorithms/sorts/HeapSort.java b/src/com/jwetherell/algorithms/sorts/HeapSort.java index e6aec3e8..0d94a6bf 100644 --- a/src/com/jwetherell/algorithms/sorts/HeapSort.java +++ b/src/com/jwetherell/algorithms/sorts/HeapSort.java @@ -4,8 +4,11 @@ * Heapsort is a comparison-based sorting algorithm to create a sorted array (or * list), and is part of the selection sort family. Although somewhat slower in * practice on most machines than a well-implemented quicksort, it has the - * advantage of a more favorable worst-case O(n log n) runtime. Family: - * Selection. Space: In-place. Stable: False. + * advantage of a more favorable worst-case O(n log n) runtime. + * + * Family: Selection. + * Space: In-place. + * Stable: False. * * Average case = O(n*log n) Worst case = O(n*log n) Best case = O(n*log n) * diff --git a/src/com/jwetherell/algorithms/sorts/InsertionSort.java b/src/com/jwetherell/algorithms/sorts/InsertionSort.java index e29fc521..c402d8d3 100644 --- a/src/com/jwetherell/algorithms/sorts/InsertionSort.java +++ b/src/com/jwetherell/algorithms/sorts/InsertionSort.java @@ -4,7 +4,11 @@ * Insertion sort is a simple sorting algorithm: a comparison sort in which the * sorted array (or list) is built one entry at a time. It is much less * efficient on large lists than more advanced algorithms such as quicksort, - * heapsort, or merge sort. Family: Insertion. Space: In-place. Stable: True. + * heapsort, or merge sort. + * + * Family: Insertion. + * Space: In-place. + * Stable: True. * * Average case = O(n^2) Worst case = O(n^2) Best case = O(n) * diff --git a/src/com/jwetherell/algorithms/sorts/MergeSort.java b/src/com/jwetherell/algorithms/sorts/MergeSort.java index 38ffcced..0e3e174b 100644 --- a/src/com/jwetherell/algorithms/sorts/MergeSort.java +++ b/src/com/jwetherell/algorithms/sorts/MergeSort.java @@ -3,8 +3,11 @@ /** * Merge sort is an O(n log n) comparison-based sorting algorithm. Most * implementations produce a stable sort, which means that the implementation - * preserves the input order of equal elements in the sorted output. Family: - * Merging. Space: In-place. Stable: True. + * preserves the input order of equal elements in the sorted output. + * + * Family: Merging. + * Space: In-place. + * Stable: True. * * Average case = O(n*log n) Worst case = O(n*log n) Best case = O(n*log n) * diff --git a/src/com/jwetherell/algorithms/sorts/QuickSort.java b/src/com/jwetherell/algorithms/sorts/QuickSort.java index e7593270..1be2c4c2 100644 --- a/src/com/jwetherell/algorithms/sorts/QuickSort.java +++ b/src/com/jwetherell/algorithms/sorts/QuickSort.java @@ -3,10 +3,13 @@ import java.util.Random; /** - * Quicksort is a sorting algorithm which, on average, makes comparisons to sort - * n items. In the worst case, it makes comparisons, though this behavior is - * rare. Quicksort is often faster in practice than other algorithms. Family: - * Divide and conquer. Space: In-place. Stable: False. + * Quicksort is a sorting algorithm which, on average, makes O(n*log n) comparisons to sort + * n items. In the worst case, it makes O(n^2) comparisons, though this behavior is + * rare. Quicksort is often faster in practice than other algorithms. + * + * Family: Divide and conquer. + * Space: In-place. + * Stable: False. * * Average case = O(n) Worst case = O(n^2) Best case = O(n*log n) * diff --git a/src/com/jwetherell/algorithms/sorts/RadixSort.java b/src/com/jwetherell/algorithms/sorts/RadixSort.java index 9506c0f7..7500429c 100644 --- a/src/com/jwetherell/algorithms/sorts/RadixSort.java +++ b/src/com/jwetherell/algorithms/sorts/RadixSort.java @@ -8,11 +8,14 @@ * same significant position and value. A positional notation is required, but * because integers can represent strings of characters (e.g., names or dates) * and specially formatted floating point numbers, radix sort is not limited to - * integers. Family: Bucket. Space: 10 Buckets with at most n integers per - * bucket. Stable: True. + * integers. * - * Average case = O(n*k) Worst case = O(n*k) Best case = O(n*k) NOTE: n is the - * number of digits and k is the average bucket size + * Family: Bucket. + * Space: 10 Buckets with at most n integers per bucket. + * Stable: True. + * + * Average case = O(n*k) Worst case = O(n*k) Best case = O(n*k) + * NOTE: n is the number of digits and k is the average bucket size * * http://en.wikipedia.org/wiki/Radix_sort * From cf32b10738add1eebedc23a78422712fd31d473a Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Tue, 26 Nov 2013 15:00:34 -0500 Subject: [PATCH 12/61] Update the sorts in code comments. --- .../algorithms/sorts/AmericanFlagSort.java | 3 +-- src/com/jwetherell/algorithms/sorts/HeapSort.java | 14 +++----------- src/com/jwetherell/algorithms/sorts/RadixSort.java | 6 ++---- 3 files changed, 6 insertions(+), 17 deletions(-) diff --git a/src/com/jwetherell/algorithms/sorts/AmericanFlagSort.java b/src/com/jwetherell/algorithms/sorts/AmericanFlagSort.java index a83ae12c..1d6f0632 100644 --- a/src/com/jwetherell/algorithms/sorts/AmericanFlagSort.java +++ b/src/com/jwetherell/algorithms/sorts/AmericanFlagSort.java @@ -26,8 +26,7 @@ private AmericanFlagSort() { } public static Integer[] sort(Integer[] unsorted) { - int numberOfDigits = getMaxNumberOfDigits(unsorted); // Max number of - // digits + int numberOfDigits = getMaxNumberOfDigits(unsorted); // Max number of digits int max = 1; for (int i = 0; i < numberOfDigits - 1; i++) max *= 10; diff --git a/src/com/jwetherell/algorithms/sorts/HeapSort.java b/src/com/jwetherell/algorithms/sorts/HeapSort.java index 0d94a6bf..6df121af 100644 --- a/src/com/jwetherell/algorithms/sorts/HeapSort.java +++ b/src/com/jwetherell/algorithms/sorts/HeapSort.java @@ -37,24 +37,16 @@ private static > void sortHeap(T[] unsorted) { if (left >= index) // node has no left child break; int right = left + 1; - if (right >= index) { // node has a left child, but no right - // child + if (right >= index) { // node has a left child, but no right child if (unsorted[left].compareTo(unsorted[i]) > 0) - swap(left, i, unsorted); // if - // left - // child - // is - // greater - // than - // node + swap(left, i, unsorted); // if left child is greater than node break; } T ithElement = unsorted[i]; T leftElement = unsorted[left]; T rightElement = unsorted[right]; if (ithElement.compareTo(leftElement) < 0) { // (left > i) - if (unsorted[left].compareTo(rightElement) > 0) { // (left > - // right) + if (unsorted[left].compareTo(rightElement) > 0) { // (left > right) swap(left, i, unsorted); i = left; continue; diff --git a/src/com/jwetherell/algorithms/sorts/RadixSort.java b/src/com/jwetherell/algorithms/sorts/RadixSort.java index 7500429c..df0b00fa 100644 --- a/src/com/jwetherell/algorithms/sorts/RadixSort.java +++ b/src/com/jwetherell/algorithms/sorts/RadixSort.java @@ -31,10 +31,8 @@ private RadixSort() { public static Integer[] sort(Integer[] unsorted) { int[][] buckets = new int[NUMBER_OF_BUCKETS][10]; for (int i = 0; i < NUMBER_OF_BUCKETS; i++) - buckets[i][0] = 1; // Size is one since the size is stored in first - // element - int numberOfDigits = getMaxNumberOfDigits(unsorted); // Max number of - // digits + buckets[i][0] = 1; // Size is one since the size is stored in first element + int numberOfDigits = getMaxNumberOfDigits(unsorted); // Max number of digits int divisor = 1; for (int n = 0; n < numberOfDigits; n++) { int digit = 0; From 531f287811465fb859a85889b0c5d694a8dce044 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Tue, 3 Jun 2014 15:52:57 -0400 Subject: [PATCH 13/61] Found a bug in the way the suffix tree detects the end of word character --- .../algorithms/data_structures/SuffixTree.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/com/jwetherell/algorithms/data_structures/SuffixTree.java b/src/com/jwetherell/algorithms/data_structures/SuffixTree.java index 0a57af22..f334dbed 100644 --- a/src/com/jwetherell/algorithms/data_structures/SuffixTree.java +++ b/src/com/jwetherell/algorithms/data_structures/SuffixTree.java @@ -55,17 +55,18 @@ public SuffixTree(C seq) { public SuffixTree(C seq, char endSeq) { END_SEQ_CHAR = endSeq; StringBuilder builder = new StringBuilder(seq); - if (builder.indexOf(String.valueOf(seq)) >= 0) + if (builder.indexOf(String.valueOf(END_SEQ_CHAR)) < 0) builder.append(END_SEQ_CHAR); string = builder.toString(); int length = string.length(); characters = new char[length]; for (int i = 0; i < length; i++) { - characters[i] = string.charAt(i); + char c = string.charAt(i); + characters[i] = c; } - for (int i = 0; i < length; i++) { - addPrefix(i); + for (int j = 0; j < length; j++) { + addPrefix(j); } } From f9f4bc9f6fed7b9bd117467dfc2bf325e9436a47 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Mon, 9 Jun 2014 16:21:02 -0400 Subject: [PATCH 14/61] Bug found in Dijkstra class file; I wasn't updating the unvisited queue properly --- src/com/jwetherell/algorithms/data_structures/Graph.java | 5 +++-- src/com/jwetherell/algorithms/graph/Dijkstra.java | 8 ++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/com/jwetherell/algorithms/data_structures/Graph.java b/src/com/jwetherell/algorithms/data_structures/Graph.java index 35100660..c7c69159 100644 --- a/src/com/jwetherell/algorithms/data_structures/Graph.java +++ b/src/com/jwetherell/algorithms/data_structures/Graph.java @@ -1,6 +1,7 @@ package com.jwetherell.algorithms.data_structures; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Set; import java.util.concurrent.CopyOnWriteArrayList; @@ -57,11 +58,11 @@ public Graph(TYPE type) { this.type = type; } - public Graph(List> verticies, List> edges) { + public Graph(Collection> verticies, Collection> edges) { this(TYPE.UNDIRECTED, verticies, edges); } - public Graph(TYPE type, List> verticies, List> edges) { + public Graph(TYPE type, Collection> verticies, Collection> edges) { this(type); this.verticies.addAll(verticies); this.edges.addAll(edges); diff --git a/src/com/jwetherell/algorithms/graph/Dijkstra.java b/src/com/jwetherell/algorithms/graph/Dijkstra.java index ba140ee6..7c078ec5 100644 --- a/src/com/jwetherell/algorithms/graph/Dijkstra.java +++ b/src/com/jwetherell/algorithms/graph/Dijkstra.java @@ -80,12 +80,17 @@ public static Graph.CostPathPair getShortestPath(Graph g, Grap if (pair.getCost() == Integer.MAX_VALUE) { // Haven't seen this vertex yet pair.setCost(cost); + // Need to remove the + unvisited.remove(pair); + unvisited.add(pair); Set> set = paths.get(e.getToVertex()); set.addAll(paths.get(e.getFromVertex())); set.add(e); } else if (cost < pair.getCost()) { // Found a shorter path to a reachable vertex pair.setCost(cost); + unvisited.remove(pair); + unvisited.add(pair); Set> set = paths.get(e.getToVertex()); set.clear(); set.addAll(paths.get(e.getFromVertex())); @@ -98,8 +103,7 @@ public static Graph.CostPathPair getShortestPath(Graph g, Grap // If we are looking for shortest path, we found it. break; } else if (unvisited.size() > 0) { - // If there are other vertices to visit (which haven't been - // visited yet) + // If there are other vertices to visit (which haven't been visited yet) Graph.CostVertexPair pair = unvisited.remove(); vertex = pair.getVertex(); if (pair.getCost() == Integer.MAX_VALUE) { From 93f81547ac123f611996e482481cfb58c31cfa2e Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Mon, 9 Jun 2014 16:32:32 -0400 Subject: [PATCH 15/61] Updated the comments for the Dijkstra bug fix. --- src/com/jwetherell/algorithms/graph/Dijkstra.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/com/jwetherell/algorithms/graph/Dijkstra.java b/src/com/jwetherell/algorithms/graph/Dijkstra.java index 7c078ec5..4ce243f8 100644 --- a/src/com/jwetherell/algorithms/graph/Dijkstra.java +++ b/src/com/jwetherell/algorithms/graph/Dijkstra.java @@ -80,17 +80,22 @@ public static Graph.CostPathPair getShortestPath(Graph g, Grap if (pair.getCost() == Integer.MAX_VALUE) { // Haven't seen this vertex yet pair.setCost(cost); - // Need to remove the - unvisited.remove(pair); - unvisited.add(pair); + + // Need to remove the pair and re-insert, so the priority queue keeps it's invariants + unvisited.remove(pair); // O(n) + unvisited.add(pair); // O(log n) + Set> set = paths.get(e.getToVertex()); set.addAll(paths.get(e.getFromVertex())); set.add(e); } else if (cost < pair.getCost()) { // Found a shorter path to a reachable vertex pair.setCost(cost); - unvisited.remove(pair); - unvisited.add(pair); + + // Need to remove the pair and re-insert, so the priority queue keeps it's invariants + unvisited.remove(pair); // O(n) + unvisited.add(pair); // O(log n) + Set> set = paths.get(e.getToVertex()); set.clear(); set.addAll(paths.get(e.getFromVertex())); From 58b79a9c17d43741b518d0c9fae4574f10c3861b Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Mon, 9 Jun 2014 18:24:07 -0400 Subject: [PATCH 16/61] Added more comments to the Dijkstra class --- .../jwetherell/algorithms/graph/Dijkstra.java | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/com/jwetherell/algorithms/graph/Dijkstra.java b/src/com/jwetherell/algorithms/graph/Dijkstra.java index 4ce243f8..02707dd3 100644 --- a/src/com/jwetherell/algorithms/graph/Dijkstra.java +++ b/src/com/jwetherell/algorithms/graph/Dijkstra.java @@ -54,9 +54,8 @@ public static Graph.CostPathPair getShortestPath(Graph g, Grap throw (new IllegalArgumentException("Negative cost Edges are not allowed.")); paths = new TreeMap, Set>>(); - for (Graph.Vertex v : g.getVerticies()) { + for (Graph.Vertex v : g.getVerticies()) paths.put(v, new LinkedHashSet>()); - } costs = new TreeMap, Graph.CostVertexPair>(); for (Graph.Vertex v : g.getVerticies()) { @@ -67,15 +66,15 @@ public static Graph.CostPathPair getShortestPath(Graph g, Grap } unvisited = new PriorityQueue>(); - unvisited.addAll(costs.values()); // Shallow copy + unvisited.addAll(costs.values()); // Shallow copy which is O(n log n) Graph.Vertex vertex = start; while (true) { // Compute costs from current vertex to all reachable vertices which // haven't been visited for (Graph.Edge e : vertex.getEdges()) { - Graph.CostVertexPair pair = costs.get(e.getToVertex()); - Graph.CostVertexPair lowestCostToThisVertex = costs.get(vertex); + Graph.CostVertexPair pair = costs.get(e.getToVertex()); // O(log n) + Graph.CostVertexPair lowestCostToThisVertex = costs.get(vertex); // O(log n) int cost = lowestCostToThisVertex.getCost() + e.getCost(); if (pair.getCost() == Integer.MAX_VALUE) { // Haven't seen this vertex yet @@ -83,10 +82,11 @@ public static Graph.CostPathPair getShortestPath(Graph g, Grap // Need to remove the pair and re-insert, so the priority queue keeps it's invariants unvisited.remove(pair); // O(n) - unvisited.add(pair); // O(log n) + unvisited.add(pair); // O(log n) - Set> set = paths.get(e.getToVertex()); - set.addAll(paths.get(e.getFromVertex())); + // Update the paths + Set> set = paths.get(e.getToVertex()); // O(log n) + set.addAll(paths.get(e.getFromVertex())); // O(log n) set.add(e); } else if (cost < pair.getCost()) { // Found a shorter path to a reachable vertex @@ -94,11 +94,12 @@ public static Graph.CostPathPair getShortestPath(Graph g, Grap // Need to remove the pair and re-insert, so the priority queue keeps it's invariants unvisited.remove(pair); // O(n) - unvisited.add(pair); // O(log n) + unvisited.add(pair); // O(log n) - Set> set = paths.get(e.getToVertex()); + // Update the paths + Set> set = paths.get(e.getToVertex()); // O(log n) set.clear(); - set.addAll(paths.get(e.getFromVertex())); + set.addAll(paths.get(e.getFromVertex())); // O(log n) set.add(e); } } @@ -109,7 +110,7 @@ public static Graph.CostPathPair getShortestPath(Graph g, Grap break; } else if (unvisited.size() > 0) { // If there are other vertices to visit (which haven't been visited yet) - Graph.CostVertexPair pair = unvisited.remove(); + Graph.CostVertexPair pair = unvisited.remove(); // O(log n) vertex = pair.getVertex(); if (pair.getCost() == Integer.MAX_VALUE) { // If the only edge left to explore has MAX_VALUE then it From 5360a1028bf665957044dc98773d8e8e56c808b7 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Wed, 11 Jun 2014 11:40:40 -0400 Subject: [PATCH 17/61] Fixed a bug in BTree when duplicate keys caused a infinite loop --- .../jwetherell/algorithms/DataStructures.java | 90 +++++++++++++++---- .../algorithms/data_structures/BTree.java | 10 ++- 2 files changed, 78 insertions(+), 22 deletions(-) diff --git a/src/com/jwetherell/algorithms/DataStructures.java b/src/com/jwetherell/algorithms/DataStructures.java index 3017dcad..05b12474 100644 --- a/src/com/jwetherell/algorithms/DataStructures.java +++ b/src/com/jwetherell/algorithms/DataStructures.java @@ -77,6 +77,7 @@ public class DataStructures { private static Integer[] unsorted = null; private static Integer[] sorted = null; + private static Integer[] duplicates = null; private static String string = null; private static int debug = 1; // Debug level. 0=None, 1=Time and Memory (if enabled), 2=Time, Memory, data structure debug @@ -92,7 +93,7 @@ public class DataStructures { private static int testIndex = 0; // Index into the tests private static int testNumber = 0; // Number of aggregate tests which have been run - private static enum Type {Integer, String}; + public static enum Type {Integer, String}; public static void main(String[] args) { System.out.println("Starting tests."); @@ -110,7 +111,7 @@ public static void main(String[] args) { else System.err.println("Tests finished. Detected a failure."); } - private static void generateData() { + public static void generateTestData() { System.out.println("Generating data."); StringBuilder builder = new StringBuilder(); builder.append("Array="); @@ -141,14 +142,24 @@ private static void generateData() { sorted = Arrays.copyOf(unsorted, unsorted.length); Arrays.sort(sorted); + duplicates = new Integer[ARRAY_SIZE]; + for (int i=0; i 1) System.out.println("Undirected Graph with Negative Weights."); + if (debug > 1) System.out.println("Directed Graph with Negative Weights."); java.util.List> verticies = new ArrayList>(); Graph.Vertex v1 = new Graph.Vertex(1); verticies.add(v1); @@ -1792,7 +1803,7 @@ private static boolean testSkipListMap() { return true; } - private static boolean testMap(IMap map, Type keyType, String name) { + public static boolean testMap(IMap map, Type keyType, String name) { for (int i = 0; i < unsorted.length; i++) { Integer item = unsorted[i]; K k = null; @@ -1957,7 +1968,7 @@ private static boolean testMap(IMap map, Type keyType, String name) { * @param tree to test. * @return True is works as a tree structure. */ - private static > boolean testTree(ITree tree, Type type, String name) { + public static > boolean testTree(ITree tree, Type type, String name) { for (int i = 0; i < unsorted.length; i++) { Integer value = unsorted[i]; T item = null; @@ -2114,7 +2125,7 @@ private static > boolean testTree(ITree tree, Type ty * @param heap to test. * @return True is works as a heap structure. */ - private static > boolean testHeap(IHeap heap, String name, BinaryHeap.Type type) { + public static > boolean testHeap(IHeap heap, String name, BinaryHeap.Type type) { for (int i = 0; i < unsorted.length; i++) { T item = (T)unsorted[i]; boolean added = heap.add(item); @@ -2227,7 +2238,7 @@ private static > boolean testHeap(IHeap heap, String for (int i = 0; i < threeQuartersArray.length; i++) { T item = (T)threeQuartersArray[i]; boolean added = heap.add(item); - if (validateStructure && (!heap.validate() || (heap.size() != quarter+(i+1)))) { + if (validateStructure && (!heap.validate() || (heap.size() != (half-quarter)+(i+1)))) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); handleError(heap); return false; @@ -2246,7 +2257,7 @@ private static > boolean testHeap(IHeap heap, String handleError(heap); return false; } - if (validateStructure && (!heap.validate() || (heap.size() != unsorted.length-(i+1)))) { + if (validateStructure && (!heap.validate() || (heap.size() != sorted.length-(i+1)))) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); handleError(heap); return false; @@ -2273,7 +2284,7 @@ private static > boolean testHeap(IHeap heap, String * @param queue to test. * @return True is works as a FIFO structure. */ - private static > boolean testQueue(IQueue queue, String name) { + public static > boolean testQueue(IQueue queue, String name) { for (int i = 0; i < unsorted.length; i++) { T item = (T)unsorted[i]; boolean added = queue.offer(item); @@ -2424,7 +2435,7 @@ private static > boolean testQueue(IQueue queue, Stri * @param stack to test. * @return True is works as a LIFO structure. */ - private static > boolean testStack(IStack stack, String name) { + public static > boolean testStack(IStack stack, String name) { for (int i = 0; i < unsorted.length; i++) { T item = (T)unsorted[i]; boolean added = stack.push(item); @@ -2554,7 +2565,7 @@ private static > boolean testStack(IStack stack, Stri * @param list to test. * @return True is works as a list structure. */ - private static > boolean testList(IList list, String name) { + public static > boolean testList(IList list, String name) { for (int i = 0; i < unsorted.length; i++) { T item = (T)unsorted[i]; boolean added = list.add(item); @@ -2669,7 +2680,7 @@ private static > boolean testList(IList list, String * @param set to test. * @return True is works as a set structure. */ - private static > boolean testSet(ISet set, String name) { + public static > boolean testSet(ISet set, String name) { for (int i = 0; i < unsorted.length; i++) { T item = (T)unsorted[i]; boolean added = set.add(item); @@ -2778,7 +2789,7 @@ private static > boolean testSet(ISet set, String nam return true; } - private static > boolean testJavaCollection(Collection collection, Type type, String name) { + public static > boolean testJavaCollection(Collection collection, Type type, String name) { // Make sure the collection is empty if (!collection.isEmpty()) { System.err.println(name+" initial isEmpty() failed."); @@ -3238,6 +3249,47 @@ private static > boolean testJavaCollection(Collection> boolean testJavaCollection(Collection boolean testJavaMap(java.util.Map map, Type keyType, String name) { + public static boolean testJavaMap(java.util.Map map, Type keyType, String name) { // Make sure the map is empty if (!map.isEmpty()) { System.err.println(name+" initial isEmpty() failed."); @@ -3716,7 +3768,7 @@ private static boolean testJavaMap(java.util.Map map, Type keyType, S return true; } - private static boolean testMapEntrySet(java.util.Map map, Type keyType) { + public static boolean testMapEntrySet(java.util.Map map, Type keyType) { { // Test keys for (int i = 0; i < sorted.length; i++) { Integer item = sorted[i]; @@ -3818,7 +3870,7 @@ private static boolean testMapEntrySet(java.util.Map map, Type keyTy return true; } - private static > boolean testIterator(Iterator iter) { + public static > boolean testIterator(Iterator iter) { while (iter.hasNext()) { T item = iter.next(); if (item==null) { @@ -3829,7 +3881,7 @@ private static > boolean testIterator(Iterator iter) return true; } - private static > boolean testListIterator(ListIterator iter) { + public static > boolean testListIterator(ListIterator iter) { // Make sure you catch going prev at the start boolean exceptionThrown = false; try { diff --git a/src/com/jwetherell/algorithms/data_structures/BTree.java b/src/com/jwetherell/algorithms/data_structures/BTree.java index 7e4257d4..00b8c0f4 100644 --- a/src/com/jwetherell/algorithms/data_structures/BTree.java +++ b/src/com/jwetherell/algorithms/data_structures/BTree.java @@ -69,13 +69,16 @@ public boolean add(T value) { split(node); break; } - // navigate + // Navigate + + // Lesser or equal T lesser = node.getKey(0); - if (value.compareTo(lesser) < 0) { + if (value.compareTo(lesser) <= 0) { node = node.getChild(0); continue; } + // Greater int size = node.numberOfKeys(); int last = size - 1; T greater = node.getKey(last); @@ -84,10 +87,11 @@ public boolean add(T value) { continue; } + // Search internal nodes for (int i = 1; i < node.numberOfKeys(); i++) { T prev = node.getKey(i - 1); T next = node.getKey(i); - if (value.compareTo(prev) > 0 && value.compareTo(next) < 0) { + if (value.compareTo(prev) > 0 && value.compareTo(next) <= 0) { node = node.getChild(i); break; } From 0df6cd3b2dad933ec1b3a50f4e97b551f74134dd Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Wed, 11 Jun 2014 11:44:39 -0400 Subject: [PATCH 18/61] Fixed an accidental check-in of the DataStructures class --- .../jwetherell/algorithms/DataStructures.java | 49 +------------------ 1 file changed, 1 insertion(+), 48 deletions(-) diff --git a/src/com/jwetherell/algorithms/DataStructures.java b/src/com/jwetherell/algorithms/DataStructures.java index 05b12474..3ead9655 100644 --- a/src/com/jwetherell/algorithms/DataStructures.java +++ b/src/com/jwetherell/algorithms/DataStructures.java @@ -77,7 +77,6 @@ public class DataStructures { private static Integer[] unsorted = null; private static Integer[] sorted = null; - private static Integer[] duplicates = null; private static String string = null; private static int debug = 1; // Debug level. 0=None, 1=Time and Memory (if enabled), 2=Time, Memory, data structure debug @@ -142,17 +141,12 @@ public static void generateTestData() { sorted = Arrays.copyOf(unsorted, unsorted.length); Arrays.sort(sorted); - duplicates = new Integer[ARRAY_SIZE]; - for (int i=0; i> boolean testJavaCollection(Collection } } - { // Test handling of duplicates - for (int i=0; i Date: Wed, 11 Jun 2014 12:22:35 -0400 Subject: [PATCH 19/61] Added a hashCode method if an equals() method is defined --- .../algorithms/data_structures/Graph.java | 102 ++++++++++++------ .../algorithms/data_structures/HashMap.java | 11 ++ .../data_structures/IntervalTree.java | 10 +- .../algorithms/data_structures/KdTree.java | 18 +++- .../data_structures/SegmentTree.java | 102 ++++++++++++------ .../data_structures/SuffixTree.java | 30 +++--- 6 files changed, 191 insertions(+), 82 deletions(-) diff --git a/src/com/jwetherell/algorithms/data_structures/Graph.java b/src/com/jwetherell/algorithms/data_structures/Graph.java index c7c69159..11973bad 100644 --- a/src/com/jwetherell/algorithms/data_structures/Graph.java +++ b/src/com/jwetherell/algorithms/data_structures/Graph.java @@ -4,7 +4,6 @@ import java.util.Collection; import java.util.List; import java.util.Set; -import java.util.concurrent.CopyOnWriteArrayList; /** * Graph. Could be directed or undirected depending on the TYPE enum. A graph is @@ -17,25 +16,31 @@ */ public class Graph> { - private List> verticies = new CopyOnWriteArrayList>(); - private List> edges = new CopyOnWriteArrayList>(); + private List> verticies = new ArrayList>(); + private List> edges = new ArrayList>(); public enum TYPE { DIRECTED, UNDIRECTED - }; + } private TYPE type = TYPE.UNDIRECTED; public Graph() { } + public Graph(TYPE type) { + this(); + this.type = type; + } + public Graph(Graph g) { // Deep copies + type = g.getType(); + // Copy the vertices (which copies the edges) - for (Vertex v : g.getVerticies()) { + for (Vertex v : g.getVerticies()) this.verticies.add(new Vertex(v)); - } // Update the object references for (Vertex v : this.verticies) { @@ -49,13 +54,6 @@ public Graph(Graph g) { this.edges.add(e); } } - - type = g.getType(); - } - - public Graph(TYPE type) { - this(); - this.type = type; } public Graph(Collection> verticies, Collection> edges) { @@ -129,9 +127,8 @@ public Vertex(T value, int weight) { public Vertex(Vertex vertex) { this(vertex.value, vertex.weight); this.edges = new ArrayList>(); - for (Edge e : vertex.edges) { + for (Edge e : vertex.edges) this.edges.add(new Edge(e)); - } } public T getValue() { @@ -166,10 +163,9 @@ public boolean pathTo(Vertex v) { * {@inheritDoc} */ @Override - public int compareTo(Vertex v) { - if (this.value == null || v.value == null) - return -1; - return this.value.compareTo(v.value); + public int hashCode() { + int code = this.value.hashCode() + this.weight; + return 31 * code; } /** @@ -194,6 +190,16 @@ public boolean equals(Object v1) { return true; } + /** + * {@inheritDoc} + */ + @Override + public int compareTo(Vertex v) { + if (this.value == null || v.value == null) + return -1; + return this.value.compareTo(v.value); + } + /** * {@inheritDoc} */ @@ -232,7 +238,6 @@ public int getCost() { public void setCost(int cost) { this.cost = cost; - ; } public Vertex getFromVertex() { @@ -243,24 +248,12 @@ public Vertex getToVertex() { return to; } - /** - * {@inheritDoc} - */ - @Override - public int compareTo(Edge e) { - if (this.cost < e.cost) - return -1; - if (this.cost > e.cost) - return 1; - return 0; - } - /** * {@inheritDoc} */ @Override public int hashCode() { - return this.cost * (this.getFromVertex().value.hashCode() * this.getToVertex().value.hashCode()); + return 31 * (this.cost * (this.getFromVertex().value.hashCode() * this.getToVertex().value.hashCode())); } /** @@ -289,6 +282,18 @@ public boolean equals(Object e1) { return true; } + /** + * {@inheritDoc} + */ + @Override + public int compareTo(Edge e) { + if (this.cost < e.cost) + return -1; + if (this.cost > e.cost) + return 1; + return 0; + } + /** * {@inheritDoc} */ @@ -296,7 +301,7 @@ public boolean equals(Object e1) { public String toString() { StringBuilder builder = new StringBuilder(); builder.append("edge:").append(" [").append(from.value).append("]").append(" -> ").append("[") - .append(to.value).append("]").append(" = ").append(cost).append("\n"); + .append(to.value).append("]").append(" = ").append(cost).append("\n"); return builder.toString(); } } @@ -326,6 +331,33 @@ public Vertex getVertex() { return vertex; } + /** + * {@inheritDoc} + */ + @Override + public int hashCode() { + return 31 * (this.cost * this.vertex.hashCode()); + } + + /** + * {@inheritDoc} + */ + @SuppressWarnings("rawtypes") + @Override + public boolean equals(Object e1) { + if (!(e1 instanceof CostVertexPair)) + return false; + + CostVertexPair pair = (CostVertexPair)e1; + if (this.cost != pair.cost) + return false; + + if (!this.vertex.equals(pair)) + return false; + + return true; + } + /** * {@inheritDoc} */ @@ -389,4 +421,4 @@ public String toString() { return builder.toString(); } } -} +} \ No newline at end of file diff --git a/src/com/jwetherell/algorithms/data_structures/HashMap.java b/src/com/jwetherell/algorithms/data_structures/HashMap.java index 5d37dda9..0036fa52 100644 --- a/src/com/jwetherell/algorithms/data_structures/HashMap.java +++ b/src/com/jwetherell/algorithms/data_structures/HashMap.java @@ -194,6 +194,17 @@ public Pair(K key, V value) { this.value = value; } + /** + * {@inheritDoc} + */ + @Override + public int hashCode() { + return 31 * (this.key.hashCode()); + } + + /** + * {@inheritDoc} + */ @Override public boolean equals(Object obj) { if (obj == null) return false; diff --git a/src/com/jwetherell/algorithms/data_structures/IntervalTree.java b/src/com/jwetherell/algorithms/data_structures/IntervalTree.java index 7e98245a..b9db6a57 100644 --- a/src/com/jwetherell/algorithms/data_structures/IntervalTree.java +++ b/src/com/jwetherell/algorithms/data_structures/IntervalTree.java @@ -411,10 +411,18 @@ public IntervalData query(long start, long end) { * {@inheritDoc} */ @Override + public int hashCode() { + return 31 * ((int)(this.start + this.end)) + this.set.size(); + } + + /** + * {@inheritDoc} + */ + @SuppressWarnings("unchecked") + @Override public boolean equals(Object obj) { if (!(obj instanceof IntervalData)) return false; - @SuppressWarnings("unchecked") IntervalData data = (IntervalData) obj; if (this.start == data.start && this.end == data.end) { if (this.set.size() != data.set.size()) diff --git a/src/com/jwetherell/algorithms/data_structures/KdTree.java b/src/com/jwetherell/algorithms/data_structures/KdTree.java index 5cf1b998..55029e7a 100644 --- a/src/com/jwetherell/algorithms/data_structures/KdTree.java +++ b/src/com/jwetherell/algorithms/data_structures/KdTree.java @@ -507,6 +507,14 @@ public static int compareTo(int depth, int k, XYZPoint o1, XYZPoint o2) { return Z_COMPARATOR.compare(o1, o2); } + /** + * {@inheritDoc} + */ + @Override + public int hashCode() { + return 31 * (this.k + this.depth + this.id.hashCode()); + } + /** * {@inheritDoc} */ @@ -584,7 +592,15 @@ public double euclideanDistance(XYZPoint o1) { */ private static final double euclideanDistance(XYZPoint o1, XYZPoint o2) { return Math.sqrt(Math.pow((o1.x - o2.x), 2) + Math.pow((o1.y - o2.y), 2) + Math.pow((o1.z - o2.z), 2)); - }; + } + + /** + * {@inheritDoc} + */ + @Override + public int hashCode() { + return 31 * (int)(this.x + this.y + this.z); + } /** * {@inheritDoc} diff --git a/src/com/jwetherell/algorithms/data_structures/SegmentTree.java b/src/com/jwetherell/algorithms/data_structures/SegmentTree.java index 541b8870..c9bf1fee 100644 --- a/src/com/jwetherell/algorithms/data_structures/SegmentTree.java +++ b/src/com/jwetherell/algorithms/data_structures/SegmentTree.java @@ -237,14 +237,8 @@ public Data query(long start, long end) { * {@inheritDoc} */ @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - builder.append(super.toString()).append(" "); - builder.append(quad1).append(","); - builder.append(quad2).append(","); - builder.append(quad3).append(","); - builder.append(quad4); - return builder.toString(); + public int hashCode() { + return 31 * (int)(this.start + this.end + this.quad1 + this.quad2 + this.quad3 + this.quad4); } /** @@ -256,11 +250,26 @@ public boolean equals(Object obj) { return false; QuadrantData data = (QuadrantData) obj; if (this.start == data.start && this.end == data.end && this.quad1 == data.quad1 - && this.quad2 == data.quad2 && this.quad3 == data.quad3 && this.quad4 == data.quad4) { + && this.quad2 == data.quad2 && this.quad3 == data.quad3 && this.quad4 == data.quad4) + { return true; } return false; } + + /** + * {@inheritDoc} + */ + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append(super.toString()).append(" "); + builder.append(quad1).append(","); + builder.append(quad2).append(","); + builder.append(quad3).append(","); + builder.append(quad4); + return builder.toString(); + } } /** @@ -342,26 +351,35 @@ public Data query(long start, long end) { * {@inheritDoc} */ @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - builder.append(super.toString()).append(" "); - builder.append("maximum=").append(maximum); - return builder.toString(); + public int hashCode() { + return 31 * (int)(this.start + this.end + this.maximum.hashCode()); } /** * {@inheritDoc} */ + @SuppressWarnings("unchecked") @Override public boolean equals(Object obj) { if (!(obj instanceof RangeMaximumData)) return false; - @SuppressWarnings("unchecked") + RangeMaximumData data = (RangeMaximumData) obj; if (this.start == data.start && this.end == data.end && this.maximum.equals(data.maximum)) return true; return false; } + + /** + * {@inheritDoc} + */ + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append(super.toString()).append(" "); + builder.append("maximum=").append(maximum); + return builder.toString(); + } } /** @@ -453,11 +471,8 @@ public Data query(long start, long end) { * {@inheritDoc} */ @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - builder.append(super.toString()).append(" "); - builder.append("minimum=").append(minimum); - return builder.toString(); + public int hashCode() { + return 31 * (int)(this.start + this.end + this.minimum.hashCode()); } /** @@ -473,6 +488,17 @@ public boolean equals(Object obj) { return true; return false; } + + /** + * {@inheritDoc} + */ + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append(super.toString()).append(" "); + builder.append("minimum=").append(minimum); + return builder.toString(); + } } /** @@ -568,11 +594,8 @@ public Data query(long start, long end) { * {@inheritDoc} */ @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - builder.append(super.toString()).append(" "); - builder.append("sum=").append(sum); - return builder.toString(); + public int hashCode() { + return 31 * (int)(this.start + this.end + this.sum.hashCode()); } /** @@ -588,6 +611,17 @@ public boolean equals(Object obj) { return true; return false; } + + /** + * {@inheritDoc} + */ + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append(super.toString()).append(" "); + builder.append("sum=").append(sum); + return builder.toString(); + } } /** @@ -709,11 +743,8 @@ public Data query(long start, long end) { * {@inheritDoc} */ @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - builder.append(super.toString()).append(" "); - builder.append("set=").append(set); - return builder.toString(); + public int hashCode() { + return 31 * (int)(this.start + this.end + this.set.size()); } /** @@ -736,6 +767,17 @@ public boolean equals(Object obj) { } return false; } + + /** + * {@inheritDoc} + */ + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append(super.toString()).append(" "); + builder.append("set=").append(set); + return builder.toString(); + } } } diff --git a/src/com/jwetherell/algorithms/data_structures/SuffixTree.java b/src/com/jwetherell/algorithms/data_structures/SuffixTree.java index f334dbed..038225db 100644 --- a/src/com/jwetherell/algorithms/data_structures/SuffixTree.java +++ b/src/com/jwetherell/algorithms/data_structures/SuffixTree.java @@ -447,21 +447,6 @@ public boolean equals(Object obj) { return false; } - /** - * {@inheritDoc} - */ - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - builder.append("startNode=").append(startNode).append("\n"); - builder.append("endNode=").append(endNode).append("\n"); - builder.append("firstCharIndex=").append(firstCharIndex).append("\n"); - builder.append("lastCharIndex=").append(lastCharIndex).append("\n"); - String s = tree.string.substring(firstCharIndex, lastCharIndex + 1); - builder.append("string=").append(s).append("\n"); - return builder.toString(); - } - /** * {@inheritDoc} */ @@ -492,6 +477,21 @@ public int compareTo(Edge edge) { return 0; } + + /** + * {@inheritDoc} + */ + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("startNode=").append(startNode).append("\n"); + builder.append("endNode=").append(endNode).append("\n"); + builder.append("firstCharIndex=").append(firstCharIndex).append("\n"); + builder.append("lastCharIndex=").append(lastCharIndex).append("\n"); + String s = tree.string.substring(firstCharIndex, lastCharIndex + 1); + builder.append("string=").append(s).append("\n"); + return builder.toString(); + } } protected static class TreePrinter { From 7702d86f8e5d50b467f7d120c2e3e9c228c803c4 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Wed, 11 Jun 2014 12:24:10 -0400 Subject: [PATCH 20/61] Fixed a bug in Johnson's algorithm and commented/cleaned up the graph algorithm classes --- .../algorithms/graph/BellmanFord.java | 28 ++---- .../algorithms/graph/CycleDetection.java | 3 +- .../jwetherell/algorithms/graph/Dijkstra.java | 13 ++- .../algorithms/graph/FloydWarshall.java | 3 +- .../jwetherell/algorithms/graph/Johnson.java | 88 ++++++++++--------- 5 files changed, 63 insertions(+), 72 deletions(-) diff --git a/src/com/jwetherell/algorithms/graph/BellmanFord.java b/src/com/jwetherell/algorithms/graph/BellmanFord.java index 21c837e0..fe1fffb7 100644 --- a/src/com/jwetherell/algorithms/graph/BellmanFord.java +++ b/src/com/jwetherell/algorithms/graph/BellmanFord.java @@ -21,7 +21,6 @@ public class BellmanFord { private static Map, Graph.CostVertexPair> costs = null; private static Map, Set>> paths = null; - private static boolean containsNegativeWeightCycle = false; private BellmanFord() { } @@ -37,39 +36,35 @@ public static Map, Graph.CostPathPair> getShortes return map; } - public static Graph.CostPathPair getShortestPath(Graph g, Graph.Vertex start, Graph.Vertex end) { - if (g == null) + public static Graph.CostPathPair getShortestPath(Graph graph, Graph.Vertex start, Graph.Vertex end) { + if (graph == null) throw (new NullPointerException("Graph must be non-NULL.")); // Reset variables costs = null; paths = null; - containsNegativeWeightCycle = false; paths = new TreeMap, Set>>(); - for (Graph.Vertex v : g.getVerticies()) { + for (Graph.Vertex v : graph.getVerticies()) paths.put(v, new LinkedHashSet>()); - } costs = new TreeMap, Graph.CostVertexPair>(); - for (Graph.Vertex v : g.getVerticies()) { + for (Graph.Vertex v : graph.getVerticies()) if (v.equals(start)) costs.put(v, new Graph.CostVertexPair(0, v)); else costs.put(v, new Graph.CostVertexPair(Integer.MAX_VALUE, v)); - } boolean negativeCycleCheck = false; - for (int i = 0; i < (g.getVerticies().size()); i++) { + for (int i = 0; i < graph.getVerticies().size(); i++) { - // If it's the last vertices perform a negative weight cycle check. - // The graph should be - // finished by the size()-1 time through this loop. - if (i == (g.getVerticies().size() - 1)) + // If it's the last vertices, perform a negative weight cycle check. + // The graph should be finished by the size()-1 time through this loop. + if (i == (graph.getVerticies().size() - 1)) negativeCycleCheck = true; // Compute costs to all vertices - for (Graph.Edge e : g.getEdges()) { + for (Graph.Edge e : graph.getEdges()) { Graph.CostVertexPair pair = costs.get(e.getToVertex()); Graph.CostVertexPair lowestCostToThisVertex = costs.get(e.getFromVertex()); @@ -83,7 +78,6 @@ public static Graph.CostPathPair getShortestPath(Graph g, Grap if (negativeCycleCheck) { // Uhh ohh... negative weight cycle System.out.println("Graph contains a negative weight cycle."); - containsNegativeWeightCycle = true; return null; } // Found a shorter path to a reachable vertex @@ -103,8 +97,4 @@ public static Graph.CostPathPair getShortestPath(Graph g, Grap } return null; } - - public static boolean containsNegativeWeightCycle() { - return containsNegativeWeightCycle; - } } diff --git a/src/com/jwetherell/algorithms/graph/CycleDetection.java b/src/com/jwetherell/algorithms/graph/CycleDetection.java index 7d8c0369..9d66482d 100644 --- a/src/com/jwetherell/algorithms/graph/CycleDetection.java +++ b/src/com/jwetherell/algorithms/graph/CycleDetection.java @@ -40,8 +40,7 @@ private static final boolean depthFirstSearch(Graph.Vertex vertex) { boolean result = false; if (to != null && !visitedEdges.contains(edge)) { visitedEdges.add(edge); - Graph.Edge recip = new Graph.Edge(edge.getCost(), edge.getToVertex(), - edge.getFromVertex()); + Graph.Edge recip = new Graph.Edge(edge.getCost(), edge.getToVertex(), edge.getFromVertex()); visitedEdges.add(recip); result = depthFirstSearch(to); } diff --git a/src/com/jwetherell/algorithms/graph/Dijkstra.java b/src/com/jwetherell/algorithms/graph/Dijkstra.java index 02707dd3..15448fb5 100644 --- a/src/com/jwetherell/algorithms/graph/Dijkstra.java +++ b/src/com/jwetherell/algorithms/graph/Dijkstra.java @@ -39,8 +39,8 @@ public static Map, Graph.CostPathPair> getShortes return map; } - public static Graph.CostPathPair getShortestPath(Graph g, Graph.Vertex start, Graph.Vertex end) { - if (g == null) + public static Graph.CostPathPair getShortestPath(Graph graph, Graph.Vertex start, Graph.Vertex end) { + if (graph == null) throw (new NullPointerException("Graph must be non-NULL.")); // Reset variables @@ -49,16 +49,16 @@ public static Graph.CostPathPair getShortestPath(Graph g, Grap unvisited = null; // Dijkstra's algorithm only works on positive cost graphs - boolean hasNegativeEdge = checkForNegativeEdges(g.getVerticies()); + boolean hasNegativeEdge = checkForNegativeEdges(graph.getVerticies()); if (hasNegativeEdge) throw (new IllegalArgumentException("Negative cost Edges are not allowed.")); paths = new TreeMap, Set>>(); - for (Graph.Vertex v : g.getVerticies()) + for (Graph.Vertex v : graph.getVerticies()) paths.put(v, new LinkedHashSet>()); costs = new TreeMap, Graph.CostVertexPair>(); - for (Graph.Vertex v : g.getVerticies()) { + for (Graph.Vertex v : graph.getVerticies()) { if (v.equals(start)) costs.put(v, new Graph.CostVertexPair(0, v)); else @@ -70,8 +70,7 @@ public static Graph.CostPathPair getShortestPath(Graph g, Grap Graph.Vertex vertex = start; while (true) { - // Compute costs from current vertex to all reachable vertices which - // haven't been visited + // Compute costs from current vertex to all reachable vertices which haven't been visited for (Graph.Edge e : vertex.getEdges()) { Graph.CostVertexPair pair = costs.get(e.getToVertex()); // O(log n) Graph.CostVertexPair lowestCostToThisVertex = costs.get(vertex); // O(log n) diff --git a/src/com/jwetherell/algorithms/graph/FloydWarshall.java b/src/com/jwetherell/algorithms/graph/FloydWarshall.java index 10e45b13..5b7e1f00 100644 --- a/src/com/jwetherell/algorithms/graph/FloydWarshall.java +++ b/src/com/jwetherell/algorithms/graph/FloydWarshall.java @@ -19,8 +19,7 @@ public class FloydWarshall { private FloydWarshall() { } - public static Map, Map, Integer>> getAllPairsShortestPaths( - Graph g) { + public static Map, Map, Integer>> getAllPairsShortestPaths(Graph g) { Map, Map, Integer>> allShortestPaths = new HashMap, Map, Integer>>(); List> vertices = g.getVerticies(); diff --git a/src/com/jwetherell/algorithms/graph/Johnson.java b/src/com/jwetherell/algorithms/graph/Johnson.java index 721e18d4..9b7fb9f6 100644 --- a/src/com/jwetherell/algorithms/graph/Johnson.java +++ b/src/com/jwetherell/algorithms/graph/Johnson.java @@ -17,57 +17,60 @@ */ public class Johnson { - private Johnson() { - } + private Johnson() { } + + public static Map, Map, Set>>> getAllPairsShortestPaths(Graph g) { + Map, Map, Set>>> allShortestPaths = + new HashMap, Map, Set>>>(); - public static Map, Map, Set>>> getAllPairsShortestPaths( - Graph g) { - Map, Map, Set>>> allShortestPaths = new HashMap, Map, Set>>>(); + // First, a new node 'connector' is added to the graph, connected by zero-weight edges to each of the other nodes. + Graph graph = new Graph(g); + Graph.Vertex connector = new Graph.Vertex(Integer.MAX_VALUE); + graph.getVerticies().add(connector); // Add the connector Vertex to all edges. for (Graph.Vertex v : g.getVerticies()) { - Graph graph = new Graph(g); // Clone the original - // graph - Graph.Vertex connector = new Graph.Vertex(Integer.MAX_VALUE); // Make - // new - // Vertex - // that - // connects - // to - // all - // Vertices - graph.getVerticies().add(connector); - int indexOfV = graph.getVerticies().indexOf(v); - Graph.Edge e = new Graph.Edge(0, connector, graph.getVerticies().get(indexOfV)); - connector.addEdge(e); - graph.getEdges().add(e); + Graph.Edge edge = new Graph.Edge(0, connector, graph.getVerticies().get(indexOfV)); + connector.addEdge(edge); + graph.getEdges().add(edge); + } - Map, Graph.CostPathPair> costs = BellmanFord.getShortestPaths(graph, - connector); - if (BellmanFord.containsNegativeWeightCycle()) { - System.out.println("Graph contains a negative weight cycle. Cannot compute shortest path."); - return null; - } - for (Graph.Vertex v2 : costs.keySet()) { - int index = graph.getVerticies().indexOf(v2); - Graph.Vertex vertexToAdjust = graph.getVerticies().get(index); - Graph.CostPathPair pair = costs.get(v2); - vertexToAdjust.setWeight(pair.getCost()); - } + // Second, the Bellman–Ford algorithm is used, starting from the new vertex 'connector', to find for each vertex v + // the minimum weight h(v) of a path from 'connector' to v. If this step detects a negative cycle, the algorithm is terminated. + Map, Graph.CostPathPair> costs = BellmanFord.getShortestPaths(graph, connector); + if (costs==null) { + System.out.println("Graph contains a negative weight cycle. Cannot compute shortest path."); + return null; + } - for (Graph.Edge e2 : graph.getEdges()) { - int startCost = e2.getFromVertex().getWeight(); - int endCode = e2.getToVertex().getWeight(); - int adjCost = e2.getCost() + startCost - endCode; - e2.setCost(adjCost); - } + // Next the edges of the original graph are reweighted using the values computed by the Bellman–Ford algorithm: an edge + // from u to v, having length w(u,v), is given the new length w(u,v) + h(u) − h(v). + for (Graph.Edge e : graph.getEdges()) { + int weight = e.getCost(); + Graph.Vertex u = e.getFromVertex(); + Graph.Vertex v = e.getToVertex(); + + // Don't worry about the connector + if (u.equals(connector) || v.equals(connector)) continue; - int index = graph.getVerticies().indexOf(connector); - graph.getVerticies().remove(index); - index = graph.getEdges().indexOf(e); - graph.getEdges().remove(index); + // Adjust the costs + int uCost = costs.get(u).getCost(); + int vCost = costs.get(v).getCost(); + int newWeight = weight+uCost-vCost; + e.setCost(newWeight); + } + // Finally, 'connector' is removed, and Dijkstra's algorithm is used to find the shortest paths from each node s to every + // other vertex in the reweighted graph. + int indexOfConnector = graph.getVerticies().indexOf(connector); + graph.getVerticies().remove(indexOfConnector); + for (Graph.Edge e : connector.getEdges()) { + int indexOfConnectorEdge = graph.getEdges().indexOf(e); + graph.getEdges().remove(indexOfConnectorEdge); + } + + for (Graph.Vertex v : g.getVerticies()) { Map, Graph.CostPathPair> costPaths = Dijkstra.getShortestPaths(graph, v); Map, Set>> paths = new HashMap, Set>>(); for (Graph.Vertex v2 : costPaths.keySet()) { @@ -76,6 +79,7 @@ public static Map, Map, Set Date: Wed, 11 Jun 2014 16:05:32 -0400 Subject: [PATCH 21/61] Moved the Graph related tests to their own file --- src/com/jwetherell/algorithms/Graphs.java | 968 ++++++++++++++++++++++ 1 file changed, 968 insertions(+) create mode 100644 src/com/jwetherell/algorithms/Graphs.java diff --git a/src/com/jwetherell/algorithms/Graphs.java b/src/com/jwetherell/algorithms/Graphs.java new file mode 100644 index 00000000..69f863f4 --- /dev/null +++ b/src/com/jwetherell/algorithms/Graphs.java @@ -0,0 +1,968 @@ +package com.jwetherell.algorithms; + +import java.util.ArrayList; +import java.util.Map; +import java.util.Set; + +import com.jwetherell.algorithms.data_structures.Graph; +import com.jwetherell.algorithms.data_structures.Graph.Edge; +import com.jwetherell.algorithms.data_structures.Graph.Vertex; +import com.jwetherell.algorithms.graph.BellmanFord; +import com.jwetherell.algorithms.graph.CycleDetection; +import com.jwetherell.algorithms.graph.Dijkstra; +import com.jwetherell.algorithms.graph.FloydWarshall; +import com.jwetherell.algorithms.graph.Johnson; +import com.jwetherell.algorithms.graph.Prim; +import com.jwetherell.algorithms.graph.TopologicalSort; + +public class Graphs { + + private static int debug = 1; // Debug level. 0=None, 1=Time and Memory (if enabled), 2=Time, Memory, data structure debug + + @SuppressWarnings("unchecked") + private static boolean testGraph() { + { // UNDIRECTED GRAPH + if (debug > 1) System.out.println("Undirected Graph."); + java.util.List> verticies = new ArrayList>(); + Graph.Vertex v1 = new Graph.Vertex(1); + verticies.add(v1); + Graph.Vertex v2 = new Graph.Vertex(2); + verticies.add(v2); + Graph.Vertex v3 = new Graph.Vertex(3); + verticies.add(v3); + Graph.Vertex v4 = new Graph.Vertex(4); + verticies.add(v4); + Graph.Vertex v5 = new Graph.Vertex(5); + verticies.add(v5); + Graph.Vertex v6 = new Graph.Vertex(6); + verticies.add(v6); + + java.util.List> edges = new ArrayList>(); + Graph.Edge e1_2 = new Graph.Edge(7, v1, v2); + edges.add(e1_2); + Graph.Edge e1_3 = new Graph.Edge(9, v1, v3); + edges.add(e1_3); + Graph.Edge e1_6 = new Graph.Edge(14, v1, v6); + edges.add(e1_6); + Graph.Edge e2_3 = new Graph.Edge(10, v2, v3); + edges.add(e2_3); + Graph.Edge e2_4 = new Graph.Edge(15, v2, v4); + edges.add(e2_4); + Graph.Edge e3_4 = new Graph.Edge(11, v3, v4); + edges.add(e3_4); + Graph.Edge e3_6 = new Graph.Edge(2, v3, v6); + edges.add(e3_6); + Graph.Edge e5_6 = new Graph.Edge(9, v5, v6); + edges.add(e5_6); + Graph.Edge e4_5 = new Graph.Edge(6, v4, v5); + edges.add(e4_5); + + Graph undirected = new Graph(verticies, edges); + if (debug > 1) System.out.println(undirected.toString()); + + Graph.Vertex start = v1; + Graph.Vertex end = v5; + + System.out.println("Dijstra's shortest paths of the undirected graph from " + start.getValue()+" to all."); + Map, Graph.CostPathPair> map1 = Dijkstra.getShortestPaths(undirected, start); + if (debug > 1) System.out.println(getPathMapString(start, map1)); + + // Ideal path + Map, Graph.CostPathPair> result1 = new java.util.HashMap, Graph.CostPathPair>(); + { + { + int cost = 11; + Set> set = new java.util.LinkedHashSet>(); + set.add(e1_3); + set.add(e3_6); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + result1.put(v6, path); + } + { + int cost = 20; + Set> set = new java.util.LinkedHashSet>(); + set.add(e1_3); + set.add(e3_6); + set.add(new Graph.Edge(9, v6, v5)); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + result1.put(v5, path); + } + { + int cost = 9; + Set> set = new java.util.LinkedHashSet>(); + set.add(e1_3); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + result1.put(v3, path); + } + { + int cost = 20; + Set> set = new java.util.LinkedHashSet>(); + set.add(e1_3); + set.add(e3_4); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + result1.put(v4, path); + } + { + int cost = 7; + Set> set = new java.util.LinkedHashSet>(); + set.add(e1_2); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + result1.put(v2, path); + } + { + int cost = 0; + Set> set = new java.util.LinkedHashSet>(); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + result1.put(v1, path); + } + } + + // Compare results + for (Graph.Vertex v : map1.keySet()) { + Graph.CostPathPair path1 = map1.get(v); + Graph.CostPathPair path2 = result1.get(v); + if (path1==null||path2==null) { + System.out.println("Dijstra's shortest path error. path1="+path1+" path2="+path2); + return false; + } + if (!path1.equals(path2)) { + System.err.println("Dijstra's shortest path error. path1="+path1+" path2="+path2); + return false; + } + } + System.out.println("Dijstra's shortest path worked correctly."); + + System.out.println("Dijstra's shortest path of the undirected graph from " + start.getValue() + " to " + end.getValue()+"."); + Graph.CostPathPair pair1 = Dijkstra.getShortestPath(undirected, start, end); + if (debug > 1) System.out.println(pair1.toString()); + if (pair1 == null) { + System.out.println("No path from " + start.getValue() + " to " + end.getValue()); + return false; + } + + // Ideal pair + int cost = 20; + Set> set = new java.util.LinkedHashSet>(); + set.add(e1_3); + set.add(e3_6); + set.add(new Graph.Edge(9, v6, v5)); + Graph.CostPathPair result2 = new Graph.CostPathPair(cost, set); + + if (!pair1.equals(result2)) { + System.err.println("Dijstra's shortest path error. pair1="+pair1+" pair2="+result2); + return false; + } + System.out.println("Dijstra's shortest path worked correctly"); + + System.out.println("Bellman-Ford's shortest paths of the undirected graph from " + start.getValue()+" to all."); + Map, Graph.CostPathPair> map2 = BellmanFord.getShortestPaths(undirected, start); + if (debug > 1) System.out.println(getPathMapString(start, map2)); + + // Compare results + for (Graph.Vertex v : map2.keySet()) { + Graph.CostPathPair path1 = map2.get(v); + Graph.CostPathPair path2 = result1.get(v); + if (path1==null||path2==null) { + System.out.println("Bellman-Ford's shortest path error. path1="+path1+" path2="+path2); + return false; + } + if (!path1.equals(path2)) { + System.err.println("Bellman-Ford's shortest path error. path1="+path1+" path2="+path2); + return false; + } + } + System.out.println("Bellman-Ford's shortest path worked correctly."); + + System.out.println("Bellman-Ford's shortest path of the undirected graph from " + start.getValue() + " to " + end.getValue()+"."); + Graph.CostPathPair pair2 = BellmanFord.getShortestPath(undirected, start, end); + if (pair2 == null) { + System.out.println("No path from " + start.getValue() + " to " + end.getValue()); + return false; + } + + if (!pair2.equals(result2)) { + System.err.println("Bellman-Ford's shortest path error. pair2="+pair2+" result2="+result2); + return false; + } + System.out.println("Bellman-Ford's shortest path worked correctly"); + + // MST + + System.out.println("Prim's minimum spanning tree of the undirected graph starting from vertex " + start.getValue()+"."); + Graph.CostPathPair pair3 = Prim.getMinimumSpanningTree(undirected, start); + if (debug > 1) System.out.println(pair3.toString()); + { + // Ideal MST + cost = 33; + set = new java.util.LinkedHashSet>(); + set.add(e1_2); + set.add(e1_3); + set.add(e3_6); + set.add(new Graph.Edge(9, v6, v5)); + set.add(new Graph.Edge(6, v5, v4)); + Graph.CostPathPair result3 = new Graph.CostPathPair(cost, set); + + if (!pair3.equals(result3)) { + System.err.println("Prim's minimum spanning tree error. pair3="+pair3+" result3="+result3); + return false; + } + System.out.println("Prim's minimum spanning tree worked correctly"); + } + + // Prim on a graph with cycles + java.util.List> cyclicVerticies = new ArrayList>(); + Graph.Vertex cv1 = new Graph.Vertex(1); + cyclicVerticies.add(cv1); + Graph.Vertex cv2 = new Graph.Vertex(2); + cyclicVerticies.add(cv2); + Graph.Vertex cv3 = new Graph.Vertex(3); + cyclicVerticies.add(cv3); + Graph.Vertex cv4 = new Graph.Vertex(4); + cyclicVerticies.add(cv4); + Graph.Vertex cv5 = new Graph.Vertex(5); + cyclicVerticies.add(cv5); + + java.util.List> cyclicEdges = new ArrayList>(); + Graph.Edge ce1_2 = new Graph.Edge(3, cv1, cv2); + cyclicEdges.add(ce1_2); + Graph.Edge ce2_3 = new Graph.Edge(2, cv2, cv3); + cyclicEdges.add(ce2_3); + Graph.Edge ce3_4 = new Graph.Edge(4, cv3, cv4); + cyclicEdges.add(ce3_4); + Graph.Edge ce4_1 = new Graph.Edge(1, cv4, cv1); + cyclicEdges.add(ce4_1); + Graph.Edge ce4_5 = new Graph.Edge(1, cv4, cv5); + cyclicEdges.add(ce4_5); + + Graph cyclicUndirected = new Graph(cyclicVerticies, cyclicEdges); + if (debug > 1) System.out.println(cyclicUndirected.toString()); + + start = cv1; + + if (debug > 1) System.out.println("Prim's minimum spanning tree of a cyclic undirected graph from " + start.getValue()); + Graph.CostPathPair pair4 = Prim.getMinimumSpanningTree(cyclicUndirected, start); + if (debug > 1) System.out.println(pair4.toString()); + { + // Ideal MST + cost = 7; + set = new java.util.LinkedHashSet>(); + set.add(new Graph.Edge(1, v1, v4)); + set.add(ce4_5); + set.add(ce1_2); + set.add(ce2_3); + Graph.CostPathPair result4 = new Graph.CostPathPair(cost, set); + + if (!pair4.equals(result4)) { + System.err.println("Prim's minimum spanning tree error. pair4="+pair4+" result4="+result4); + return false; + } + System.out.println("Prim's minimum spanning tree worked correctly"); + } + + if (debug > 1) System.out.println(); + } + + { // DIRECTED GRAPH + if (debug > 1) System.out.println("Directed Graph."); + java.util.List> verticies = new ArrayList>(); + Graph.Vertex v1 = new Graph.Vertex(1); + verticies.add(v1); + Graph.Vertex v2 = new Graph.Vertex(2); + verticies.add(v2); + Graph.Vertex v3 = new Graph.Vertex(3); + verticies.add(v3); + Graph.Vertex v4 = new Graph.Vertex(4); + verticies.add(v4); + Graph.Vertex v5 = new Graph.Vertex(5); + verticies.add(v5); + Graph.Vertex v6 = new Graph.Vertex(6); + verticies.add(v6); + Graph.Vertex v7 = new Graph.Vertex(7); + verticies.add(v7); + + java.util.List> edges = new ArrayList>(); + Graph.Edge e1_2 = new Graph.Edge(7, v1, v2); + edges.add(e1_2); + Graph.Edge e1_3 = new Graph.Edge(9, v1, v3); + edges.add(e1_3); + Graph.Edge e1_6 = new Graph.Edge(14, v1, v6); + edges.add(e1_6); + Graph.Edge e2_3 = new Graph.Edge(10, v2, v3); + edges.add(e2_3); + Graph.Edge e2_4 = new Graph.Edge(15, v2, v4); + edges.add(e2_4); + Graph.Edge e3_4 = new Graph.Edge(11, v3, v4); + edges.add(e3_4); + Graph.Edge e3_6 = new Graph.Edge(2, v3, v6); + edges.add(e3_6); + Graph.Edge e6_5 = new Graph.Edge(9, v6, v5); + edges.add(e6_5); + Graph.Edge e4_5 = new Graph.Edge(6, v4, v5); + edges.add(e4_5); + Graph.Edge e4_7 = new Graph.Edge(16, v4, v7); + edges.add(e4_7); + + Graph directed = new Graph(Graph.TYPE.DIRECTED, verticies, edges); + if (debug > 1) System.out.println(directed.toString()); + + Graph.Vertex start = v1; + Graph.Vertex end = v5; + + System.out.println("Dijstra's shortest paths of the directed graph from " + start.getValue() + " to all."); + Map, Graph.CostPathPair> map1 = Dijkstra.getShortestPaths(directed, start); + if (debug > 1) System.out.println(getPathMapString(start, map1)); + + // Ideal path + Map, Graph.CostPathPair> result1 = new java.util.HashMap, Graph.CostPathPair>(); + { + { + int cost = 11; + Set> set = new java.util.LinkedHashSet>(); + set.add(e1_3); + set.add(e3_6); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + result1.put(v6, path); + } + { + int cost = 20; + Set> set = new java.util.LinkedHashSet>(); + set.add(e1_3); + set.add(e3_6); + set.add(new Graph.Edge(9, v6, v5)); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + result1.put(v5, path); + } + { + int cost = 36; + Set> set = new java.util.LinkedHashSet>(); + set.add(e1_3); + set.add(e3_4); + set.add(e4_7); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + result1.put(v7, path); + } + { + int cost = 9; + Set> set = new java.util.LinkedHashSet>(); + set.add(e1_3); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + result1.put(v3, path); + } + { + int cost = 20; + Set> set = new java.util.LinkedHashSet>(); + set.add(e1_3); + set.add(e3_4); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + result1.put(v4, path); + } + { + int cost = 7; + Set> set = new java.util.LinkedHashSet>(); + set.add(e1_2); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + result1.put(v2, path); + } + { + int cost = 0; + Set> set = new java.util.LinkedHashSet>(); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + result1.put(v1, path); + } + } + + // Compare results + for (Graph.Vertex v : map1.keySet()) { + Graph.CostPathPair path1 = map1.get(v); + Graph.CostPathPair path2 = result1.get(v); + if (path1==null||path2==null) { + System.out.println("Dijstra's shortest path error. path1="+path1+" path2="+path2); + return false; + } + if (!path1.equals(path2)) { + System.err.println("Dijstra's shortest path error. path1="+path1+" path2="+path2); + return false; + } + } + System.out.println("Dijstra's shortest path worked correctly."); + + System.out.println("Dijstra's shortest path of the directed graph from " + start.getValue() + " to " + end.getValue() + "."); + Graph.CostPathPair pair1 = Dijkstra.getShortestPath(directed, start, end); + if (pair1 == null) { + System.out.println("No path from " + start.getValue() + " to " + end.getValue()); + return false; + } + + // Ideal pair + int cost = 20; + Set> set = new java.util.LinkedHashSet>(); + set.add(e1_3); + set.add(e3_6); + set.add(new Graph.Edge(9, v6, v5)); + Graph.CostPathPair result2 = new Graph.CostPathPair(cost, set); + + // Compare pair + if (!pair1.equals(result2)) { + System.err.println("Dijstra's shortest path error. pair1="+pair1+" result2="+result2); + return false; + } + System.out.println("Dijstra's shortest path worked correctly"); + + System.out.println("Bellman-Ford's shortest paths of the directed graph from " + start.getValue() + " to all."); + Map, Graph.CostPathPair> map2 = BellmanFord.getShortestPaths(directed, start); + if (debug > 1) System.out.println(getPathMapString(start, map2)); + + // Compare results + for (Graph.Vertex v : map2.keySet()) { + Graph.CostPathPair path1 = map2.get(v); + Graph.CostPathPair path2 = result1.get(v); + if (path1==null||path2==null) { + System.out.println("Bellman-Ford's shortest path error. path1="+path1+" path2="+path2); + return false; + } + if (!path1.equals(path2)) { + System.err.println("Bellman-Ford's shortest path error. path1="+path1+" path2="+path2); + return false; + } + } + System.out.println("Bellman-Ford's shortest path worked correctly."); + + System.out.println("Bellman-Ford's shortest path of the directed graph from " + start.getValue() + " to " + end.getValue() + "."); + Graph.CostPathPair pair2 = BellmanFord.getShortestPath(directed, start, end); + if (pair2 == null) { + System.out.println("No path from " + start.getValue() + " to " + end.getValue()); + return false; + } + + // Compare pair + if (!pair2.equals(result2)) { + System.err.println("Bellman-Ford's shortest path error. pair2="+pair2+" result2="+result2); + return false; + } + System.out.println("Bellman-Ford's shortest path worked correctly"); + + if (debug > 1) System.out.println(); + } + + { // DIRECTED GRAPH (WITH NEGATIVE WEIGHTS) + if (debug > 1) System.out.println("Directed Graph with Negative Weights."); + java.util.List> verticies = new ArrayList>(); + Graph.Vertex v1 = new Graph.Vertex(1); + verticies.add(v1); + Graph.Vertex v2 = new Graph.Vertex(2); + verticies.add(v2); + Graph.Vertex v3 = new Graph.Vertex(3); + verticies.add(v3); + Graph.Vertex v4 = new Graph.Vertex(4); + verticies.add(v4); + + java.util.List> edges = new ArrayList>(); + Graph.Edge e1_4 = new Graph.Edge(2, v1, v4); + edges.add(e1_4); + Graph.Edge e2_1 = new Graph.Edge(6, v2, v1); + edges.add(e2_1); + Graph.Edge e2_3 = new Graph.Edge(3, v2, v3); + edges.add(e2_3); + Graph.Edge e3_1 = new Graph.Edge(4, v3, v1); + edges.add(e3_1); + Graph.Edge e3_4 = new Graph.Edge(5, v3, v4); + edges.add(e3_4); + Graph.Edge e4_2 = new Graph.Edge(-7, v4, v2); + edges.add(e4_2); + Graph.Edge e4_3 = new Graph.Edge(-3, v4, v3); + edges.add(e4_3); + + Graph directed = new Graph(Graph.TYPE.DIRECTED, verticies, edges); + if (debug > 1) System.out.println(directed.toString()); + + Graph.Vertex start = v1; + Graph.Vertex end = v3; + + System.out.println("Bellman-Ford's shortest paths of the directed graph with negative weight from " + start.getValue()+" to all."); + Map, Graph.CostPathPair> map1 = BellmanFord.getShortestPaths(directed, start); + if (debug > 1) System.out.println(getPathMapString(start, map1)); + + // Ideal path + Map, Graph.CostPathPair> result1 = new java.util.HashMap, Graph.CostPathPair>(); + { + { + int cost = -2; + Set> set = new java.util.LinkedHashSet>(); + set.add(e1_4); + set.add(e4_2); + set.add(e2_3); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + result1.put(v3, path); + } + { + int cost = 2; + Set> set = new java.util.LinkedHashSet>(); + set.add(e1_4); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + result1.put(v4, path); + } + { + int cost = -5; + Set> set = new java.util.LinkedHashSet>(); + set.add(e1_4); + set.add(e4_2); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + result1.put(v2, path); + } + { + int cost = 0; + Set> set = new java.util.LinkedHashSet>(); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + result1.put(v1, path); + } + } + + // Compare results + for (Graph.Vertex v : map1.keySet()) { + Graph.CostPathPair path1 = map1.get(v); + Graph.CostPathPair path2 = result1.get(v); + if (path1==null||path2==null) { + System.out.println("Bellman-Ford's shortest path error. path1="+path1+" path2="+path2); + return false; + } + if (!path1.equals(path2)) { + System.err.println("Bellman-Ford's shortest path error. path1="+path1+" path2="+path2); + return false; + } + } + System.out.println("Bellman-Ford's shortest path worked correctly."); + + System.out.println("Bellman-Ford's shortest path of the directed graph from with negative weight " + start.getValue() + " to " + end.getValue()+ "."); + Graph.CostPathPair pair1 = BellmanFord.getShortestPath(directed, start, end); + if (pair1 == null) { + System.out.println("No path from " + start.getValue() + " to " + end.getValue()); + return false; + } + + // Ideal pair + int cost = -2; + Set> set = new java.util.LinkedHashSet>(); + set.add(e1_4); + set.add(e4_2); + set.add(e2_3); + Graph.CostPathPair result2 = new Graph.CostPathPair(cost, set); + + // Compare pair + if (!pair1.equals(result2)) { + System.err.println("Bellman-Ford's shortest path error. pair1="+pair1+" result2="+result2); + return false; + } + System.out.println("Bellman-Ford's shortest path worked correctly"); + + System.out.println("Johnson's all-pairs shortest path of the directed graph with negative weight."); + Map, Map, Set>>> path1 = Johnson.getAllPairsShortestPaths(directed); + if (debug > 1) System.out.println(getPathMapString(path1)); + if (path1 == null) { + System.err.println("Directed graph contains a negative weight cycle."); + return false; + } + + Map, Map, Set>>> result3 = new java.util.HashMap, Map, Set>>>(); + { + { // vertex 3 + Map, Set>> m = new java.util.HashMap, Set>>(); + Set> s3 = new java.util.LinkedHashSet>(); + m.put(v3, s3); + Set> s4 = new java.util.LinkedHashSet>(); + s4.add(e3_4); + m.put(v4, s4); + Set> s2 = new java.util.LinkedHashSet>(); + s2.add(e3_4); + s2.add(e4_2); + m.put(v2, s2); + Set> s1 = new java.util.LinkedHashSet>(); + s1.add(e3_1); + m.put(v1, s1); + result3.put(v3, m); + } + { // vertex 4 + Map, Set>> m = new java.util.HashMap, Set>>(); + Set> s3 = new java.util.LinkedHashSet>(); + s3.add(e4_2); + s3.add(e2_3); + m.put(v3, s3); + Set> s4 = new java.util.LinkedHashSet>(); + s4.add(e4_2); + s4.add(e2_3); + s4.add(e3_4); + m.put(v4, s4); + Set> s2 = new java.util.LinkedHashSet>(); + s2.add(e4_2); + m.put(v2, s2); + Set> s1 = new java.util.LinkedHashSet>(); + s1.add(e4_2); + s1.add(e2_1); + m.put(v1, s1); + result3.put(v4, m); + } + { // vertex 2 + Map, Set>> m = new java.util.HashMap, Set>>(); + Set> s3 = new java.util.LinkedHashSet>(); + s3.add(e2_3); + m.put(v3, s3); + Set> s4 = new java.util.LinkedHashSet>(); + s4.add(e2_1); + s4.add(e1_4); + m.put(v4, s4); + Set> s2 = new java.util.LinkedHashSet>(); + m.put(v2, s2); + Set> s1 = new java.util.LinkedHashSet>(); + s1.add(e2_1); + m.put(v1, s1); + result3.put(v2, m); + } + { // vertex 1 + Map, Set>> m = new java.util.HashMap, Set>>(); + Set> s3 = new java.util.LinkedHashSet>(); + s3.add(e1_4); + s3.add(e4_2); + s3.add(e2_3); + m.put(v3, s3); + Set> s4 = new java.util.LinkedHashSet>(); + s4.add(e1_4); + m.put(v4, s4); + Set> s2 = new java.util.LinkedHashSet>(); + s2.add(e1_4); + s2.add(e4_2); + m.put(v2, s2); + Set> s1 = new java.util.LinkedHashSet>(); + s1.add(e1_4); + m.put(v1, s1); + result3.put(v1, m); + } + } + + // Compare results + for (Vertex vertex1 : path1.keySet()) { + Map, Set>> m1 = path1.get(vertex1); + Map, Set>> m2 = result3.get(vertex1); + for (Vertex vertex2 : m1.keySet()) { + Set> set3 = m1.get(vertex2); + Set> set4 = m2.get(vertex2); + Object[] objs1 = set3.toArray(); + Object[] objs2 = set4.toArray(); + int size = objs1.length; + for (int i=0; i e1 = (Edge)objs1[i]; + Edge e2 = (Edge)objs2[i]; + if (!e1.getFromVertex().equals(e2.getFromVertex())) { + System.err.println("Johnson's all-pairs shortest path error. e1.from="+e1.getFromVertex()+" e2.from="+e2.getFromVertex()); + return false; + } + if (!e1.getToVertex().equals(e2.getToVertex())) { + System.err.println("Johnson's all-pairs shortest path error. e1.to="+e1.getToVertex()+" e2.to="+e2.getToVertex()); + return false; + } + } + } + } + System.out.println("Bellman-Ford's shortest path worked correctly."); + + System.out.println("Floyd-Warshall's all-pairs shortest path weights of the directed graph with negative weight."); + Map, Map, Integer>> pathWeights = FloydWarshall.getAllPairsShortestPaths(directed); + if (debug > 1) System.out.println(getWeightMapString(pathWeights)); + + Map, Map, Integer>> result4 = new java.util.HashMap, Map, Integer>>(); + { + // Ideal weights + { // Vertex 3 + Map, Integer> m = new java.util.HashMap, Integer>(); + { + // Vertex 3 + m.put(v3, 0); + } + { + // Vertex 4 + m.put(v4, 5); + } + { + // Vertex 2 + m.put(v2, -2); + } + { + // Vertex 1 + m.put(v1, 4); + } + result4.put(v3, m); + } + { // Vertex 4 + Map, Integer> m = new java.util.HashMap, Integer>(); + { + // Vertex 3 + m.put(v3, -4); + } + { + // Vertex 4 + m.put(v4, 0); + } + { + // Vertex 2 + m.put(v2, -7); + } + { + // Vertex 1 + m.put(v1, -1); + } + result4.put(v4, m); + } + { // Vertex 2 + Map, Integer> m = new java.util.HashMap, Integer>(); + { + // Vertex 3 + m.put(v3, 3); + } + { + // Vertex 4 + m.put(v4, 8); + } + { + // Vertex 2 + m.put(v2, 0); + } + { + // Vertex 1 + m.put(v1, 6); + } + result4.put(v2, m); + } + { // Vertex 1 + Map, Integer> m = new java.util.HashMap, Integer>(); + { + // Vertex 3 + m.put(v3, -2); + } + { + // Vertex 4 + m.put(v4, 2); + } + { + // Vertex 2 + m.put(v2, -5); + } + { + // Vertex 1 + m.put(v1, 0); + } + result4.put(v1, m); + } + } + + // Compare results + for (Vertex vertex1 : pathWeights.keySet()) { + Map, Integer> m1 = pathWeights.get(vertex1); + Map, Integer> m2 = result4.get(vertex1); + for (Vertex v : m1.keySet()) { + int i1 = m1.get(v); + int i2 = m2.get(v); + if (i1 != i2) { + System.err.println("Floyd-Warshall's all-pairs shortest path weights error. i1="+i1+" i2="+i2); + return false; + } + } + + } + System.out.println("Bellman-Ford's shortest path worked correctly."); + + if (debug > 1) System.out.println(); + } + + { // UNDIRECTED GRAPH + if (debug > 1) System.out.println("Undirected Graph cycle check."); + java.util.List> cycledVerticies = new ArrayList>(); + Graph.Vertex cv1 = new Graph.Vertex(1); + cycledVerticies.add(cv1); + Graph.Vertex cv2 = new Graph.Vertex(2); + cycledVerticies.add(cv2); + Graph.Vertex cv3 = new Graph.Vertex(3); + cycledVerticies.add(cv3); + Graph.Vertex cv4 = new Graph.Vertex(4); + cycledVerticies.add(cv4); + Graph.Vertex cv5 = new Graph.Vertex(5); + cycledVerticies.add(cv5); + Graph.Vertex cv6 = new Graph.Vertex(6); + cycledVerticies.add(cv6); + + java.util.List> cycledEdges = new ArrayList>(); + Graph.Edge ce1_2 = new Graph.Edge(7, cv1, cv2); + cycledEdges.add(ce1_2); + Graph.Edge ce2_4 = new Graph.Edge(15, cv2, cv4); + cycledEdges.add(ce2_4); + Graph.Edge ce3_4 = new Graph.Edge(11, cv3, cv4); + cycledEdges.add(ce3_4); + Graph.Edge ce3_6 = new Graph.Edge(2, cv3, cv6); + cycledEdges.add(ce3_6); + Graph.Edge ce5_6 = new Graph.Edge(9, cv5, cv6); + cycledEdges.add(ce5_6); + Graph.Edge ce4_5 = new Graph.Edge(6, cv4, cv5); + cycledEdges.add(ce4_5); + + Graph undirectedWithCycle = new Graph(cycledVerticies, cycledEdges); + if (debug > 1) System.out.println(undirectedWithCycle.toString()); + + System.out.println("Cycle detection of the undirected graph with a cycle."); + boolean result = CycleDetection.detect(undirectedWithCycle); + if (result) System.out.println("Cycle detection worked correctly."); + else { + System.err.println("Cycle detection error."); + return false; + } + + java.util.List> verticies = new ArrayList>(); + Graph.Vertex v1 = new Graph.Vertex(1); + verticies.add(v1); + Graph.Vertex v2 = new Graph.Vertex(2); + verticies.add(v2); + Graph.Vertex v3 = new Graph.Vertex(3); + verticies.add(v3); + Graph.Vertex v4 = new Graph.Vertex(4); + verticies.add(v4); + Graph.Vertex v5 = new Graph.Vertex(5); + verticies.add(v5); + Graph.Vertex v6 = new Graph.Vertex(6); + verticies.add(v6); + + java.util.List> edges = new ArrayList>(); + Graph.Edge e1_2 = new Graph.Edge(7, v1, v2); + edges.add(e1_2); + Graph.Edge e2_4 = new Graph.Edge(15, v2, v4); + edges.add(e2_4); + Graph.Edge e3_4 = new Graph.Edge(11, v3, v4); + edges.add(e3_4); + Graph.Edge e3_6 = new Graph.Edge(2, v3, v6); + edges.add(e3_6); + Graph.Edge e4_5 = new Graph.Edge(6, v4, v5); + edges.add(e4_5); + + Graph undirectedWithoutCycle = new Graph(verticies, edges); + if (debug > 1) System.out.println(undirectedWithoutCycle.toString()); + + System.out.println("Cycle detection of the undirected graph without a cycle."); + result = CycleDetection.detect(undirectedWithoutCycle); + if (!result) System.out.println("Cycle detection worked correctly."); + else { + System.err.println("Cycle detection error."); + return false; + } + } + + { // DIRECTED GRAPH + if (debug > 1) System.out.println("Directed Graph topological sort."); + java.util.List> verticies = new ArrayList>(); + Graph.Vertex cv1 = new Graph.Vertex(1); + verticies.add(cv1); + Graph.Vertex cv2 = new Graph.Vertex(2); + verticies.add(cv2); + Graph.Vertex cv3 = new Graph.Vertex(3); + verticies.add(cv3); + Graph.Vertex cv4 = new Graph.Vertex(4); + verticies.add(cv4); + Graph.Vertex cv5 = new Graph.Vertex(5); + verticies.add(cv5); + Graph.Vertex cv6 = new Graph.Vertex(6); + verticies.add(cv6); + + java.util.List> edges = new ArrayList>(); + Graph.Edge ce1_2 = new Graph.Edge(1, cv1, cv2); + edges.add(ce1_2); + Graph.Edge ce2_4 = new Graph.Edge(2, cv2, cv4); + edges.add(ce2_4); + Graph.Edge ce4_3 = new Graph.Edge(3, cv4, cv3); + edges.add(ce4_3); + Graph.Edge ce3_6 = new Graph.Edge(4, cv3, cv6); + edges.add(ce3_6); + Graph.Edge ce5_6 = new Graph.Edge(5, cv5, cv6); + edges.add(ce5_6); + Graph.Edge ce4_5 = new Graph.Edge(6, cv4, cv5); + edges.add(ce4_5); + + Graph directed = new Graph(Graph.TYPE.DIRECTED, verticies, edges); + if (debug > 1) System.out.println(directed.toString()); + + System.out.println("Topological sort of the directed graph."); + java.util.List> results = TopologicalSort.sort(directed); + if (debug > 1) System.out.println("result=" + results); + if (results==null || results.size()==0) { + System.out.println("Topological sort error. results="+results); + return false; + } + + java.util.List> results2 = new java.util.ArrayList>(results.size()); + { // Ideal sort + results2.add(cv6); + results2.add(cv3); + results2.add(cv5); + results2.add(cv4); + results2.add(cv2); + results2.add(cv1); + } + + // Compare results + { + Object[] objs1 = results.toArray(); + Object[] objs2 = results2.toArray(); + int size = objs1.length; + for (int i=0; i v1 = (Graph.Vertex) objs1[i]; + Graph.Vertex v2 = (Graph.Vertex) objs2[i]; + if (!v1.equals(v2)) { + System.err.println("Topological sort error. v1="+v1+" v2"); + return false; + } + } + } + System.out.println("Topological sort worked correctly."); + + if (debug > 1) System.out.println(); + } + + return true; + } + + private static final String getPathMapString(Graph.Vertex start, Map, Graph.CostPathPair> map) { + StringBuilder builder = new StringBuilder(); + for (Graph.Vertex v : map.keySet()) { + Graph.CostPathPair pair = map.get(v); + builder.append("From ").append(start.getValue()).append(" to vertex=").append(v.getValue()).append("\n"); + if (pair != null) + builder.append(pair.toString()).append("\n"); + + } + return builder.toString(); + } + + private static final String getPathMapString(Map, Map, Set>>> paths) { + StringBuilder builder = new StringBuilder(); + for (Graph.Vertex v : paths.keySet()) { + Map, Set>> map = paths.get(v); + for (Graph.Vertex v2 : map.keySet()) { + builder.append("From=").append(v.getValue()).append(" to=").append(v2.getValue()).append("\n"); + Set> path = map.get(v2); + builder.append(path).append("\n"); + } + } + return builder.toString(); + } + + private static final String getWeightMapString(Map, Map, Integer>> paths) { + StringBuilder builder = new StringBuilder(); + for (Graph.Vertex v : paths.keySet()) { + Map, Integer> map = paths.get(v); + for (Graph.Vertex v2 : map.keySet()) { + builder.append("From=").append(v.getValue()).append(" to=").append(v2.getValue()).append("\n"); + Integer weight = map.get(v2); + builder.append(weight).append("\n"); + } + } + return builder.toString(); + } + + public static void main(String[] args) { + boolean passed = testGraph(); + if (!passed) System.err.println("Graph failed."); + } +} From 503a7caab067621330d0110782fba5f364308809 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Wed, 11 Jun 2014 16:10:02 -0400 Subject: [PATCH 22/61] Cleaned up the graph classes --- .../algorithms/graph/BellmanFord.java | 5 ++- .../algorithms/graph/CycleDetection.java | 21 +++++++++---- .../jwetherell/algorithms/graph/Dijkstra.java | 5 ++- .../algorithms/graph/FloydWarshall.java | 9 ++++-- .../jwetherell/algorithms/graph/Johnson.java | 3 ++ src/com/jwetherell/algorithms/graph/Prim.java | 9 +++--- .../algorithms/graph/TopologicalSort.java | 31 ++++++++++++++----- 7 files changed, 56 insertions(+), 27 deletions(-) diff --git a/src/com/jwetherell/algorithms/graph/BellmanFord.java b/src/com/jwetherell/algorithms/graph/BellmanFord.java index fe1fffb7..8b802f69 100644 --- a/src/com/jwetherell/algorithms/graph/BellmanFord.java +++ b/src/com/jwetherell/algorithms/graph/BellmanFord.java @@ -4,7 +4,6 @@ import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; -import java.util.TreeMap; import com.jwetherell.algorithms.data_structures.Graph; @@ -44,11 +43,11 @@ public static Graph.CostPathPair getShortestPath(Graph graph, costs = null; paths = null; - paths = new TreeMap, Set>>(); + paths = new HashMap, Set>>(); for (Graph.Vertex v : graph.getVerticies()) paths.put(v, new LinkedHashSet>()); - costs = new TreeMap, Graph.CostVertexPair>(); + costs = new HashMap, Graph.CostVertexPair>(); for (Graph.Vertex v : graph.getVerticies()) if (v.equals(start)) costs.put(v, new Graph.CostVertexPair(0, v)); diff --git a/src/com/jwetherell/algorithms/graph/CycleDetection.java b/src/com/jwetherell/algorithms/graph/CycleDetection.java index 9d66482d..ca2b9fad 100644 --- a/src/com/jwetherell/algorithms/graph/CycleDetection.java +++ b/src/com/jwetherell/algorithms/graph/CycleDetection.java @@ -11,15 +11,24 @@ public class CycleDetection { private static Set> visitedVerticies = new HashSet>(); private static Set> visitedEdges = new HashSet>(); - private CycleDetection() { - }; + private CycleDetection() { } + + /** + * Cycle detection on a unidrected graph. + * + * @param graph Graph + * @return true if a cycle exists + */ + public static boolean detect(Graph graph) { + if (graph == null) + throw new IllegalArgumentException("Graph is NULL."); + + if (graph.getType() != Graph.TYPE.UNDIRECTED) + throw new IllegalArgumentException("Graph is needs to be Undirected."); - public static boolean detect(Graph g) { - if (g == null) - return false; visitedVerticies.clear(); visitedEdges.clear(); - List> verticies = g.getVerticies(); + List> verticies = graph.getVerticies(); if (verticies == null || verticies.size() == 0) return false; diff --git a/src/com/jwetherell/algorithms/graph/Dijkstra.java b/src/com/jwetherell/algorithms/graph/Dijkstra.java index 15448fb5..1337f6c3 100644 --- a/src/com/jwetherell/algorithms/graph/Dijkstra.java +++ b/src/com/jwetherell/algorithms/graph/Dijkstra.java @@ -7,7 +7,6 @@ import java.util.PriorityQueue; import java.util.Queue; import java.util.Set; -import java.util.TreeMap; import com.jwetherell.algorithms.data_structures.Graph; @@ -53,11 +52,11 @@ public static Graph.CostPathPair getShortestPath(Graph graph, if (hasNegativeEdge) throw (new IllegalArgumentException("Negative cost Edges are not allowed.")); - paths = new TreeMap, Set>>(); + paths = new HashMap, Set>>(); for (Graph.Vertex v : graph.getVerticies()) paths.put(v, new LinkedHashSet>()); - costs = new TreeMap, Graph.CostVertexPair>(); + costs = new HashMap, Graph.CostVertexPair>(); for (Graph.Vertex v : graph.getVerticies()) { if (v.equals(start)) costs.put(v, new Graph.CostVertexPair(0, v)); diff --git a/src/com/jwetherell/algorithms/graph/FloydWarshall.java b/src/com/jwetherell/algorithms/graph/FloydWarshall.java index 5b7e1f00..4f32f924 100644 --- a/src/com/jwetherell/algorithms/graph/FloydWarshall.java +++ b/src/com/jwetherell/algorithms/graph/FloydWarshall.java @@ -19,10 +19,13 @@ public class FloydWarshall { private FloydWarshall() { } - public static Map, Map, Integer>> getAllPairsShortestPaths(Graph g) { + public static Map, Map, Integer>> getAllPairsShortestPaths(Graph graph) { + if (graph == null) + throw (new NullPointerException("Graph must be non-NULL.")); + Map, Map, Integer>> allShortestPaths = new HashMap, Map, Integer>>(); - List> vertices = g.getVerticies(); + List> vertices = graph.getVerticies(); int[][] sums = new int[vertices.size()][vertices.size()]; for (int i = 0; i < sums.length; i++) { @@ -31,7 +34,7 @@ public static Map, Map, Integer>> ge } } - List> edges = g.getEdges(); + List> edges = graph.getEdges(); for (Graph.Edge e : edges) { int indexOfFrom = vertices.indexOf(e.getFromVertex()); int indexOfTo = vertices.indexOf(e.getToVertex()); diff --git a/src/com/jwetherell/algorithms/graph/Johnson.java b/src/com/jwetherell/algorithms/graph/Johnson.java index 9b7fb9f6..c57b3d37 100644 --- a/src/com/jwetherell/algorithms/graph/Johnson.java +++ b/src/com/jwetherell/algorithms/graph/Johnson.java @@ -20,6 +20,9 @@ public class Johnson { private Johnson() { } public static Map, Map, Set>>> getAllPairsShortestPaths(Graph g) { + if (g == null) + throw (new NullPointerException("Graph must be non-NULL.")); + Map, Map, Set>>> allShortestPaths = new HashMap, Map, Set>>>(); diff --git a/src/com/jwetherell/algorithms/graph/Prim.java b/src/com/jwetherell/algorithms/graph/Prim.java index c440525c..c62f7a74 100644 --- a/src/com/jwetherell/algorithms/graph/Prim.java +++ b/src/com/jwetherell/algorithms/graph/Prim.java @@ -25,8 +25,8 @@ public class Prim { private Prim() { } - public static Graph.CostPathPair getMinimumSpanningTree(Graph g, Graph.Vertex start) { - if (g == null) + public static Graph.CostPathPair getMinimumSpanningTree(Graph graph, Graph.Vertex start) { + if (graph == null) throw (new NullPointerException("Graph must be non-NULL.")); // Reset variables @@ -36,12 +36,13 @@ public static Graph.CostPathPair getMinimumSpanningTree(Graph edgesAvailable = null; // Prim's algorithm only works on undirected graphs - if (g.getType() == Graph.TYPE.DIRECTED) throw (new IllegalArgumentException("Undirected graphs only.")); + if (graph.getType() == Graph.TYPE.DIRECTED) + throw (new IllegalArgumentException("Undirected graphs only.")); path = new LinkedHashSet>(); unvisited = new ArrayList>(); - unvisited.addAll(g.getVerticies()); + unvisited.addAll(graph.getVerticies()); unvisited.remove(start); edgesAvailable = new PriorityQueue>(); diff --git a/src/com/jwetherell/algorithms/graph/TopologicalSort.java b/src/com/jwetherell/algorithms/graph/TopologicalSort.java index 2b7cc49c..ae448852 100644 --- a/src/com/jwetherell/algorithms/graph/TopologicalSort.java +++ b/src/com/jwetherell/algorithms/graph/TopologicalSort.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; import com.jwetherell.algorithms.data_structures.Graph; @@ -14,33 +15,47 @@ */ public class TopologicalSort { - private TopologicalSort() { - }; + private TopologicalSort() { } + /** + * Performs a topological sort on a directed graph. Returns NULL if a cycle is detected. + * + * @param graph + * @return Sorted List of Vertices or NULL if graph has a cycle + */ public static final List> sort(Graph graph) { + if (graph == null) + throw new IllegalArgumentException("Graph is NULL."); + + if (graph.getType() != Graph.TYPE.DIRECTED) + throw new IllegalArgumentException("Cannot perform a topological sort on a non-directed graph. graph type = "+graph.getType()); + List> sorted = new ArrayList>(); List> noOutgoing = new ArrayList>(); + + List> edges = new CopyOnWriteArrayList>(); + edges.addAll(graph.getEdges()); + for (Graph.Vertex v : graph.getVerticies()) { - if (v.getEdges().size() == 0) { + if (v.getEdges().size() == 0) noOutgoing.add(v); - } } while (noOutgoing.size() > 0) { Graph.Vertex v = noOutgoing.remove(0); sorted.add(v); - for (Graph.Edge e : graph.getEdges()) { + for (Graph.Edge e : edges) { Graph.Vertex v2 = e.getFromVertex(); Graph.Vertex v3 = e.getToVertex(); if (v3.equals(v)) { - graph.getEdges().remove(e); + edges.remove(e); v2.getEdges().remove(e); } if (v2.getEdges().size() == 0) noOutgoing.add(v2); } } - if (graph.getEdges().size() > 0) - System.out.println("cycle detected"); + if (edges.size() > 0) + return null; return sorted; } } From 4e7c920fe2106d25e764e219464c3ea306f6aa74 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Wed, 11 Jun 2014 16:11:24 -0400 Subject: [PATCH 23/61] Added a equals() and hashCode() method to Graph.CostPathPair --- .../algorithms/data_structures/Graph.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/com/jwetherell/algorithms/data_structures/Graph.java b/src/com/jwetherell/algorithms/data_structures/Graph.java index 11973bad..3d497f46 100644 --- a/src/com/jwetherell/algorithms/data_structures/Graph.java +++ b/src/com/jwetherell/algorithms/data_structures/Graph.java @@ -408,6 +408,41 @@ public Set> getPath() { return path; } + /** + * {@inheritDoc} + */ + @Override + public int hashCode() { + int hash = this.cost; + for (Edge e : path) + hash *= e.cost; + return 31 * hash; + } + + /** + * {@inheritDoc} + */ + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Override + public boolean equals(Object obj) { + if (!(obj instanceof CostPathPair)) + return false; + + CostPathPair pair = (CostPathPair)obj; + if (this.cost != pair.cost) + return false; + + Object[] e = pair.path.toArray(); + int i=0; + for (Edge e1 : path) { + Edge e2 = (Edge) e[i++]; + if (!e1.equals(e2)) + return false; + } + + return true; + } + /** * {@inheritDoc} */ From 000d747a3eaaeb146e793fa961403243de112f4a Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Wed, 11 Jun 2014 16:11:44 -0400 Subject: [PATCH 24/61] Moved the Graph related tests to their own class --- .../jwetherell/algorithms/DataStructures.java | 430 +----------------- 1 file changed, 8 insertions(+), 422 deletions(-) diff --git a/src/com/jwetherell/algorithms/DataStructures.java b/src/com/jwetherell/algorithms/DataStructures.java index 3ead9655..dd01968b 100644 --- a/src/com/jwetherell/algorithms/DataStructures.java +++ b/src/com/jwetherell/algorithms/DataStructures.java @@ -10,22 +10,17 @@ import java.util.Iterator; import java.util.ListIterator; import java.util.Locale; -import java.util.Map; import java.util.NavigableSet; import java.util.NoSuchElementException; import java.util.Random; -import java.util.Set; import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.ConcurrentSkipListSet; import com.jwetherell.algorithms.data_structures.AVLTree; import com.jwetherell.algorithms.data_structures.BTree; -import com.jwetherell.algorithms.data_structures.BinarySearchTree; import com.jwetherell.algorithms.data_structures.BinaryHeap; +import com.jwetherell.algorithms.data_structures.BinarySearchTree; import com.jwetherell.algorithms.data_structures.CompactSuffixTrie; -import com.jwetherell.algorithms.data_structures.Graph.Edge; -import com.jwetherell.algorithms.data_structures.Graph.Vertex; -import com.jwetherell.algorithms.data_structures.Graph; import com.jwetherell.algorithms.data_structures.HashArrayMappedTrie; import com.jwetherell.algorithms.data_structures.HashMap; import com.jwetherell.algorithms.data_structures.IHeap; @@ -37,33 +32,26 @@ import com.jwetherell.algorithms.data_structures.ITree; import com.jwetherell.algorithms.data_structures.IntervalTree; import com.jwetherell.algorithms.data_structures.KdTree; +import com.jwetherell.algorithms.data_structures.List; +import com.jwetherell.algorithms.data_structures.Matrix; import com.jwetherell.algorithms.data_structures.PatriciaTrie; import com.jwetherell.algorithms.data_structures.QuadTree; +import com.jwetherell.algorithms.data_structures.Queue; import com.jwetherell.algorithms.data_structures.RadixTrie; import com.jwetherell.algorithms.data_structures.RedBlackTree; import com.jwetherell.algorithms.data_structures.SegmentTree; import com.jwetherell.algorithms.data_structures.SegmentTree.DynamicSegmentTree; import com.jwetherell.algorithms.data_structures.SegmentTree.FlatSegmentTree; -import com.jwetherell.algorithms.data_structures.SkipListMap; -import com.jwetherell.algorithms.data_structures.SuffixTree; -import com.jwetherell.algorithms.data_structures.TreeMap; -import com.jwetherell.algorithms.data_structures.TrieMap; -import com.jwetherell.algorithms.data_structures.List; -import com.jwetherell.algorithms.data_structures.Matrix; -import com.jwetherell.algorithms.data_structures.Queue; import com.jwetherell.algorithms.data_structures.SkipList; +import com.jwetherell.algorithms.data_structures.SkipListMap; import com.jwetherell.algorithms.data_structures.SplayTree; import com.jwetherell.algorithms.data_structures.Stack; +import com.jwetherell.algorithms.data_structures.SuffixTree; import com.jwetherell.algorithms.data_structures.SuffixTrie; import com.jwetherell.algorithms.data_structures.Treap; +import com.jwetherell.algorithms.data_structures.TreeMap; import com.jwetherell.algorithms.data_structures.Trie; -import com.jwetherell.algorithms.graph.BellmanFord; -import com.jwetherell.algorithms.graph.CycleDetection; -import com.jwetherell.algorithms.graph.Dijkstra; -import com.jwetherell.algorithms.graph.FloydWarshall; -import com.jwetherell.algorithms.graph.Johnson; -import com.jwetherell.algorithms.graph.Prim; -import com.jwetherell.algorithms.graph.TopologicalSort; +import com.jwetherell.algorithms.data_structures.TrieMap; @SuppressWarnings("unchecked") public class DataStructures { @@ -400,12 +388,6 @@ private static boolean runTests() { return false; } - passed = testGraph(); - if (!passed) { - System.err.println("Graph failed."); - return false; - } - passed = testIntervalTree(); if (!passed) { System.err.println("Interval Tree failed."); @@ -522,364 +504,6 @@ private static boolean testCompactSuffixTrie() { return true; } - private static boolean testGraph() { - { // UNDIRECTED GRAPH - if (debug > 1) System.out.println("Undirected Graph."); - java.util.List> verticies = new ArrayList>(); - Graph.Vertex v1 = new Graph.Vertex(1); - verticies.add(v1); - Graph.Vertex v2 = new Graph.Vertex(2); - verticies.add(v2); - Graph.Vertex v3 = new Graph.Vertex(3); - verticies.add(v3); - Graph.Vertex v4 = new Graph.Vertex(4); - verticies.add(v4); - Graph.Vertex v5 = new Graph.Vertex(5); - verticies.add(v5); - Graph.Vertex v6 = new Graph.Vertex(6); - verticies.add(v6); - - java.util.List> edges = new ArrayList>(); - Graph.Edge e1_2 = new Graph.Edge(7, v1, v2); - edges.add(e1_2); - Graph.Edge e1_3 = new Graph.Edge(9, v1, v3); - edges.add(e1_3); - Graph.Edge e1_6 = new Graph.Edge(14, v1, v6); - edges.add(e1_6); - Graph.Edge e2_3 = new Graph.Edge(10, v2, v3); - edges.add(e2_3); - Graph.Edge e2_4 = new Graph.Edge(15, v2, v4); - edges.add(e2_4); - Graph.Edge e3_4 = new Graph.Edge(11, v3, v4); - edges.add(e3_4); - Graph.Edge e3_6 = new Graph.Edge(2, v3, v6); - edges.add(e3_6); - Graph.Edge e5_6 = new Graph.Edge(9, v5, v6); - edges.add(e5_6); - Graph.Edge e4_5 = new Graph.Edge(6, v4, v5); - edges.add(e4_5); - - Graph undirected = new Graph(verticies, edges); - if (debug > 1) System.out.println(undirected.toString()); - - Graph.Vertex start = v1; - if (debug > 1) System.out.println("Dijstra's shortest paths of the undirected graph from " + start.getValue()); - Map, Graph.CostPathPair> map1 = Dijkstra.getShortestPaths(undirected, start); - if (debug > 1) System.out.println(getPathMapString(start, map1)); - - Graph.Vertex end = v5; - if (debug > 1) System.out.println("Dijstra's shortest path of the undirected graph from " + start.getValue() + " to " + end.getValue()); - Graph.CostPathPair pair1 = Dijkstra.getShortestPath(undirected, start, end); - if (debug > 1) { - if (pair1 != null) System.out.println(pair1.toString()); - else System.out.println("No path from " + start.getValue() + " to " + end.getValue()); - } - - start = v1; - if (debug > 1) System.out.println("Bellman-Ford's shortest paths of the undirected graph from " + start.getValue()); - Map, Graph.CostPathPair> map2 = BellmanFord.getShortestPaths(undirected, start); - if (debug > 1) System.out.println(getPathMapString(start, map2)); - - end = v5; - if (debug > 1) System.out.println("Bellman-Ford's shortest path of the undirected graph from " + start.getValue() + " to " + end.getValue()); - Graph.CostPathPair pair2 = BellmanFord.getShortestPath(undirected, start, end); - if (debug > 1) { - if (pair2 != null) System.out.println(pair2.toString()); - else System.out.println("No path from " + start.getValue() + " to " + end.getValue()); - } - - // MST - - if (debug > 1) System.out.println("Prim's minimum spanning tree of the undirected graph from " + start.getValue()); - Graph.CostPathPair pair = Prim.getMinimumSpanningTree(undirected, start); - if (debug > 1) System.out.println(pair.toString()); - - // Prim on a graph with cycles - java.util.List> cyclicVerticies = new ArrayList>(); - Graph.Vertex cv1 = new Graph.Vertex(1); - cyclicVerticies.add(cv1); - Graph.Vertex cv2 = new Graph.Vertex(2); - cyclicVerticies.add(cv2); - Graph.Vertex cv3 = new Graph.Vertex(3); - cyclicVerticies.add(cv3); - Graph.Vertex cv4 = new Graph.Vertex(4); - cyclicVerticies.add(cv4); - Graph.Vertex cv5 = new Graph.Vertex(5); - cyclicVerticies.add(cv5); - - java.util.List> cyclicEdges = new ArrayList>(); - Graph.Edge ce1_2 = new Graph.Edge(3, cv1, cv2); - cyclicEdges.add(ce1_2); - Graph.Edge ce2_3 = new Graph.Edge(2, cv2, cv3); - cyclicEdges.add(ce2_3); - Graph.Edge ce3_4 = new Graph.Edge(4, cv3, cv4); - cyclicEdges.add(ce3_4); - Graph.Edge ce4_1 = new Graph.Edge(1, cv4, cv1); - cyclicEdges.add(ce4_1); - Graph.Edge ce4_5 = new Graph.Edge(1, cv4, cv5); - cyclicEdges.add(ce4_5); - - Graph cyclicUndirected = new Graph(cyclicVerticies, cyclicEdges); - if (debug > 1) System.out.println(cyclicUndirected.toString()); - - start = cv1; - if (debug > 1) System.out.println("Prim's minimum spanning tree of a cyclic undirected graph from " + start.getValue()); - Graph.CostPathPair cyclicPair = Prim.getMinimumSpanningTree(cyclicUndirected, start); - if (debug > 1) System.out.println(cyclicPair.toString()); - - if (debug > 1) System.out.println(); - } - - { // DIRECTED GRAPH - if (debug > 1) System.out.println("Directed Graph."); - java.util.List> verticies = new ArrayList>(); - Graph.Vertex v1 = new Graph.Vertex(1); - verticies.add(v1); - Graph.Vertex v2 = new Graph.Vertex(2); - verticies.add(v2); - Graph.Vertex v3 = new Graph.Vertex(3); - verticies.add(v3); - Graph.Vertex v4 = new Graph.Vertex(4); - verticies.add(v4); - Graph.Vertex v5 = new Graph.Vertex(5); - verticies.add(v5); - Graph.Vertex v6 = new Graph.Vertex(6); - verticies.add(v6); - Graph.Vertex v7 = new Graph.Vertex(7); - verticies.add(v7); - - java.util.List> edges = new ArrayList>(); - Graph.Edge e1_2 = new Graph.Edge(7, v1, v2); - edges.add(e1_2); - Graph.Edge e1_3 = new Graph.Edge(9, v1, v3); - edges.add(e1_3); - Graph.Edge e1_6 = new Graph.Edge(14, v1, v6); - edges.add(e1_6); - Graph.Edge e2_3 = new Graph.Edge(10, v2, v3); - edges.add(e2_3); - Graph.Edge e2_4 = new Graph.Edge(15, v2, v4); - edges.add(e2_4); - Graph.Edge e3_4 = new Graph.Edge(11, v3, v4); - edges.add(e3_4); - Graph.Edge e3_6 = new Graph.Edge(2, v3, v6); - edges.add(e3_6); - Graph.Edge e6_5 = new Graph.Edge(9, v6, v5); - edges.add(e6_5); - Graph.Edge e4_5 = new Graph.Edge(6, v4, v5); - edges.add(e4_5); - Graph.Edge e4_7 = new Graph.Edge(16, v4, v7); - edges.add(e4_7); - - Graph directed = new Graph(Graph.TYPE.DIRECTED, verticies, edges); - if (debug > 1) System.out.println(directed.toString()); - - Graph.Vertex start = v1; - if (debug > 1) System.out.println("Dijstra's shortest paths of the directed graph from " + start.getValue()); - Map, Graph.CostPathPair> map = Dijkstra.getShortestPaths(directed, start); - if (debug > 1) System.out.println(getPathMapString(start, map)); - - Graph.Vertex end = v5; - if (debug > 1) System.out.println("Dijstra's shortest path of the directed graph from " + start.getValue() + " to " + end.getValue()); - Graph.CostPathPair pair = Dijkstra.getShortestPath(directed, start, end); - if (debug > 1) { - if (pair != null) System.out.println(pair.toString()); - else System.out.println("No path from " + start.getValue() + " to " + end.getValue()); - } - - start = v1; - if (debug > 1) System.out.println("Bellman-Ford's shortest paths of the undirected graph from " + start.getValue()); - Map, Graph.CostPathPair> map2 = BellmanFord.getShortestPaths(directed, start); - if (debug > 1) System.out.println(getPathMapString(start, map2)); - - end = v5; - if (debug > 1) System.out.println("Bellman-Ford's shortest path of the undirected graph from " + start.getValue() + " to " + end.getValue()); - Graph.CostPathPair pair2 = BellmanFord.getShortestPath(directed, start, end); - if (debug > 1) { - if (pair2 != null) System.out.println(pair2.toString()); - else System.out.println("No path from " + start.getValue() + " to " + end.getValue()); - } - - if (debug > 1) System.out.println(); - } - - { // DIRECTED GRAPH (WITH NEGATIVE WEIGHTS) - if (debug > 1) System.out.println("Directed Graph with Negative Weights."); - java.util.List> verticies = new ArrayList>(); - Graph.Vertex v1 = new Graph.Vertex(1); - verticies.add(v1); - Graph.Vertex v2 = new Graph.Vertex(2); - verticies.add(v2); - Graph.Vertex v3 = new Graph.Vertex(3); - verticies.add(v3); - Graph.Vertex v4 = new Graph.Vertex(4); - verticies.add(v4); - - java.util.List> edges = new ArrayList>(); - Graph.Edge e1_4 = new Graph.Edge(2, v1, v4); - edges.add(e1_4); - Graph.Edge e2_1 = new Graph.Edge(6, v2, v1); - edges.add(e2_1); - Graph.Edge e2_3 = new Graph.Edge(3, v2, v3); - edges.add(e2_3); - Graph.Edge e3_1 = new Graph.Edge(4, v3, v1); - edges.add(e3_1); - Graph.Edge e3_4 = new Graph.Edge(5, v3, v4); - edges.add(e3_4); - Graph.Edge e4_2 = new Graph.Edge(-7, v4, v2); - edges.add(e4_2); - Graph.Edge e4_3 = new Graph.Edge(-3, v4, v3); - edges.add(e4_3); - - Graph directed = new Graph(Graph.TYPE.DIRECTED, verticies, edges); - if (debug > 1) System.out.println(directed.toString()); - - Graph.Vertex start = v1; - if (debug > 1) System.out.println("Bellman-Ford's shortest paths of the directed graph from " + start.getValue()); - Map, Graph.CostPathPair> map2 = BellmanFord.getShortestPaths(directed, start); - if (debug > 1) System.out.println(getPathMapString(start, map2)); - - Graph.Vertex end = v3; - if (debug > 1) System.out.println("Bellman-Ford's shortest path of the directed graph from " + start.getValue() + " to " + end.getValue()); - Graph.CostPathPair pair2 = BellmanFord.getShortestPath(directed, start, end); - if (debug > 1) { - if (pair2 != null) System.out.println(pair2.toString()); - else System.out.println("No path from " + start.getValue() + " to " + end.getValue()); - } - - if (debug > 1) System.out.println("Johnson's all-pairs shortest path of the directed graph."); - Map, Map, Set>>> paths = Johnson.getAllPairsShortestPaths(directed); - if (debug > 1) { - if (paths == null) System.out.println("Directed graph contains a negative weight cycle."); - else System.out.println(getPathMapString(paths)); - } - - if (debug > 1) System.out.println("Floyd-Warshall's all-pairs shortest path weights of the directed graph."); - Map, Map, Integer>> pathWeights = FloydWarshall.getAllPairsShortestPaths(directed); - if (debug > 1) System.out.println(getWeightMapString(pathWeights)); - - if (debug > 1) System.out.println(); - } - - { // UNDIRECTED GRAPH - if (debug > 1) System.out.println("Undirected Graph cycle check."); - java.util.List> cycledVerticies = new ArrayList>(); - Graph.Vertex cv1 = new Graph.Vertex(1); - cycledVerticies.add(cv1); - Graph.Vertex cv2 = new Graph.Vertex(2); - cycledVerticies.add(cv2); - Graph.Vertex cv3 = new Graph.Vertex(3); - cycledVerticies.add(cv3); - Graph.Vertex cv4 = new Graph.Vertex(4); - cycledVerticies.add(cv4); - Graph.Vertex cv5 = new Graph.Vertex(5); - cycledVerticies.add(cv5); - Graph.Vertex cv6 = new Graph.Vertex(6); - cycledVerticies.add(cv6); - - java.util.List> cycledEdges = new ArrayList>(); - Graph.Edge ce1_2 = new Graph.Edge(7, cv1, cv2); - cycledEdges.add(ce1_2); - Graph.Edge ce2_4 = new Graph.Edge(15, cv2, cv4); - cycledEdges.add(ce2_4); - Graph.Edge ce3_4 = new Graph.Edge(11, cv3, cv4); - cycledEdges.add(ce3_4); - Graph.Edge ce3_6 = new Graph.Edge(2, cv3, cv6); - cycledEdges.add(ce3_6); - Graph.Edge ce5_6 = new Graph.Edge(9, cv5, cv6); - cycledEdges.add(ce5_6); - Graph.Edge ce4_5 = new Graph.Edge(6, cv4, cv5); - cycledEdges.add(ce4_5); - - Graph undirectedWithCycle = new Graph(cycledVerticies, cycledEdges); - if (debug > 1) System.out.println(undirectedWithCycle.toString()); - - if (debug > 1) { - System.out.println("Cycle detection of the undirected graph."); - boolean result = CycleDetection.detect(undirectedWithCycle); - System.out.println("result=" + result); - System.out.println(); - } - - java.util.List> verticies = new ArrayList>(); - Graph.Vertex v1 = new Graph.Vertex(1); - verticies.add(v1); - Graph.Vertex v2 = new Graph.Vertex(2); - verticies.add(v2); - Graph.Vertex v3 = new Graph.Vertex(3); - verticies.add(v3); - Graph.Vertex v4 = new Graph.Vertex(4); - verticies.add(v4); - Graph.Vertex v5 = new Graph.Vertex(5); - verticies.add(v5); - Graph.Vertex v6 = new Graph.Vertex(6); - verticies.add(v6); - - java.util.List> edges = new ArrayList>(); - Graph.Edge e1_2 = new Graph.Edge(7, v1, v2); - edges.add(e1_2); - Graph.Edge e2_4 = new Graph.Edge(15, v2, v4); - edges.add(e2_4); - Graph.Edge e3_4 = new Graph.Edge(11, v3, v4); - edges.add(e3_4); - Graph.Edge e3_6 = new Graph.Edge(2, v3, v6); - edges.add(e3_6); - Graph.Edge e4_5 = new Graph.Edge(6, v4, v5); - edges.add(e4_5); - - Graph undirectedWithoutCycle = new Graph(verticies, edges); - if (debug > 1) System.out.println(undirectedWithoutCycle.toString()); - - if (debug > 1) { - System.out.println("Cycle detection of the undirected graph."); - boolean result = CycleDetection.detect(undirectedWithoutCycle); - System.out.println("result=" + result); - System.out.println(); - } - } - - { // DIRECTED GRAPH - if (debug > 1) System.out.println("Directed Graph topological sort."); - java.util.List> verticies = new ArrayList>(); - Graph.Vertex cv1 = new Graph.Vertex(1); - verticies.add(cv1); - Graph.Vertex cv2 = new Graph.Vertex(2); - verticies.add(cv2); - Graph.Vertex cv3 = new Graph.Vertex(3); - verticies.add(cv3); - Graph.Vertex cv4 = new Graph.Vertex(4); - verticies.add(cv4); - Graph.Vertex cv5 = new Graph.Vertex(5); - verticies.add(cv5); - Graph.Vertex cv6 = new Graph.Vertex(6); - verticies.add(cv6); - - java.util.List> edges = new ArrayList>(); - Graph.Edge ce1_2 = new Graph.Edge(1, cv1, cv2); - edges.add(ce1_2); - Graph.Edge ce2_4 = new Graph.Edge(2, cv2, cv4); - edges.add(ce2_4); - Graph.Edge ce4_3 = new Graph.Edge(3, cv4, cv3); - edges.add(ce4_3); - Graph.Edge ce3_6 = new Graph.Edge(4, cv3, cv6); - edges.add(ce3_6); - Graph.Edge ce5_6 = new Graph.Edge(5, cv5, cv6); - edges.add(ce5_6); - Graph.Edge ce4_5 = new Graph.Edge(6, cv4, cv5); - edges.add(ce4_5); - - Graph directed = new Graph(Graph.TYPE.DIRECTED, verticies, edges); - if (debug > 1) System.out.println(directed.toString()); - - if (debug > 1) System.out.println("Topological sort of the directed graph."); - java.util.List> results = TopologicalSort.sort(directed); - if (debug > 1) { - System.out.println("result=" + results); - System.out.println(); - } - } - - return true; - } private static boolean testMinHeap() { String aNameMin = "Min-Heap [array]"; @@ -4034,44 +3658,6 @@ private static final String getTestResults(int testNumber, String[] names, long[ return resultsBuilder.toString(); } - private static final String getPathMapString(Graph.Vertex start, Map, Graph.CostPathPair> map) { - StringBuilder builder = new StringBuilder(); - for (Graph.Vertex v : map.keySet()) { - Graph.CostPathPair pair = map.get(v); - builder.append("From ").append(start.getValue()).append(" to vertex=").append(v.getValue()).append("\n"); - if (pair != null) - builder.append(pair.toString()).append("\n"); - - } - return builder.toString(); - } - - private static final String getPathMapString(Map, Map, Set>>> paths) { - StringBuilder builder = new StringBuilder(); - for (Graph.Vertex v : paths.keySet()) { - Map, Set>> map = paths.get(v); - for (Graph.Vertex v2 : map.keySet()) { - builder.append("From=").append(v.getValue()).append(" to=").append(v2.getValue()).append("\n"); - Set> path = map.get(v2); - builder.append(path).append("\n"); - } - } - return builder.toString(); - } - - private static final String getWeightMapString(Map, Map, Integer>> paths) { - StringBuilder builder = new StringBuilder(); - for (Graph.Vertex v : paths.keySet()) { - Map, Integer> map = paths.get(v); - for (Graph.Vertex v2 : map.keySet()) { - builder.append("From=").append(v.getValue()).append(" to=").append(v2.getValue()).append("\n"); - Integer weight = map.get(v2); - builder.append(weight).append("\n"); - } - } - return builder.toString(); - } - private static final long getMemoryUse() { putOutTheGarbage(); long totalMemory = Runtime.getRuntime().totalMemory(); From 5bdf61a0d9fae0cf5812c52bc5a0b642c8959a0f Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Wed, 11 Jun 2014 16:12:35 -0400 Subject: [PATCH 25/61] Moved the Graph related tests to their own class --- src/com/jwetherell/algorithms/Graphs.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/jwetherell/algorithms/Graphs.java b/src/com/jwetherell/algorithms/Graphs.java index 69f863f4..e65d8039 100644 --- a/src/com/jwetherell/algorithms/Graphs.java +++ b/src/com/jwetherell/algorithms/Graphs.java @@ -17,7 +17,7 @@ public class Graphs { - private static int debug = 1; // Debug level. 0=None, 1=Time and Memory (if enabled), 2=Time, Memory, data structure debug + private static int debug = 1; // Debug level. 0=None, 1=Some @SuppressWarnings("unchecked") private static boolean testGraph() { From c029506e24f1c47d1de0ba790c0363d79604d2c3 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Wed, 11 Jun 2014 16:14:59 -0400 Subject: [PATCH 26/61] Added a header to the cycle detection class --- src/com/jwetherell/algorithms/graph/CycleDetection.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/com/jwetherell/algorithms/graph/CycleDetection.java b/src/com/jwetherell/algorithms/graph/CycleDetection.java index ca2b9fad..4bce0d36 100644 --- a/src/com/jwetherell/algorithms/graph/CycleDetection.java +++ b/src/com/jwetherell/algorithms/graph/CycleDetection.java @@ -6,6 +6,11 @@ import com.jwetherell.algorithms.data_structures.Graph; +/** + * Cycle detection in an undirected graph using depth first search. + * + * @author Justin Wetherell + */ public class CycleDetection { private static Set> visitedVerticies = new HashSet>(); From 1a6d7b97ec0f5b41d90f442662708e056da6d826 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Wed, 11 Jun 2014 17:19:18 -0400 Subject: [PATCH 27/61] Found a bug in my TrieMap where key and value weren't being NULLed out on remove(). Applied the same fix to all Map Classes --- .../algorithms/data_structures/HashArrayMappedTrie.java | 2 ++ src/com/jwetherell/algorithms/data_structures/HashMap.java | 5 ++++- .../jwetherell/algorithms/data_structures/SkipListMap.java | 2 ++ src/com/jwetherell/algorithms/data_structures/TreeMap.java | 2 ++ src/com/jwetherell/algorithms/data_structures/TrieMap.java | 1 + 5 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/com/jwetherell/algorithms/data_structures/HashArrayMappedTrie.java b/src/com/jwetherell/algorithms/data_structures/HashArrayMappedTrie.java index 56b1f437..e3a2464d 100644 --- a/src/com/jwetherell/algorithms/data_structures/HashArrayMappedTrie.java +++ b/src/com/jwetherell/algorithms/data_structures/HashArrayMappedTrie.java @@ -208,6 +208,8 @@ public V remove(K key) { numOfChildren = parent.getNumberOfChildren(); } } + kvNode.key = 0; + kvNode.value = null; size--; return value; } diff --git a/src/com/jwetherell/algorithms/data_structures/HashMap.java b/src/com/jwetherell/algorithms/data_structures/HashMap.java index 0036fa52..7b3e2c51 100644 --- a/src/com/jwetherell/algorithms/data_structures/HashMap.java +++ b/src/com/jwetherell/algorithms/data_structures/HashMap.java @@ -94,7 +94,10 @@ public V remove(K key) { if (pair.key.equals(key)) { list.remove(pair); size--; - return pair.value; + V value = pair.value; + pair.key = null; + pair.value = null; + return value; } } return null; diff --git a/src/com/jwetherell/algorithms/data_structures/SkipListMap.java b/src/com/jwetherell/algorithms/data_structures/SkipListMap.java index 868531c9..6a454220 100644 --- a/src/com/jwetherell/algorithms/data_structures/SkipListMap.java +++ b/src/com/jwetherell/algorithms/data_structures/SkipListMap.java @@ -69,6 +69,8 @@ public V remove(K key) { if (node instanceof SkipListMapNode) { SkipListMapNode treeMapNode = (SkipListMapNode) node; value = treeMapNode.value; + treeMapNode.data = null; + treeMapNode.value = null; } return value; } diff --git a/src/com/jwetherell/algorithms/data_structures/TreeMap.java b/src/com/jwetherell/algorithms/data_structures/TreeMap.java index c05d1581..d19544f9 100644 --- a/src/com/jwetherell/algorithms/data_structures/TreeMap.java +++ b/src/com/jwetherell/algorithms/data_structures/TreeMap.java @@ -73,6 +73,8 @@ public V remove(K key) { if (node instanceof TreeMapNode) { TreeMapNode treeMapNode = (TreeMapNode) node; value = treeMapNode.value; + treeMapNode.id = null; + treeMapNode.value = null; } return value; } diff --git a/src/com/jwetherell/algorithms/data_structures/TrieMap.java b/src/com/jwetherell/algorithms/data_structures/TrieMap.java index c05fa2bf..e4b10d1c 100644 --- a/src/com/jwetherell/algorithms/data_structures/TrieMap.java +++ b/src/com/jwetherell/algorithms/data_structures/TrieMap.java @@ -71,6 +71,7 @@ public V remove(K key) { if (node instanceof TrieMapNode) { TrieMapNode tmn = (TrieMapNode)node; value = tmn.value; + tmn.value = null; } trie.remove(node); } From cb4e53fee8e84a2e948ab187b286d072e7be0335 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Thu, 12 Jun 2014 16:56:59 -0400 Subject: [PATCH 28/61] Cleaned up the Interval Tree, KD-Tree, and Matrix test cases --- .../jwetherell/algorithms/DataStructures.java | 261 ++++++++++++++---- .../data_structures/IntervalTree.java | 28 ++ .../algorithms/data_structures/KdTree.java | 7 +- .../algorithms/data_structures/Matrix.java | 80 +++++- 4 files changed, 315 insertions(+), 61 deletions(-) diff --git a/src/com/jwetherell/algorithms/DataStructures.java b/src/com/jwetherell/algorithms/DataStructures.java index dd01968b..52c0abe0 100644 --- a/src/com/jwetherell/algorithms/DataStructures.java +++ b/src/com/jwetherell/algorithms/DataStructures.java @@ -56,7 +56,7 @@ @SuppressWarnings("unchecked") public class DataStructures { - private static final int NUMBER_OF_TESTS = 3; + private static final int NUMBER_OF_TESTS = 1; private static final Random RANDOM = new Random(); private static final int ARRAY_SIZE = 1000; private static final int RANDOM_SIZE = 1000 * ARRAY_SIZE; @@ -470,7 +470,7 @@ private static boolean testBST() { } private static boolean testCompactSuffixTrie() { - if (debug > 1) System.out.println("Compact Suffix Trie."); + System.out.println("Compact Suffix Trie."); String bookkeeper = "bookkeeper"; CompactSuffixTrie trie = new CompactSuffixTrie(bookkeeper); if (debug > 1) System.out.println(trie.toString()); @@ -499,6 +499,8 @@ private static boolean testCompactSuffixTrie() { return false; } + System.out.println("Compact Suffix Trie passed it's tests."); + if (debug > 1) System.out.println(); return true; @@ -559,66 +561,146 @@ private static boolean testHAMT() { private static boolean testIntervalTree() { { // Interval tree - if (debug > 1) System.out.println("Interval Tree."); + System.out.println("Interval Tree."); + final String RED = "RED"; + final String ORANGE = "ORANGE"; + final String GREEN = "GREEN"; + final String DARK_GREEN = "DARK_GREEN"; + final String BLUE = "BLUE"; + final String PURPLE = "PURPLE"; + final String BLACK = "BLACK"; java.util.List> intervals = new ArrayList>(); - intervals.add((new IntervalTree.IntervalData(2, 6, "RED"))); - intervals.add((new IntervalTree.IntervalData(3, 5, "ORANGE"))); - intervals.add((new IntervalTree.IntervalData(4, 11, "GREEN"))); - intervals.add((new IntervalTree.IntervalData(5, 10, "DARK_GREEN"))); - intervals.add((new IntervalTree.IntervalData(8, 12, "BLUE"))); - intervals.add((new IntervalTree.IntervalData(9, 14, "PURPLE"))); - intervals.add((new IntervalTree.IntervalData(13, 15, "BLACK"))); + intervals.add((new IntervalTree.IntervalData(2, 6, RED))); + intervals.add((new IntervalTree.IntervalData(3, 5, ORANGE))); + intervals.add((new IntervalTree.IntervalData(4, 11, GREEN))); + intervals.add((new IntervalTree.IntervalData(5, 10, DARK_GREEN))); + intervals.add((new IntervalTree.IntervalData(8, 12, BLUE))); + intervals.add((new IntervalTree.IntervalData(9, 14, PURPLE))); + intervals.add((new IntervalTree.IntervalData(13, 15, BLACK))); IntervalTree tree = new IntervalTree(intervals); if (debug > 1) System.out.println(tree); IntervalTree.IntervalData query = tree.query(2); if (debug > 1) System.out.println("2: " + query); + if (!query.getData().contains(RED)) { + System.err.println("Interval Tree query error. query=2 returned="+query); + return false; + } query = tree.query(4); // Stabbing query if (debug > 1) System.out.println("4: " + query); + if (!query.getData().contains(GREEN)) { + System.err.println("Interval Tree query error. query=4 returned="+query); + return false; + } query = tree.query(9); // Stabbing query if (debug > 1) System.out.println("9: " + query); + if (!query.getData().contains(PURPLE)) { + System.err.println("Interval Tree query error. query=9 returned="+query); + return false; + } query = tree.query(1, 16); // Range query if (debug > 1) System.out.println("1->16: " + query); + if (!query.getData().contains(RED) || + !query.getData().contains(ORANGE) || + !query.getData().contains(GREEN) || + !query.getData().contains(DARK_GREEN) || + !query.getData().contains(BLUE) || + !query.getData().contains(PURPLE) || + !query.getData().contains(BLACK) + ) { + System.err.println("Interval Tree query error. query=1->16 returned="+query); + return false; + } query = tree.query(7, 14); // Range query if (debug > 1) System.out.println("7->14: " + query); + if (!query.getData().contains(GREEN) || + !query.getData().contains(DARK_GREEN) || + !query.getData().contains(BLUE) || + !query.getData().contains(PURPLE) || + !query.getData().contains(BLACK) + ) { + System.err.println("Interval Tree query error. query=7->14 returned="+query); + return false; + } query = tree.query(14, 15); // Range query if (debug > 1) System.out.println("14->15: " + query); + if (!query.getData().contains(PURPLE) || + !query.getData().contains(BLACK) + ) { + System.err.println("Interval Tree query error. query=14->15 returned="+query); + return false; + } if (debug > 1) System.out.println(); } { // Lifespan Interval tree if (debug > 1) System.out.println("Lifespan Interval Tree."); + final String stravinsky = "Stravinsky"; + final String schoenberg = "Schoenberg"; + final String grieg = "Grieg"; + final String schubert = "Schubert"; + final String mozart = "Mozart"; + final String schuetz = "Schuetz"; java.util.List> intervals = new ArrayList>(); - intervals.add((new IntervalTree.IntervalData(1888, 1971, "Stravinsky"))); - intervals.add((new IntervalTree.IntervalData(1874, 1951, "Schoenberg"))); - intervals.add((new IntervalTree.IntervalData(1843, 1907, "Grieg"))); - intervals.add((new IntervalTree.IntervalData(1779, 1828, "Schubert"))); - intervals.add((new IntervalTree.IntervalData(1756, 1791, "Mozart"))); - intervals.add((new IntervalTree.IntervalData(1585, 1672, "Schuetz"))); + intervals.add((new IntervalTree.IntervalData(1888, 1971, stravinsky))); + intervals.add((new IntervalTree.IntervalData(1874, 1951, schoenberg))); + intervals.add((new IntervalTree.IntervalData(1843, 1907, grieg))); + intervals.add((new IntervalTree.IntervalData(1779, 1828, schubert))); + intervals.add((new IntervalTree.IntervalData(1756, 1791, mozart))); + intervals.add((new IntervalTree.IntervalData(1585, 1672, schuetz))); IntervalTree tree = new IntervalTree(intervals); if (debug > 1) System.out.println(tree); - IntervalTree.IntervalData query = tree.query(1890); + IntervalTree.IntervalData query = tree.query(1890); // Stabbing query if (debug > 1) System.out.println("1890: " + query); + if (!query.getData().contains(stravinsky) || + !query.getData().contains(schoenberg) || + !query.getData().contains(grieg) + ) { + System.err.println("Interval Tree query error. query=1890 returned="+query); + return false; + } query = tree.query(1909); // Stabbing query if (debug > 1) System.out.println("1909: " + query); + if (!query.getData().contains(stravinsky) || + !query.getData().contains(schoenberg) + ) { + System.err.println("Interval Tree query error. query=1909 returned="+query); + return false; + } query = tree.query(1792, 1903); // Range query if (debug > 1) System.out.println("1792->1903: " + query); + if (!query.getData().contains(stravinsky) || + !query.getData().contains(schoenberg) || + !query.getData().contains(grieg) || + !query.getData().contains(schubert) + ) { + System.err.println("Interval Tree query error. query=1792->1903 returned="+query); + return false; + } query = tree.query(1776, 1799); // Range query if (debug > 1) System.out.println("1776->1799: " + query); + if (!query.getData().contains(schubert) || + !query.getData().contains(mozart) + ) { + System.err.println("Interval Tree query error. query=1776->1799 returned="+query); + return false; + } if (debug > 1) System.out.println(); } + System.out.println("Interval Tree worked correctly."); + return true; } @@ -721,7 +803,7 @@ private static boolean testJavaTreeMap() { } private static boolean testKdTree() { - if (debug > 1) System.out.println("k-d tree with node."); + System.out.println("K-D tree."); java.util.List points = new ArrayList(); KdTree.XYZPoint p1 = new KdTree.XYZPoint(2, 3); @@ -741,10 +823,22 @@ private static boolean testKdTree() { Collection result = kdTree.nearestNeighbourSearch(1, p3); if (debug > 1) System.out.println("NNS for " + p3 + " result=" + result + "\n"); + if (!result.contains(p3)) { + System.out.println("K-D Tree query error. query=(k=1, p=(9, 6)) returned="+result); + return false; + } KdTree.XYZPoint search = new KdTree.XYZPoint(1, 4); result = kdTree.nearestNeighbourSearch(4, search); if (debug > 1) System.out.println("NNS for " + search + " result=" + result + "\n"); + if (!result.contains(p1) || + !result.contains(p2) || + !result.contains(p4) || + !result.contains(p6) + ) { + System.out.println("K-D Tree query error. query=(k=4, p=(1, 4)) returned="+result); + return false; + } kdTree.remove(p6); if (debug > 1) System.out.println("Removed " + p6 + "\n" + kdTree.toString()); @@ -759,8 +853,12 @@ private static boolean testKdTree() { kdTree.remove(p2); if (debug > 1) System.out.println("Removed " + p2 + "\n" + kdTree.toString()); + if (debug > 1) System.out.println(kdTree.toString()); + if (debug > 1) System.out.println(); + System.out.println("K-D tree worked correctly."); + return true; } @@ -785,7 +883,7 @@ private static boolean testLinkedList() { } private static boolean testMatrix() { - if (debug > 1) System.out.println("Matrix."); + System.out.println("Matrix."); Matrix matrix1 = new Matrix(4, 3); matrix1.set(0, 0, 14); matrix1.set(0, 1, 9); @@ -808,27 +906,54 @@ private static boolean testMatrix() { matrix2.set(2, 0, 8); matrix2.set(2, 1, 5); + // Result of multiplication + Integer[][] array1 = new Integer[][]{{273,455}, + {243,235}, + {244,205}, + {102,160}}; + Matrix result1 = new Matrix(4,2,array1); + if (debug > 1) System.out.println("Matrix multiplication."); Matrix matrix3 = matrix1.multiply(matrix2); if (debug > 1) System.out.println(matrix3); + if (!matrix3.equals(result1)) { + System.err.println("Matrix multiplication error. matrix3="+matrix3+" result1"+result1); + return false; + } int rows = 2; int cols = 2; int counter = 0; Matrix matrix4 = new Matrix(rows, cols); - for (int r = 0; r < rows; r++) { - for (int c = 0; c < cols; c++) { + for (int r = 0; r < rows; r++) + for (int c = 0; c < cols; c++) matrix4.set(r, c, counter++); - } - } + + // Result of subtraction + Integer[][] array2 = new Integer[][]{{0,0}, + {0,0}}; + Matrix result2 = new Matrix(2,2,array2); if (debug > 1) System.out.println("Matrix subtraction."); Matrix matrix5 = matrix4.subtract(matrix4); if (debug > 1) System.out.println(matrix5); + if (!matrix5.equals(result2)) { + System.err.println("Matrix multiplication error. matrix5="+matrix5+" result2"+result2); + return false; + } + + // Result of addition + Integer[][] array3 = new Integer[][]{{0,2}, + {4,6}}; + Matrix result3 = new Matrix(2,2,array3); if (debug > 1) System.out.println("Matrix addition."); Matrix matrix6 = matrix4.add(matrix4); if (debug > 1) System.out.println(matrix6); + if (!matrix6.equals(result3)) { + System.err.println("Matrix multiplication error. matrix6="+matrix6+" result3"+result3); + return false; + } Matrix matrix7 = new Matrix(2, 2); matrix7.set(0, 0, 1); @@ -842,9 +967,20 @@ private static boolean testMatrix() { matrix8.set(1, 0, 3); matrix8.set(1, 1, 4); + // Result of multiplication + Integer[][] array4 = new Integer[][]{{7,10}, + {15,22}}; + Matrix result4 = new Matrix(2,2,array4); + if (debug > 1) System.out.println("Matrix multiplication."); Matrix matrix9 = matrix7.multiply(matrix8); if (debug > 1) System.out.println(matrix9); + if (!matrix9.equals(result4)) { + System.err.println("Matrix multiplication error. matrix9="+matrix9+" result4"+result4); + return false; + } + + System.out.println("Matrix worked correctly."); return true; } @@ -860,6 +996,9 @@ private static boolean testPatriciaTrie() { } private static boolean testQuadTree() { + + System.out.println("QuadTree."); + int size = 16000; java.util.Set set = new java.util.HashSet(size); @@ -900,34 +1039,35 @@ private static boolean testQuadTree() { beforeMemory = DataStructures.getMemoryUse(); { beforeInsert = System.nanoTime(); - for (QuadTree.XYPoint p : set) { + for (QuadTree.XYPoint p : set) tree.insert(p.getX(), p.getY()); - } afterInsert = System.nanoTime(); insertTime = afterInsert - beforeInsert; - System.out.println("PointRegionQuadTree insertTime="+insertTime/100000d+" ms"); + if (debug > 1) System.out.println("PointRegionQuadTree insertTime="+insertTime/100000d+" ms"); } afterMemory = DataStructures.getMemoryUse(); treeMemory = afterMemory - beforeMemory; - System.out.println("PointRegionQuadTree treeMemory="+treeMemory); + if (debug > 1) System.out.println("PointRegionQuadTree treeMemory="+treeMemory); - //System.out.println(tree); + if (debug > 1) System.out.println(tree); // We should find all points here (tests structure) for (QuadTree.XYPoint p : set) { java.util.List result = tree.queryRange(p.getX(), p.getY(), 1, 1); - if (result.size()<=0) return false; + if (result.size()<=0) { + System.err.println("Quad tree queryRange error. result="+result); + return false; + } } - // We should find all points here (tests query speed) + // We may not find all points here (tests query speed) { beforeQuery = System.nanoTime(); - for (QuadTree.XYPoint p : query) { + for (QuadTree.XYPoint p : query) tree.queryRange(p.getX(), p.getY(), 1, 1); - } afterQuery = System.nanoTime(); queryTime = afterQuery - beforeQuery; - System.out.println("PointRegionQuadTree queryTime="+queryTime/100000d+" ms"); + if (debug > 1) System.out.println("PointRegionQuadTree queryTime="+queryTime/100000d+" ms"); } // Result set should not contain duplicates @@ -935,60 +1075,66 @@ private static boolean testQuadTree() { java.util.List result = tree.queryRange(0, 0, size, size); afterTreeQuery = System.nanoTime(); treeQuery = afterTreeQuery - beforeTreeQuery; - System.out.println("PointRegionQuadTree wholeTreeQuery="+treeQuery/100000d+" ms"); + if (debug > 1) System.out.println("PointRegionQuadTree wholeTreeQuery="+treeQuery/100000d+" ms"); + Collections.sort(result); QuadTree.XYPoint prev = null; for (QuadTree.XYPoint p : result) { - if (prev!=null && prev.equals(p)) return false; + if (prev!=null && prev.equals(p)) { + System.err.println("Quad tree compare error. p="+p+" prev="+prev+" result="+result); + return false; + } prev = p; } { // Remove all beforeRemove = System.nanoTime(); for (QuadTree.XYPoint p : set) { - //System.out.println(p.toString()); boolean removed = tree.remove(p.getX(), p.getY()); - //System.out.println(tree.toString()); - if (!removed) return false; + if (!removed) { + System.err.println("Quad tree remove error. removed="+removed+" x="+p.getX()+" y="+p.getY()); + return false; + } } afterRemove = System.nanoTime(); removeTime = afterRemove - beforeRemove; - System.out.println("PointRegionQuadTree removeTime="+removeTime/100000d+" ms"); + if (debug > 1) System.out.println("PointRegionQuadTree removeTime="+removeTime/100000d+" ms"); } } - { // Rectangle base quadtree + { // Rectangle base quad-tree QuadTree.MxCifQuadTree tree = new QuadTree.MxCifQuadTree(0,0,size,size,10,10); beforeMemory = DataStructures.getMemoryUse(); { beforeInsert = System.nanoTime(); - for (QuadTree.XYPoint p : set) { + for (QuadTree.XYPoint p : set) tree.insert(p.getX(), p.getY(), 1, 1); - } afterInsert = System.nanoTime(); insertTime = afterInsert - beforeInsert; - System.out.println("MxCifQuadTree insertTime="+insertTime/100000d+" ms"); + if (debug > 1) System.out.println("MxCifQuadTree insertTime="+insertTime/100000d+" ms"); } afterMemory = DataStructures.getMemoryUse(); treeMemory = afterMemory - beforeMemory; - System.out.println("MxCifQuadTree treeMemory="+treeMemory); + if (debug > 1) System.out.println("MxCifQuadTree treeMemory="+treeMemory); - //System.out.println(tree); + if (debug > 1) System.out.println(tree); // We should find all points here for (QuadTree.XYPoint p : set) { java.util.List result = tree.queryRange(p.getX(), p.getY(), 1, 1); - if (result.size()<=0) return false; + if (result.size()<=0) { + System.err.println("Quad tree queryRange error. result="+result); + return false; + } } - { // We should find all points here + { // We may not find all points here beforeQuery = System.nanoTime(); - for (QuadTree.XYPoint p : query) { + for (QuadTree.XYPoint p : query) tree.queryRange(p.getX(), p.getY(), 1, 1); - } afterQuery = System.nanoTime(); queryTime = afterQuery - beforeQuery; - System.out.println("MxCifQuadTree queryTime="+queryTime/100000d+" ms"); + if (debug > 1) System.out.println("MxCifQuadTree queryTime="+queryTime/100000d+" ms"); } // Result set should not contain duplicates @@ -996,11 +1142,13 @@ private static boolean testQuadTree() { java.util.List result = tree.queryRange(0, 0, size, size); afterTreeQuery = System.nanoTime(); treeQuery = afterTreeQuery - beforeTreeQuery; - System.out.println("MxCifQuadTree wholeTreeQuery="+treeQuery/100000d+" ms"); + if (debug > 1) System.out.println("MxCifQuadTree wholeTreeQuery="+treeQuery/100000d+" ms"); + Collections.sort(result); QuadTree.AxisAlignedBoundingBox prev = null; for (QuadTree.AxisAlignedBoundingBox p : result) { if (prev!=null && prev.equals(p)) { + System.err.println("Quad tree compare error. p="+p+" prev="+prev+" result="+result); return false; } prev = p; @@ -1009,17 +1157,20 @@ private static boolean testQuadTree() { { // Remove all beforeRemove = System.nanoTime(); for (QuadTree.XYPoint p : set) { - //System.out.println(p.toString()); boolean removed = tree.remove(p.getX(), p.getY(), 1, 1); - //System.out.println(tree.toString()); - if (!removed) return false; + if (!removed) { + System.err.println("Quad tree remove error. removed="+removed+" x="+p.getX()+" y="+p.getY()); + return false; + } } afterRemove = System.nanoTime(); removeTime = afterRemove - beforeRemove; - System.out.println("MxCifQuadTree removeTime="+removeTime/100000d+" ms"); + if (debug > 1) System.out.println("MxCifQuadTree removeTime="+removeTime/100000d+" ms"); } } + System.out.println("QuadTree worked correctly."); + return true; } diff --git a/src/com/jwetherell/algorithms/data_structures/IntervalTree.java b/src/com/jwetherell/algorithms/data_structures/IntervalTree.java index b9db6a57..3dbd0052 100644 --- a/src/com/jwetherell/algorithms/data_structures/IntervalTree.java +++ b/src/com/jwetherell/algorithms/data_structures/IntervalTree.java @@ -2,6 +2,7 @@ import java.security.InvalidParameterException; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; @@ -335,6 +336,33 @@ public IntervalData(long start, long end, Set set) { } } + /** + * Get the start of this interval + * + * @return Start of interval + */ + public long getStart() { + return start; + } + + /** + * Get the end of this interval + * + * @return End of interval + */ + public long getEnd() { + return end; + } + + /** + * Get the data set in this interval + * + * @return Unmodifiable collection of data objects + */ + public Collection getData() { + return Collections.unmodifiableCollection(this.set); + } + /** * Clear the indices. */ diff --git a/src/com/jwetherell/algorithms/data_structures/KdTree.java b/src/com/jwetherell/algorithms/data_structures/KdTree.java index 55029e7a..378dad83 100644 --- a/src/com/jwetherell/algorithms/data_structures/KdTree.java +++ b/src/com/jwetherell/algorithms/data_structures/KdTree.java @@ -327,7 +327,7 @@ private static final List getTree(KdNode root) { * last nodes are equal distances. * @param value * to find neighbors of. - * @return collection of T neighbors. + * @return unmodifiable collection of T neighbors. */ @SuppressWarnings("unchecked") public Collection nearestNeighbourSearch(int K, T value) { @@ -368,10 +368,9 @@ public Collection nearestNeighbourSearch(int K, T value) { // Load up the collection of the results Collection collection = new ArrayList(K); - for (KdNode kdNode : results) { + for (KdNode kdNode : results) collection.add((T) kdNode.id); - } - return collection; + return Collections.unmodifiableCollection(collection); } private static final void searchNode(T value, KdNode node, int K, diff --git a/src/com/jwetherell/algorithms/data_structures/Matrix.java b/src/com/jwetherell/algorithms/data_structures/Matrix.java index 781d2991..e1bc6cf7 100644 --- a/src/com/jwetherell/algorithms/data_structures/Matrix.java +++ b/src/com/jwetherell/algorithms/data_structures/Matrix.java @@ -1,8 +1,10 @@ package com.jwetherell.algorithms.data_structures; +import java.util.Comparator; + /** - * Matrx. This Matrix is designed to be more efficient in cache. A matrix is a - * rectangular array of numbers, symbols, or expressions. + * Matrx. This Matrix implementation is designed to be more efficient + * in cache. A matrix is a rectangular array of numbers, symbols, or expressions. * * http://en.wikipedia.org/wiki/Matrix_(mathematics) * @@ -14,6 +16,25 @@ public class Matrix { private int cols = 0; private T[] matrix = null; + private final Comparator comparator = new Comparator() { + /** + * {@inheritDoc} + */ + @Override + public int compare(T o1, T o2) { + Long c1 = o1.longValue(); + Long c2 = o2.longValue(); + int result = c1.compareTo(c2); + return result; + } + }; + + /** + * Matrix with 'rows' number of rows and 'cols' number of columns. + * + * @param rows Number of rows in Matrix. + * @param cols Number of columns in Matrix. + */ @SuppressWarnings("unchecked") public Matrix(int rows, int cols) { this.rows = rows; @@ -21,6 +42,24 @@ public Matrix(int rows, int cols) { this.matrix = (T[]) new Number[rows * cols]; } + /** + * Matrix with 'rows' number of rows and 'cols' number of columns, populates + * the double index matrix. + * + * @param rows Number of rows in Matrix. + * @param cols Number of columns in Matrix. + * @param matrix 2D matrix used to populate Matrix. + */ + @SuppressWarnings("unchecked") + public Matrix(int rows, int cols, T[][] matrix) { + this.rows = rows; + this.cols = cols; + this.matrix = (T[]) new Number[rows * cols]; + for (int r=0; r m) { } } + /** + * {@inheritDoc} + */ + @Override + public int hashCode() { + int hash = this.rows + this.cols; + for (T t : matrix) + hash += t.intValue(); + return 31 * hash; + } + + /** + * {@inheritDoc} + */ + @SuppressWarnings("unchecked") + @Override + public boolean equals(Object obj) { + if (obj == null) + return false; + if (!(obj instanceof Matrix)) + return false; + + Matrix m = (Matrix) obj; + if (this.rows != m.rows) + return false; + if (this.cols != m.cols) + return false; + for (int i=0; i Date: Fri, 13 Jun 2014 12:00:54 -0400 Subject: [PATCH 29/61] Finished cleaning up the non-collection based data structure testing code --- .../jwetherell/algorithms/DataStructures.java | 323 ++++++++++++++---- .../algorithms/data_structures/Matrix.java | 150 +++++++- .../data_structures/SegmentTree.java | 63 +++- 3 files changed, 447 insertions(+), 89 deletions(-) diff --git a/src/com/jwetherell/algorithms/DataStructures.java b/src/com/jwetherell/algorithms/DataStructures.java index 52c0abe0..82fec96c 100644 --- a/src/com/jwetherell/algorithms/DataStructures.java +++ b/src/com/jwetherell/algorithms/DataStructures.java @@ -56,7 +56,7 @@ @SuppressWarnings("unchecked") public class DataStructures { - private static final int NUMBER_OF_TESTS = 1; + private static final int NUMBER_OF_TESTS = 3; private static final Random RANDOM = new Random(); private static final int ARRAY_SIZE = 1000; private static final int RANDOM_SIZE = 1000 * ARRAY_SIZE; @@ -382,12 +382,6 @@ private static boolean runTests() { // MY STATIC DATA STRUCTURES - passed = testCompactSuffixTrie(); - if (!passed) { - System.err.println("Compact Suffix Trie failed."); - return false; - } - passed = testIntervalTree(); if (!passed) { System.err.println("Interval Tree failed."); @@ -406,15 +400,21 @@ private static boolean runTests() { return false; } - passed = testQuadTree(); + passed = testSegmentTree(); if (!passed) { - System.err.println("QuadTree failed."); + System.err.println("Segment Tree failed."); return false; } - passed = testSegmentTree(); + passed = testCompactSuffixTrie(); if (!passed) { - System.err.println("Segment Tree failed."); + System.err.println("Compact Suffix Trie failed."); + return false; + } + + passed = testSuffixTrie(); + if (!passed) { + System.err.println("Suffix Trie failed."); return false; } @@ -424,9 +424,9 @@ private static boolean runTests() { return false; } - passed = testSuffixTrie(); + passed = testQuadTree(); if (!passed) { - System.err.println("Suffix Trie failed."); + System.err.println("QuadTree failed."); return false; } @@ -471,6 +471,7 @@ private static boolean testBST() { private static boolean testCompactSuffixTrie() { System.out.println("Compact Suffix Trie."); + String bookkeeper = "bookkeeper"; CompactSuffixTrie trie = new CompactSuffixTrie(bookkeeper); if (debug > 1) System.out.println(trie.toString()); @@ -499,7 +500,7 @@ private static boolean testCompactSuffixTrie() { return false; } - System.out.println("Compact Suffix Trie passed it's tests."); + System.out.println("Compact Suffix Trie worked correctly."); if (debug > 1) System.out.println(); @@ -560,8 +561,9 @@ private static boolean testHAMT() { } private static boolean testIntervalTree() { + System.out.println("Interval Tree."); + { // Interval tree - System.out.println("Interval Tree."); final String RED = "RED"; final String ORANGE = "ORANGE"; final String GREEN = "GREEN"; @@ -584,6 +586,7 @@ private static boolean testIntervalTree() { if (debug > 1) System.out.println("2: " + query); if (!query.getData().contains(RED)) { System.err.println("Interval Tree query error. query=2 returned="+query); + handleError(tree); return false; } @@ -591,6 +594,7 @@ private static boolean testIntervalTree() { if (debug > 1) System.out.println("4: " + query); if (!query.getData().contains(GREEN)) { System.err.println("Interval Tree query error. query=4 returned="+query); + handleError(tree); return false; } @@ -598,6 +602,7 @@ private static boolean testIntervalTree() { if (debug > 1) System.out.println("9: " + query); if (!query.getData().contains(PURPLE)) { System.err.println("Interval Tree query error. query=9 returned="+query); + handleError(tree); return false; } @@ -612,6 +617,7 @@ private static boolean testIntervalTree() { !query.getData().contains(BLACK) ) { System.err.println("Interval Tree query error. query=1->16 returned="+query); + handleError(tree); return false; } @@ -624,6 +630,7 @@ private static boolean testIntervalTree() { !query.getData().contains(BLACK) ) { System.err.println("Interval Tree query error. query=7->14 returned="+query); + handleError(tree); return false; } @@ -633,6 +640,7 @@ private static boolean testIntervalTree() { !query.getData().contains(BLACK) ) { System.err.println("Interval Tree query error. query=14->15 returned="+query); + handleError(tree); return false; } @@ -664,6 +672,7 @@ private static boolean testIntervalTree() { !query.getData().contains(grieg) ) { System.err.println("Interval Tree query error. query=1890 returned="+query); + handleError(tree); return false; } @@ -673,6 +682,7 @@ private static boolean testIntervalTree() { !query.getData().contains(schoenberg) ) { System.err.println("Interval Tree query error. query=1909 returned="+query); + handleError(tree); return false; } @@ -684,6 +694,7 @@ private static boolean testIntervalTree() { !query.getData().contains(schubert) ) { System.err.println("Interval Tree query error. query=1792->1903 returned="+query); + handleError(tree); return false; } @@ -693,6 +704,7 @@ private static boolean testIntervalTree() { !query.getData().contains(mozart) ) { System.err.println("Interval Tree query error. query=1776->1799 returned="+query); + handleError(tree); return false; } @@ -824,7 +836,8 @@ private static boolean testKdTree() { Collection result = kdTree.nearestNeighbourSearch(1, p3); if (debug > 1) System.out.println("NNS for " + p3 + " result=" + result + "\n"); if (!result.contains(p3)) { - System.out.println("K-D Tree query error. query=(k=1, p=(9, 6)) returned="+result); + System.err.println("K-D Tree query error. query=(k=1, p=(9, 6)) returned="+result); + handleError(kdTree); return false; } @@ -836,7 +849,8 @@ private static boolean testKdTree() { !result.contains(p4) || !result.contains(p6) ) { - System.out.println("K-D Tree query error. query=(k=4, p=(1, 4)) returned="+result); + System.err.println("K-D Tree query error. query=(k=4, p=(1, 4)) returned="+result); + handleError(kdTree); return false; } @@ -884,6 +898,7 @@ private static boolean testLinkedList() { private static boolean testMatrix() { System.out.println("Matrix."); + Matrix matrix1 = new Matrix(4, 3); matrix1.set(0, 0, 14); matrix1.set(0, 1, 9); @@ -1216,8 +1231,10 @@ private static boolean testRedBlackTree() { } private static boolean testSegmentTree() { + System.out.println("Segment Tree."); + { // Quadrant Segment tree - if (debug > 1) System.out.println("Quadrant Segment Tree."); + if (debug>1) System.out.println("Quadrant Segment Tree."); java.util.List segments = new ArrayList(); segments.add(new SegmentTree.Data.QuadrantData(0, 1, 0, 0, 0)); // first point in the 0th quadrant segments.add(new SegmentTree.Data.QuadrantData(1, 0, 1, 0, 0)); // second point in the 1st quadrant @@ -1228,12 +1245,27 @@ private static boolean testSegmentTree() { SegmentTree.Data.QuadrantData query = tree.query(0, 3); if (debug > 1) System.out.println("0->3: " + query + "\n"); + if (query.quad0!=1 || query.quad1!=1 || query.quad2!=1 || query.quad3!=1) { + System.err.println("Quad tree query error. query=0->3 result="+query); + handleError(tree); + return false; + } query = tree.query(2, 3); if (debug > 1) System.out.println("2->3: " + query + "\n"); + if (query.quad0!=0 || query.quad1!=0 || query.quad2!=1 || query.quad3!=1) { + System.err.println("Quad tree query error. query=2->3 result="+query); + handleError(tree); + return false; + } query = tree.query(0, 2); if (debug > 1) System.out.println("0->2: " + query + "\n"); + if (query.quad0!=1 || query.quad1!=1 || query.quad2!=1 || query.quad3!=0) { + System.err.println("Quad tree query error. query=0->2 result="+query); + handleError(tree); + return false; + } if (debug > 1) System.out.println(); } @@ -1241,29 +1273,49 @@ private static boolean testSegmentTree() { { // Range Maximum Segment tree if (debug > 1) System.out.println("Range Maximum Segment Tree."); java.util.List> segments = new ArrayList>(); - segments.add(new SegmentTree.Data.RangeMaximumData(0, (Integer) 4)); - segments.add(new SegmentTree.Data.RangeMaximumData(1, (Integer) 2)); - segments.add(new SegmentTree.Data.RangeMaximumData(2, (Integer) 6)); - segments.add(new SegmentTree.Data.RangeMaximumData(3, (Integer) 3)); - segments.add(new SegmentTree.Data.RangeMaximumData(4, (Integer) 1)); - segments.add(new SegmentTree.Data.RangeMaximumData(5, (Integer) 5)); - segments.add(new SegmentTree.Data.RangeMaximumData(6, (Integer) 0)); + segments.add(new SegmentTree.Data.RangeMaximumData(0, (Integer) 4)); + segments.add(new SegmentTree.Data.RangeMaximumData(1, (Integer) 2)); + segments.add(new SegmentTree.Data.RangeMaximumData(2, (Integer) 6)); + segments.add(new SegmentTree.Data.RangeMaximumData(3, (Integer) 3)); + segments.add(new SegmentTree.Data.RangeMaximumData(4, (Integer) 1)); + segments.add(new SegmentTree.Data.RangeMaximumData(5, (Integer) 5)); + segments.add(new SegmentTree.Data.RangeMaximumData(6, (Integer) 0)); segments.add(new SegmentTree.Data.RangeMaximumData(7, 17, 7)); - segments.add(new SegmentTree.Data.RangeMaximumData(21, (Integer) 10)); + segments.add(new SegmentTree.Data.RangeMaximumData(21, (Integer) 10)); FlatSegmentTree> tree = new FlatSegmentTree>(segments, 3); if (debug > 1) System.out.println(tree); SegmentTree.Data.RangeMaximumData query = tree.query(0, 7); if (debug > 1) System.out.println("0->7: " + query + "\n"); + if (query.maximum!=7) { + System.err.println("Segment tree query error. query=0->7 result="+query); + handleError(tree); + return false; + } query = tree.query(0, 21); if (debug > 1) System.out.println("0->21: " + query + "\n"); + if (query.maximum!=10) { + System.err.println("Segment tree query error. query=0->21 result="+query); + handleError(tree); + return false; + } query = tree.query(2, 5); if (debug > 1) System.out.println("2->5: " + query + "\n"); + if (query.maximum!=6) { + System.err.println("Segment tree query error. query=2->5 result="+query); + handleError(tree); + return false; + } - query = tree.query(7); + query = tree.query(7); // stabing if (debug > 1) System.out.println("7: " + query + "\n"); + if (query.maximum!=7) { + System.err.println("Segment tree query error. query=7 result="+query); + handleError(tree); + return false; + } if (debug > 1) System.out.println(); } @@ -1271,28 +1323,48 @@ private static boolean testSegmentTree() { { // Range Minimum Segment tree if (debug > 1) System.out.println("Range Minimum Segment Tree."); java.util.List> segments = new ArrayList>(); - segments.add(new SegmentTree.Data.RangeMinimumData(0, (Integer) 4)); - segments.add(new SegmentTree.Data.RangeMinimumData(1, (Integer) 2)); - segments.add(new SegmentTree.Data.RangeMinimumData(2, (Integer) 6)); - segments.add(new SegmentTree.Data.RangeMinimumData(3, (Integer) 3)); - segments.add(new SegmentTree.Data.RangeMinimumData(4, (Integer) 1)); - segments.add(new SegmentTree.Data.RangeMinimumData(5, (Integer) 5)); - segments.add(new SegmentTree.Data.RangeMinimumData(6, (Integer) 0)); + segments.add(new SegmentTree.Data.RangeMinimumData(0, (Integer) 4)); + segments.add(new SegmentTree.Data.RangeMinimumData(1, (Integer) 2)); + segments.add(new SegmentTree.Data.RangeMinimumData(2, (Integer) 6)); + segments.add(new SegmentTree.Data.RangeMinimumData(3, (Integer) 3)); + segments.add(new SegmentTree.Data.RangeMinimumData(4, (Integer) 1)); + segments.add(new SegmentTree.Data.RangeMinimumData(5, (Integer) 5)); + segments.add(new SegmentTree.Data.RangeMinimumData(6, (Integer) 0)); segments.add(new SegmentTree.Data.RangeMinimumData(17, (Integer) 7)); FlatSegmentTree> tree = new FlatSegmentTree>(segments, 5); if (debug > 1) System.out.println(tree); SegmentTree.Data.RangeMinimumData query = tree.query(0, 7); if (debug > 1) System.out.println("0->7: " + query + "\n"); + if (query.minimum!=0) { + System.err.println("Segment tree query error. query=0->7 result="+query); + handleError(tree); + return false; + } query = tree.query(0, 17); if (debug > 1) System.out.println("0->17: " + query + "\n"); + if (query.minimum!=0) { + System.err.println("Segment tree query error. query=0->17 result="+query); + handleError(tree); + return false; + } query = tree.query(1, 3); if (debug > 1) System.out.println("1->3: " + query + "\n"); + if (query.minimum!=2) { + System.err.println("Segment tree query error. query=1->3 result="+query); + handleError(tree); + return false; + } - query = tree.query(7); + query = tree.query(7); // stabbing if (debug > 1) System.out.println("7: " + query + "\n"); + if (query.minimum!=null) { + System.err.println("Segment tree query error. query=7 result="+query); + handleError(tree); + return false; + } if (debug > 1) System.out.println(); } @@ -1300,99 +1372,227 @@ private static boolean testSegmentTree() { { // Range Sum Segment tree if (debug > 1) System.out.println("Range Sum Segment Tree."); java.util.List> segments = new ArrayList>(); - segments.add(new SegmentTree.Data.RangeSumData(0, (Integer) 4)); - segments.add(new SegmentTree.Data.RangeSumData(1, (Integer) 2)); - segments.add(new SegmentTree.Data.RangeSumData(2, (Integer) 6)); - segments.add(new SegmentTree.Data.RangeSumData(3, (Integer) 3)); - segments.add(new SegmentTree.Data.RangeSumData(4, (Integer) 1)); - segments.add(new SegmentTree.Data.RangeSumData(5, (Integer) 5)); - segments.add(new SegmentTree.Data.RangeSumData(6, (Integer) 0)); + segments.add(new SegmentTree.Data.RangeSumData(0, (Integer) 4)); + segments.add(new SegmentTree.Data.RangeSumData(1, (Integer) 2)); + segments.add(new SegmentTree.Data.RangeSumData(2, (Integer) 6)); + segments.add(new SegmentTree.Data.RangeSumData(3, (Integer) 3)); + segments.add(new SegmentTree.Data.RangeSumData(4, (Integer) 1)); + segments.add(new SegmentTree.Data.RangeSumData(5, (Integer) 5)); + segments.add(new SegmentTree.Data.RangeSumData(6, (Integer) 0)); segments.add(new SegmentTree.Data.RangeSumData(17, (Integer) 7)); FlatSegmentTree> tree = new FlatSegmentTree>(segments, 10); if (debug > 1) System.out.println(tree); SegmentTree.Data.RangeSumData query = tree.query(0, 8); if (debug > 1) System.out.println("0->8: " + query + "\n"); + if (query.sum != 21) { + System.err.println("Segment tree query error. query=0->8 result="+query); + handleError(tree); + return false; + } query = tree.query(0, 17); if (debug > 1) System.out.println("0->17: " + query + "\n"); + if (query.sum != 28) { + System.err.println("Segment tree query error. query=0->17 result="+query); + handleError(tree); + return false; + } query = tree.query(2, 5); if (debug > 1) System.out.println("2->5: " + query + "\n"); + if (query.sum != 15) { + System.err.println("Segment tree query error. query=2->5 result="+query); + handleError(tree); + return false; + } query = tree.query(10, 17); if (debug > 1) System.out.println("10->17: " + query + "\n"); + if (query.sum != 7) { + System.err.println("Segment tree query error. query=10->17 result="+query); + handleError(tree); + return false; + } - query = tree.query(16); + query = tree.query(16); // stabbing if (debug > 1) System.out.println("16: " + query + "\n"); + if (query.sum != null) { + System.err.println("Segment tree query error. query=16 result="+query); + handleError(tree); + return false; + } - query = tree.query(17); + query = tree.query(17); // stabbing if (debug > 1) System.out.println("17: " + query + "\n"); + if (query.sum != 7) { + System.err.println("Segment tree query error. query=17 result="+query); + handleError(tree); + return false; + } if (debug > 1) System.out.println(); } { // Interval Segment tree if (debug > 1) System.out.println("Interval Segment Tree."); + final String RED = "RED"; + final String ORANGE = "ORANGE"; + final String GREEN = "GREEN"; + final String DARK_GREEN = "DARK_GREEN"; + final String BLUE = "BLUE"; + final String PURPLE = "PURPLE"; + final String BLACK = "BLACK"; java.util.List> segments = new ArrayList>(); - segments.add((new SegmentTree.Data.IntervalData(2, 6, "RED"))); - segments.add((new SegmentTree.Data.IntervalData(3, 5, "ORANGE"))); - segments.add((new SegmentTree.Data.IntervalData(4, 11, "GREEN"))); - segments.add((new SegmentTree.Data.IntervalData(5, 10, "DARK_GREEN"))); - segments.add((new SegmentTree.Data.IntervalData(8, 12, "BLUE"))); - segments.add((new SegmentTree.Data.IntervalData(9, 14, "PURPLE"))); - segments.add((new SegmentTree.Data.IntervalData(13, 15, "BLACK"))); + segments.add((new SegmentTree.Data.IntervalData(2, 6, RED))); + segments.add((new SegmentTree.Data.IntervalData(3, 5, ORANGE))); + segments.add((new SegmentTree.Data.IntervalData(4, 11, GREEN))); + segments.add((new SegmentTree.Data.IntervalData(5, 10, DARK_GREEN))); + segments.add((new SegmentTree.Data.IntervalData(8, 12, BLUE))); + segments.add((new SegmentTree.Data.IntervalData(9, 14, PURPLE))); + segments.add((new SegmentTree.Data.IntervalData(13, 15, BLACK))); DynamicSegmentTree> tree = new DynamicSegmentTree>(segments); if (debug > 1) System.out.println(tree); - SegmentTree.Data.IntervalData query = tree.query(2); + SegmentTree.Data.IntervalData query = tree.query(2); // Stabbing if (debug > 1) System.out.println("2: " + query); + if (!query.getData().contains(RED)) { + System.err.println("Segment tree query error. query=2 result="+query); + handleError(tree); + return false; + } query = tree.query(4); // Stabbing query if (debug > 1) System.out.println("4: " + query); + if (!query.getData().contains(GREEN)) { + System.err.println("Segment tree query error. query=4 result="+query); + handleError(tree); + return false; + } query = tree.query(9); // Stabbing query if (debug > 1) System.out.println("9: " + query); + if (!query.getData().contains(PURPLE)) { + System.err.println("Segment tree query error. query=9 result="+query); + handleError(tree); + return false; + } query = tree.query(1, 16); // Range query if (debug > 1) System.out.println("1->16: " + query); + if (!query.getData().contains(RED) || + !query.getData().contains(ORANGE) || + !query.getData().contains(GREEN) || + !query.getData().contains(DARK_GREEN) || + !query.getData().contains(BLUE) || + !query.getData().contains(PURPLE) || + !query.getData().contains(BLACK) + ) { + System.err.println("Segment tree query error. query=1->16 result="+query); + handleError(tree); + return false; + } query = tree.query(7, 14); // Range query if (debug > 1) System.out.println("7->14: " + query); + if (!query.getData().contains(GREEN) || + !query.getData().contains(DARK_GREEN) || + !query.getData().contains(BLUE) || + !query.getData().contains(PURPLE) || + !query.getData().contains(BLACK) + ) { + System.err.println("Segment tree query error. query=7->14 result="+query); + handleError(tree); + return false; + } query = tree.query(14, 15); // Range query if (debug > 1) System.out.println("14->15: " + query); + if (!query.getData().contains(PURPLE) || + !query.getData().contains(BLACK) + ) { + System.err.println("Segment tree query error. query=14->15 result="+query); + handleError(tree); + return false; + } if (debug > 1) System.out.println(); } { // Lifespan Interval Segment tree if (debug > 1) System.out.println("Lifespan Interval Segment Tree."); + final String stravinsky = "Stravinsky"; + final String schoenberg = "Schoenberg"; + final String grieg = "Grieg"; + final String schubert = "Schubert"; + final String mozart = "Mozart"; + final String schuetz = "Schuetz"; java.util.List> segments = new ArrayList>(); - segments.add((new SegmentTree.Data.IntervalData(1888, 1971, "Stravinsky"))); - segments.add((new SegmentTree.Data.IntervalData(1874, 1951, "Schoenberg"))); - segments.add((new SegmentTree.Data.IntervalData(1843, 1907, "Grieg"))); - segments.add((new SegmentTree.Data.IntervalData(1779, 1828, "Schubert"))); - segments.add((new SegmentTree.Data.IntervalData(1756, 1791, "Mozart"))); - segments.add((new SegmentTree.Data.IntervalData(1585, 1672, "Schuetz"))); + segments.add((new SegmentTree.Data.IntervalData(1888, 1971, stravinsky))); + segments.add((new SegmentTree.Data.IntervalData(1874, 1951, schoenberg))); + segments.add((new SegmentTree.Data.IntervalData(1843, 1907, grieg))); + segments.add((new SegmentTree.Data.IntervalData(1779, 1828, schubert))); + segments.add((new SegmentTree.Data.IntervalData(1756, 1791, mozart))); + segments.add((new SegmentTree.Data.IntervalData(1585, 1672, schuetz))); DynamicSegmentTree> tree = new DynamicSegmentTree>(segments, 25); if (debug > 1) System.out.println(tree); - SegmentTree.Data.IntervalData query = tree.query(1890); + SegmentTree.Data.IntervalData query = tree.query(1890); // Stabbing if (debug > 1) System.out.println("1890: " + query); + if (!query.getData().contains(stravinsky) || + !query.getData().contains(schoenberg) || + !query.getData().contains(grieg) + ) { + System.err.println("Segment tree query error. query=1890 result="+query); + handleError(tree); + return false; + } query = tree.query(1909); // Stabbing query if (debug > 1) System.out.println("1909: " + query); + if (!query.getData().contains(stravinsky) || + !query.getData().contains(schoenberg) + ) { + System.err.println("Segment tree query error. query=1909 result="+query); + handleError(tree); + return false; + } + + query = tree.query(1585); // Stabbing query + if (debug > 1) System.out.println("1585: " + query); + if (!query.getData().contains(schuetz)) { + System.err.println("Segment tree query error. query=1585 result="+query); + handleError(tree); + return false; + } query = tree.query(1792, 1903); // Range query if (debug > 1) System.out.println("1792->1903: " + query); + if (!query.getData().contains(stravinsky) || + !query.getData().contains(schoenberg) || + !query.getData().contains(grieg) || + !query.getData().contains(schubert) + ) { + System.err.println("Segment tree query error. query=1792->1903 result="+query); + handleError(tree); + return false; + } query = tree.query(1776, 1799); // Range query if (debug > 1) System.out.println("1776->1799: " + query); + if (!query.getData().contains(schubert) || + !query.getData().contains(mozart) + ) { + System.err.println("Segment tree query error. query=1776->1799 result="+query); + handleError(tree); + return false; + } if (debug > 1) System.out.println(); } + System.out.println("Segment Tree worked correctly."); + return true; } @@ -1481,7 +1681,8 @@ private static boolean testSuffixTree() { } private static boolean testSuffixTrie() { - if (debug > 1) System.out.println("Suffix Trie."); + System.out.println("Suffix Trie."); + String bookkeeper = "bookkeeper"; SuffixTrie trie = new SuffixTrie(bookkeeper); if (debug > 1) System.out.println(trie.toString()); @@ -1510,6 +1711,8 @@ private static boolean testSuffixTrie() { return false; } + System.out.println("Suffix Trie worked correctly."); + if (debug > 1) System.out.println(); return true; diff --git a/src/com/jwetherell/algorithms/data_structures/Matrix.java b/src/com/jwetherell/algorithms/data_structures/Matrix.java index e1bc6cf7..2b91d06e 100644 --- a/src/com/jwetherell/algorithms/data_structures/Matrix.java +++ b/src/com/jwetherell/algorithms/data_structures/Matrix.java @@ -1,5 +1,7 @@ package com.jwetherell.algorithms.data_structures; +import java.math.BigDecimal; +import java.math.BigInteger; import java.util.Comparator; /** @@ -22,9 +24,33 @@ public class Matrix { */ @Override public int compare(T o1, T o2) { - Long c1 = o1.longValue(); - Long c2 = o2.longValue(); - int result = c1.compareTo(c2); + /* TODO: What if Java adds new numberic type? */ + int result = 0; + if (o1 instanceof BigDecimal || o2 instanceof BigDecimal) { + BigDecimal c1 = (BigDecimal)o1; + BigDecimal c2 = (BigDecimal)o2; + result = c1.compareTo(c2); + } else if (o1 instanceof BigInteger || o2 instanceof BigInteger) { + BigInteger c1 = (BigInteger)o1; + BigInteger c2 = (BigInteger)o2; + result = c1.compareTo(c2); + } else if (o1 instanceof Long || o2 instanceof Long) { + Long c1 = o1.longValue(); + Long c2 = o2.longValue(); + result = c1.compareTo(c2); + } else if (o1 instanceof Double || o2 instanceof Double) { + Double c1 = o1.doubleValue(); + Double c2 = o2.doubleValue(); + result = c1.compareTo(c2); + } else if (o1 instanceof Float || o2 instanceof Float) { + Float c1 = o1.floatValue(); + Float c2 = o2.floatValue(); + result = c1.compareTo(c2); + } else { + Integer c1 = o1.intValue(); + Integer c2 = o2.intValue(); + result = c1.compareTo(c2); + } return result; } }; @@ -103,8 +129,29 @@ public Matrix add(Matrix input) { for (int i = 0; i < cols; i++) { T m1 = this.get(r, c); T m2 = input.get(r, c); - Long l = m1.longValue() + m2.longValue(); - output.set(r, c, (T) l); + T result; + /* TODO: This is ugly and how to handle number overflow? */ + if (m1 instanceof BigDecimal || m2 instanceof BigDecimal) { + BigDecimal result2 = ((BigDecimal)m1).add((BigDecimal)m2); + result = (T)result2; + } else if (m1 instanceof BigInteger || m2 instanceof BigInteger) { + BigInteger result2 = ((BigInteger)m1).add((BigInteger)m2); + result = (T)result2; + } else if (m1 instanceof Long || m2 instanceof Long) { + Long result2 = (m1.longValue() + m2.longValue()); + result = (T)result2; + } else if (m1 instanceof Double || m2 instanceof Double) { + Double result2 = (m1.doubleValue() + m2.doubleValue()); + result = (T)result2; + } else if (m1 instanceof Float || m2 instanceof Float) { + Float result2 = (m1.floatValue() + m2.floatValue()); + result = (T)result2; + } else { + // Integer + Integer result2 = (m1.intValue() + m2.intValue()); + result = (T)result2; + } + output.set(r, c, result); } } } @@ -122,8 +169,29 @@ public Matrix subtract(Matrix input) { for (int i = 0; i < cols; i++) { T m1 = this.get(r, c); T m2 = input.get(r, c); - Long l = m1.longValue() - m2.longValue(); - output.set(r, c, (T) l); + T result; + /* TODO: This is ugly and how to handle number overflow? */ + if (m1 instanceof BigDecimal || m2 instanceof BigDecimal) { + BigDecimal result2 = ((BigDecimal)m1).subtract((BigDecimal)m2); + result = (T)result2; + } else if (m1 instanceof BigInteger || m2 instanceof BigInteger) { + BigInteger result2 = ((BigInteger)m1).subtract((BigInteger)m2); + result = (T)result2; + } else if (m1 instanceof Long || m2 instanceof Long) { + Long result2 = (m1.longValue() - m2.longValue()); + result = (T)result2; + } else if (m1 instanceof Double || m2 instanceof Double) { + Double result2 = (m1.doubleValue() - m2.doubleValue()); + result = (T)result2; + } else if (m1 instanceof Float || m2 instanceof Float) { + Float result2 = (m1.floatValue() - m2.floatValue()); + result = (T)result2; + } else { + // Integer + Integer result2 = (m1.intValue() - m2.intValue()); + result = (T)result2; + } + output.set(r, c, result); } } } @@ -140,12 +208,70 @@ public Matrix multiply(Matrix input) { for (int c = 0; c < output.cols; c++) { T[] row = getRow(r); T[] column = input.getColumn(c); - Long result = 0l; - for (int i = 0; i < cols; i++) { - Long l = row[i].longValue() * column[i].longValue(); - result += l; + T test = row[0]; + /* TODO: This is ugly and how to handle number overflow? */ + if (test instanceof BigDecimal) { + BigDecimal result = BigDecimal.ZERO; + for (int i = 0; i < cols; i++) { + T m1 = row[i]; + T m2 = column[i]; + + BigDecimal result2 = ((BigDecimal)m1).multiply(((BigDecimal)m2)); + result.add(result2); + } + output.set(r, c, (T)result); + } else if (test instanceof BigInteger) { + BigInteger result = BigInteger.ZERO; + for (int i = 0; i < cols; i++) { + T m1 = row[i]; + T m2 = column[i]; + + BigInteger result2 = ((BigInteger)m1).multiply(((BigInteger)m2)); + result.add(result2); + } + output.set(r, c, (T)result); + } else if (test instanceof Long) { + Long result = 0l; + for (int i = 0; i < cols; i++) { + T m1 = row[i]; + T m2 = column[i]; + + Long result2 = m1.longValue() * m2.longValue(); + result = result+result2; + } + output.set(r, c, (T)result); + } else if (test instanceof Double) { + Double result = 0d; + for (int i = 0; i < cols; i++) { + T m1 = row[i]; + T m2 = column[i]; + + Double result2 = m1.doubleValue() * m2.doubleValue(); + result = result+result2; + } + output.set(r, c, (T)result); + } else if (test instanceof Float) { + Float result = 0f; + for (int i = 0; i < cols; i++) { + T m1 = row[i]; + T m2 = column[i]; + + Float result2 = m1.floatValue() * m2.floatValue(); + result = result+result2; + } + output.set(r, c, (T)result); + } else { + // Integer + Integer result = 0; + for (int i = 0; i < cols; i++) { + T m1 = row[i]; + T m2 = column[i]; + + Integer result2 = m1.intValue() * m2.intValue(); + result = result+result2; + } + output.set(r, c, (T)result); } - output.set(r, c, (T) result); } } return output; diff --git a/src/com/jwetherell/algorithms/data_structures/SegmentTree.java b/src/com/jwetherell/algorithms/data_structures/SegmentTree.java index c9bf1fee..142f8b66 100644 --- a/src/com/jwetherell/algorithms/data_structures/SegmentTree.java +++ b/src/com/jwetherell/algorithms/data_structures/SegmentTree.java @@ -1,7 +1,10 @@ package com.jwetherell.algorithms.data_structures; +import java.math.BigDecimal; +import java.math.BigInteger; import java.security.InvalidParameterException; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashSet; @@ -151,10 +154,10 @@ public int compareTo(Data d) { */ public static final class QuadrantData extends Data { + public long quad0 = 0; public long quad1 = 0; public long quad2 = 0; public long quad3 = 0; - public long quad4 = 0; public QuadrantData(long index) { super(index); @@ -167,10 +170,10 @@ public QuadrantData(long start, long end) { public QuadrantData(long index, long quad1, long quad2, long quad3, long quad4) { super(index); - this.quad1 = quad1; - this.quad2 = quad2; - this.quad3 = quad3; - this.quad4 = quad4; + this.quad0 = quad1; + this.quad1 = quad2; + this.quad2 = quad3; + this.quad3 = quad4; } /** @@ -180,10 +183,10 @@ public QuadrantData(long index, long quad1, long quad2, long quad3, long quad4) public void clear() { super.clear(); + quad0 = 0; quad1 = 0; quad2 = 0; quad3 = 0; - quad4 = 0; } /** @@ -206,10 +209,10 @@ public Data combined(Data data) { * to combined. */ private void combined(QuadrantData data) { + this.quad0 += data.quad0; this.quad1 += data.quad1; this.quad2 += data.quad2; this.quad3 += data.quad3; - this.quad4 += data.quad4; } /** @@ -218,10 +221,10 @@ private void combined(QuadrantData data) { @Override public QuadrantData copy() { QuadrantData copy = new QuadrantData(start, end); + copy.quad0 = this.quad0; copy.quad1 = this.quad1; copy.quad2 = this.quad2; copy.quad3 = this.quad3; - copy.quad4 = this.quad4; return copy; } @@ -238,7 +241,7 @@ public Data query(long start, long end) { */ @Override public int hashCode() { - return 31 * (int)(this.start + this.end + this.quad1 + this.quad2 + this.quad3 + this.quad4); + return 31 * (int)(this.start + this.end + this.quad0 + this.quad1 + this.quad2 + this.quad3); } /** @@ -249,8 +252,8 @@ public boolean equals(Object obj) { if (!(obj instanceof QuadrantData)) return false; QuadrantData data = (QuadrantData) obj; - if (this.start == data.start && this.end == data.end && this.quad1 == data.quad1 - && this.quad2 == data.quad2 && this.quad3 == data.quad3 && this.quad4 == data.quad4) + if (this.start == data.start && this.end == data.end && this.quad0 == data.quad0 + && this.quad1 == data.quad1 && this.quad2 == data.quad2 && this.quad3 == data.quad3) { return true; } @@ -264,10 +267,10 @@ public boolean equals(Object obj) { public String toString() { StringBuilder builder = new StringBuilder(); builder.append(super.toString()).append(" "); + builder.append(quad0).append(","); builder.append(quad1).append(","); builder.append(quad2).append(","); - builder.append(quad3).append(","); - builder.append(quad4); + builder.append(quad3); return builder.toString(); } } @@ -567,10 +570,27 @@ else if (this.sum != null && data.sum == null) else if (this.sum == null && data.sum != null) this.sum = data.sum; else { - Double d1 = this.sum.doubleValue(); - Double d2 = data.sum.doubleValue(); - Double r = d1 + d2; - this.sum = (N) r; + /* TODO: This is ugly and how to handle number overflow? */ + if (this.sum instanceof BigDecimal || data.sum instanceof BigDecimal) { + BigDecimal result = ((BigDecimal)this.sum).add((BigDecimal)data.sum); + this.sum = (N)result; + } else if (this.sum instanceof BigInteger || data.sum instanceof BigInteger) { + BigInteger result = ((BigInteger)this.sum).add((BigInteger)data.sum); + this.sum = (N)result; + } else if (this.sum instanceof Long || data.sum instanceof Long) { + Long result = (this.sum.longValue() + data.sum.longValue()); + this.sum = (N)result; + } else if (this.sum instanceof Double || data.sum instanceof Double) { + Double result = (this.sum.doubleValue() + data.sum.doubleValue()); + this.sum = (N)result; + } else if (this.sum instanceof Float || data.sum instanceof Float) { + Float result = (this.sum.floatValue() + data.sum.floatValue()); + this.sum = (N)result; + } else { + // Integer + Integer result = (this.sum.intValue() + data.sum.intValue()); + this.sum = (N)result; + } } } @@ -678,6 +698,15 @@ public IntervalData(long start, long end, Set set) { } } + /** + * Get the data set in this interval + * + * @return Unmodifiable collection of data objects + */ + public Collection getData() { + return Collections.unmodifiableCollection(this.set); + } + /** * {@inheritDoc} */ From 2c86687967a45cfe71160178c3fb9db4da9ef6d7 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Fri, 13 Jun 2014 12:17:59 -0400 Subject: [PATCH 30/61] Cleaned up the Interval Tree, KD-Tree, and Matrix test cases --- .../data_structures/SegmentTree.java | 48 +++++++++++++++++-- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/src/com/jwetherell/algorithms/data_structures/SegmentTree.java b/src/com/jwetherell/algorithms/data_structures/SegmentTree.java index 142f8b66..3c47f82b 100644 --- a/src/com/jwetherell/algorithms/data_structures/SegmentTree.java +++ b/src/com/jwetherell/algorithms/data_structures/SegmentTree.java @@ -329,8 +329,28 @@ else if (this.maximum != null && data.maximum == null) return; else if (this.maximum == null && data.maximum != null) this.maximum = data.maximum; - else if (data.maximum.doubleValue() > this.maximum.doubleValue()) { - this.maximum = data.maximum; + else { + /* TODO: This is ugly and how to handle number overflow? */ + if (this.maximum instanceof BigDecimal || data.maximum instanceof BigDecimal) { + if (((BigDecimal)data.maximum).compareTo(((BigDecimal)this.maximum))==1) + this.maximum = data.maximum; + } else if (this.maximum instanceof BigInteger || data.maximum instanceof BigInteger) { + if (((BigInteger)data.maximum).compareTo(((BigInteger)this.maximum))==1) + this.maximum = data.maximum; + } else if (this.maximum instanceof Long || data.maximum instanceof Long) { + if (((Long)data.maximum).compareTo(((Long)this.maximum))==1) + this.maximum = data.maximum; + } else if (this.maximum instanceof Double || data.maximum instanceof Double) { + if (((Double)data.maximum).compareTo(((Double)this.maximum))==1) + this.maximum = data.maximum; + } else if (this.maximum instanceof Float || data.maximum instanceof Float) { + if (((Float)data.maximum).compareTo(((Float)this.maximum))==1) + this.maximum = data.maximum; + } else { + // Integer + if (((Integer)data.maximum).compareTo(((Integer)this.maximum))==1) + this.maximum = data.maximum; + } } } @@ -449,8 +469,28 @@ else if (this.minimum != null && data.minimum == null) return; else if (this.minimum == null && data.minimum != null) this.minimum = data.minimum; - else if (data.minimum.doubleValue() < this.minimum.doubleValue()) { - this.minimum = data.minimum; + else { + /* TODO: This is ugly and how to handle number overflow? */ + if (this.minimum instanceof BigDecimal || data.minimum instanceof BigDecimal) { + if (((BigDecimal)data.minimum).compareTo(((BigDecimal)this.minimum))==-1) + this.minimum = data.minimum; + } else if (this.minimum instanceof BigInteger || data.minimum instanceof BigInteger) { + if (((BigInteger)data.minimum).compareTo(((BigInteger)this.minimum))==-1) + this.minimum = data.minimum; + } else if (this.minimum instanceof Long || data.minimum instanceof Long) { + if (((Long)data.minimum).compareTo(((Long)this.minimum))==-1) + this.minimum = data.minimum; + } else if (this.minimum instanceof Double || data.minimum instanceof Double) { + if (((Double)data.minimum).compareTo(((Double)this.minimum))==-1) + this.minimum = data.minimum; + } else if (this.minimum instanceof Float || data.minimum instanceof Float) { + if (((Float)data.minimum).compareTo(((Float)this.minimum))==-1) + this.minimum = data.minimum; + } else { + // Integer + if (((Integer)data.minimum).compareTo(((Integer)this.minimum))==-1) + this.minimum = data.minimum; + } } } From 422a3f1b2f5c46cd8e178d4cdfce4fcbc41799d6 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Fri, 13 Jun 2014 17:02:50 -0400 Subject: [PATCH 31/61] Converting the testing of the data structures to JUnit. Almost complete. --- .classpath | 1 + lib/junit-4_4.3.1.jar | Bin 0 -> 116824 bytes .../jwetherell/algorithms/DataStructures.java | 1 - .../data_structures/test/AVLTreeTests.java | 32 ++ .../data_structures/test/AllTests.java | 43 +++ .../data_structures/test/BTreeTests.java | 30 ++ .../data_structures/test/BinaryHeapTests.java | 59 +++ .../test/BinarySearchTreeTests.java | 31 ++ .../test/CompactSuffixTrieTests.java | 28 ++ .../test/HashArrayMappedTreeTests.java | 29 ++ .../data_structures/test/HashMapTests.java | 29 ++ .../test/IntervalTreeTests.java | 106 ++++++ .../data_structures/test/KdTreeTests.java | 49 +++ .../data_structures/test/ListTests.java | 45 +++ .../data_structures/test/MatrixTests.java | 89 +++++ .../test/PatriciaTreeTests.java | 31 ++ .../data_structures/test/QuadTreeTests.java | 111 ++++++ .../data_structures/test/QueueTests.java | 45 +++ .../data_structures/test/RadixTrieTests.java | 30 ++ .../test/RedBlackTreeTests.java | 31 ++ .../test/SegmentTreeTests.java | 213 +++++++++++ .../test/SkipListMapTests.java | 30 ++ .../data_structures/test/SkipListTests.java | 31 ++ .../data_structures/test/SplayTreeTests.java | 33 ++ .../data_structures/test/StackTests.java | 45 +++ .../data_structures/test/common/HeapTest.java | 164 ++++++++ .../test/common/IteratorTest.java | 17 + .../test/common/JavaCollectionTest.java | 269 ++++++++++++++ .../test/common/JavaMapTest.java | 350 ++++++++++++++++++ .../test/common/ListIteratorTest.java | 105 ++++++ .../data_structures/test/common/ListTest.java | 117 ++++++ .../data_structures/test/common/MapTest.java | 168 +++++++++ .../test/common/QueueTest.java | 153 ++++++++ .../data_structures/test/common/SetTest.java | 117 ++++++ .../test/common/StackTest.java | 132 +++++++ .../data_structures/test/common/TreeTest.java | 160 ++++++++ .../data_structures/test/common/Utils.java | 63 ++++ 37 files changed, 2986 insertions(+), 1 deletion(-) create mode 100644 lib/junit-4_4.3.1.jar create mode 100644 src/com/jwetherell/algorithms/data_structures/test/AVLTreeTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/AllTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/BTreeTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/BinaryHeapTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/BinarySearchTreeTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/CompactSuffixTrieTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/HashArrayMappedTreeTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/HashMapTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/IntervalTreeTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/KdTreeTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/ListTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/MatrixTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/PatriciaTreeTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/QuadTreeTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/QueueTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/RadixTrieTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/RedBlackTreeTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/SegmentTreeTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/SkipListMapTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/SkipListTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/SplayTreeTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/StackTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/common/HeapTest.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/common/IteratorTest.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/common/JavaCollectionTest.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/common/JavaMapTest.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/common/ListIteratorTest.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/common/ListTest.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/common/MapTest.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/common/QueueTest.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/common/SetTest.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/common/StackTest.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/common/TreeTest.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/common/Utils.java diff --git a/.classpath b/.classpath index 18d70f02..43952db6 100644 --- a/.classpath +++ b/.classpath @@ -2,5 +2,6 @@ + diff --git a/lib/junit-4_4.3.1.jar b/lib/junit-4_4.3.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..5d9ccff6ea557410d2ea1cd7a5cdfa4a7e7a6040 GIT binary patch literal 116824 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%0DCk#@)q8Vd`{jJOW8)z}w`m$M( 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 oyHSO-dY)QVl|D5mWm%gnxos-OW2F%nSA{ aHeapMin = new BinaryHeap.BinaryHeapArray(BinaryHeap.Type.MIN); diff --git a/src/com/jwetherell/algorithms/data_structures/test/AVLTreeTests.java b/src/com/jwetherell/algorithms/data_structures/test/AVLTreeTests.java new file mode 100644 index 00000000..93e852a9 --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/AVLTreeTests.java @@ -0,0 +1,32 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.assertTrue; + +import java.util.Collection; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.AVLTree; +import com.jwetherell.algorithms.data_structures.BinarySearchTree; +import com.jwetherell.algorithms.data_structures.test.common.JavaCollectionTest; +import com.jwetherell.algorithms.data_structures.test.common.TreeTest; +import com.jwetherell.algorithms.data_structures.test.common.Utils; +import com.jwetherell.algorithms.data_structures.test.common.Utils.TestData; +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; + +public class AVLTreeTests { + + @Test + public void testAVLTree() { + TestData data = Utils.generateTestData(1000); + + String bstName = "AVL Tree"; + BinarySearchTree bst = new AVLTree(); + Collection bstCollection = bst.toCollection(); + + assertTrue(TreeTest.testTree(bst, Type.Integer, bstName, + data.unsorted, data.invalid)); + assertTrue(JavaCollectionTest.testCollection(bstCollection, Type.Integer, bstName, + data.unsorted, data.sorted)); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/AllTests.java b/src/com/jwetherell/algorithms/data_structures/test/AllTests.java new file mode 100644 index 00000000..6d51c53c --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/AllTests.java @@ -0,0 +1,43 @@ +package com.jwetherell.algorithms.data_structures.test; + +import org.junit.runner.JUnitCore; +import org.junit.runner.RunWith; +import org.junit.runners.Suite; +import org.junit.runners.Suite.SuiteClasses; + +@RunWith(Suite.class) +@SuiteClasses( { + AVLTreeTests.class, + BinaryHeapTests.class, + BinarySearchTreeTests.class, + BTreeTests.class, + CompactSuffixTrieTests.class, + HashArrayMappedTreeTests.class, + HashMapTests.class, + IntervalTreeTests.class, + KdTreeTests.class, + ListTests.class, + MatrixTests.class, + PatriciaTreeTests.class, + QuadTreeTests.class, + QueueTests.class, + RadixTrieTests.class, + RedBlackTreeTests.class, + SegmentTreeTests.class, + SkipListMapTests.class, + SkipListTests.class, + SplayTreeTests.class, + StackTests.class, + } + ) + +public class AllTests { + + /** + * @param args + */ + public static void main(String[] args) { + JUnitCore core = new JUnitCore(); + core.run(AllTests.class); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/BTreeTests.java b/src/com/jwetherell/algorithms/data_structures/test/BTreeTests.java new file mode 100644 index 00000000..c34875b6 --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/BTreeTests.java @@ -0,0 +1,30 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.*; + +import java.util.Collection; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.BTree; +import com.jwetherell.algorithms.data_structures.test.common.JavaCollectionTest; +import com.jwetherell.algorithms.data_structures.test.common.TreeTest; +import com.jwetherell.algorithms.data_structures.test.common.Utils; +import com.jwetherell.algorithms.data_structures.test.common.Utils.TestData; +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; + +public class BTreeTests { + + @Test + public void testBTree() { + TestData data = Utils.generateTestData(1000); + + String bstName = "B-Tree"; + BTree bst = new BTree(2); + Collection bstCollection = bst.toCollection(); + + assertTrue(TreeTest.testTree(bst, Type.Integer, bstName, data.unsorted, data.invalid)); + assertTrue(JavaCollectionTest.testCollection(bstCollection, Type.Integer, bstName, + data.unsorted, data.sorted)); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/BinaryHeapTests.java b/src/com/jwetherell/algorithms/data_structures/test/BinaryHeapTests.java new file mode 100644 index 00000000..4cd7f2d2 --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/BinaryHeapTests.java @@ -0,0 +1,59 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.*; + +import java.util.Collection; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.BinaryHeap; +import com.jwetherell.algorithms.data_structures.test.common.JavaCollectionTest; +import com.jwetherell.algorithms.data_structures.test.common.HeapTest; +import com.jwetherell.algorithms.data_structures.test.common.Utils; +import com.jwetherell.algorithms.data_structures.test.common.Utils.TestData; +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; + +public class BinaryHeapTests { + + @Test + public void testMinHeap() { + TestData data = Utils.generateTestData(1000); + + String aNameMin = "Min-Heap [array]"; + BinaryHeap.BinaryHeapArray aHeapMin = new BinaryHeap.BinaryHeapArray(BinaryHeap.Type.MIN); + Collection aCollectionMin = aHeapMin.toCollection(); + assertTrue(HeapTest.testHeap(aHeapMin, aNameMin, BinaryHeap.Type.MIN, + data.unsorted, data.sorted, data.invalid)); + assertTrue(JavaCollectionTest.testCollection(aCollectionMin, Type.Integer, aNameMin, + data.unsorted, data.sorted)); + + String tNameMin = "Min-Heap [tree]"; + BinaryHeap.BinaryHeapTree tHeapMin = new BinaryHeap.BinaryHeapTree(BinaryHeap.Type.MIN); + Collection tCollectionMin = tHeapMin.toCollection(); + assertTrue(HeapTest.testHeap(tHeapMin, tNameMin, BinaryHeap.Type.MIN, + data.unsorted, data.sorted, data.invalid)); + assertTrue(JavaCollectionTest.testCollection(tCollectionMin, Type.Integer, tNameMin, + data.unsorted, data.sorted)); + } + + @Test + public void testMaxHeap() { + TestData data = Utils.generateTestData(1000); + + String aNameMax = "Max-Heap [array]"; + BinaryHeap.BinaryHeapArray aHeapMax = new BinaryHeap.BinaryHeapArray(BinaryHeap.Type.MAX); + Collection aCollectionMax = aHeapMax.toCollection(); + assertTrue(HeapTest.testHeap(aHeapMax, aNameMax, BinaryHeap.Type.MAX, + data.unsorted, data.sorted, data.invalid)); + assertTrue(JavaCollectionTest.testCollection(aCollectionMax, Type.Integer, aNameMax, + data.unsorted, data.sorted)); + + String lNameMax = "Max-Heap [tree]"; + BinaryHeap.BinaryHeapTree tHeapMax = new BinaryHeap.BinaryHeapTree(BinaryHeap.Type.MAX); + Collection tCollectionMax = tHeapMax.toCollection(); + assertTrue(HeapTest.testHeap(tHeapMax, lNameMax, BinaryHeap.Type.MAX, + data.unsorted, data.sorted, data.invalid)); + assertTrue(JavaCollectionTest.testCollection(tCollectionMax, Type.Integer, lNameMax, + data.unsorted, data.sorted)); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/BinarySearchTreeTests.java b/src/com/jwetherell/algorithms/data_structures/test/BinarySearchTreeTests.java new file mode 100644 index 00000000..eac68587 --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/BinarySearchTreeTests.java @@ -0,0 +1,31 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.*; + +import java.util.Collection; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.BinarySearchTree; +import com.jwetherell.algorithms.data_structures.test.common.JavaCollectionTest; +import com.jwetherell.algorithms.data_structures.test.common.TreeTest; +import com.jwetherell.algorithms.data_structures.test.common.Utils; +import com.jwetherell.algorithms.data_structures.test.common.Utils.TestData; +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; + +public class BinarySearchTreeTests { + + @Test + public void testBST() { + TestData data = Utils.generateTestData(1000); + + String bstName = "BST"; + BinarySearchTree bst = new BinarySearchTree(); + Collection bstCollection = bst.toCollection(); + + assertTrue(TreeTest.testTree(bst, Type.Integer, bstName, + data.unsorted, data.invalid)); + assertTrue(JavaCollectionTest.testCollection(bstCollection, Type.Integer, bstName, + data.unsorted, data.sorted)); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/CompactSuffixTrieTests.java b/src/com/jwetherell/algorithms/data_structures/test/CompactSuffixTrieTests.java new file mode 100644 index 00000000..8b6bce27 --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/CompactSuffixTrieTests.java @@ -0,0 +1,28 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.CompactSuffixTrie; + +public class CompactSuffixTrieTests { + + @Test + public void testCompactSuffixTrie() { + String bookkeeper = "bookkeeper"; + CompactSuffixTrie trie = new CompactSuffixTrie(bookkeeper); + + boolean exists = trie.doesSubStringExist(bookkeeper); + assertTrue("YIKES!! " + bookkeeper + " doesn't exists.", exists); + + String failed = "booker"; + exists = trie.doesSubStringExist(failed); + assertFalse("YIKES!! " + failed + " exists.", exists); + + String pass = "kkee"; + exists = trie.doesSubStringExist(pass); + assertTrue("YIKES!! " + pass + " doesn't exists.", exists); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/HashArrayMappedTreeTests.java b/src/com/jwetherell/algorithms/data_structures/test/HashArrayMappedTreeTests.java new file mode 100644 index 00000000..a83e91be --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/HashArrayMappedTreeTests.java @@ -0,0 +1,29 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.*; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.HashArrayMappedTrie; +import com.jwetherell.algorithms.data_structures.test.common.JavaMapTest; +import com.jwetherell.algorithms.data_structures.test.common.MapTest; +import com.jwetherell.algorithms.data_structures.test.common.Utils; +import com.jwetherell.algorithms.data_structures.test.common.Utils.TestData; +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; + +public class HashArrayMappedTreeTests { + + @Test + public void testHAMT() { + TestData data = Utils.generateTestData(1000); + + String mapName = "HAMT"; + HashArrayMappedTrie map = new HashArrayMappedTrie(); + java.util.Map jMap = map.toMap(); + + assertTrue(MapTest.testMap(map, Type.Integer, mapName, + data.unsorted, data.invalid)); + assertTrue(JavaMapTest.testJavaMap(jMap, Type.Integer, mapName, + data.unsorted, data.sorted, data.invalid)); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/HashMapTests.java b/src/com/jwetherell/algorithms/data_structures/test/HashMapTests.java new file mode 100644 index 00000000..faf81fa5 --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/HashMapTests.java @@ -0,0 +1,29 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.HashMap; +import com.jwetherell.algorithms.data_structures.test.common.JavaMapTest; +import com.jwetherell.algorithms.data_structures.test.common.MapTest; +import com.jwetherell.algorithms.data_structures.test.common.Utils; +import com.jwetherell.algorithms.data_structures.test.common.Utils.TestData; +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; + +public class HashMapTests { + + @Test + public void testHashMap() { + TestData data = Utils.generateTestData(1000); + + String mapName = "HashMap"; + HashMap map = new HashMap(); + java.util.Map jMap = map.toMap(); + + assertTrue(MapTest.testMap(map, Type.Integer, mapName, + data.unsorted, data.invalid)); + assertTrue(JavaMapTest.testJavaMap(jMap, Type.Integer, mapName, + data.unsorted, data.sorted, data.invalid)); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/IntervalTreeTests.java b/src/com/jwetherell/algorithms/data_structures/test/IntervalTreeTests.java new file mode 100644 index 00000000..31168939 --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/IntervalTreeTests.java @@ -0,0 +1,106 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.IntervalTree; + +public class IntervalTreeTests { + + @Test + public void testIntervalTree() { + { // Interval tree + final String RED = "RED"; + final String ORANGE = "ORANGE"; + final String GREEN = "GREEN"; + final String DARK_GREEN = "DARK_GREEN"; + final String BLUE = "BLUE"; + final String PURPLE = "PURPLE"; + final String BLACK = "BLACK"; + java.util.List> intervals = new ArrayList>(); + intervals.add((new IntervalTree.IntervalData(2, 6, RED))); + intervals.add((new IntervalTree.IntervalData(3, 5, ORANGE))); + intervals.add((new IntervalTree.IntervalData(4, 11, GREEN))); + intervals.add((new IntervalTree.IntervalData(5, 10, DARK_GREEN))); + intervals.add((new IntervalTree.IntervalData(8, 12, BLUE))); + intervals.add((new IntervalTree.IntervalData(9, 14, PURPLE))); + intervals.add((new IntervalTree.IntervalData(13, 15, BLACK))); + IntervalTree tree = new IntervalTree(intervals); + + IntervalTree.IntervalData query = tree.query(2); + assertTrue("Interval Tree query error. query=2 returned="+query, query.getData().contains(RED)); + + query = tree.query(4); // Stabbing query + assertTrue("Interval Tree query error. query=4 returned="+query, query.getData().contains(GREEN)); + + query = tree.query(9); // Stabbing query + assertTrue("Interval Tree query error. query=9 returned="+query, query.getData().contains(PURPLE)); + + query = tree.query(1, 16); // Range query + assertTrue("Interval Tree query error. query=1->16 returned="+query, (query.getData().contains(RED) && + query.getData().contains(ORANGE) && + query.getData().contains(GREEN) && + query.getData().contains(DARK_GREEN) && + query.getData().contains(BLUE) && + query.getData().contains(PURPLE) && + query.getData().contains(BLACK)) + ); + + query = tree.query(7, 14); // Range query + assertTrue("Interval Tree query error. query=7->14 returned="+query, (query.getData().contains(GREEN) && + query.getData().contains(DARK_GREEN) && + query.getData().contains(BLUE) && + query.getData().contains(PURPLE) && + query.getData().contains(BLACK)) + ); + + query = tree.query(14, 15); // Range query + assertTrue((query.getData().contains(PURPLE) && + query.getData().contains(BLACK)) + ); + } + + { // Lifespan Interval tree + final String stravinsky = "Stravinsky"; + final String schoenberg = "Schoenberg"; + final String grieg = "Grieg"; + final String schubert = "Schubert"; + final String mozart = "Mozart"; + final String schuetz = "Schuetz"; + java.util.List> intervals = new ArrayList>(); + intervals.add((new IntervalTree.IntervalData(1888, 1971, stravinsky))); + intervals.add((new IntervalTree.IntervalData(1874, 1951, schoenberg))); + intervals.add((new IntervalTree.IntervalData(1843, 1907, grieg))); + intervals.add((new IntervalTree.IntervalData(1779, 1828, schubert))); + intervals.add((new IntervalTree.IntervalData(1756, 1791, mozart))); + intervals.add((new IntervalTree.IntervalData(1585, 1672, schuetz))); + IntervalTree tree = new IntervalTree(intervals); + + IntervalTree.IntervalData query = tree.query(1890); // Stabbing query + assertTrue("Interval Tree query error. query=1890 returned="+query, (query.getData().contains(stravinsky) && + query.getData().contains(schoenberg) && + query.getData().contains(grieg)) + ); + + query = tree.query(1909); // Stabbing query + assertTrue("Interval Tree query error. query=1909 returned="+query , (query.getData().contains(stravinsky) && + query.getData().contains(schoenberg)) + ); + + query = tree.query(1792, 1903); // Range query + assertTrue("Interval Tree query error. query=1792->1903 returned="+query, query.getData().contains(stravinsky) && + query.getData().contains(schoenberg) && + query.getData().contains(grieg) && + query.getData().contains(schubert) + ); + + query = tree.query(1776, 1799); // Range query + assertTrue("Interval Tree query error. query=1776->1799 returned="+query, (query.getData().contains(schubert) && + query.getData().contains(mozart)) + ); + } + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/KdTreeTests.java b/src/com/jwetherell/algorithms/data_structures/test/KdTreeTests.java new file mode 100644 index 00000000..d8ef26af --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/KdTreeTests.java @@ -0,0 +1,49 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.Collection; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.KdTree; + +public class KdTreeTests { + + @Test + public void testKdTree() { + java.util.List points = new ArrayList(); + KdTree.XYZPoint p1 = new KdTree.XYZPoint(2, 3); + points.add(p1); + KdTree.XYZPoint p2 = new KdTree.XYZPoint(5, 4); + points.add(p2); + KdTree.XYZPoint p3 = new KdTree.XYZPoint(9, 6); + points.add(p3); + KdTree.XYZPoint p4 = new KdTree.XYZPoint(4, 7); + points.add(p4); + KdTree.XYZPoint p5 = new KdTree.XYZPoint(8, 1); + points.add(p5); + KdTree.XYZPoint p6 = new KdTree.XYZPoint(7, 2); + points.add(p6); + KdTree kdTree = new KdTree(points); + + Collection result = kdTree.nearestNeighbourSearch(1, p3); + assertTrue("K-D Tree query error. query=(k=1, p=(9, 6)) returned="+result, result.contains(p3)); + + KdTree.XYZPoint search = new KdTree.XYZPoint(1, 4); + result = kdTree.nearestNeighbourSearch(4, search); + assertTrue("K-D Tree query error. query=(k=4, p=(1, 4)) returned="+result, (result.contains(p1) && + result.contains(p2) && + result.contains(p4) && + result.contains(p6)) + ); + + kdTree.remove(p6); + kdTree.remove(p4); + kdTree.remove(p3); + kdTree.remove(p5); + kdTree.remove(p1); + kdTree.remove(p2); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/ListTests.java b/src/com/jwetherell/algorithms/data_structures/test/ListTests.java new file mode 100644 index 00000000..cb268962 --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/ListTests.java @@ -0,0 +1,45 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.assertTrue; + +import java.util.Collection; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.List; +import com.jwetherell.algorithms.data_structures.test.common.JavaCollectionTest; +import com.jwetherell.algorithms.data_structures.test.common.ListTest; +import com.jwetherell.algorithms.data_structures.test.common.Utils; +import com.jwetherell.algorithms.data_structures.test.common.Utils.TestData; +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; + +public class ListTests { + + @Test + public void testArrayList() { + TestData data = Utils.generateTestData(1000); + + String aName = "List [array]"; + List.ArrayList aList = new List.ArrayList(); + Collection aCollection = aList.toCollection(); + + assertTrue(ListTest.testList(aList, aName, + data.unsorted, data.invalid)); + assertTrue(JavaCollectionTest.testCollection(aCollection, Type.Integer, aName, + data.unsorted, data.sorted)); + } + + @Test + public void testLinkedList() { + TestData data = Utils.generateTestData(1000); + + String lName = "List [linked]"; + List.LinkedList lList = new List.LinkedList(); + Collection lCollection = lList.toCollection(); + + assertTrue(ListTest.testList(lList, lName, + data.unsorted, data.invalid)); + assertTrue(JavaCollectionTest.testCollection(lCollection, Type.Integer, lName, + data.unsorted, data.sorted)); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/MatrixTests.java b/src/com/jwetherell/algorithms/data_structures/test/MatrixTests.java new file mode 100644 index 00000000..23d79bd2 --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/MatrixTests.java @@ -0,0 +1,89 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.Matrix; + +public class MatrixTests { + + @Test + public void testMatrix() { + Matrix matrix1 = new Matrix(4, 3); + matrix1.set(0, 0, 14); + matrix1.set(0, 1, 9); + matrix1.set(0, 2, 3); + matrix1.set(1, 0, 2); + matrix1.set(1, 1, 11); + matrix1.set(1, 2, 15); + matrix1.set(2, 0, 0); + matrix1.set(2, 1, 12); + matrix1.set(2, 2, 17); + matrix1.set(3, 0, 5); + matrix1.set(3, 1, 2); + matrix1.set(3, 2, 3); + + Matrix matrix2 = new Matrix(3, 2); + matrix2.set(0, 0, 12); + matrix2.set(0, 1, 25); + matrix2.set(1, 0, 9); + matrix2.set(1, 1, 10); + matrix2.set(2, 0, 8); + matrix2.set(2, 1, 5); + + // Result of multiplication + Integer[][] array1 = new Integer[][]{{273,455}, + {243,235}, + {244,205}, + {102,160}}; + Matrix result1 = new Matrix(4,2,array1); + + Matrix matrix3 = matrix1.multiply(matrix2); + assertTrue("Matrix multiplication error. matrix3="+matrix3+" result1"+result1, matrix3.equals(result1)); + + int rows = 2; + int cols = 2; + int counter = 0; + Matrix matrix4 = new Matrix(rows, cols); + for (int r = 0; r < rows; r++) + for (int c = 0; c < cols; c++) + matrix4.set(r, c, counter++); + + // Result of subtraction + Integer[][] array2 = new Integer[][]{{0,0}, + {0,0}}; + Matrix result2 = new Matrix(2,2,array2); + + Matrix matrix5 = matrix4.subtract(matrix4); + assertTrue("Matrix subtraction error. matrix5="+matrix5+" result2"+result2, matrix5.equals(result2)); + + // Result of addition + Integer[][] array3 = new Integer[][]{{0,2}, + {4,6}}; + Matrix result3 = new Matrix(2,2,array3); + + Matrix matrix6 = matrix4.add(matrix4); + assertTrue("Matrix addition error. matrix6="+matrix6+" result3"+result3, matrix6.equals(result3)); + + Matrix matrix7 = new Matrix(2, 2); + matrix7.set(0, 0, 1); + matrix7.set(0, 1, 2); + matrix7.set(1, 0, 3); + matrix7.set(1, 1, 4); + + Matrix matrix8 = new Matrix(2, 2); + matrix8.set(0, 0, 1); + matrix8.set(0, 1, 2); + matrix8.set(1, 0, 3); + matrix8.set(1, 1, 4); + + // Result of multiplication + Integer[][] array4 = new Integer[][]{{7,10}, + {15,22}}; + Matrix result4 = new Matrix(2,2,array4); + + Matrix matrix9 = matrix7.multiply(matrix8); + assertTrue("Matrix multiplication error. matrix9="+matrix9+" result4"+result4, matrix9.equals(result4)); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/PatriciaTreeTests.java b/src/com/jwetherell/algorithms/data_structures/test/PatriciaTreeTests.java new file mode 100644 index 00000000..b5f71c86 --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/PatriciaTreeTests.java @@ -0,0 +1,31 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.assertTrue; + +import java.util.Collection; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.PatriciaTrie; +import com.jwetherell.algorithms.data_structures.test.common.JavaCollectionTest; +import com.jwetherell.algorithms.data_structures.test.common.TreeTest; +import com.jwetherell.algorithms.data_structures.test.common.Utils; +import com.jwetherell.algorithms.data_structures.test.common.Utils.TestData; +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; + +public class PatriciaTreeTests { + + @Test + public void testPatriciaTrie() { + TestData data = Utils.generateTestData(1000); + + String bstName = "PatriciaTrie"; + PatriciaTrie bst = new PatriciaTrie(); + Collection bstCollection = bst.toCollection(); + + assertTrue(TreeTest.testTree(bst, Type.String, bstName, + data.unsorted, data.invalid)); + assertTrue(JavaCollectionTest.testCollection(bstCollection, Type.String, bstName, + data.unsorted, data.sorted)); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/QuadTreeTests.java b/src/com/jwetherell/algorithms/data_structures/test/QuadTreeTests.java new file mode 100644 index 00000000..5aeb140b --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/QuadTreeTests.java @@ -0,0 +1,111 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.Collections; +import java.util.Random; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.QuadTree; + +public class QuadTreeTests { + + private static final Random RANDOM = new Random(); + + @Test + public void testQuadTree() { + int size = 1000; + + java.util.Set set = new java.util.HashSet(size); + while (set.size() < size) { + float x = RANDOM.nextInt(size); + float y = RANDOM.nextInt(size); + QuadTree.XYPoint xyPoint = new QuadTree.XYPoint(x,y); + set.add(xyPoint); + } + + java.util.List query = new java.util.ArrayList(size); + for (int j=0; j tree = new QuadTree.PointRegionQuadTree(0,0,size,size); + + { + for (QuadTree.XYPoint p : set) + tree.insert(p.getX(), p.getY()); + } + + // We should find all points here (tests structure) + for (QuadTree.XYPoint p : set) { + java.util.List result = tree.queryRange(p.getX(), p.getY(), 1, 1); + assertTrue("Quad tree queryRange error. result="+result, result.size()>0); + } + + // We may not find all points here (tests query speed) + { + for (QuadTree.XYPoint p : query) + tree.queryRange(p.getX(), p.getY(), 1, 1); + } + + // Result set should not contain duplicates + java.util.List result = tree.queryRange(0, 0, size, size); + + Collections.sort(result); + QuadTree.XYPoint prev = null; + for (QuadTree.XYPoint p : result) { + assertFalse("Quad tree compare error. p="+p+" prev="+prev+" result="+result, (prev!=null && prev.equals(p))); + prev = p; + } + + { // Remove all + for (QuadTree.XYPoint p : set) { + boolean removed = tree.remove(p.getX(), p.getY()); + assertTrue("Quad tree remove error. removed="+removed+" x="+p.getX()+" y="+p.getY(), removed); + } + } + } + + { // Rectangle base quad-tree + QuadTree.MxCifQuadTree tree = new QuadTree.MxCifQuadTree(0,0,size,size,10,10); + { + for (QuadTree.XYPoint p : set) + tree.insert(p.getX(), p.getY(), 1, 1); + } + + // We should find all points here + for (QuadTree.XYPoint p : set) { + java.util.List result = tree.queryRange(p.getX(), p.getY(), 1, 1); + assertTrue("Quad tree queryRange error. result="+result, result.size()!=0); + } + + { // We may not find all points here + for (QuadTree.XYPoint p : query) + tree.queryRange(p.getX(), p.getY(), 1, 1); + } + + // Result set should not contain duplicates + java.util.List result = tree.queryRange(0, 0, size, size); + + Collections.sort(result); + QuadTree.AxisAlignedBoundingBox prev = null; + for (QuadTree.AxisAlignedBoundingBox p : result) { + assertFalse("Quad tree compare error. p="+p+" prev="+prev+" result="+result, (prev!=null && prev.equals(p))); + prev = p; + } + + { // Remove all + for (QuadTree.XYPoint p : set) { + boolean removed = tree.remove(p.getX(), p.getY(), 1, 1); + assertTrue("Quad tree remove error. removed="+removed+" x="+p.getX()+" y="+p.getY(), removed); + } + } + } + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/QueueTests.java b/src/com/jwetherell/algorithms/data_structures/test/QueueTests.java new file mode 100644 index 00000000..f545cee6 --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/QueueTests.java @@ -0,0 +1,45 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.assertTrue; + +import java.util.Collection; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.Queue; +import com.jwetherell.algorithms.data_structures.test.common.JavaCollectionTest; +import com.jwetherell.algorithms.data_structures.test.common.QueueTest; +import com.jwetherell.algorithms.data_structures.test.common.Utils; +import com.jwetherell.algorithms.data_structures.test.common.Utils.TestData; +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; + +public class QueueTests { + + @Test + public void testArrayQueue() { + TestData data = Utils.generateTestData(100); + + String aName = "Queue [array]"; + Queue.ArrayQueue aQueue = new Queue.ArrayQueue(); + Collection aCollection = aQueue.toCollection(); + + assertTrue(QueueTest.testQueue(aQueue, aName, + data.unsorted, data.invalid)); + assertTrue(JavaCollectionTest.testCollection(aCollection, Type.Integer, aName, + data.unsorted, data.sorted)); + } + + @Test + public void testLinkedQueue() { + TestData data = Utils.generateTestData(100); + + String lName = "Queue [linked]"; + Queue.LinkedQueue lQueue = new Queue.LinkedQueue(); + Collection lCollection = lQueue.toCollection(); + + assertTrue(QueueTest.testQueue(lQueue, lName, + data.unsorted, data.invalid)); + assertTrue(JavaCollectionTest.testCollection(lCollection, Type.Integer, lName, + data.unsorted, data.sorted)); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/RadixTrieTests.java b/src/com/jwetherell/algorithms/data_structures/test/RadixTrieTests.java new file mode 100644 index 00000000..92b7a86e --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/RadixTrieTests.java @@ -0,0 +1,30 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.RadixTrie; +import com.jwetherell.algorithms.data_structures.test.common.JavaMapTest; +import com.jwetherell.algorithms.data_structures.test.common.MapTest; +import com.jwetherell.algorithms.data_structures.test.common.Utils; +import com.jwetherell.algorithms.data_structures.test.common.Utils.TestData; +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; + +public class RadixTrieTests { + + @Test + public void testRadixTrie() { + TestData data = Utils.generateTestData(1000); + + String mapName = "RadixTrie"; + RadixTrie map = new RadixTrie(); + java.util.Map jMap = map.toMap(); + + assertTrue(MapTest.testMap(map, Type.String, mapName, + data.unsorted, data.invalid)); + assertTrue(JavaMapTest.testJavaMap(jMap, Type.String, mapName, + data.unsorted, data.sorted, data.invalid)); + } + +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/RedBlackTreeTests.java b/src/com/jwetherell/algorithms/data_structures/test/RedBlackTreeTests.java new file mode 100644 index 00000000..7c4ebe6f --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/RedBlackTreeTests.java @@ -0,0 +1,31 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.assertTrue; + +import java.util.Collection; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.RedBlackTree; +import com.jwetherell.algorithms.data_structures.test.common.JavaCollectionTest; +import com.jwetherell.algorithms.data_structures.test.common.TreeTest; +import com.jwetherell.algorithms.data_structures.test.common.Utils; +import com.jwetherell.algorithms.data_structures.test.common.Utils.TestData; +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; + +public class RedBlackTreeTests { + + @Test + public void testRedBlackTree() { + TestData data = Utils.generateTestData(1000); + + String bstName = "Red-Black Tree"; + RedBlackTree bst = new RedBlackTree(); + Collection bstCollection = bst.toCollection(); + + assertTrue(TreeTest.testTree(bst, Type.Integer, bstName, + data.unsorted, data.invalid)); + assertTrue(JavaCollectionTest.testCollection(bstCollection, Type.Integer, bstName, + data.unsorted, data.sorted)); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/SegmentTreeTests.java b/src/com/jwetherell/algorithms/data_structures/test/SegmentTreeTests.java new file mode 100644 index 00000000..a6998191 --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/SegmentTreeTests.java @@ -0,0 +1,213 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.SegmentTree; +import com.jwetherell.algorithms.data_structures.SegmentTree.DynamicSegmentTree; +import com.jwetherell.algorithms.data_structures.SegmentTree.FlatSegmentTree; + +public class SegmentTreeTests { + + @Test + public void testSegmentTree() { + System.out.println("Segment Tree."); + + { // Quadrant Segment tree + java.util.List segments = new ArrayList(); + segments.add(new SegmentTree.Data.QuadrantData(0, 1, 0, 0, 0)); // first point in the 0th quadrant + segments.add(new SegmentTree.Data.QuadrantData(1, 0, 1, 0, 0)); // second point in the 1st quadrant + segments.add(new SegmentTree.Data.QuadrantData(2, 0, 0, 1, 0)); // third point in the 2nd quadrant + segments.add(new SegmentTree.Data.QuadrantData(3, 0, 0, 0, 1)); // fourth point in the 3rd quadrant + FlatSegmentTree tree = new FlatSegmentTree(segments); + + SegmentTree.Data.QuadrantData query = tree.query(0, 3); + assertTrue("Quad tree query error. query=0->3 result="+query, (query.quad0==1 && query.quad1==1 && query.quad2==1 && query.quad3==1)); + + query = tree.query(2, 3); + assertTrue("Quad tree query error. query=2->3 result="+query, (query.quad0==0 && query.quad1==0 && query.quad2==1 && query.quad3==1)); + + query = tree.query(0, 2); + assertTrue("Quad tree query error. query=0->2 result="+query, (query.quad0==1 && query.quad1==1 && query.quad2==1 && query.quad3==0)); + } + + { // Range Maximum Segment tree + java.util.List> segments = new ArrayList>(); + segments.add(new SegmentTree.Data.RangeMaximumData(0, (Integer) 4)); + segments.add(new SegmentTree.Data.RangeMaximumData(1, (Integer) 2)); + segments.add(new SegmentTree.Data.RangeMaximumData(2, (Integer) 6)); + segments.add(new SegmentTree.Data.RangeMaximumData(3, (Integer) 3)); + segments.add(new SegmentTree.Data.RangeMaximumData(4, (Integer) 1)); + segments.add(new SegmentTree.Data.RangeMaximumData(5, (Integer) 5)); + segments.add(new SegmentTree.Data.RangeMaximumData(6, (Integer) 0)); + segments.add(new SegmentTree.Data.RangeMaximumData(7, 17, 7)); + segments.add(new SegmentTree.Data.RangeMaximumData(21, (Integer) 10)); + FlatSegmentTree> tree = new FlatSegmentTree>(segments, 3); + + SegmentTree.Data.RangeMaximumData query = tree.query(0, 7); + assertTrue("Segment tree query error. query=0->7 result="+query, query.maximum==7); + + query = tree.query(0, 21); + assertTrue("Segment tree query error. query=0->21 result="+query, query.maximum==10); + + query = tree.query(2, 5); + assertTrue("Segment tree query error. query=2->5 result="+query, query.maximum==6); + + query = tree.query(7); // stabbing + assertTrue("Segment tree query error. query=7 result="+query, query.maximum==7); + } + + { // Range Minimum Segment tree + java.util.List> segments = new ArrayList>(); + segments.add(new SegmentTree.Data.RangeMinimumData(0, (Integer) 4)); + segments.add(new SegmentTree.Data.RangeMinimumData(1, (Integer) 2)); + segments.add(new SegmentTree.Data.RangeMinimumData(2, (Integer) 6)); + segments.add(new SegmentTree.Data.RangeMinimumData(3, (Integer) 3)); + segments.add(new SegmentTree.Data.RangeMinimumData(4, (Integer) 1)); + segments.add(new SegmentTree.Data.RangeMinimumData(5, (Integer) 5)); + segments.add(new SegmentTree.Data.RangeMinimumData(6, (Integer) 0)); + segments.add(new SegmentTree.Data.RangeMinimumData(17, (Integer) 7)); + FlatSegmentTree> tree = new FlatSegmentTree>(segments, 5); + + SegmentTree.Data.RangeMinimumData query = tree.query(0, 7); + assertTrue("Segment tree query error. query=0->7 result="+query, query.minimum==0); + + query = tree.query(0, 17); + assertTrue("Segment tree query error. query=0->17 result="+query, query.minimum==0); + + query = tree.query(1, 3); + assertTrue("Segment tree query error. query=1->3 result="+query, query.minimum==2); + + query = tree.query(7); // stabbing + assertTrue("Segment tree query error. query=7 result="+query, query.minimum==null); + } + + { // Range Sum Segment tree + java.util.List> segments = new ArrayList>(); + segments.add(new SegmentTree.Data.RangeSumData(0, (Integer) 4)); + segments.add(new SegmentTree.Data.RangeSumData(1, (Integer) 2)); + segments.add(new SegmentTree.Data.RangeSumData(2, (Integer) 6)); + segments.add(new SegmentTree.Data.RangeSumData(3, (Integer) 3)); + segments.add(new SegmentTree.Data.RangeSumData(4, (Integer) 1)); + segments.add(new SegmentTree.Data.RangeSumData(5, (Integer) 5)); + segments.add(new SegmentTree.Data.RangeSumData(6, (Integer) 0)); + segments.add(new SegmentTree.Data.RangeSumData(17, (Integer) 7)); + FlatSegmentTree> tree = new FlatSegmentTree>(segments, 10); + + SegmentTree.Data.RangeSumData query = tree.query(0, 8); + assertTrue("Segment tree query error. query=0->8 result="+query, query.sum==21); + + query = tree.query(0, 17); + assertTrue("Segment tree query error. query=0->17 result="+query, query.sum==28); + + query = tree.query(2, 5); + assertTrue("Segment tree query error. query=2->5 result="+query, query.sum==15); + + query = tree.query(10, 17); + assertTrue("Segment tree query error. query=10->17 result="+query, query.sum==7); + + query = tree.query(16); // stabbing + assertTrue("Segment tree query error. query=16 result="+query, query.sum==null); + + query = tree.query(17); // stabbing + assertTrue("Segment tree query error. query=17 result="+query, query.sum==7); + } + + { // Interval Segment tree + final String RED = "RED"; + final String ORANGE = "ORANGE"; + final String GREEN = "GREEN"; + final String DARK_GREEN = "DARK_GREEN"; + final String BLUE = "BLUE"; + final String PURPLE = "PURPLE"; + final String BLACK = "BLACK"; + java.util.List> segments = new ArrayList>(); + segments.add((new SegmentTree.Data.IntervalData(2, 6, RED))); + segments.add((new SegmentTree.Data.IntervalData(3, 5, ORANGE))); + segments.add((new SegmentTree.Data.IntervalData(4, 11, GREEN))); + segments.add((new SegmentTree.Data.IntervalData(5, 10, DARK_GREEN))); + segments.add((new SegmentTree.Data.IntervalData(8, 12, BLUE))); + segments.add((new SegmentTree.Data.IntervalData(9, 14, PURPLE))); + segments.add((new SegmentTree.Data.IntervalData(13, 15, BLACK))); + DynamicSegmentTree> tree = new DynamicSegmentTree>(segments); + + SegmentTree.Data.IntervalData query = tree.query(2); // Stabbing + assertTrue("Segment tree query error. query=2 result="+query, query.getData().contains(RED)); + + query = tree.query(4); // Stabbing query + assertTrue("Segment tree query error. query=4 result="+query, query.getData().contains(GREEN)); + + query = tree.query(9); // Stabbing query + assertTrue("Segment tree query error. query=9 result="+query, query.getData().contains(PURPLE)); + + query = tree.query(1, 16); // Range query + assertTrue("Segment tree query error. query=1->16 result="+query, (query.getData().contains(RED) && + query.getData().contains(ORANGE) && + query.getData().contains(GREEN) && + query.getData().contains(DARK_GREEN) && + query.getData().contains(BLUE) && + query.getData().contains(PURPLE) && + query.getData().contains(BLACK)) + ); + + query = tree.query(7, 14); // Range query + assertTrue("Segment tree query error. query=7->14 result="+query, (query.getData().contains(GREEN) && + query.getData().contains(DARK_GREEN) && + query.getData().contains(BLUE) && + query.getData().contains(PURPLE) && + query.getData().contains(BLACK)) + ); + + query = tree.query(14, 15); // Range query + assertTrue("Segment tree query error. query=14->15 result="+query, (query.getData().contains(PURPLE) && + query.getData().contains(BLACK)) + ); + } + + { // Lifespan Interval Segment tree + final String stravinsky = "Stravinsky"; + final String schoenberg = "Schoenberg"; + final String grieg = "Grieg"; + final String schubert = "Schubert"; + final String mozart = "Mozart"; + final String schuetz = "Schuetz"; + java.util.List> segments = new ArrayList>(); + segments.add((new SegmentTree.Data.IntervalData(1888, 1971, stravinsky))); + segments.add((new SegmentTree.Data.IntervalData(1874, 1951, schoenberg))); + segments.add((new SegmentTree.Data.IntervalData(1843, 1907, grieg))); + segments.add((new SegmentTree.Data.IntervalData(1779, 1828, schubert))); + segments.add((new SegmentTree.Data.IntervalData(1756, 1791, mozart))); + segments.add((new SegmentTree.Data.IntervalData(1585, 1672, schuetz))); + DynamicSegmentTree> tree = new DynamicSegmentTree>(segments, 25); + + SegmentTree.Data.IntervalData query = tree.query(1890); // Stabbing + assertTrue("Segment tree query error. query=1890 result="+query, (query.getData().contains(stravinsky) && + query.getData().contains(schoenberg) && + query.getData().contains(grieg)) + ); + + query = tree.query(1909); // Stabbing query + assertTrue("Segment tree query error. query=1909 result="+query, (query.getData().contains(stravinsky) && + query.getData().contains(schoenberg)) + ); + + query = tree.query(1585); // Stabbing query + assertTrue("Segment tree query error. query=1585 result="+query, query.getData().contains(schuetz)); + + query = tree.query(1792, 1903); // Range query + assertTrue("Segment tree query error. query=1792->1903 result="+query, (query.getData().contains(stravinsky) && + query.getData().contains(schoenberg) && + query.getData().contains(grieg) && + query.getData().contains(schubert)) + ); + + query = tree.query(1776, 1799); // Range query + assertTrue("Segment tree query error. query=1776->1799 result="+query, (query.getData().contains(schubert) && + query.getData().contains(mozart)) + ); + } + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/SkipListMapTests.java b/src/com/jwetherell/algorithms/data_structures/test/SkipListMapTests.java new file mode 100644 index 00000000..e9be474e --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/SkipListMapTests.java @@ -0,0 +1,30 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.SkipListMap; +import com.jwetherell.algorithms.data_structures.test.common.JavaMapTest; +import com.jwetherell.algorithms.data_structures.test.common.MapTest; +import com.jwetherell.algorithms.data_structures.test.common.Utils; +import com.jwetherell.algorithms.data_structures.test.common.Utils.TestData; +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; + +public class SkipListMapTests { + + @Test + public void testSkipListMap() { + TestData data = Utils.generateTestData(1000); + + String mapName = "SkipListMap"; + SkipListMap map = new SkipListMap(); + java.util.Map jMap = map.toMap(); + + assertTrue(MapTest.testMap(map, Type.String, mapName, + data.unsorted, data.invalid)); + assertTrue(JavaMapTest.testJavaMap(jMap, Type.Integer, mapName, + data.unsorted, data.sorted, data.invalid)); + } + +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/SkipListTests.java b/src/com/jwetherell/algorithms/data_structures/test/SkipListTests.java new file mode 100644 index 00000000..9dae89fa --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/SkipListTests.java @@ -0,0 +1,31 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.assertTrue; + +import java.util.Collection; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.SkipList; +import com.jwetherell.algorithms.data_structures.test.common.JavaCollectionTest; +import com.jwetherell.algorithms.data_structures.test.common.SetTest; +import com.jwetherell.algorithms.data_structures.test.common.Utils; +import com.jwetherell.algorithms.data_structures.test.common.Utils.TestData; +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; + +public class SkipListTests { + + @Test + public void testSkipList() { + TestData data = Utils.generateTestData(1000); + + String sName = "SkipList"; + SkipList sList = new SkipList(); + Collection lCollection = sList.toCollection(); + + assertTrue(SetTest.testSet(sList, sName, + data.unsorted, data.invalid)); + assertTrue(JavaCollectionTest.testCollection(lCollection, Type.Integer, sName, + data.unsorted, data.sorted)); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/SplayTreeTests.java b/src/com/jwetherell/algorithms/data_structures/test/SplayTreeTests.java new file mode 100644 index 00000000..44aa2a8f --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/SplayTreeTests.java @@ -0,0 +1,33 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.assertTrue; + +import java.util.Collection; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.BinarySearchTree; +import com.jwetherell.algorithms.data_structures.SplayTree; +import com.jwetherell.algorithms.data_structures.test.common.JavaCollectionTest; +import com.jwetherell.algorithms.data_structures.test.common.TreeTest; +import com.jwetherell.algorithms.data_structures.test.common.Utils; +import com.jwetherell.algorithms.data_structures.test.common.Utils.TestData; +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; + +public class SplayTreeTests { + + @Test + public void testSplayTree() { + TestData data = Utils.generateTestData(1000); + + String bstName = "Splay Tree"; + BinarySearchTree bst = new SplayTree(); + Collection bstCollection = bst.toCollection(); + + assertTrue(TreeTest.testTree(bst, Type.Integer, bstName, + data.unsorted, data.invalid)); + assertTrue(JavaCollectionTest.testCollection(bstCollection, Type.Integer, bstName, + data.unsorted, data.sorted)); + } + +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/StackTests.java b/src/com/jwetherell/algorithms/data_structures/test/StackTests.java new file mode 100644 index 00000000..9a8fb487 --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/StackTests.java @@ -0,0 +1,45 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.assertTrue; + +import java.util.Collection; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.Stack; +import com.jwetherell.algorithms.data_structures.test.common.JavaCollectionTest; +import com.jwetherell.algorithms.data_structures.test.common.StackTest; +import com.jwetherell.algorithms.data_structures.test.common.Utils; +import com.jwetherell.algorithms.data_structures.test.common.Utils.TestData; +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; + +public class StackTests { + + @Test + public void testArrayStack() { + TestData data = Utils.generateTestData(1000); + + String aName = "Stack [array]"; + Stack.ArrayStack aStack = new Stack.ArrayStack(); + Collection aCollection = aStack.toCollection(); + + assertTrue(StackTest.testStack(aStack, aName, + data.unsorted, data.invalid)); + assertTrue(JavaCollectionTest.testCollection(aCollection, Type.Integer, aName, + data.unsorted, data.sorted)); + } + + @Test + public void testLinkedStack() { + TestData data = Utils.generateTestData(1000); + + String lName = "Stack [linked]"; + Stack.LinkedStack lStack = new Stack.LinkedStack(); + Collection lCollection = lStack.toCollection(); + + assertTrue(StackTest.testStack(lStack, lName, + data.unsorted, data.invalid)); + assertTrue(JavaCollectionTest.testCollection(lCollection, Type.Integer, lName, + data.unsorted, data.sorted)); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/HeapTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/HeapTest.java new file mode 100644 index 00000000..1949395e --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/common/HeapTest.java @@ -0,0 +1,164 @@ +package com.jwetherell.algorithms.data_structures.test.common; + +import java.util.Arrays; + +import com.jwetherell.algorithms.data_structures.BinaryHeap; +import com.jwetherell.algorithms.data_structures.IHeap; + +public class HeapTest { + + @SuppressWarnings("unchecked") + public static > boolean testHeap(IHeap heap, String name, BinaryHeap.Type type, + Integer[] unsorted, Integer[] sorted, Integer INVALID) { + for (int i = 0; i < unsorted.length; i++) { + T item = (T)unsorted[i]; + boolean added = heap.add(item); + if (!heap.validate() || (heap.size() != i+1)) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(heap); + return false; + } + if (!added || !heap.contains(item)) { + System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); + Utils.handleError(heap); + return false; + } + } + + boolean contains = heap.contains((T)INVALID); + T removed = heap.remove((T)INVALID); + if (contains || (removed!=null)) { + System.err.println(name+" invalidity check. contains=" + contains + " removed=" + removed); + Utils.handleError(heap); + return false; + } + + int size = heap.size(); + for (int i = 0; i < size; i++) { + T item = heap.removeHead(); + T correct = (T)((type == BinaryHeap.Type.MIN)?sorted[i]:sorted[sorted.length-(i+1)]); + if (item.compareTo(correct)!=0) { + System.err.println(name+" YIKES!! " + item + " does not match heap item."); + Utils.handleError(heap); + return false; + } + if (!heap.validate() || (heap.size() != unsorted.length-(i+1))) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(heap); + return false; + } + if (heap.contains(item)) { + System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); + Utils.handleError(heap); + return false; + } + } + + // Add half, remove a quarter, add three-quarters, remove all + int quarter = unsorted.length/4; + int half = unsorted.length/2; + Integer[] halfArray = Arrays.copyOf(unsorted, half); + Arrays.sort(halfArray); + Integer[] quarterArray = new Integer[quarter]; + Integer[] sortedQuarterArray = new Integer[quarter]; //Needed for binary search + for (int i=0; i=0) { + threeQuartersArray[idx++] = i; + } else { + index = Arrays.binarySearch(halfArray, i); + if (index<0) threeQuartersArray[idx++] = i; + } + } else { + if (index>=0) { + threeQuartersArray[idx++] = i; + } else { + index = Arrays.binarySearch(halfArray, i); + if (index<0) threeQuartersArray[idx++] = i; + } + } + } + for (int i = 0; i < half; i++) { + T item = (T)unsorted[i]; + boolean added = heap.add(item); + if (!heap.validate() || (heap.size() != i+1)) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(heap); + return false; + } + if (!added || !heap.contains(item)) { + System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); + Utils.handleError(heap); + return false; + } + } + for (int i = 0; i < quarter; i++) { + T item = heap.removeHead(); + T correct = (T)quarterArray[i]; + if (item.compareTo(correct)!=0) { + System.err.println(name+" YIKES!! " + item + " does not match heap item."); + Utils.handleError(heap); + return false; + } + if (!heap.validate() || (heap.size() != half-(i+1))) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(heap); + return false; + } + if (heap.contains(item)) { + System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); + Utils.handleError(heap); + return false; + } + } + for (int i = 0; i < threeQuartersArray.length; i++) { + T item = (T)threeQuartersArray[i]; + boolean added = heap.add(item); + if (!heap.validate() || (heap.size() != (half-quarter)+(i+1))) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(heap); + return false; + } + if (!added || !heap.contains(item)) { + System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); + Utils.handleError(heap); + return false; + } + } + for (int i = 0; i < sorted.length; i++) { + T item = heap.removeHead(); + T correct = (T)((type == BinaryHeap.Type.MIN)?sorted[i]:sorted[sorted.length-(i+1)]); + if (item.compareTo(correct)!=0) { + System.err.println(name+" YIKES!! " + item + " does not match heap item."); + Utils.handleError(heap); + return false; + } + if (!heap.validate() || (heap.size() != sorted.length-(i+1))) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(heap); + return false; + } + if (heap.contains(item)) { + System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); + Utils.handleError(heap); + return false; + } + } + + if (heap.size() != 0) { + System.err.println(name+" YIKES!! a size mismatch."); + Utils.handleError(heap); + return false; + } + + return true; + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/IteratorTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/IteratorTest.java new file mode 100644 index 00000000..fd30f061 --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/common/IteratorTest.java @@ -0,0 +1,17 @@ +package com.jwetherell.algorithms.data_structures.test.common; + +import java.util.Iterator; + +public class IteratorTest { + + public static > boolean testIterator(Iterator iter) { + while (iter.hasNext()) { + T item = iter.next(); + if (item==null) { + System.err.println("Iterator failure."); + return false; + } + } + return true; + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/JavaCollectionTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/JavaCollectionTest.java new file mode 100644 index 00000000..4ad228b8 --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/common/JavaCollectionTest.java @@ -0,0 +1,269 @@ +package com.jwetherell.algorithms.data_structures.test.common; + +import java.util.Collection; + +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; + +public class JavaCollectionTest { + + public static > boolean testCollection(Collection collection, Type type, String name, + Integer[] unsorted, Integer[] sorted) { + // Make sure the collection is empty + if (!collection.isEmpty()) { + System.err.println(name+" initial isEmpty() failed."); + Utils.handleError(collection); + return false; + } + + if (collection.size()!=0) { + System.err.println(name+" initial size() failed."); + Utils.handleError(collection); + return false; + } + + addAndRemoveInOrder(collection, type, name, unsorted); + addInOrderRemoveInReverseOrder(collection, type, name, unsorted); + addInReverseOrderAndRemoveInOrder(collection, type, name, unsorted); + + addAndRemoveInOrder(collection, type, name, sorted); + addInOrderRemoveInReverseOrder(collection, type, name, sorted); + addInReverseOrderAndRemoveInOrder(collection, type, name, sorted); + + // Make sure the collection is empty + if (!collection.isEmpty()) { + System.err.println(name+" initial isEmpty() failed."); + Utils.handleError(collection); + return false; + } + + if (collection.size()!=0) { + System.err.println(name+" initial size() failed."); + Utils.handleError(collection); + return false; + } + + return true; + } + + @SuppressWarnings("unchecked") + private static > boolean addAndRemoveInOrder(Collection collection, Type type, String name, + Integer[] data) { + // Add and remove in order (from index zero to length) + for (int i = 0; i < data.length; i++) { + T item = null; + if (type==Type.Integer) { + item = (T)data[i]; + } else if (type==Type.String) { + item = (T)String.valueOf(data[i]); + } + boolean added = collection.add(item); + if (!added) { + System.err.println(name+" addAndRemoveInOrder add failed."); + Utils.handleError(collection); + return false; + } + } + + for (int i = 0; i < data.length; i++) { + T item = null; + if (type==Type.Integer) { + item = (T)data[i]; + } else if (type==Type.String) { + item = (T)String.valueOf(data[i]); + } + boolean contains = collection.contains(item); + if (!contains) { + System.err.println(name+" addAndRemoveInOrder contains failed."); + Utils.handleError(collection); + return false; + } + } + + for (int i = 0; i < data.length; i++) { + T item = null; + if (type==Type.Integer) { + item = (T)data[i]; + } else if (type==Type.String) { + item = (T)String.valueOf(data[i]); + } + boolean removed = collection.remove(item); + if (!removed) { + System.err.println(name+" addAndRemoveInOrder remove failed."); + Utils.handleError(collection); + return false; + } + } + + if (!collection.isEmpty()) { + System.err.println(name+" addAndRemoveInOrder isEmpty() failed."); + Utils.handleError(collection); + return false; + } + if (collection.size()!=0) { + System.err.println(name+" addAndRemoveInOrder size() failed."); + Utils.handleError(collection); + return false; + } + + if (collection instanceof java.util.List && + (!ListIteratorTest.testListIterator(((java.util.List)collection).listIterator(), + data, + data.length)) + ) { + System.err.println(name+" addAndRemoveInOrder list iterator failed."); + Utils.handleError(collection); + return false; + } + + return true; + } + + @SuppressWarnings("unchecked") + private static > boolean addInReverseOrderAndRemoveInOrder(Collection collection, Type type, String name, + Integer[] data) { + // Add in reverse (from index length-1 to zero) order and then remove in order (from index zero to length) + for (int i = data.length - 1; i >= 0; i--) { + T item = null; + if (type==Type.Integer) { + item = (T)data[i]; + } else if (type==Type.String) { + item = (T)String.valueOf(data[i]); + } + boolean added = collection.add(item); + if (!added) { + System.err.println(name+" addInReverseOrderAndRemoveInOrder add failed."); + Utils.handleError(collection); + return false; + } + } + + if (!IteratorTest.testIterator(collection.iterator())) { + System.err.println(name+" addInReverseOrderAndRemoveInOrder iterator failed."); + Utils.handleError(collection); + return false; + } + + for (int i = 0; i < data.length; i++) { + T item = null; + if (type==Type.Integer) { + item = (T)data[i]; + } else if (type==Type.String) { + item = (T)String.valueOf(data[i]); + } + boolean contains = collection.contains(item); + if (!contains) { + System.err.println(name+" addInReverseOrderAndRemoveInOrder contains failed."); + Utils.handleError(collection); + return false; + } + } + + for (int i = 0; i < data.length; i++) { + T item = null; + if (type==Type.Integer) { + item = (T)data[i]; + } else if (type==Type.String) { + item = (T)String.valueOf(data[i]); + } + boolean removed = collection.remove(item); + if (!removed) { + System.err.println(name+" addInReverseOrderAndRemoveInOrder remove failed."); + Utils.handleError(collection); + return false; + } + } + + if (!collection.isEmpty()) { + System.err.println(name+" addInReverseOrderAndRemoveInOrder isEmpty() failed."); + Utils.handleError(collection); + return false; + } + + if (collection.size()!=0) { + System.err.println(name+" addInReverseOrderAndRemoveInOrder size() failed."); + Utils.handleError(collection); + return false; + } + + return true; + } + + @SuppressWarnings("unchecked") + public static > boolean addInOrderRemoveInReverseOrder(Collection collection, Type type, String name, + Integer[] data) { + // Add in order (from index zero to length) and then remove in reverse (from index length-1 to zero) order + for (int i = 0; i < data.length; i++) { + T item = null; + if (type==Type.Integer) { + item = (T)data[i]; + } else if (type==Type.String) { + item = (T)String.valueOf(data[i]); + } + boolean added = collection.add(item); + if (!added) { + System.err.println(name+" addInOrderRemoveInReverseOrder add failed."); + Utils.handleError(collection); + return false; + } + } + + if (!IteratorTest.testIterator(collection.iterator())) { + System.err.println(name+" addInOrderRemoveInReverseOrder iterator failed."); + Utils.handleError(collection); + return false; + } + + for (int i = 0; i < data.length; i++) { + T item = null; + if (type==Type.Integer) { + item = (T)data[i]; + } else if (type==Type.String) { + item = (T)String.valueOf(data[i]); + } + boolean contains = collection.contains(item); + if (!contains) { + System.err.println(name+" addInOrderRemoveInReverseOrder contains failed."); + Utils.handleError(collection); + return false; + } + } + + for (int i = data.length - 1; i >= 0; i--) { + T item = null; + if (type==Type.Integer) { + item = (T)data[i]; + } else if (type==Type.String) { + item = (T)String.valueOf(data[i]); + } + boolean removed = collection.remove(item); + if (!removed) { + System.err.println(name+" addInOrderRemoveInReverseOrder remove failed."); + Utils.handleError(collection); + return false; + } + } + + if (!collection.isEmpty()) { + System.err.println(name+" addInOrderRemoveInReverseOrder isEmpty() failed."); + Utils.handleError(collection); + return false; + } + if (collection.size()!=0) { + System.err.println(name+" addInOrderRemoveInReverseOrder size() failed."); + Utils.handleError(collection); + return false; + } + + if (collection instanceof java.util.List && + (!ListIteratorTest.testListIterator(((java.util.List)collection).listIterator(), + data, + data.length)) + ) { + System.err.println(name+" addInOrderRemoveInReverseOrder list iterator failed."); + Utils.handleError(collection); + return false; + } + + return true; + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/JavaMapTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/JavaMapTest.java new file mode 100644 index 00000000..6674d1e6 --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/common/JavaMapTest.java @@ -0,0 +1,350 @@ +package com.jwetherell.algorithms.data_structures.test.common; + +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; + +public class JavaMapTest { + + public static boolean testJavaMap(java.util.Map map, Type keyType, String name, + Integer[] unsorted, Integer[] sorted, Integer INVALID) { + // Make sure the map is empty + if (!map.isEmpty()) { + System.err.println(name+" initial isEmpty() failed."); + Utils.handleError(map); + return false; + } + if (map.size()!=0) { + System.err.println(name+" initial size() failed."); + Utils.handleError(map); + return false; + } + + addInOrderAndRemoveInOrder(map, keyType, name, + unsorted, INVALID); + addInReverseOrderAndRemoveInReverseOrder(map, keyType, name, + unsorted, INVALID); + addInOrderAndRemoveInReverseOrder(map, keyType, name, + unsorted, INVALID); + + addInOrderAndRemoveInOrder(map, keyType, name, sorted, INVALID); + addInReverseOrderAndRemoveInReverseOrder(map, keyType, name, + sorted, INVALID); + addInOrderAndRemoveInReverseOrder(map, keyType, name, + sorted, INVALID); + + return true; + } + + @SuppressWarnings("unchecked") + private static boolean addInOrderAndRemoveInOrder(java.util.Map map, Type keyType, String name, + Integer[] data, Integer invalid) + { + for (int i = 0; i < data.length; i++) { + Integer item = data[i]; + K k = null; + V v = null; + if (keyType == Type.Integer) { + k = (K)item; + v = (V)String.valueOf(item); + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + v = (V)item; + } + map.put(k, v); + } + + K invalidKey = null; + if (keyType == Type.Integer) { + invalidKey = (K)invalid; + } else if (keyType == Type.String) { + invalidKey = (K)String.valueOf(invalid); + } + boolean contains = map.containsKey(invalidKey); + V removed = map.remove(invalidKey); + if (contains || (removed!=null)) { + System.err.println(name+" unsorted invalidity check. contains=" + contains + " removed=" + removed); + return false; + } + + for (Integer item : data) { + K k = null; + if (keyType == Type.Integer) { + k = (K)item; + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + } + map.containsKey(k); + } + + for (int i = 0; i < data.length; i++) { + Integer item = data[i]; + K k = null; + if (keyType == Type.Integer) { + k = (K)item; + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + } + removed = map.remove(k); + if (removed==null) { + System.err.println(name+" unsorted invalidity check. removed=" + removed); + return false; + } + + } + + if (!testMapEntrySet(map, keyType, data)) return false; + + if (!map.isEmpty()) { + System.err.println(name+" unsorted isEmpty() failed."); + Utils.handleError(map); + return false; + } + if (map.size()!=0) { + System.err.println(name+" unsorted size() failed."); + Utils.handleError(map); + return false; + } + return true; + } + + @SuppressWarnings("unchecked") + private static boolean addInReverseOrderAndRemoveInReverseOrder(java.util.Map map, Type keyType, String name, + Integer[] data, Integer invalid) + { + for (int i = data.length - 1; i >= 0; i--) { + Integer item = data[i]; + K k = null; + V v = null; + if (keyType == Type.Integer) { + k = (K)item; + v = (V)String.valueOf(item); + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + v = (V)item; + } + map.put(k, v); + } + + K invalidKey = null; + if (keyType == Type.Integer) { + invalidKey = (K)invalid; + } else if (keyType == Type.String) { + invalidKey = (K)String.valueOf(invalid); + } + boolean contains = map.containsKey(invalidKey); + V removed = map.remove(invalidKey); + if (contains || (removed!=null)) { + System.err.println(name+" unsorted invalidity check. contains=" + contains + " removed=" + removed); + return false; + } + + for (Integer item : data) { + K k = null; + if (keyType == Type.Integer) { + k = (K)item; + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + } + map.containsKey(k); + } + + for (int i = data.length - 1; i >= 0; i--) { + Integer item = data[i]; + K k = null; + if (keyType == Type.Integer) { + k = (K)item; + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + } + removed = map.remove(k); + if (removed==null) { + System.err.println(name+" unsorted invalidity check. removed=" + removed); + return false; + } + } + + if (!map.isEmpty()) { + System.err.println(name+" unsorted isEmpty() failed."); + Utils.handleError(map); + return false; + } + if (map.size()!=0) { + System.err.println(name+" unsorted size() failed."); + Utils.handleError(map); + return false; + } + return true; + } + + @SuppressWarnings("unchecked") + private static boolean addInOrderAndRemoveInReverseOrder(java.util.Map map, Type keyType, String name, + Integer[] data, Integer invalid) { + for (int i = 0; i < data.length; i++) { + Integer item = data[i]; + K k = null; + V v = null; + if (keyType == Type.Integer) { + k = (K)item; + v = (V)String.valueOf(item); + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + v = (V)item; + } + map.put(k, v); + } + + K invalidKey = null; + if (keyType == Type.Integer) { + invalidKey = (K)invalid; + } else if (keyType == Type.String) { + invalidKey = (K)String.valueOf(invalid); + } + boolean contains = map.containsKey(invalidKey); + V removed = map.remove(invalidKey); + if (contains || (removed!=null)) { + System.err.println(name+" sorted invalidity check. contains=" + contains + " removed=" + removed); + return false; + } + + for (Integer item : data) { + K k = null; + if (keyType == Type.Integer) { + k = (K)item; + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + } + map.containsKey(k); + } + + for (int i = data.length - 1; i >= 0; i--) { + Integer item = data[i]; + K k = null; + if (keyType == Type.Integer) { + k = (K)item; + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + } + removed = map.remove(k); + if (removed==null) { + System.err.println(name+" unsorted invalidity check. removed=" + removed); + return false; + } + } + + if (!testMapEntrySet(map, keyType, data)) return false; + + if (!map.isEmpty()) { + System.err.println(name+" sorted isEmpty() failed."); + Utils.handleError(map); + return false; + } + if (map.size()!=0) { + System.err.println(name+" sorted size() failed."); + Utils.handleError(map); + return false; + } + return true; + } + @SuppressWarnings("unchecked") + private static boolean testMapEntrySet(java.util.Map map, Type keyType, + Integer[] data) { + { // Test keys + for (int i = 0; i < data.length; i++) { + Integer item = data[i]; + K k = null; + V v = null; + if (keyType == Type.Integer) { + k = (K)item; + v = (V)String.valueOf(item); + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + v = (V)item; + } + map.put(k, v); + } + + java.util.Set set = map.keySet(); + for (int i = 0; i < data.length; i++) { + Integer key = data[i]; + K k = null; + if (keyType == Type.Integer) { + k = (K)key; + } else if (keyType == Type.String) { + k = (K)String.valueOf(key); + } + if (!set.contains(k)) { + System.err.println("MayEntry contains() failure."); + Utils.handleError(map); + return false; + } + } + + java.util.Iterator keyIter = set.iterator(); + while (keyIter.hasNext()) { + keyIter.next(); + keyIter.remove(); + } + + if (!map.isEmpty()) { + System.err.println("MayEntry isEmpty() failure."); + Utils.handleError(map); + return false; + } + if (map.size()!=0) { + System.err.println("MayEntry size()!=0 failure."); + Utils.handleError(map); + return false; + } + } + + { // Test values + for (int i = 0; i < data.length; i++) { + Integer item = data[i]; + K k = null; + V v = null; + if (keyType == Type.Integer) { + k = (K)item; + v = (V)String.valueOf(item); + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + v = (V)item; + } + map.put(k, v); + } + + java.util.Collection collection = map.values(); + for (int i = 0; i < data.length; i++) { + Integer value = data[i]; + V v = null; + // These are reversed on purpose + if (keyType == Type.Integer) { + v = (V)String.valueOf(value); + } else if (keyType == Type.String) { + v = (V)value; + } + if (!collection.contains(v)) { + System.err.println("MayEntry contains() failure."); + Utils.handleError(map); + return false; + } + } + + java.util.Iterator valueIter = collection.iterator(); + while (valueIter.hasNext()) { + valueIter.next(); + valueIter.remove(); + } + + if (!map.isEmpty()) { + System.err.println("MayEntry isEmpty() failure."); + Utils.handleError(map); + return false; + } + if (map.size()!=0) { + System.err.println("MayEntry size()!=0 failure."); + Utils.handleError(map); + return false; + } + } + return true; + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/ListIteratorTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/ListIteratorTest.java new file mode 100644 index 00000000..e46a978a --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/common/ListIteratorTest.java @@ -0,0 +1,105 @@ +package com.jwetherell.algorithms.data_structures.test.common; + +import java.util.ListIterator; +import java.util.NoSuchElementException; + +public class ListIteratorTest { + + @SuppressWarnings("unchecked") + public static > boolean testListIterator(ListIterator iter, + Integer[] unsorted, int size) { + // Make sure you catch going prev at the start + boolean exceptionThrown = false; + try { + iter.previous(); + } catch (NoSuchElementException e) { + exceptionThrown = true; + } + if (!exceptionThrown) { + System.err.println("ListIterator exception failure."); + return false; + } + + for (int i = 0; i < unsorted.length; i++) { + T t = (T)unsorted[i]; + iter.add(t); + } + while (iter.hasPrevious()) iter.previous(); + + int i = 0; + while (iter.hasNext()) { + T item = iter.next(); + int idx = iter.nextIndex(); + if (idx!=++i) { + System.err.println("ListIterator index failure."); + return false; + } + if (item==null) { + System.err.println("ListIterator item is null."); + return false; + } + } + + // We should be at the end of the collection, this should fail + exceptionThrown = false; + try { + iter.next(); + } catch (NoSuchElementException e) { + exceptionThrown = true; + } + if (!exceptionThrown) { + System.err.println("ListIterator exception failure."); + return false; + } + + //This should be list.size + iter.nextIndex(); + int listSize = iter.nextIndex(); + if (listSize!=size) { + System.err.println("ListIterator ARRAY_SIZE failure."); + return false; + } + + i--; + while (iter.hasPrevious()) { + T item = iter.previous(); + int idx = iter.previousIndex(); + if (idx!=--i) { + System.err.println("ListIterator index failure."); + return false; + } + if (item==null) { + System.err.println("ListIterator item is null."); + return false; + } + } + + // We should be at the beginning of the collection, this should fail + exceptionThrown = false; + try { + iter.previous(); + } catch (NoSuchElementException e) { + exceptionThrown = true; + } + if (!exceptionThrown) { + System.err.println("ListIterator exception failure."); + return false; + } + + // This should be negative one + iter.previousIndex(); + int negOne = iter.previousIndex(); + if (negOne!=-1) { + System.err.println("ListIterator negative_one failure."); + return false; + } + + // Remove all using iterator + while (iter.hasNext()) { + iter.next(); + iter.remove(); + } + + return true; + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/ListTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/ListTest.java new file mode 100644 index 00000000..700f2cae --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/common/ListTest.java @@ -0,0 +1,117 @@ +package com.jwetherell.algorithms.data_structures.test.common; + +import com.jwetherell.algorithms.data_structures.IList; + +public class ListTest { + + @SuppressWarnings("unchecked") + public static > boolean testList(IList list, String name, + Integer[] data, Integer invalid) { + for (int i = 0; i < data.length; i++) { + T item = (T)data[i]; + boolean added = list.add(item); + if ((!list.validate() || (list.size() != i+1))) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(list); + return false; + } + if ((!added || !list.contains(item))) { + System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); + Utils.handleError(list); + return false; + } + } + + boolean contains = list.contains((T)invalid); + boolean removed = list.remove((T)invalid); + if (contains || removed) { + System.err.println(name+" invalidity check. contains=" + contains + " removed=" + removed); + Utils.handleError(list); + return false; + } + + int size = list.size(); + for (int i = 0; i < size; i++) { + T item = (T)data[i]; + removed = list.remove(item); + if ((!list.validate() || (list.size() != data.length-(i+1)))) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(list); + return false; + } + if ((!removed || list.contains(item))) { + System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); + Utils.handleError(list); + return false; + } + } + + // Add half, remove a quarter, add three-quarters, remove all + int quarter = data.length/4; + int half = data.length/2; + for (int i = 0; i < half; i++) { + T item = (T)data[i]; + boolean added = list.add(item); + if ((!list.validate() || (list.size() != i+1))) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(list); + return false; + } + if ((!added || !list.contains(item))) { + System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); + Utils.handleError(list); + return false; + } + } + for (int i = (half-1); i >= quarter; i--) { + T item = (T)data[i]; + removed = list.remove(item); + if ((!list.validate() || (list.size() != i))) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(list); + return false; + } + if ((!removed || list.contains(item))) { + System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); + Utils.handleError(list); + return false; + } + } + for (int i = quarter; i < data.length; i++) { + T item = (T)data[i]; + boolean added = list.add(item); + if ((!list.validate() || (list.size() != i+1))) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(list); + return false; + } + if ((!added || !list.contains(item))) { + System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); + Utils.handleError(list); + return false; + } + } + for (int i = data.length-1; i >= 0; i--) { + T item = (T)data[i]; + removed = list.remove(item); + if ((!list.validate() || (list.size() != i))) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(list); + return false; + } + if ((!removed || list.contains(item))) { + System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); + Utils.handleError(list); + return false; + } + } + + if ((list.size() != 0)) { + System.err.println(name+" YIKES!! a size mismatch."); + Utils.handleError(list); + return false; + } + + return true; + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/MapTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/MapTest.java new file mode 100644 index 00000000..ee0bc03d --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/common/MapTest.java @@ -0,0 +1,168 @@ +package com.jwetherell.algorithms.data_structures.test.common; + +import com.jwetherell.algorithms.data_structures.IMap; +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; + +public class MapTest { + + @SuppressWarnings("unchecked") + public static boolean testMap(IMap map, Type keyType, String name, + Integer[] unsorted, Integer invalid) { + for (int i = 0; i < unsorted.length; i++) { + Integer item = unsorted[i]; + K k = null; + V v = null; + if (keyType == Type.Integer) { + k = (K)item; + v = (V)String.valueOf(item); + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + v = (V)item; + } + V added = map.put(k,v); + if ((!map.validate() || (map.size() != (i+1)))) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(map); + return false; + } + if ((added!=null || !map.contains(k))) { + System.err.println(name+" YIKES!! " + item + " doesn't exists."); + Utils.handleError(map); + return false; + } + } + + K invalidKey = null; + if (keyType == Type.Integer) { + invalidKey = (K)invalid; + } else if (keyType == Type.String) { + invalidKey = (K)String.valueOf(invalid); + } + boolean contains = map.contains(invalidKey); + V removed = map.remove(invalidKey); + if (contains || (removed!=null)) { + System.err.println(name+" invalidity check. contains=" + contains + " removed=" + removed); + Utils.handleError(map); + return false; + } + + for (int i = 0; i < unsorted.length; i++) { + Integer item = unsorted[i]; + K k = null; + if (keyType == Type.Integer) { + k = (K)item; + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + } + removed = map.remove(k); + if ((!map.validate() || (map.size() != (unsorted.length-(i+1))))) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(map); + return false; + } + if (map.contains(k)) { + System.err.println(name+" YIKES!! " + item + " still exists."); + Utils.handleError(map); + return false; + } + } + + // Add half, remove a quarter, add three-quarters, remove all + int quarter = unsorted.length/4; + int half = unsorted.length/2; + for (int i = 0; i < half; i++) { + Integer item = unsorted[i]; + K k = null; + V v = null; + if (keyType == Type.Integer) { + k = (K)item; + v = (V)String.valueOf(item); + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + v = (V)item; + } + V added = map.put(k,v); + if ((!map.validate() || (map.size() != (i+1)))) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(map); + return false; + } + if ((added!=null || !map.contains(k))) { + System.err.println(name+" YIKES!! " + item + " doesn't exists."); + Utils.handleError(map); + return false; + } + } + for (int i = (half-1); i >= quarter; i--) { + Integer item = unsorted[i]; + K k = null; + if (keyType == Type.Integer) { + k = (K)item; + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + } + removed = map.remove(k); + if ((!map.validate() || (map.size() != i))) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(map); + return false; + } + if ((removed==null || map.contains(k))) { + System.err.println(name+" YIKES!! " + item + " still exists."); + Utils.handleError(map); + return false; + } + } + for (int i = quarter; i < unsorted.length; i++) { + Integer item = unsorted[i]; + K k = null; + V v = null; + if (keyType == Type.Integer) { + k = (K)item; + v = (V)String.valueOf(item); + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + v = (V)item; + } + V added = map.put(k,v); + if ((!map.validate() || (map.size() != (i+1)))) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(map); + return false; + } + if ((added!=null || !map.contains(k))) { + System.err.println(name+" YIKES!! " + item + " doesn't exists."); + Utils.handleError(map); + return false; + } + } + for (int i = unsorted.length-1; i >= 0; i--) { + Integer item = unsorted[i]; + K k = null; + if (keyType == Type.Integer) { + k = (K)item; + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + } + removed = map.remove(k); + if ((!map.validate() || (map.size() != i))) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(map); + return false; + } + if ((removed==null || map.contains(k))) { + System.err.println(name+" YIKES!! " + item + " still exists."); + Utils.handleError(map); + return false; + } + } + + if ((map.size() != 0)) { + System.err.println(name+" YIKES!! a size mismatch."); + Utils.handleError(map); + return false; + } + + return true; + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/QueueTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/QueueTest.java new file mode 100644 index 00000000..1d92d2ff --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/common/QueueTest.java @@ -0,0 +1,153 @@ +package com.jwetherell.algorithms.data_structures.test.common; + +import com.jwetherell.algorithms.data_structures.IQueue; + +public class QueueTest { + + @SuppressWarnings("unchecked") + public static > boolean testQueue(IQueue queue, String name, + Integer[] data, Integer invalid) { + for (int i = 0; i < data.length; i++) { + T item = (T)data[i]; + boolean added = queue.offer(item); + if (!queue.validate() || (queue.size() != i+1)) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(queue); + return false; + } + if (!added || !queue.contains(item)) { + System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); + Utils.handleError(queue); + return false; + } + } + + boolean contains = queue.contains((T)invalid); + boolean removed = queue.remove((T)invalid); + if (contains || removed) { + System.err.println(name+" invalidity check. contains=" + contains + " removed=" + removed); + Utils.handleError(queue); + return false; + } + + int size = queue.size(); + for (int i = 0; i < size; i++) { + T item = queue.poll(); + T correct = (T)data[i]; + if (item.compareTo(correct)!=0) { + System.err.println(name+" YIKES!! " + item + " does not match FIFO item."); + Utils.handleError(queue); + return false; + } + if (!queue.validate() || (queue.size() != data.length-(i+1))) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(queue); + return false; + } + if (queue.contains(item)) { + System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); + Utils.handleError(queue); + return false; + } + } + + // Add half, remove a quarter, add three-quarters + int quarter = data.length/4; + int half = data.length/2; + int changeOver = half-quarter; + for (int i = 0; i < half; i++) { + T item = (T)data[i]; + boolean added = queue.offer(item); + if (!queue.validate() || (queue.size() != i+1)) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(queue); + return false; + } + if (!added || !queue.contains(item)) { + System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); + Utils.handleError(queue); + return false; + } + } + for (int i = 0; i < quarter; i++) { + T item = queue.poll(); + T correct = (T)data[i]; + if (item.compareTo(correct)!=0) { + System.err.println(name+" YIKES!! " + item + " does not match FIFO item."); + Utils.handleError(queue); + return false; + } + if (!queue.validate() || (queue.size() != (half-(i+1)))) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(queue); + return false; + } + if (queue.contains(item)) { + System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); + Utils.handleError(queue); + return false; + } + } + for (int i = 0; i < quarter; i++) { + T item = (T)data[i]; + boolean added = queue.offer(item); + if (!queue.validate() || (queue.size() != ((half-quarter)+(i+1)))) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(queue); + return false; + } + if (!added || !queue.contains(item)) { + System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); + Utils.handleError(queue); + return false; + } + } + for (int i = half; i < data.length; i++) { + T item = (T)data[i]; + boolean added = queue.offer(item); + if (!queue.validate() || (queue.size() != (i+1))) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(queue); + return false; + } + if (!added || !queue.contains(item)) { + System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); + Utils.handleError(queue); + return false; + } + } + for (int i = 0; i < data.length; i++) { + T item = queue.poll(); + int idx = i; + if (idx < changeOver) { + idx = quarter+i; + } else if (idx>=changeOver && idx> boolean testSet(ISet set, String name, + Integer[] data, Integer invalid) { + for (int i = 0; i < data.length; i++) { + T item = (T)data[i]; + boolean added = set.add(item); + if (!set.validate() || (set.size() != i+1)) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(set); + return false; + } + if (!added || !set.contains(item)) { + System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); + Utils.handleError(set); + return false; + } + } + + boolean contains = set.contains((T)invalid); + boolean removed = set.remove((T)invalid); + if (contains || removed) { + System.err.println(name+" invalidity check. contains=" + contains + " removed=" + removed); + Utils.handleError(set); + return false; + } + + int size = set.size(); + for (int i = 0; i < size; i++) { + T item = (T)data[i]; + removed = set.remove(item); + if (!set.validate() || (set.size() != data.length-(i+1))) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(set); + return false; + } + if (!removed || set.contains(item)) { + System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); + Utils.handleError(set); + return false; + } + } + + // Add half, remove a quarter, add three-quarters, remove all + int quarter = data.length/4; + int half = data.length/2; + for (int i = 0; i < half; i++) { + T item = (T)data[i]; + boolean added = set.add(item); + if (!set.validate() || (set.size() != i+1)) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(set); + return false; + } + if (!added || !set.contains(item)) { + System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); + Utils.handleError(set); + return false; + } + } + for (int i = (half-1); i >= quarter; i--) { + T item = (T)data[i]; + removed = set.remove(item); + if (!set.validate() || (set.size() != i)) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(set); + return false; + } + if (!removed || set.contains(item)) { + System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); + Utils.handleError(set); + return false; + } + } + for (int i = quarter; i < data.length; i++) { + T item = (T)data[i]; + boolean added = set.add(item); + if (!set.validate() || (set.size() != i+1)) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(set); + return false; + } + if (!added || !set.contains(item)) { + System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); + Utils.handleError(set); + return false; + } + } + for (int i = data.length-1; i >= 0; i--) { + T item = (T)data[i]; + removed = set.remove(item); + if (!set.validate() || (set.size() != i)) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(set); + return false; + } + if ((!removed || set.contains(item))) { + System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); + Utils.handleError(set); + return false; + } + } + + if (set.size() != 0) { + System.err.println(name+" YIKES!! a size mismatch."); + Utils.handleError(set); + return false; + } + + return true; + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/StackTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/StackTest.java new file mode 100644 index 00000000..6e618b4f --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/common/StackTest.java @@ -0,0 +1,132 @@ +package com.jwetherell.algorithms.data_structures.test.common; + +import com.jwetherell.algorithms.data_structures.IStack; + +public class StackTest { + + @SuppressWarnings("unchecked") + public static > boolean testStack(IStack stack, String name, + Integer[] data, Integer invalid) { + for (int i = 0; i < data.length; i++) { + T item = (T)data[i]; + boolean added = stack.push(item); + if (!stack.validate() || (stack.size() != i+1)) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(stack); + return false; + } + if (!added || item==null || !stack.contains(item)) { + System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); + Utils.handleError(stack); + return false; + } + } + + boolean contains = stack.contains((T)invalid); + boolean removed = stack.remove((T)invalid); + if (contains || removed) { + System.err.println(name+" invalidity check. contains=" + contains + " removed=" + removed); + Utils.handleError(stack); + return false; + } + + int size = stack.size(); + for (int i = 0; i < size; i++) { + T item = stack.pop(); + T correct = (T)data[data.length-(i+1)]; + if ((item.compareTo(correct)!=0)) { + System.err.println(name+" YIKES!! " + item + " does not match LIFO item."); + Utils.handleError(stack); + return false; + } + if (!stack.validate() || (stack.size() != data.length-(i+1))) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(stack); + return false; + } + if (stack.contains(item)) { + System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); + Utils.handleError(stack); + return false; + } + } + + // Add half, remove a quarter, add three-quarters, remove all + int quarter = data.length/4; + int half = data.length/2; + for (int i = 0; i < half; i++) { + T item = (T)data[i]; + boolean added = stack.push(item); + if (!stack.validate() || (stack.size() != i+1)) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(stack); + return false; + } + if (!added || item==null || !stack.contains(item)) { + System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); + Utils.handleError(stack); + return false; + } + } + for (int i = (half-1); i >= quarter; i--) { + T item = stack.pop(); + T correct = (T)data[i]; + if (item.compareTo(correct)!=0) { + System.err.println(name+" YIKES!! " + item + " does not match LIFO item."); + Utils.handleError(stack); + return false; + } + if (!stack.validate() || (stack.size() != i)) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(stack); + return false; + } + if (stack.contains(item)) { + System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); + Utils.handleError(stack); + return false; + } + } + for (int i = quarter; i < data.length; i++) { + T item = (T)data[i]; + boolean added = stack.push(item); + if (!stack.validate() || (stack.size() != i+1)) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(stack); + return false; + } + if (!added || item==null || !stack.contains(item)) { + System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); + Utils.handleError(stack); + return false; + } + } + for (int i = data.length-1; i >= 0; i--) { + T item = stack.pop(); + T correct = (T)data[i]; + if (item.compareTo(correct)!=0) { + System.err.println(name+" YIKES!! " + item + " does not match LIFO item."); + Utils.handleError(stack); + return false; + } + if (!stack.validate() || (stack.size() != i)) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(stack); + return false; + } + if (stack.contains(item)) { + System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); + Utils.handleError(stack); + return false; + } + } + + if (stack.size() != 0) { + System.err.println(name+" YIKES!! a size mismatch."); + Utils.handleError(stack); + return false; + } + + return true; + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/TreeTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/TreeTest.java new file mode 100644 index 00000000..976c1cad --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/common/TreeTest.java @@ -0,0 +1,160 @@ +package com.jwetherell.algorithms.data_structures.test.common; + +import com.jwetherell.algorithms.data_structures.ITree; +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; + +public class TreeTest { + + @SuppressWarnings("unchecked") + public static > boolean testTree(ITree tree, Type type, String name, + Integer[] unsorted, Integer invalid) { + for (int i = 0; i < unsorted.length; i++) { + Integer value = unsorted[i]; + T item = null; + if (type == Type.Integer) { + item = (T)value; + } else if (type == Type.String) { + item = (T)String.valueOf(value); + } + boolean added = tree.add(item); + if (!tree.validate() || (tree.size() != i+1)) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(tree); + return false; + } + if (!added || !tree.contains(item)) { + System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); + Utils.handleError(tree); + return false; + } + } + + T invalidItem = null; + if (type == Type.Integer) { + invalidItem = (T)invalid; + } else if (type == Type.String) { + invalidItem = (T)String.valueOf(invalid); + } + boolean contains = tree.contains(invalidItem); + T removed = tree.remove(invalidItem); + if (contains || removed!=null) { + System.err.println(name+" invalidity check. contains=" + contains + " removed=" + removed); + Utils.handleError(tree); + return false; + } + + int size = tree.size(); + for (int i = 0; i < size; i++) { + Integer value = unsorted[i]; + T item = null; + if (type == Type.Integer) { + item = (T)value; + } else if (type == Type.String) { + item = (T)String.valueOf(value); + } + removed = tree.remove(item); + if (!tree.validate() || (tree.size() != unsorted.length-(i+1))) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(tree); + return false; + } + if (removed==null || tree.contains(item)) { + System.err.println(name+" YIKES!! " + item + " still exists but it has been removed."); + Utils.handleError(tree); + return false; + } + } + + // Add half, remove a quarter, add three-quarters + int quarter = unsorted.length/4; + int half = unsorted.length/2; + for (int i = 0; i < half; i++) { + Integer value = unsorted[i]; + T item = null; + if (type == Type.Integer) { + item = (T)value; + } else if (type == Type.String) { + item = (T)String.valueOf(value); + } + boolean added = tree.add(item); + if (!tree.validate() || (tree.size() != i+1)) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(tree); + return false; + } + if (!added || !tree.contains(item)) { + System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); + Utils.handleError(tree); + return false; + } + } + for (int i = (half-1); i >= quarter; i--) { + Integer value = unsorted[i]; + T item = null; + if (type == Type.Integer) { + item = (T)value; + } else if (type == Type.String) { + item = (T)String.valueOf(value); + } + removed = tree.remove(item); + if (!tree.validate() || (tree.size() != i)) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(tree); + return false; + } + if (removed==null || tree.contains(item)) { + System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); + Utils.handleError(tree); + return false; + } + } + for (int i = quarter; i < unsorted.length; i++) { + Integer value = unsorted[i]; + T item = null; + if (type == Type.Integer) { + item = (T)value; + } else if (type == Type.String) { + item = (T)String.valueOf(value); + } + boolean added = tree.add(item); + if (!tree.validate() || (tree.size() != i+1)) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(tree); + return false; + } + if (!added || !tree.contains(item)) { + System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); + Utils.handleError(tree); + return false; + } + } + for (int i = unsorted.length-1; i >= 0; i--) { + Integer value = unsorted[i]; + T item = null; + if (type == Type.Integer) { + item = (T)value; + } else if (type == Type.String) { + item = (T)String.valueOf(value); + } + removed = tree.remove(item); + if (!tree.validate() || (tree.size() != i)) { + System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); + Utils.handleError(tree); + return false; + } + if (removed==null || tree.contains(item)) { + System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); + Utils.handleError(tree); + return false; + } + } + + if (tree.size() != 0) { + System.err.println(name+" YIKES!! a size mismatch."); + Utils.handleError(tree); + return false; + } + + return true; + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/Utils.java b/src/com/jwetherell/algorithms/data_structures/test/common/Utils.java new file mode 100644 index 00000000..50d25466 --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/common/Utils.java @@ -0,0 +1,63 @@ +package com.jwetherell.algorithms.data_structures.test.common; + +import java.util.Arrays; +import java.util.Random; + +public class Utils { + + public static enum Type {Integer, String}; + + public static void handleError(Object obj) { + System.err.println(obj.toString()); + throw new RuntimeException("Error in test."); + } + + private static final Random RANDOM = new Random(); + + public static TestData generateTestData(int data_size) { + TestData data = new TestData(data_size); + + StringBuilder builder = new StringBuilder(); + data.unsorted = new Integer[data_size]; + java.util.Set set = new java.util.HashSet(); + builder.append("Array="); + for (int i = 0; i < data_size; i++) { + Integer j = RANDOM.nextInt(data.random_size); + // Make sure there are no duplicates + boolean found = true; + while (found) { + if (set.contains(j)) { + j = RANDOM.nextInt(data.random_size); + } else { + data.unsorted[i] = j; + set.add(j); + found = false; + } + } + data.unsorted[i] = j; + if (i!=data_size-1) builder.append(j).append(','); + } + set.clear(); + set = null; + builder.append('\n'); + data.string = builder.toString(); + + data.sorted = Arrays.copyOf(data.unsorted, data.unsorted.length); + Arrays.sort(data.sorted); + + return data; + } + + public static class TestData { + public int random_size = 0; + public int invalid = 0; + public Integer[] unsorted = null; + public Integer[] sorted = null; + public String string = null; + + public TestData(int size) { + this.random_size = 1000 * size; + this.invalid = random_size + 10; + } + } +} From 1b4da39f414c1c367a117150ef15b9150d4c6956 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Mon, 16 Jun 2014 13:13:18 -0400 Subject: [PATCH 32/61] Changed the testing of the data structures to use JUnit --- .../jwetherell/algorithms/DataStructures.java | 4042 ----------------- .../algorithms/DataStructuresTiming.java | 1720 +++++++ .../data_structures/BinaryHeap.java | 4 +- .../data_structures/ISuffixTree.java | 30 + .../data_structures/SuffixTree.java | 2 +- .../data_structures/SuffixTrie.java | 2 +- .../data_structures/test/AVLTreeTests.java | 2 +- .../data_structures/test/AllTests.java | 6 + .../data_structures/test/BTreeTests.java | 2 +- .../data_structures/test/BinaryHeapTests.java | 20 +- .../test/BinarySearchTreeTests.java | 2 +- .../data_structures/test/ListTests.java | 4 +- .../test/PatriciaTreeTests.java | 2 +- .../data_structures/test/QueueTests.java | 4 +- .../test/RedBlackTreeTests.java | 2 +- .../test/SegmentTreeTests.java | 2 - .../data_structures/test/SkipListTests.java | 2 +- .../data_structures/test/SplayTreeTests.java | 2 +- .../data_structures/test/StackTests.java | 4 +- .../data_structures/test/SuffixTreeTests.java | 18 + .../data_structures/test/SuffixTrieTests.java | 18 + .../data_structures/test/TreapTests.java | 32 + .../data_structures/test/TreeMapTests.java | 29 + .../data_structures/test/TrieMapTests.java | 29 + .../data_structures/test/TrieTests.java | 31 + .../data_structures/test/common/HeapTest.java | 62 +- .../test/common/IteratorTest.java | 10 + .../test/common/JavaCollectionTest.java | 114 +- .../test/common/JavaMapTest.java | 86 +- .../test/common/ListIteratorTest.java | 20 +- .../data_structures/test/common/ListTest.java | 33 +- .../data_structures/test/common/MapTest.java | 74 +- .../test/common/QueueTest.java | 39 +- .../data_structures/test/common/SetTest.java | 33 +- .../test/common/StackTest.java | 34 +- .../test/common/SuffixTreeTest.java | 44 + .../data_structures/test/common/TreeTest.java | 88 +- 37 files changed, 2386 insertions(+), 4262 deletions(-) delete mode 100644 src/com/jwetherell/algorithms/DataStructures.java create mode 100644 src/com/jwetherell/algorithms/DataStructuresTiming.java create mode 100644 src/com/jwetherell/algorithms/data_structures/ISuffixTree.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/SuffixTreeTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/SuffixTrieTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/TreapTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/TreeMapTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/TrieMapTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/TrieTests.java create mode 100644 src/com/jwetherell/algorithms/data_structures/test/common/SuffixTreeTest.java diff --git a/src/com/jwetherell/algorithms/DataStructures.java b/src/com/jwetherell/algorithms/DataStructures.java deleted file mode 100644 index 8b627527..00000000 --- a/src/com/jwetherell/algorithms/DataStructures.java +++ /dev/null @@ -1,4042 +0,0 @@ -package com.jwetherell.algorithms; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.Formatter; -import java.util.Iterator; -import java.util.ListIterator; -import java.util.Locale; -import java.util.NavigableSet; -import java.util.NoSuchElementException; -import java.util.Random; -import java.util.concurrent.ConcurrentSkipListMap; -import java.util.concurrent.ConcurrentSkipListSet; - -import com.jwetherell.algorithms.data_structures.AVLTree; -import com.jwetherell.algorithms.data_structures.BTree; -import com.jwetherell.algorithms.data_structures.BinaryHeap; -import com.jwetherell.algorithms.data_structures.BinarySearchTree; -import com.jwetherell.algorithms.data_structures.CompactSuffixTrie; -import com.jwetherell.algorithms.data_structures.HashArrayMappedTrie; -import com.jwetherell.algorithms.data_structures.HashMap; -import com.jwetherell.algorithms.data_structures.IHeap; -import com.jwetherell.algorithms.data_structures.IList; -import com.jwetherell.algorithms.data_structures.IMap; -import com.jwetherell.algorithms.data_structures.IQueue; -import com.jwetherell.algorithms.data_structures.ISet; -import com.jwetherell.algorithms.data_structures.IStack; -import com.jwetherell.algorithms.data_structures.ITree; -import com.jwetherell.algorithms.data_structures.IntervalTree; -import com.jwetherell.algorithms.data_structures.KdTree; -import com.jwetherell.algorithms.data_structures.List; -import com.jwetherell.algorithms.data_structures.Matrix; -import com.jwetherell.algorithms.data_structures.PatriciaTrie; -import com.jwetherell.algorithms.data_structures.QuadTree; -import com.jwetherell.algorithms.data_structures.Queue; -import com.jwetherell.algorithms.data_structures.RadixTrie; -import com.jwetherell.algorithms.data_structures.RedBlackTree; -import com.jwetherell.algorithms.data_structures.SegmentTree; -import com.jwetherell.algorithms.data_structures.SegmentTree.DynamicSegmentTree; -import com.jwetherell.algorithms.data_structures.SegmentTree.FlatSegmentTree; -import com.jwetherell.algorithms.data_structures.SkipList; -import com.jwetherell.algorithms.data_structures.SkipListMap; -import com.jwetherell.algorithms.data_structures.SplayTree; -import com.jwetherell.algorithms.data_structures.Stack; -import com.jwetherell.algorithms.data_structures.SuffixTree; -import com.jwetherell.algorithms.data_structures.SuffixTrie; -import com.jwetherell.algorithms.data_structures.Treap; -import com.jwetherell.algorithms.data_structures.TreeMap; -import com.jwetherell.algorithms.data_structures.Trie; -import com.jwetherell.algorithms.data_structures.TrieMap; - -@SuppressWarnings("unchecked") -public class DataStructures { - - private static final int NUMBER_OF_TESTS = 3; - private static final Random RANDOM = new Random(); - private static final int ARRAY_SIZE = 1000; - private static final int RANDOM_SIZE = 1000 * ARRAY_SIZE; - private static final Integer INVALID = RANDOM_SIZE + 10; - private static final DecimalFormat FORMAT = new DecimalFormat("0.##"); - - private static Integer[] unsorted = null; - private static Integer[] sorted = null; - private static String string = null; - - private static int debug = 1; // Debug level. 0=None, 1=Time and Memory (if enabled), 2=Time, Memory, data structure debug - private static boolean debugTime = true; // How much time to: add all, remove all, add all items in reverse order, remove all - private static boolean debugMemory = true; // How much memory is used by the data structure - private static boolean validateStructure = true; // Is the data structure valid (passed invariants) and proper size - private static boolean validateContents = true; // Was the item added/removed really added/removed from the structure - private static boolean validateIterator = true; // Does the iterator(s) work - - private static final int TESTS = 38; // Max number of dynamic data structures to test - private static final String[] testNames = new String[TESTS]; // Array to hold the test names - private static final long[][] testResults = new long[TESTS][]; // Array to hold the test results - private static int testIndex = 0; // Index into the tests - private static int testNumber = 0; // Number of aggregate tests which have been run - - public static enum Type {Integer, String}; - - public static void main(String[] args) { - System.out.println("Starting tests."); - boolean passed = false; - for (int i = 0; i < NUMBER_OF_TESTS; i++) { - try { - passed = runTests(); - } catch (NullPointerException e) { - System.err.println(string); - throw e; - } - if (!passed) break; - } - if (passed) System.out.println("Tests finished. All passed."); - else System.err.println("Tests finished. Detected a failure."); - } - - public static void generateTestData() { - System.out.println("Generating data."); - StringBuilder builder = new StringBuilder(); - builder.append("Array="); - unsorted = new Integer[ARRAY_SIZE]; - java.util.Set set = new java.util.HashSet(); - for (int i = 0; i < ARRAY_SIZE; i++) { - Integer j = RANDOM.nextInt(RANDOM_SIZE); - // Make sure there are no duplicates - boolean found = true; - while (found) { - if (set.contains(j)) { - j = RANDOM.nextInt(RANDOM_SIZE); - } else { - unsorted[i] = j; - set.add(j); - found = false; - } - } - unsorted[i] = j; - if (i!=ARRAY_SIZE-1) builder.append(j).append(','); - } - set.clear(); - set = null; - builder.append('\n'); - string = builder.toString(); - if (debug > 1) System.out.println(string); - - sorted = Arrays.copyOf(unsorted, unsorted.length); - Arrays.sort(sorted); - - System.out.println("Generated data."); - } - - public static void setTestData(Integer[] iUnsorted, Integer[] iSorted) { - unsorted = iUnsorted; - sorted = iSorted; - } - - private static boolean runTests() { - testIndex = 0; - testNumber++; - - generateTestData(); - - boolean passed = true; - - // Trees - - passed = testJavaRedBlackIntegerTree(); - if (!passed) { - System.err.println("Java Red-Black [Integer] failed."); - return false; - } - - passed = testRedBlackTree(); - if (!passed) { - System.err.println("Red-Black Tree failed."); - return false; - } - - passed = testAVLTree(); - if (!passed) { - System.err.println("AVL Tree failed."); - return false; - } - - passed = testSplayTree(); - if (!passed) { - System.err.println("Splay Tree failed."); - return false; - } - - passed = testBTree(); - if (!passed) { - System.err.println("B-Tree failed."); - return false; - } - - passed = testTreap(); - if (!passed) { - System.err.println("Treap failed."); - return false; - } - - passed = testBST(); - if (!passed) { - System.err.println("BST failed."); - return false; - } - - passed = testJavaRedBlackStringTree(); - if (!passed) { - System.err.println("Java Red-Black [String] failed."); - return false; - } - - passed = testTrie(); - if (!passed) { - System.err.println("Trie failed."); - return false; - } - - passed = testPatriciaTrie(); - if (!passed) { - System.err.println("Patricia Trie failed."); - return false; - } - - // Sets - - passed = testJavaSkipList(); - if (!passed) { - System.err.println("Java's Skip List failed."); - return false; - } - - passed = testSkipList(); - if (!passed) { - System.err.println("Skip List failed."); - return false; - } - - // Heaps - - passed = testJavaMinHeap(); - if (!passed) { - System.err.println("Java Min-Heap failed."); - return false; - } - - passed = testMinHeap(); - if (!passed) { - System.err.println("Min-Heap failed."); - return false; - } - - passed = testJavaMaxHeap(); - if (!passed) { - System.err.println("Java Max-Heap failed."); - return false; - } - - passed = testMaxHeap(); - if (!passed) { - System.err.println("Max-Heap failed."); - return false; - } - - // Lists - - passed = testJavaArrayList(); - if (!passed) { - System.err.println("Java List failed."); - return false; - } - - passed = testArrayList(); - if (!passed) { - System.err.println("List failed."); - return false; - } - - passed = testJavaLinkedList(); - if (!passed) { - System.err.println("Java List failed."); - return false; - } - - passed = testLinkedList(); - if (!passed) { - System.err.println("List failed."); - return false; - } - - // Queues - - passed = testJavaArrayQueue(); - if (!passed) { - System.err.println("Java Queue failed."); - return false; - } - - passed = testArrayQueue(); - if (!passed) { - System.err.println("Queue failed."); - return false; - } - - passed = testJavaLinkedQueue(); - if (!passed) { - System.err.println("Java Queue failed."); - return false; - } - - passed = testLinkedQueue(); - if (!passed) { - System.err.println("Queue failed."); - return false; - } - - // Stacks - - passed = testJavaStack(); - if (!passed) { - System.err.println("Java Stack failed."); - return false; - } - - passed = testArrayStack(); - if (!passed) { - System.err.println("Stack failed."); - return false; - } - - passed = testLinkedStack(); - if (!passed) { - System.err.println("Stack failed."); - return false; - } - - // Maps - - passed = testJavaHashMap(); - if (!passed) { - System.err.println("Java Hash Map failed."); - return false; - } - - passed = testHashMap(); - if (!passed) { - System.err.println("Hash Map failed."); - return false; - } - - passed = testJavaTreeMap(); - if (!passed) { - System.err.println("Java Tree Map failed."); - return false; - } - - passed = testTreeMap(); - if (!passed) { - System.err.println("Tree Map failed."); - return false; - } - - passed = testTrieMap(); - if (!passed) { - System.err.println("Trie Map failed."); - return false; - } - - passed = testRadixTrie(); - if (!passed) { - System.err.println("Radix Trie failed."); - return false; - } - - passed = testJavaSkipListMap(); - if (!passed) { - System.err.println("Java's Skip List Map failed."); - return false; - } - - passed = testSkipListMap(); - if (!passed) { - System.err.println("Skip List Map failed."); - return false; - } - - passed = testHAMT(); - if (!passed) { - System.err.println("HAMT failed."); - return false; - } - - if (debugTime && debugMemory) { - String results = getTestResults(testNumber, testNames, testResults); - System.out.println(results); - } - - // MY STATIC DATA STRUCTURES - - passed = testIntervalTree(); - if (!passed) { - System.err.println("Interval Tree failed."); - return false; - } - - passed = testKdTree(); - if (!passed) { - System.err.println("k-d Tree Tree failed."); - return false; - } - - passed = testMatrix(); - if (!passed) { - System.err.println("Matrix failed."); - return false; - } - - passed = testSegmentTree(); - if (!passed) { - System.err.println("Segment Tree failed."); - return false; - } - - passed = testCompactSuffixTrie(); - if (!passed) { - System.err.println("Compact Suffix Trie failed."); - return false; - } - - passed = testSuffixTrie(); - if (!passed) { - System.err.println("Suffix Trie failed."); - return false; - } - - passed = testSuffixTree(); - if (!passed) { - System.err.println("Suffix Tree failed."); - return false; - } - - passed = testQuadTree(); - if (!passed) { - System.err.println("QuadTree failed."); - return false; - } - - return true; - } - - private static void handleError(Object obj) { - System.err.println(string); - System.err.println(obj.toString()); - throw new RuntimeException("Error in test."); - } - - private static boolean testAVLTree() { - String bstName = "AVL Tree"; - BinarySearchTree bst = new AVLTree(); - Collection bstCollection = bst.toCollection(); - - if((validateStructure||validateContents) && !testTree(bst,Type.Integer,bstName)) return false; - if(!testJavaCollection(bstCollection,Type.Integer,bstName)) return false; - return true; - } - - private static boolean testBTree() { - String bstName = "B-Tree"; - BTree bst = new BTree(2); - Collection bstCollection = bst.toCollection(); - - if((validateStructure||validateContents) && !testTree(bst,Type.Integer,bstName)) return false; - if(!testJavaCollection(bstCollection,Type.Integer,bstName)) return false; - return true; - } - - private static boolean testBST() { - String bstName = "BST"; - BinarySearchTree bst = new BinarySearchTree(); - Collection bstCollection = bst.toCollection(); - - if((validateStructure||validateContents) && !testTree(bst,Type.Integer,bstName)) return false; - if(!testJavaCollection(bstCollection,Type.Integer,bstName)) return false; - return true; - } - - private static boolean testCompactSuffixTrie() { - System.out.println("Compact Suffix Trie."); - - String bookkeeper = "bookkeeper"; - CompactSuffixTrie trie = new CompactSuffixTrie(bookkeeper); - if (debug > 1) System.out.println(trie.toString()); - if (debug > 1) System.out.println(trie.getSuffixes()); - - boolean exists = trie.doesSubStringExist(bookkeeper); - if (!exists) { - System.err.println("YIKES!! " + bookkeeper + " doesn't exists."); - handleError(trie); - return false; - } - - String failed = "booker"; - exists = trie.doesSubStringExist(failed); - if (exists) { - System.err.println("YIKES!! " + failed + " exists."); - handleError(trie); - return false; - } - - String pass = "kkee"; - exists = trie.doesSubStringExist(pass); - if (!exists) { - System.err.println("YIKES!! " + pass + " doesn't exists."); - handleError(trie); - return false; - } - - System.out.println("Compact Suffix Trie worked correctly."); - - if (debug > 1) System.out.println(); - - return true; - } - - private static boolean testMinHeap() { - String aNameMin = "Min-Heap [array]"; - BinaryHeap.BinaryHeapArray aHeapMin = new BinaryHeap.BinaryHeapArray(BinaryHeap.Type.MIN); - Collection aCollectionMin = aHeapMin.toCollection(); - if((validateStructure||validateContents) && !testHeap(aHeapMin,aNameMin,BinaryHeap.Type.MIN)) return false; - if(!testJavaCollection(aCollectionMin,Type.Integer,aNameMin)) return false; - - String tNameMin = "Min-Heap [tree]"; - BinaryHeap.BinaryHeapTree tHeapMin = new BinaryHeap.BinaryHeapTree(BinaryHeap.Type.MIN); - Collection tCollectionMin = tHeapMin.toCollection(); - if((validateStructure||validateContents) && !testHeap(tHeapMin,tNameMin,BinaryHeap.Type.MIN)) return false; - if(!testJavaCollection(tCollectionMin,Type.Integer,tNameMin)) return false; - - return true; - } - - private static boolean testMaxHeap() { - String aNameMax = "Max-Heap [array]"; - BinaryHeap.BinaryHeapArray aHeapMax = new BinaryHeap.BinaryHeapArray(BinaryHeap.Type.MAX); - Collection aCollectionMax = aHeapMax.toCollection(); - if((validateStructure||validateContents) && !testHeap(aHeapMax,aNameMax,BinaryHeap.Type.MAX)) return false; - if(!testJavaCollection(aCollectionMax,Type.Integer,aNameMax)) return false; - - String lNameMax = "Max-Heap [tree]"; - BinaryHeap.BinaryHeapTree tHeapMax = new BinaryHeap.BinaryHeapTree(BinaryHeap.Type.MAX); - Collection tCollectionMax = tHeapMax.toCollection(); - if((validateStructure||validateContents) && !testHeap(tHeapMax,lNameMax,BinaryHeap.Type.MAX)) return false; - if(!testJavaCollection(tCollectionMax,Type.Integer,lNameMax)) return false; - - return true; - } - - private static boolean testHashMap() { - String mapName = "HashMap"; - HashMap map = new HashMap(unsorted.length/2); - java.util.Map jMap = map.toMap(); - - if((validateStructure||validateContents) && !testMap(map,Type.Integer,mapName)) return false; - if(!testJavaMap(jMap,Type.Integer,mapName)) return false; - return true; - } - - private static boolean testHAMT() { - String mapName = "HAMT"; - HashArrayMappedTrie map = new HashArrayMappedTrie(); - java.util.Map jMap = map.toMap(); - - if((validateStructure||validateContents) && !testMap(map,Type.Integer,mapName)) return false; - if(!testJavaMap(jMap,Type.Integer,mapName)) return false; - return true; - } - - private static boolean testIntervalTree() { - System.out.println("Interval Tree."); - - { // Interval tree - final String RED = "RED"; - final String ORANGE = "ORANGE"; - final String GREEN = "GREEN"; - final String DARK_GREEN = "DARK_GREEN"; - final String BLUE = "BLUE"; - final String PURPLE = "PURPLE"; - final String BLACK = "BLACK"; - java.util.List> intervals = new ArrayList>(); - intervals.add((new IntervalTree.IntervalData(2, 6, RED))); - intervals.add((new IntervalTree.IntervalData(3, 5, ORANGE))); - intervals.add((new IntervalTree.IntervalData(4, 11, GREEN))); - intervals.add((new IntervalTree.IntervalData(5, 10, DARK_GREEN))); - intervals.add((new IntervalTree.IntervalData(8, 12, BLUE))); - intervals.add((new IntervalTree.IntervalData(9, 14, PURPLE))); - intervals.add((new IntervalTree.IntervalData(13, 15, BLACK))); - IntervalTree tree = new IntervalTree(intervals); - if (debug > 1) System.out.println(tree); - - IntervalTree.IntervalData query = tree.query(2); - if (debug > 1) System.out.println("2: " + query); - if (!query.getData().contains(RED)) { - System.err.println("Interval Tree query error. query=2 returned="+query); - handleError(tree); - return false; - } - - query = tree.query(4); // Stabbing query - if (debug > 1) System.out.println("4: " + query); - if (!query.getData().contains(GREEN)) { - System.err.println("Interval Tree query error. query=4 returned="+query); - handleError(tree); - return false; - } - - query = tree.query(9); // Stabbing query - if (debug > 1) System.out.println("9: " + query); - if (!query.getData().contains(PURPLE)) { - System.err.println("Interval Tree query error. query=9 returned="+query); - handleError(tree); - return false; - } - - query = tree.query(1, 16); // Range query - if (debug > 1) System.out.println("1->16: " + query); - if (!query.getData().contains(RED) || - !query.getData().contains(ORANGE) || - !query.getData().contains(GREEN) || - !query.getData().contains(DARK_GREEN) || - !query.getData().contains(BLUE) || - !query.getData().contains(PURPLE) || - !query.getData().contains(BLACK) - ) { - System.err.println("Interval Tree query error. query=1->16 returned="+query); - handleError(tree); - return false; - } - - query = tree.query(7, 14); // Range query - if (debug > 1) System.out.println("7->14: " + query); - if (!query.getData().contains(GREEN) || - !query.getData().contains(DARK_GREEN) || - !query.getData().contains(BLUE) || - !query.getData().contains(PURPLE) || - !query.getData().contains(BLACK) - ) { - System.err.println("Interval Tree query error. query=7->14 returned="+query); - handleError(tree); - return false; - } - - query = tree.query(14, 15); // Range query - if (debug > 1) System.out.println("14->15: " + query); - if (!query.getData().contains(PURPLE) || - !query.getData().contains(BLACK) - ) { - System.err.println("Interval Tree query error. query=14->15 returned="+query); - handleError(tree); - return false; - } - - if (debug > 1) System.out.println(); - } - - { // Lifespan Interval tree - if (debug > 1) System.out.println("Lifespan Interval Tree."); - final String stravinsky = "Stravinsky"; - final String schoenberg = "Schoenberg"; - final String grieg = "Grieg"; - final String schubert = "Schubert"; - final String mozart = "Mozart"; - final String schuetz = "Schuetz"; - java.util.List> intervals = new ArrayList>(); - intervals.add((new IntervalTree.IntervalData(1888, 1971, stravinsky))); - intervals.add((new IntervalTree.IntervalData(1874, 1951, schoenberg))); - intervals.add((new IntervalTree.IntervalData(1843, 1907, grieg))); - intervals.add((new IntervalTree.IntervalData(1779, 1828, schubert))); - intervals.add((new IntervalTree.IntervalData(1756, 1791, mozart))); - intervals.add((new IntervalTree.IntervalData(1585, 1672, schuetz))); - IntervalTree tree = new IntervalTree(intervals); - if (debug > 1) System.out.println(tree); - - IntervalTree.IntervalData query = tree.query(1890); // Stabbing query - if (debug > 1) System.out.println("1890: " + query); - if (!query.getData().contains(stravinsky) || - !query.getData().contains(schoenberg) || - !query.getData().contains(grieg) - ) { - System.err.println("Interval Tree query error. query=1890 returned="+query); - handleError(tree); - return false; - } - - query = tree.query(1909); // Stabbing query - if (debug > 1) System.out.println("1909: " + query); - if (!query.getData().contains(stravinsky) || - !query.getData().contains(schoenberg) - ) { - System.err.println("Interval Tree query error. query=1909 returned="+query); - handleError(tree); - return false; - } - - query = tree.query(1792, 1903); // Range query - if (debug > 1) System.out.println("1792->1903: " + query); - if (!query.getData().contains(stravinsky) || - !query.getData().contains(schoenberg) || - !query.getData().contains(grieg) || - !query.getData().contains(schubert) - ) { - System.err.println("Interval Tree query error. query=1792->1903 returned="+query); - handleError(tree); - return false; - } - - query = tree.query(1776, 1799); // Range query - if (debug > 1) System.out.println("1776->1799: " + query); - if (!query.getData().contains(schubert) || - !query.getData().contains(mozart) - ) { - System.err.println("Interval Tree query error. query=1776->1799 returned="+query); - handleError(tree); - return false; - } - - if (debug > 1) System.out.println(); - } - - System.out.println("Interval Tree worked correctly."); - - return true; - } - - private static boolean testJavaHashMap() { - String mapName = "Java's HashMap"; - java.util.Map map = new java.util.HashMap(unsorted.length/2); - - if(!testJavaMap(map,Type.Integer,mapName)) return false; - return true; - } - - private static boolean testJavaMinHeap() { - java.util.PriorityQueue minArrayHeap = new java.util.PriorityQueue(10, - new Comparator() { - - @Override - public int compare(Integer arg0, Integer arg1) { - if (arg0.compareTo(arg1) < 0) - return -1; - else if (arg1.compareTo(arg0) < 0) - return 1; - return 0; - } - }); - if(!testJavaCollection(minArrayHeap,Type.Integer,"Java's Min-Heap [array]")) return false; - - return true; - } - - private static boolean testJavaMaxHeap() { - java.util.PriorityQueue maxArrayHeap = new java.util.PriorityQueue(10, - new Comparator() { - - @Override - public int compare(Integer arg0, Integer arg1) { - if (arg0.compareTo(arg1) > 0) - return -1; - else if (arg1.compareTo(arg0) > 0) - return 1; - return 0; - } - }); - if(!testJavaCollection(maxArrayHeap,Type.Integer,"Java's Max-Heap [array]")) return false; - return true; - } - - private static boolean testJavaArrayList() { - if(!testJavaCollection(new java.util.ArrayList(),Type.Integer,"Java's List [array]")) return false; - return true; - } - - private static boolean testJavaLinkedList() { - if(!testJavaCollection(new java.util.LinkedList(),Type.Integer,"Java's List [linked]")) return false; - return true; - } - - private static boolean testJavaArrayQueue() { - String aName = "Java's Queue [array]"; - java.util.Deque aCollection = new java.util.ArrayDeque(); - - if(!testJavaCollection(aCollection,Type.Integer,aName)) return false; - return true; - } - - private static boolean testJavaLinkedQueue() { - String lName = "Java's Queue [linked]"; - java.util.Deque lCollection = new java.util.LinkedList(); - - if(!testJavaCollection(lCollection,Type.Integer,lName)) return false; - return true; - } - - private static boolean testJavaRedBlackIntegerTree() { - String aName = "Java's Red-Black Tree [Integer]"; - java.util.TreeSet aCollection = new java.util.TreeSet(); - if(!testJavaCollection(aCollection,Type.Integer,aName)) return false; - return true; - } - - private static boolean testJavaRedBlackStringTree() { - String aName = "Java's Red-Black Tree [String]"; - java.util.TreeSet aCollection = new java.util.TreeSet(); - if(!testJavaCollection(aCollection,Type.String,aName)) return false; - return true; - } - - private static boolean testJavaStack() { - String aName = "Java's Stack [array]"; - java.util.Stack aCollection = new java.util.Stack(); - if(!testJavaCollection(aCollection,Type.Integer,aName)) return false; - return true; - } - - private static boolean testJavaTreeMap() { - String mapName = "Java's TreeMap"; - java.util.Map map = new java.util.TreeMap(); - - if(!testJavaMap(map,Type.String,mapName)) return false; - return true; - } - - private static boolean testKdTree() { - System.out.println("K-D tree."); - - java.util.List points = new ArrayList(); - KdTree.XYZPoint p1 = new KdTree.XYZPoint(2, 3); - points.add(p1); - KdTree.XYZPoint p2 = new KdTree.XYZPoint(5, 4); - points.add(p2); - KdTree.XYZPoint p3 = new KdTree.XYZPoint(9, 6); - points.add(p3); - KdTree.XYZPoint p4 = new KdTree.XYZPoint(4, 7); - points.add(p4); - KdTree.XYZPoint p5 = new KdTree.XYZPoint(8, 1); - points.add(p5); - KdTree.XYZPoint p6 = new KdTree.XYZPoint(7, 2); - points.add(p6); - KdTree kdTree = new KdTree(points); - if (debug > 1) System.out.println(kdTree.toString()); - - Collection result = kdTree.nearestNeighbourSearch(1, p3); - if (debug > 1) System.out.println("NNS for " + p3 + " result=" + result + "\n"); - if (!result.contains(p3)) { - System.err.println("K-D Tree query error. query=(k=1, p=(9, 6)) returned="+result); - handleError(kdTree); - return false; - } - - KdTree.XYZPoint search = new KdTree.XYZPoint(1, 4); - result = kdTree.nearestNeighbourSearch(4, search); - if (debug > 1) System.out.println("NNS for " + search + " result=" + result + "\n"); - if (!result.contains(p1) || - !result.contains(p2) || - !result.contains(p4) || - !result.contains(p6) - ) { - System.err.println("K-D Tree query error. query=(k=4, p=(1, 4)) returned="+result); - handleError(kdTree); - return false; - } - - kdTree.remove(p6); - if (debug > 1) System.out.println("Removed " + p6 + "\n" + kdTree.toString()); - kdTree.remove(p4); - if (debug > 1) System.out.println("Removed " + p4 + "\n" + kdTree.toString()); - kdTree.remove(p3); - if (debug > 1) System.out.println("Removed " + p3 + "\n" + kdTree.toString()); - kdTree.remove(p5); - if (debug > 1) System.out.println("Removed " + p5 + "\n" + kdTree.toString()); - kdTree.remove(p1); - if (debug > 1) System.out.println("Removed " + p1 + "\n" + kdTree.toString()); - kdTree.remove(p2); - if (debug > 1) System.out.println("Removed " + p2 + "\n" + kdTree.toString()); - - if (debug > 1) System.out.println(kdTree.toString()); - - if (debug > 1) System.out.println(); - - System.out.println("K-D tree worked correctly."); - - return true; - } - - private static boolean testArrayList() { - String aName = "List [array]"; - List.ArrayList aList = new List.ArrayList(); - Collection aCollection = aList.toCollection(); - - if((validateStructure||validateContents) && !testList(aList,aName)) return false; - if(!testJavaCollection(aCollection,Type.Integer,aName)) return false; - return true; - } - - private static boolean testLinkedList() { - String lName = "List [linked]"; - List.LinkedList lList = new List.LinkedList(); - Collection lCollection = lList.toCollection(); - - if((validateStructure||validateContents) && !testList(lList,lName)) return false; - if(!testJavaCollection(lCollection,Type.Integer,lName)) return false; - return true; - } - - private static boolean testMatrix() { - System.out.println("Matrix."); - - Matrix matrix1 = new Matrix(4, 3); - matrix1.set(0, 0, 14); - matrix1.set(0, 1, 9); - matrix1.set(0, 2, 3); - matrix1.set(1, 0, 2); - matrix1.set(1, 1, 11); - matrix1.set(1, 2, 15); - matrix1.set(2, 0, 0); - matrix1.set(2, 1, 12); - matrix1.set(2, 2, 17); - matrix1.set(3, 0, 5); - matrix1.set(3, 1, 2); - matrix1.set(3, 2, 3); - - Matrix matrix2 = new Matrix(3, 2); - matrix2.set(0, 0, 12); - matrix2.set(0, 1, 25); - matrix2.set(1, 0, 9); - matrix2.set(1, 1, 10); - matrix2.set(2, 0, 8); - matrix2.set(2, 1, 5); - - // Result of multiplication - Integer[][] array1 = new Integer[][]{{273,455}, - {243,235}, - {244,205}, - {102,160}}; - Matrix result1 = new Matrix(4,2,array1); - - if (debug > 1) System.out.println("Matrix multiplication."); - Matrix matrix3 = matrix1.multiply(matrix2); - if (debug > 1) System.out.println(matrix3); - if (!matrix3.equals(result1)) { - System.err.println("Matrix multiplication error. matrix3="+matrix3+" result1"+result1); - return false; - } - - int rows = 2; - int cols = 2; - int counter = 0; - Matrix matrix4 = new Matrix(rows, cols); - for (int r = 0; r < rows; r++) - for (int c = 0; c < cols; c++) - matrix4.set(r, c, counter++); - - // Result of subtraction - Integer[][] array2 = new Integer[][]{{0,0}, - {0,0}}; - Matrix result2 = new Matrix(2,2,array2); - - if (debug > 1) System.out.println("Matrix subtraction."); - Matrix matrix5 = matrix4.subtract(matrix4); - if (debug > 1) System.out.println(matrix5); - if (!matrix5.equals(result2)) { - System.err.println("Matrix multiplication error. matrix5="+matrix5+" result2"+result2); - return false; - } - - // Result of addition - Integer[][] array3 = new Integer[][]{{0,2}, - {4,6}}; - Matrix result3 = new Matrix(2,2,array3); - - if (debug > 1) System.out.println("Matrix addition."); - Matrix matrix6 = matrix4.add(matrix4); - if (debug > 1) System.out.println(matrix6); - if (!matrix6.equals(result3)) { - System.err.println("Matrix multiplication error. matrix6="+matrix6+" result3"+result3); - return false; - } - - Matrix matrix7 = new Matrix(2, 2); - matrix7.set(0, 0, 1); - matrix7.set(0, 1, 2); - matrix7.set(1, 0, 3); - matrix7.set(1, 1, 4); - - Matrix matrix8 = new Matrix(2, 2); - matrix8.set(0, 0, 1); - matrix8.set(0, 1, 2); - matrix8.set(1, 0, 3); - matrix8.set(1, 1, 4); - - // Result of multiplication - Integer[][] array4 = new Integer[][]{{7,10}, - {15,22}}; - Matrix result4 = new Matrix(2,2,array4); - - if (debug > 1) System.out.println("Matrix multiplication."); - Matrix matrix9 = matrix7.multiply(matrix8); - if (debug > 1) System.out.println(matrix9); - if (!matrix9.equals(result4)) { - System.err.println("Matrix multiplication error. matrix9="+matrix9+" result4"+result4); - return false; - } - - System.out.println("Matrix worked correctly."); - - return true; - } - - private static boolean testPatriciaTrie() { - String bstName = "PatriciaTrie"; - PatriciaTrie bst = new PatriciaTrie(); - Collection bstCollection = bst.toCollection(); - - if((validateStructure||validateContents) && !testTree(bst,Type.String,bstName)) return false; - if(!testJavaCollection(bstCollection,Type.String,bstName)) return false; - return true; - } - - private static boolean testQuadTree() { - - System.out.println("QuadTree."); - - int size = 16000; - - java.util.Set set = new java.util.HashSet(size); - while (set.size() < size) { - float x = RANDOM.nextInt(size); - float y = RANDOM.nextInt(size); - QuadTree.XYPoint xyPoint = new QuadTree.XYPoint(x,y); - set.add(xyPoint); - } - - java.util.List query = new java.util.ArrayList(size); - for (int j=0; j tree = new QuadTree.PointRegionQuadTree(0,0,size,size); - - beforeMemory = DataStructures.getMemoryUse(); - { - beforeInsert = System.nanoTime(); - for (QuadTree.XYPoint p : set) - tree.insert(p.getX(), p.getY()); - afterInsert = System.nanoTime(); - insertTime = afterInsert - beforeInsert; - if (debug > 1) System.out.println("PointRegionQuadTree insertTime="+insertTime/100000d+" ms"); - } - afterMemory = DataStructures.getMemoryUse(); - treeMemory = afterMemory - beforeMemory; - if (debug > 1) System.out.println("PointRegionQuadTree treeMemory="+treeMemory); - - if (debug > 1) System.out.println(tree); - - // We should find all points here (tests structure) - for (QuadTree.XYPoint p : set) { - java.util.List result = tree.queryRange(p.getX(), p.getY(), 1, 1); - if (result.size()<=0) { - System.err.println("Quad tree queryRange error. result="+result); - return false; - } - } - - // We may not find all points here (tests query speed) - { - beforeQuery = System.nanoTime(); - for (QuadTree.XYPoint p : query) - tree.queryRange(p.getX(), p.getY(), 1, 1); - afterQuery = System.nanoTime(); - queryTime = afterQuery - beforeQuery; - if (debug > 1) System.out.println("PointRegionQuadTree queryTime="+queryTime/100000d+" ms"); - } - - // Result set should not contain duplicates - beforeTreeQuery = System.nanoTime(); - java.util.List result = tree.queryRange(0, 0, size, size); - afterTreeQuery = System.nanoTime(); - treeQuery = afterTreeQuery - beforeTreeQuery; - if (debug > 1) System.out.println("PointRegionQuadTree wholeTreeQuery="+treeQuery/100000d+" ms"); - - Collections.sort(result); - QuadTree.XYPoint prev = null; - for (QuadTree.XYPoint p : result) { - if (prev!=null && prev.equals(p)) { - System.err.println("Quad tree compare error. p="+p+" prev="+prev+" result="+result); - return false; - } - prev = p; - } - - { // Remove all - beforeRemove = System.nanoTime(); - for (QuadTree.XYPoint p : set) { - boolean removed = tree.remove(p.getX(), p.getY()); - if (!removed) { - System.err.println("Quad tree remove error. removed="+removed+" x="+p.getX()+" y="+p.getY()); - return false; - } - } - afterRemove = System.nanoTime(); - removeTime = afterRemove - beforeRemove; - if (debug > 1) System.out.println("PointRegionQuadTree removeTime="+removeTime/100000d+" ms"); - } - } - - { // Rectangle base quad-tree - QuadTree.MxCifQuadTree tree = new QuadTree.MxCifQuadTree(0,0,size,size,10,10); - beforeMemory = DataStructures.getMemoryUse(); - { - beforeInsert = System.nanoTime(); - for (QuadTree.XYPoint p : set) - tree.insert(p.getX(), p.getY(), 1, 1); - afterInsert = System.nanoTime(); - insertTime = afterInsert - beforeInsert; - if (debug > 1) System.out.println("MxCifQuadTree insertTime="+insertTime/100000d+" ms"); - } - afterMemory = DataStructures.getMemoryUse(); - treeMemory = afterMemory - beforeMemory; - if (debug > 1) System.out.println("MxCifQuadTree treeMemory="+treeMemory); - - if (debug > 1) System.out.println(tree); - - // We should find all points here - for (QuadTree.XYPoint p : set) { - java.util.List result = tree.queryRange(p.getX(), p.getY(), 1, 1); - if (result.size()<=0) { - System.err.println("Quad tree queryRange error. result="+result); - return false; - } - } - - { // We may not find all points here - beforeQuery = System.nanoTime(); - for (QuadTree.XYPoint p : query) - tree.queryRange(p.getX(), p.getY(), 1, 1); - afterQuery = System.nanoTime(); - queryTime = afterQuery - beforeQuery; - if (debug > 1) System.out.println("MxCifQuadTree queryTime="+queryTime/100000d+" ms"); - } - - // Result set should not contain duplicates - beforeTreeQuery = System.nanoTime(); - java.util.List result = tree.queryRange(0, 0, size, size); - afterTreeQuery = System.nanoTime(); - treeQuery = afterTreeQuery - beforeTreeQuery; - if (debug > 1) System.out.println("MxCifQuadTree wholeTreeQuery="+treeQuery/100000d+" ms"); - - Collections.sort(result); - QuadTree.AxisAlignedBoundingBox prev = null; - for (QuadTree.AxisAlignedBoundingBox p : result) { - if (prev!=null && prev.equals(p)) { - System.err.println("Quad tree compare error. p="+p+" prev="+prev+" result="+result); - return false; - } - prev = p; - } - - { // Remove all - beforeRemove = System.nanoTime(); - for (QuadTree.XYPoint p : set) { - boolean removed = tree.remove(p.getX(), p.getY(), 1, 1); - if (!removed) { - System.err.println("Quad tree remove error. removed="+removed+" x="+p.getX()+" y="+p.getY()); - return false; - } - } - afterRemove = System.nanoTime(); - removeTime = afterRemove - beforeRemove; - if (debug > 1) System.out.println("MxCifQuadTree removeTime="+removeTime/100000d+" ms"); - } - } - - System.out.println("QuadTree worked correctly."); - - return true; - } - - private static boolean testArrayQueue() { - String aName = "Queue [array]"; - Queue.ArrayQueue aQueue = new Queue.ArrayQueue(); - Collection aCollection = aQueue.toCollection(); - - if((validateStructure||validateContents) && !testQueue(aQueue,aName)) return false; - if(!testJavaCollection(aCollection,Type.Integer,aName)) return false; - return true; - } - - private static boolean testLinkedQueue() { - String lName = "Queue [linked]"; - Queue.LinkedQueue lQueue = new Queue.LinkedQueue(); - Collection lCollection = lQueue.toCollection(); - - if((validateStructure||validateContents) && !testQueue(lQueue,lName)) return false; - if(!testJavaCollection(lCollection,Type.Integer,lName)) return false; - return true; - } - - private static boolean testRadixTrie() { - String mapName = "RadixTrie"; - RadixTrie map = new RadixTrie(); - java.util.Map jMap = map.toMap(); - - if((validateStructure||validateContents) && !testMap(map,Type.String,mapName)) return false; - if(!testJavaMap(jMap,Type.String,mapName)) return false; - return true; - } - - private static boolean testRedBlackTree() { - String bstName = "Red-Black Tree"; - RedBlackTree bst = new RedBlackTree(); - Collection bstCollection = bst.toCollection(); - - if((validateStructure||validateContents) && !testTree(bst,Type.Integer,bstName)) return false; - if(!testJavaCollection(bstCollection,Type.Integer,bstName)) return false; - - return true; - } - - private static boolean testSegmentTree() { - System.out.println("Segment Tree."); - - { // Quadrant Segment tree - if (debug>1) System.out.println("Quadrant Segment Tree."); - java.util.List segments = new ArrayList(); - segments.add(new SegmentTree.Data.QuadrantData(0, 1, 0, 0, 0)); // first point in the 0th quadrant - segments.add(new SegmentTree.Data.QuadrantData(1, 0, 1, 0, 0)); // second point in the 1st quadrant - segments.add(new SegmentTree.Data.QuadrantData(2, 0, 0, 1, 0)); // third point in the 2nd quadrant - segments.add(new SegmentTree.Data.QuadrantData(3, 0, 0, 0, 1)); // fourth point in the 3rd quadrant - FlatSegmentTree tree = new FlatSegmentTree(segments); - if (debug > 1) System.out.println(tree); - - SegmentTree.Data.QuadrantData query = tree.query(0, 3); - if (debug > 1) System.out.println("0->3: " + query + "\n"); - if (query.quad0!=1 || query.quad1!=1 || query.quad2!=1 || query.quad3!=1) { - System.err.println("Quad tree query error. query=0->3 result="+query); - handleError(tree); - return false; - } - - query = tree.query(2, 3); - if (debug > 1) System.out.println("2->3: " + query + "\n"); - if (query.quad0!=0 || query.quad1!=0 || query.quad2!=1 || query.quad3!=1) { - System.err.println("Quad tree query error. query=2->3 result="+query); - handleError(tree); - return false; - } - - query = tree.query(0, 2); - if (debug > 1) System.out.println("0->2: " + query + "\n"); - if (query.quad0!=1 || query.quad1!=1 || query.quad2!=1 || query.quad3!=0) { - System.err.println("Quad tree query error. query=0->2 result="+query); - handleError(tree); - return false; - } - - if (debug > 1) System.out.println(); - } - - { // Range Maximum Segment tree - if (debug > 1) System.out.println("Range Maximum Segment Tree."); - java.util.List> segments = new ArrayList>(); - segments.add(new SegmentTree.Data.RangeMaximumData(0, (Integer) 4)); - segments.add(new SegmentTree.Data.RangeMaximumData(1, (Integer) 2)); - segments.add(new SegmentTree.Data.RangeMaximumData(2, (Integer) 6)); - segments.add(new SegmentTree.Data.RangeMaximumData(3, (Integer) 3)); - segments.add(new SegmentTree.Data.RangeMaximumData(4, (Integer) 1)); - segments.add(new SegmentTree.Data.RangeMaximumData(5, (Integer) 5)); - segments.add(new SegmentTree.Data.RangeMaximumData(6, (Integer) 0)); - segments.add(new SegmentTree.Data.RangeMaximumData(7, 17, 7)); - segments.add(new SegmentTree.Data.RangeMaximumData(21, (Integer) 10)); - FlatSegmentTree> tree = new FlatSegmentTree>(segments, 3); - if (debug > 1) System.out.println(tree); - - SegmentTree.Data.RangeMaximumData query = tree.query(0, 7); - if (debug > 1) System.out.println("0->7: " + query + "\n"); - if (query.maximum!=7) { - System.err.println("Segment tree query error. query=0->7 result="+query); - handleError(tree); - return false; - } - - query = tree.query(0, 21); - if (debug > 1) System.out.println("0->21: " + query + "\n"); - if (query.maximum!=10) { - System.err.println("Segment tree query error. query=0->21 result="+query); - handleError(tree); - return false; - } - - query = tree.query(2, 5); - if (debug > 1) System.out.println("2->5: " + query + "\n"); - if (query.maximum!=6) { - System.err.println("Segment tree query error. query=2->5 result="+query); - handleError(tree); - return false; - } - - query = tree.query(7); // stabing - if (debug > 1) System.out.println("7: " + query + "\n"); - if (query.maximum!=7) { - System.err.println("Segment tree query error. query=7 result="+query); - handleError(tree); - return false; - } - - if (debug > 1) System.out.println(); - } - - { // Range Minimum Segment tree - if (debug > 1) System.out.println("Range Minimum Segment Tree."); - java.util.List> segments = new ArrayList>(); - segments.add(new SegmentTree.Data.RangeMinimumData(0, (Integer) 4)); - segments.add(new SegmentTree.Data.RangeMinimumData(1, (Integer) 2)); - segments.add(new SegmentTree.Data.RangeMinimumData(2, (Integer) 6)); - segments.add(new SegmentTree.Data.RangeMinimumData(3, (Integer) 3)); - segments.add(new SegmentTree.Data.RangeMinimumData(4, (Integer) 1)); - segments.add(new SegmentTree.Data.RangeMinimumData(5, (Integer) 5)); - segments.add(new SegmentTree.Data.RangeMinimumData(6, (Integer) 0)); - segments.add(new SegmentTree.Data.RangeMinimumData(17, (Integer) 7)); - FlatSegmentTree> tree = new FlatSegmentTree>(segments, 5); - if (debug > 1) System.out.println(tree); - - SegmentTree.Data.RangeMinimumData query = tree.query(0, 7); - if (debug > 1) System.out.println("0->7: " + query + "\n"); - if (query.minimum!=0) { - System.err.println("Segment tree query error. query=0->7 result="+query); - handleError(tree); - return false; - } - - query = tree.query(0, 17); - if (debug > 1) System.out.println("0->17: " + query + "\n"); - if (query.minimum!=0) { - System.err.println("Segment tree query error. query=0->17 result="+query); - handleError(tree); - return false; - } - - query = tree.query(1, 3); - if (debug > 1) System.out.println("1->3: " + query + "\n"); - if (query.minimum!=2) { - System.err.println("Segment tree query error. query=1->3 result="+query); - handleError(tree); - return false; - } - - query = tree.query(7); // stabbing - if (debug > 1) System.out.println("7: " + query + "\n"); - if (query.minimum!=null) { - System.err.println("Segment tree query error. query=7 result="+query); - handleError(tree); - return false; - } - - if (debug > 1) System.out.println(); - } - - { // Range Sum Segment tree - if (debug > 1) System.out.println("Range Sum Segment Tree."); - java.util.List> segments = new ArrayList>(); - segments.add(new SegmentTree.Data.RangeSumData(0, (Integer) 4)); - segments.add(new SegmentTree.Data.RangeSumData(1, (Integer) 2)); - segments.add(new SegmentTree.Data.RangeSumData(2, (Integer) 6)); - segments.add(new SegmentTree.Data.RangeSumData(3, (Integer) 3)); - segments.add(new SegmentTree.Data.RangeSumData(4, (Integer) 1)); - segments.add(new SegmentTree.Data.RangeSumData(5, (Integer) 5)); - segments.add(new SegmentTree.Data.RangeSumData(6, (Integer) 0)); - segments.add(new SegmentTree.Data.RangeSumData(17, (Integer) 7)); - FlatSegmentTree> tree = new FlatSegmentTree>(segments, 10); - if (debug > 1) System.out.println(tree); - - SegmentTree.Data.RangeSumData query = tree.query(0, 8); - if (debug > 1) System.out.println("0->8: " + query + "\n"); - if (query.sum != 21) { - System.err.println("Segment tree query error. query=0->8 result="+query); - handleError(tree); - return false; - } - - query = tree.query(0, 17); - if (debug > 1) System.out.println("0->17: " + query + "\n"); - if (query.sum != 28) { - System.err.println("Segment tree query error. query=0->17 result="+query); - handleError(tree); - return false; - } - - query = tree.query(2, 5); - if (debug > 1) System.out.println("2->5: " + query + "\n"); - if (query.sum != 15) { - System.err.println("Segment tree query error. query=2->5 result="+query); - handleError(tree); - return false; - } - - query = tree.query(10, 17); - if (debug > 1) System.out.println("10->17: " + query + "\n"); - if (query.sum != 7) { - System.err.println("Segment tree query error. query=10->17 result="+query); - handleError(tree); - return false; - } - - query = tree.query(16); // stabbing - if (debug > 1) System.out.println("16: " + query + "\n"); - if (query.sum != null) { - System.err.println("Segment tree query error. query=16 result="+query); - handleError(tree); - return false; - } - - query = tree.query(17); // stabbing - if (debug > 1) System.out.println("17: " + query + "\n"); - if (query.sum != 7) { - System.err.println("Segment tree query error. query=17 result="+query); - handleError(tree); - return false; - } - - if (debug > 1) System.out.println(); - } - - { // Interval Segment tree - if (debug > 1) System.out.println("Interval Segment Tree."); - final String RED = "RED"; - final String ORANGE = "ORANGE"; - final String GREEN = "GREEN"; - final String DARK_GREEN = "DARK_GREEN"; - final String BLUE = "BLUE"; - final String PURPLE = "PURPLE"; - final String BLACK = "BLACK"; - java.util.List> segments = new ArrayList>(); - segments.add((new SegmentTree.Data.IntervalData(2, 6, RED))); - segments.add((new SegmentTree.Data.IntervalData(3, 5, ORANGE))); - segments.add((new SegmentTree.Data.IntervalData(4, 11, GREEN))); - segments.add((new SegmentTree.Data.IntervalData(5, 10, DARK_GREEN))); - segments.add((new SegmentTree.Data.IntervalData(8, 12, BLUE))); - segments.add((new SegmentTree.Data.IntervalData(9, 14, PURPLE))); - segments.add((new SegmentTree.Data.IntervalData(13, 15, BLACK))); - DynamicSegmentTree> tree = new DynamicSegmentTree>(segments); - if (debug > 1) System.out.println(tree); - - SegmentTree.Data.IntervalData query = tree.query(2); // Stabbing - if (debug > 1) System.out.println("2: " + query); - if (!query.getData().contains(RED)) { - System.err.println("Segment tree query error. query=2 result="+query); - handleError(tree); - return false; - } - - query = tree.query(4); // Stabbing query - if (debug > 1) System.out.println("4: " + query); - if (!query.getData().contains(GREEN)) { - System.err.println("Segment tree query error. query=4 result="+query); - handleError(tree); - return false; - } - - query = tree.query(9); // Stabbing query - if (debug > 1) System.out.println("9: " + query); - if (!query.getData().contains(PURPLE)) { - System.err.println("Segment tree query error. query=9 result="+query); - handleError(tree); - return false; - } - - query = tree.query(1, 16); // Range query - if (debug > 1) System.out.println("1->16: " + query); - if (!query.getData().contains(RED) || - !query.getData().contains(ORANGE) || - !query.getData().contains(GREEN) || - !query.getData().contains(DARK_GREEN) || - !query.getData().contains(BLUE) || - !query.getData().contains(PURPLE) || - !query.getData().contains(BLACK) - ) { - System.err.println("Segment tree query error. query=1->16 result="+query); - handleError(tree); - return false; - } - - query = tree.query(7, 14); // Range query - if (debug > 1) System.out.println("7->14: " + query); - if (!query.getData().contains(GREEN) || - !query.getData().contains(DARK_GREEN) || - !query.getData().contains(BLUE) || - !query.getData().contains(PURPLE) || - !query.getData().contains(BLACK) - ) { - System.err.println("Segment tree query error. query=7->14 result="+query); - handleError(tree); - return false; - } - - query = tree.query(14, 15); // Range query - if (debug > 1) System.out.println("14->15: " + query); - if (!query.getData().contains(PURPLE) || - !query.getData().contains(BLACK) - ) { - System.err.println("Segment tree query error. query=14->15 result="+query); - handleError(tree); - return false; - } - - if (debug > 1) System.out.println(); - } - - { // Lifespan Interval Segment tree - if (debug > 1) System.out.println("Lifespan Interval Segment Tree."); - final String stravinsky = "Stravinsky"; - final String schoenberg = "Schoenberg"; - final String grieg = "Grieg"; - final String schubert = "Schubert"; - final String mozart = "Mozart"; - final String schuetz = "Schuetz"; - java.util.List> segments = new ArrayList>(); - segments.add((new SegmentTree.Data.IntervalData(1888, 1971, stravinsky))); - segments.add((new SegmentTree.Data.IntervalData(1874, 1951, schoenberg))); - segments.add((new SegmentTree.Data.IntervalData(1843, 1907, grieg))); - segments.add((new SegmentTree.Data.IntervalData(1779, 1828, schubert))); - segments.add((new SegmentTree.Data.IntervalData(1756, 1791, mozart))); - segments.add((new SegmentTree.Data.IntervalData(1585, 1672, schuetz))); - DynamicSegmentTree> tree = new DynamicSegmentTree>(segments, 25); - if (debug > 1) System.out.println(tree); - - SegmentTree.Data.IntervalData query = tree.query(1890); // Stabbing - if (debug > 1) System.out.println("1890: " + query); - if (!query.getData().contains(stravinsky) || - !query.getData().contains(schoenberg) || - !query.getData().contains(grieg) - ) { - System.err.println("Segment tree query error. query=1890 result="+query); - handleError(tree); - return false; - } - - query = tree.query(1909); // Stabbing query - if (debug > 1) System.out.println("1909: " + query); - if (!query.getData().contains(stravinsky) || - !query.getData().contains(schoenberg) - ) { - System.err.println("Segment tree query error. query=1909 result="+query); - handleError(tree); - return false; - } - - query = tree.query(1585); // Stabbing query - if (debug > 1) System.out.println("1585: " + query); - if (!query.getData().contains(schuetz)) { - System.err.println("Segment tree query error. query=1585 result="+query); - handleError(tree); - return false; - } - - query = tree.query(1792, 1903); // Range query - if (debug > 1) System.out.println("1792->1903: " + query); - if (!query.getData().contains(stravinsky) || - !query.getData().contains(schoenberg) || - !query.getData().contains(grieg) || - !query.getData().contains(schubert) - ) { - System.err.println("Segment tree query error. query=1792->1903 result="+query); - handleError(tree); - return false; - } - - query = tree.query(1776, 1799); // Range query - if (debug > 1) System.out.println("1776->1799: " + query); - if (!query.getData().contains(schubert) || - !query.getData().contains(mozart) - ) { - System.err.println("Segment tree query error. query=1776->1799 result="+query); - handleError(tree); - return false; - } - - if (debug > 1) System.out.println(); - } - - System.out.println("Segment Tree worked correctly."); - - return true; - } - - private static boolean testJavaSkipList() { - String sName = "Java's SkipList"; - NavigableSet sList = new ConcurrentSkipListSet(); - Collection lCollection = sList; - if(!testJavaCollection(lCollection,Type.Integer,sName)) return false; - return true; - } - - private static boolean testSkipList() { - String sName = "SkipList"; - SkipList sList = new SkipList(); - Collection lCollection = sList.toCollection(); - - if((validateStructure||validateContents) && !testSet(sList,sName)) return false; - if(!testJavaCollection(lCollection,Type.Integer,sName)) return false; - return true; - } - - private static boolean testSplayTree() { - String bstName = "Splay Tree"; - BinarySearchTree bst = new SplayTree(); - Collection bstCollection = bst.toCollection(); - - if((validateStructure||validateContents) && !testTree(bst,Type.Integer,bstName)) return false; - if(!testJavaCollection(bstCollection,Type.Integer,bstName)) return false; - - return true; - } - - private static boolean testArrayStack() { - String aName = "Stack [array]"; - Stack.ArrayStack aStack = new Stack.ArrayStack(); - Collection aCollection = aStack.toCollection(); - - if((validateStructure||validateContents) && !testStack(aStack,aName)) return false; - if(!testJavaCollection(aCollection,Type.Integer,aName)) return false; - return true; - } - - private static boolean testLinkedStack() { - String lName = "Stack [linked]"; - Stack.LinkedStack lStack = new Stack.LinkedStack(); - Collection lCollection = lStack.toCollection(); - - if((validateStructure||validateContents) && !testStack(lStack,lName)) return false; - if(!testJavaCollection(lCollection,Type.Integer,lName)) return false; - return true; - } - - private static boolean testSuffixTree() { - if (debug > 1) System.out.println("Suffix Tree."); - String bookkeeper = "bookkeeper"; - SuffixTree tree = new SuffixTree(bookkeeper); - if (debug > 1) System.out.println(tree.toString()); - if (debug > 1) System.out.println(tree.getSuffixes()); - - boolean exists = tree.doesSubStringExist(bookkeeper); - if (!exists) { - System.err.println("YIKES!! " + bookkeeper + " doesn't exists."); - handleError(tree); - return false; - } - - String failed = "booker"; - exists = tree.doesSubStringExist(failed); - if (exists) { - System.err.println("YIKES!! " + failed + " exists."); - handleError(tree); - return false; - } - - String pass = "kkee"; - exists = tree.doesSubStringExist(pass); - if (!exists) { - System.err.println("YIKES!! " + pass + " doesn't exists."); - handleError(tree); - return false; - } - - if (debug > 1) System.out.println(); - - return true; - } - - private static boolean testSuffixTrie() { - System.out.println("Suffix Trie."); - - String bookkeeper = "bookkeeper"; - SuffixTrie trie = new SuffixTrie(bookkeeper); - if (debug > 1) System.out.println(trie.toString()); - if (debug > 1) System.out.println(trie.getSuffixes()); - - boolean exists = trie.doesSubStringExist(bookkeeper); - if (!exists) { - System.err.println("YIKES!! " + bookkeeper + " doesn't exists."); - handleError(trie); - return false; - } - - String failed = "booker"; - exists = trie.doesSubStringExist(failed); - if (exists) { - System.err.println("YIKES!! " + failed + " exists."); - handleError(trie); - return false; - } - - String pass = "kkee"; - exists = trie.doesSubStringExist(pass); - if (!exists) { - System.err.println("YIKES!! " + pass + " doesn't exists."); - handleError(trie); - return false; - } - - System.out.println("Suffix Trie worked correctly."); - - if (debug > 1) System.out.println(); - - return true; - } - - private static boolean testTreap() { - String bstName = "Treap"; - BinarySearchTree bst = new Treap(); - Collection bstCollection = bst.toCollection(); - - if((validateStructure||validateContents) && !testTree(bst,Type.Integer,bstName)) return false; - if(!testJavaCollection(bstCollection,Type.Integer,bstName)) return false; - return true; - } - - private static boolean testTreeMap() { - String mapName = "TreeMap"; - TreeMap map = new TreeMap(); - java.util.Map jMap = map.toMap(); - - if((validateStructure||validateContents) && !testMap(map,Type.String,mapName)) return false; - if(!testJavaMap(jMap,Type.Integer,mapName)) return false; - return true; - } - - private static boolean testTrie() { - String bstName = "Trie"; - Trie bst = new Trie(); - Collection bstCollection = bst.toCollection(); - - if((validateStructure||validateContents) && !testTree(bst,Type.String,bstName)) return false; - if(!testJavaCollection(bstCollection,Type.String,bstName)) return false; - return true; - } - - private static boolean testTrieMap() { - String mapName = "TrieMap"; - TrieMap map = new TrieMap(); - java.util.Map jMap = map.toMap(); - - if((validateStructure||validateContents) && !testMap(map,Type.String,mapName)) return false; - if(!testJavaMap(jMap,Type.String,mapName)) return false; - return true; - } - - private static boolean testJavaSkipListMap() { - String mapName = "Java's SkipListMap"; - ConcurrentSkipListMap map = new ConcurrentSkipListMap(); - if(!testJavaMap(map,Type.Integer,mapName)) return false; - return true; - } - - private static boolean testSkipListMap() { - String mapName = "SkipListMap"; - SkipListMap map = new SkipListMap(); - java.util.Map jMap = map.toMap(); - - if((validateStructure||validateContents) && !testMap(map,Type.String,mapName)) return false; - if(!testJavaMap(jMap,Type.Integer,mapName)) return false; - return true; - } - - public static boolean testMap(IMap map, Type keyType, String name) { - for (int i = 0; i < unsorted.length; i++) { - Integer item = unsorted[i]; - K k = null; - V v = null; - if (keyType == Type.Integer) { - k = (K)item; - v = (V)String.valueOf(item); - } else if (keyType == Type.String) { - k = (K)String.valueOf(item); - v = (V)item; - } - V added = map.put(k,v); - if (validateStructure && (!map.validate() || (map.size() != (i+1)))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(map); - return false; - } - if (validateContents && (added!=null || !map.contains(k))) { - System.err.println(name+" YIKES!! " + item + " doesn't exists."); - handleError(map); - return false; - } - } - - K invalidKey = null; - if (keyType == Type.Integer) { - invalidKey = (K)INVALID; - } else if (keyType == Type.String) { - invalidKey = (K)String.valueOf(INVALID); - } - boolean contains = map.contains(invalidKey); - V removed = map.remove(invalidKey); - if (contains || (removed!=null)) { - System.err.println(name+" invalidity check. contains=" + contains + " removed=" + removed); - handleError(map); - return false; - } - - for (int i = 0; i < unsorted.length; i++) { - Integer item = unsorted[i]; - K k = null; - if (keyType == Type.Integer) { - k = (K)item; - } else if (keyType == Type.String) { - k = (K)String.valueOf(item); - } - removed = map.remove(k); - if (validateStructure && (!map.validate() || (map.size() != (unsorted.length-(i+1))))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(map); - return false; - } - if (validateContents && map.contains(k)) { - System.err.println(name+" YIKES!! " + item + " still exists."); - handleError(map); - return false; - } - } - - // Add half, remove a quarter, add three-quarters, remove all - int quarter = unsorted.length/4; - int half = unsorted.length/2; - for (int i = 0; i < half; i++) { - Integer item = unsorted[i]; - K k = null; - V v = null; - if (keyType == Type.Integer) { - k = (K)item; - v = (V)String.valueOf(item); - } else if (keyType == Type.String) { - k = (K)String.valueOf(item); - v = (V)item; - } - V added = map.put(k,v); - if (validateStructure && (!map.validate() || (map.size() != (i+1)))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(map); - return false; - } - if (validateContents && (added!=null || !map.contains(k))) { - System.err.println(name+" YIKES!! " + item + " doesn't exists."); - handleError(map); - return false; - } - } - for (int i = (half-1); i >= quarter; i--) { - Integer item = unsorted[i]; - K k = null; - if (keyType == Type.Integer) { - k = (K)item; - } else if (keyType == Type.String) { - k = (K)String.valueOf(item); - } - removed = map.remove(k); - if (validateStructure && (!map.validate() || (map.size() != i))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(map); - return false; - } - if (validateContents && (removed==null || map.contains(k))) { - System.err.println(name+" YIKES!! " + item + " still exists."); - handleError(map); - return false; - } - } - for (int i = quarter; i < unsorted.length; i++) { - Integer item = unsorted[i]; - K k = null; - V v = null; - if (keyType == Type.Integer) { - k = (K)item; - v = (V)String.valueOf(item); - } else if (keyType == Type.String) { - k = (K)String.valueOf(item); - v = (V)item; - } - V added = map.put(k,v); - if (validateStructure && (!map.validate() || (map.size() != (i+1)))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(map); - return false; - } - if (validateContents && (added!=null || !map.contains(k))) { - System.err.println(name+" YIKES!! " + item + " doesn't exists."); - handleError(map); - return false; - } - } - for (int i = unsorted.length-1; i >= 0; i--) { - Integer item = unsorted[i]; - K k = null; - if (keyType == Type.Integer) { - k = (K)item; - } else if (keyType == Type.String) { - k = (K)String.valueOf(item); - } - removed = map.remove(k); - if (validateStructure && (!map.validate() || (map.size() != i))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(map); - return false; - } - if (validateContents && (removed==null || map.contains(k))) { - System.err.println(name+" YIKES!! " + item + " still exists."); - handleError(map); - return false; - } - } - - if (validateStructure && (map.size() != 0)) { - System.err.println(name+" YIKES!! a size mismatch."); - handleError(map); - return false; - } - - return true; - } - - /** - * Tests the tree operations - * - * @param tree to test. - * @return True is works as a tree structure. - */ - public static > boolean testTree(ITree tree, Type type, String name) { - for (int i = 0; i < unsorted.length; i++) { - Integer value = unsorted[i]; - T item = null; - if (type == Type.Integer) { - item = (T)value; - } else if (type == Type.String) { - item = (T)String.valueOf(value); - } - boolean added = tree.add(item); - if (validateStructure && (!tree.validate() || (tree.size() != i+1))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(tree); - return false; - } - if (validateContents && (!added || !tree.contains(item))) { - System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); - handleError(tree); - return false; - } - } - - T invalidItem = null; - if (type == Type.Integer) { - invalidItem = (T)INVALID; - } else if (type == Type.String) { - invalidItem = (T)String.valueOf(INVALID); - } - boolean contains = tree.contains(invalidItem); - T removed = tree.remove(invalidItem); - if (contains || removed!=null) { - System.err.println(name+" invalidity check. contains=" + contains + " removed=" + removed); - handleError(tree); - return false; - } - - int size = tree.size(); - for (int i = 0; i < size; i++) { - Integer value = unsorted[i]; - T item = null; - if (type == Type.Integer) { - item = (T)value; - } else if (type == Type.String) { - item = (T)String.valueOf(value); - } - removed = tree.remove(item); - if (validateStructure && (!tree.validate() || (tree.size() != unsorted.length-(i+1)))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(tree); - return false; - } - if (validateContents && (removed==null || tree.contains(item))) { - System.err.println(name+" YIKES!! " + item + " still exists but it has been removed."); - handleError(tree); - return false; - } - } - - // Add half, remove a quarter, add three-quarters - int quarter = unsorted.length/4; - int half = unsorted.length/2; - for (int i = 0; i < half; i++) { - Integer value = unsorted[i]; - T item = null; - if (type == Type.Integer) { - item = (T)value; - } else if (type == Type.String) { - item = (T)String.valueOf(value); - } - boolean added = tree.add(item); - if (validateStructure && (!tree.validate() || (tree.size() != i+1))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(tree); - return false; - } - if (validateContents && (!added || !tree.contains(item))) { - System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); - handleError(tree); - return false; - } - } - for (int i = (half-1); i >= quarter; i--) { - Integer value = unsorted[i]; - T item = null; - if (type == Type.Integer) { - item = (T)value; - } else if (type == Type.String) { - item = (T)String.valueOf(value); - } - removed = tree.remove(item); - if (validateStructure && (!tree.validate() || (tree.size() != i))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(tree); - return false; - } - if (validateContents && (removed==null || tree.contains(item))) { - System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); - handleError(tree); - return false; - } - } - for (int i = quarter; i < unsorted.length; i++) { - Integer value = unsorted[i]; - T item = null; - if (type == Type.Integer) { - item = (T)value; - } else if (type == Type.String) { - item = (T)String.valueOf(value); - } - boolean added = tree.add(item); - if (validateStructure && (!tree.validate() || (tree.size() != i+1))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(tree); - return false; - } - if (validateContents && (!added || !tree.contains(item))) { - System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); - handleError(tree); - return false; - } - } - for (int i = unsorted.length-1; i >= 0; i--) { - Integer value = unsorted[i]; - T item = null; - if (type == Type.Integer) { - item = (T)value; - } else if (type == Type.String) { - item = (T)String.valueOf(value); - } - removed = tree.remove(item); - if (validateStructure && (!tree.validate() || (tree.size() != i))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(tree); - return false; - } - if (validateContents && (removed==null || tree.contains(item))) { - System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); - handleError(tree); - return false; - } - } - - if (validateStructure && (tree.size() != 0)) { - System.err.println(name+" YIKES!! a size mismatch."); - handleError(tree); - return false; - } - - return true; - } - - /** - * Tests the actual heap like operations - * - * @param heap to test. - * @return True is works as a heap structure. - */ - public static > boolean testHeap(IHeap heap, String name, BinaryHeap.Type type) { - for (int i = 0; i < unsorted.length; i++) { - T item = (T)unsorted[i]; - boolean added = heap.add(item); - if (validateStructure && (!heap.validate() || (heap.size() != i+1))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(heap); - return false; - } - if (validateContents && (!added || !heap.contains(item))) { - System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); - handleError(heap); - return false; - } - } - - boolean contains = heap.contains((T)INVALID); - T removed = heap.remove((T)INVALID); - if (contains || (removed!=null)) { - System.err.println(name+" invalidity check. contains=" + contains + " removed=" + removed); - handleError(heap); - return false; - } - - int size = heap.size(); - for (int i = 0; i < size; i++) { - T item = heap.removeHead(); - T correct = (T)((type == BinaryHeap.Type.MIN)?sorted[i]:sorted[sorted.length-(i+1)]); - if (validateStructure && (item.compareTo(correct)!=0)) { - System.err.println(name+" YIKES!! " + item + " does not match heap item."); - handleError(heap); - return false; - } - if (validateStructure && (!heap.validate() || (heap.size() != unsorted.length-(i+1)))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(heap); - return false; - } - if (validateContents && (item==null || heap.contains(item))) { - System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); - handleError(heap); - return false; - } - } - - // Add half, remove a quarter, add three-quarters, remove all - int quarter = unsorted.length/4; - int half = unsorted.length/2; - Integer[] halfArray = Arrays.copyOf(unsorted, half); - Arrays.sort(halfArray); - Integer[] quarterArray = new Integer[quarter]; - Integer[] sortedQuarterArray = new Integer[quarter]; //Needed for binary search - for (int i=0; i=0) { - threeQuartersArray[idx++] = i; - } else { - index = Arrays.binarySearch(halfArray, i); - if (index<0) threeQuartersArray[idx++] = i; - } - } else { - if (index>=0) { - threeQuartersArray[idx++] = i; - } else { - index = Arrays.binarySearch(halfArray, i); - if (index<0) threeQuartersArray[idx++] = i; - } - } - } - for (int i = 0; i < half; i++) { - T item = (T)unsorted[i]; - boolean added = heap.add(item); - if (validateStructure && (!heap.validate() || (heap.size() != i+1))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(heap); - return false; - } - if (validateContents && (!added || !heap.contains(item))) { - System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); - handleError(heap); - return false; - } - } - for (int i = 0; i < quarter; i++) { - T item = heap.removeHead(); - T correct = (T)quarterArray[i]; - if (validateStructure && (item.compareTo(correct)!=0)) { - System.err.println(name+" YIKES!! " + item + " does not match heap item."); - handleError(heap); - return false; - } - if (validateStructure && (!heap.validate() || (heap.size() != half-(i+1)))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(heap); - return false; - } - if (validateContents && (item==null || heap.contains(item))) { - System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); - handleError(heap); - return false; - } - } - for (int i = 0; i < threeQuartersArray.length; i++) { - T item = (T)threeQuartersArray[i]; - boolean added = heap.add(item); - if (validateStructure && (!heap.validate() || (heap.size() != (half-quarter)+(i+1)))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(heap); - return false; - } - if (validateContents && (!added || !heap.contains(item))) { - System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); - handleError(heap); - return false; - } - } - for (int i = 0; i < sorted.length; i++) { - T item = heap.removeHead(); - T correct = (T)((type == BinaryHeap.Type.MIN)?sorted[i]:sorted[sorted.length-(i+1)]); - if (validateStructure && (item.compareTo(correct)!=0)) { - System.err.println(name+" YIKES!! " + item + " does not match heap item."); - handleError(heap); - return false; - } - if (validateStructure && (!heap.validate() || (heap.size() != sorted.length-(i+1)))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(heap); - return false; - } - if (validateContents && (item==null || heap.contains(item))) { - System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); - handleError(heap); - return false; - } - } - - if (validateStructure && (heap.size() != 0)) { - System.err.println(name+" YIKES!! a size mismatch."); - handleError(heap); - return false; - } - - return true; - } - - /** - * Tests the actual queue like (FIFO) operations - * - * @param queue to test. - * @return True is works as a FIFO structure. - */ - public static > boolean testQueue(IQueue queue, String name) { - for (int i = 0; i < unsorted.length; i++) { - T item = (T)unsorted[i]; - boolean added = queue.offer(item); - if (validateStructure && (!queue.validate() || (queue.size() != i+1))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(queue); - return false; - } - if (validateContents && (!added || !queue.contains(item))) { - System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); - handleError(queue); - return false; - } - } - - boolean contains = queue.contains((T)INVALID); - boolean removed = queue.remove((T)INVALID); - if (contains || removed) { - System.err.println(name+" invalidity check. contains=" + contains + " removed=" + removed); - handleError(queue); - return false; - } - - int size = queue.size(); - for (int i = 0; i < size; i++) { - T item = queue.poll(); - T correct = (T)unsorted[i]; - if (validateStructure && (item.compareTo(correct)!=0)) { - System.err.println(name+" YIKES!! " + item + " does not match FIFO item."); - handleError(queue); - return false; - } - if (validateStructure && (!queue.validate() || (queue.size() != unsorted.length-(i+1)))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(queue); - return false; - } - if (validateContents && (item==null || queue.contains(item))) { - System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); - handleError(queue); - return false; - } - } - - // Add half, remove a quarter, add three-quarters - int quarter = unsorted.length/4; - int half = unsorted.length/2; - int changeOver = half-quarter; - for (int i = 0; i < half; i++) { - T item = (T)unsorted[i]; - boolean added = queue.offer(item); - if (validateStructure && (!queue.validate() || (queue.size() != i+1))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(queue); - return false; - } - if (validateContents && (!added || !queue.contains(item))) { - System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); - handleError(queue); - return false; - } - } - for (int i = 0; i < quarter; i++) { - T item = queue.poll(); - T correct = (T)unsorted[i]; - if (validateStructure && (item.compareTo(correct)!=0)) { - System.err.println(name+" YIKES!! " + item + " does not match FIFO item."); - handleError(queue); - return false; - } - if (validateStructure && (!queue.validate() || (queue.size() != (half-(i+1))))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(queue); - return false; - } - if (validateContents && (item==null || queue.contains(item))) { - System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); - handleError(queue); - return false; - } - } - for (int i = 0; i < quarter; i++) { - T item = (T)unsorted[i]; - boolean added = queue.offer(item); - if (validateStructure && (!queue.validate() || (queue.size() != ((half-quarter)+(i+1))))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(queue); - return false; - } - if (validateContents && (!added || !queue.contains(item))) { - System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); - handleError(queue); - return false; - } - } - for (int i = half; i < unsorted.length; i++) { - T item = (T)unsorted[i]; - boolean added = queue.offer(item); - if (validateStructure && (!queue.validate() || (queue.size() != (i+1)))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(queue); - return false; - } - if (validateContents && (!added || !queue.contains(item))) { - System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); - handleError(queue); - return false; - } - } - for (int i = 0; i < unsorted.length; i++) { - T item = queue.poll(); - int idx = i; - if (idx < changeOver) { - idx = quarter+i; - } else if (idx>=changeOver && idx> boolean testStack(IStack stack, String name) { - for (int i = 0; i < unsorted.length; i++) { - T item = (T)unsorted[i]; - boolean added = stack.push(item); - if (validateStructure && (!stack.validate() || (stack.size() != i+1))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(stack); - return false; - } - if (validateContents && (!added || item==null || !stack.contains(item))) { - System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); - handleError(stack); - return false; - } - } - - boolean contains = stack.contains((T)INVALID); - boolean removed = stack.remove((T)INVALID); - if (contains || removed) { - System.err.println(name+" invalidity check. contains=" + contains + " removed=" + removed); - handleError(stack); - return false; - } - - int size = stack.size(); - for (int i = 0; i < size; i++) { - T item = stack.pop(); - T correct = (T)unsorted[unsorted.length-(i+1)]; - if (validateStructure && (item.compareTo(correct)!=0)) { - System.err.println(name+" YIKES!! " + item + " does not match LIFO item."); - handleError(stack); - return false; - } - if (validateStructure && (!stack.validate() || (stack.size() != unsorted.length-(i+1)))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(stack); - return false; - } - if (validateContents && (item==null || stack.contains(item))) { - System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); - handleError(stack); - return false; - } - } - - // Add half, remove a quarter, add three-quarters, remove all - int quarter = unsorted.length/4; - int half = unsorted.length/2; - for (int i = 0; i < half; i++) { - T item = (T)unsorted[i]; - boolean added = stack.push(item); - if (validateStructure && (!stack.validate() || (stack.size() != i+1))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(stack); - return false; - } - if (validateContents && (!added || item==null || !stack.contains(item))) { - System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); - handleError(stack); - return false; - } - } - for (int i = (half-1); i >= quarter; i--) { - T item = stack.pop(); - T correct = (T)unsorted[i]; - if (validateStructure && (item.compareTo(correct)!=0)) { - System.err.println(name+" YIKES!! " + item + " does not match LIFO item."); - handleError(stack); - return false; - } - if (validateStructure && (!stack.validate() || (stack.size() != i))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(stack); - return false; - } - if (validateContents && (item==null || stack.contains(item))) { - System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); - handleError(stack); - return false; - } - } - for (int i = quarter; i < unsorted.length; i++) { - T item = (T)unsorted[i]; - boolean added = stack.push(item); - if (validateStructure && (!stack.validate() || (stack.size() != i+1))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(stack); - return false; - } - if (validateContents && (!added || item==null || !stack.contains(item))) { - System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); - handleError(stack); - return false; - } - } - for (int i = unsorted.length-1; i >= 0; i--) { - T item = stack.pop(); - T correct = (T)unsorted[i]; - if (validateStructure && (item.compareTo(correct)!=0)) { - System.err.println(name+" YIKES!! " + item + " does not match LIFO item."); - handleError(stack); - return false; - } - if (validateStructure && (!stack.validate() || (stack.size() != i))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(stack); - return false; - } - if (validateContents && (item==null || stack.contains(item))) { - System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); - handleError(stack); - return false; - } - } - - if (validateStructure && (stack.size() != 0)) { - System.err.println(name+" YIKES!! a size mismatch."); - handleError(stack); - return false; - } - - return true; - } - - /** - * Tests the actual list operations - * - * @param list to test. - * @return True is works as a list structure. - */ - public static > boolean testList(IList list, String name) { - for (int i = 0; i < unsorted.length; i++) { - T item = (T)unsorted[i]; - boolean added = list.add(item); - if (validateStructure && (!list.validate() || (list.size() != i+1))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(list); - return false; - } - if (validateContents && (!added || !list.contains(item))) { - System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); - handleError(list); - return false; - } - } - - boolean contains = list.contains((T)INVALID); - boolean removed = list.remove((T)INVALID); - if (contains || removed) { - System.err.println(name+" invalidity check. contains=" + contains + " removed=" + removed); - handleError(list); - return false; - } - - int size = list.size(); - for (int i = 0; i < size; i++) { - T item = (T)unsorted[i]; - removed = list.remove(item); - if (validateStructure && (!list.validate() || (list.size() != unsorted.length-(i+1)))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(list); - return false; - } - if (validateContents && (!removed || list.contains(item))) { - System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); - handleError(list); - return false; - } - } - - // Add half, remove a quarter, add three-quarters, remove all - int quarter = unsorted.length/4; - int half = unsorted.length/2; - for (int i = 0; i < half; i++) { - T item = (T)unsorted[i]; - boolean added = list.add(item); - if (validateStructure && (!list.validate() || (list.size() != i+1))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(list); - return false; - } - if (validateContents && (!added || !list.contains(item))) { - System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); - handleError(list); - return false; - } - } - for (int i = (half-1); i >= quarter; i--) { - T item = (T)unsorted[i]; - removed = list.remove(item); - if (validateStructure && (!list.validate() || (list.size() != i))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(list); - return false; - } - if (validateContents && (!removed || list.contains(item))) { - System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); - handleError(list); - return false; - } - } - for (int i = quarter; i < unsorted.length; i++) { - T item = (T)unsorted[i]; - boolean added = list.add(item); - if (validateStructure && (!list.validate() || (list.size() != i+1))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(list); - return false; - } - if (validateContents && (!added || !list.contains(item))) { - System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); - handleError(list); - return false; - } - } - for (int i = unsorted.length-1; i >= 0; i--) { - T item = (T)unsorted[i]; - removed = list.remove(item); - if (validateStructure && (!list.validate() || (list.size() != i))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(list); - return false; - } - if (validateContents && (!removed || list.contains(item))) { - System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); - handleError(list); - return false; - } - } - - if (validateStructure && (list.size() != 0)) { - System.err.println(name+" YIKES!! a size mismatch."); - handleError(list); - return false; - } - - return true; - } - - /** - * Tests the actual set operations - * - * @param set to test. - * @return True is works as a set structure. - */ - public static > boolean testSet(ISet set, String name) { - for (int i = 0; i < unsorted.length; i++) { - T item = (T)unsorted[i]; - boolean added = set.add(item); - if (validateStructure && (!set.validate() || (set.size() != i+1))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(set); - return false; - } - if (validateContents && (!added || !set.contains(item))) { - System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); - handleError(set); - return false; - } - } - - boolean contains = set.contains((T)INVALID); - boolean removed = set.remove((T)INVALID); - if (contains || removed) { - System.err.println(name+" invalidity check. contains=" + contains + " removed=" + removed); - handleError(set); - return false; - } - - int size = set.size(); - for (int i = 0; i < size; i++) { - T item = (T)unsorted[i]; - removed = set.remove(item); - if (validateStructure && (!set.validate() || (set.size() != unsorted.length-(i+1)))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(set); - return false; - } - if (validateContents && (!removed || set.contains(item))) { - System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); - handleError(set); - return false; - } - } - - // Add half, remove a quarter, add three-quarters, remove all - int quarter = unsorted.length/4; - int half = unsorted.length/2; - for (int i = 0; i < half; i++) { - T item = (T)unsorted[i]; - boolean added = set.add(item); - if (validateStructure && (!set.validate() || (set.size() != i+1))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(set); - return false; - } - if (validateContents && (!added || !set.contains(item))) { - System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); - handleError(set); - return false; - } - } - for (int i = (half-1); i >= quarter; i--) { - T item = (T)unsorted[i]; - removed = set.remove(item); - if (validateStructure && (!set.validate() || (set.size() != i))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(set); - return false; - } - if (validateContents && (!removed || set.contains(item))) { - System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); - handleError(set); - return false; - } - } - for (int i = quarter; i < unsorted.length; i++) { - T item = (T)unsorted[i]; - boolean added = set.add(item); - if (validateStructure && (!set.validate() || (set.size() != i+1))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(set); - return false; - } - if (validateContents && (!added || !set.contains(item))) { - System.err.println(name+" YIKES!! " + item + " doesn't exists but has been added."); - handleError(set); - return false; - } - } - for (int i = unsorted.length-1; i >= 0; i--) { - T item = (T)unsorted[i]; - removed = set.remove(item); - if (validateStructure && (!set.validate() || (set.size() != i))) { - System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); - handleError(set); - return false; - } - if (validateContents && (!removed || set.contains(item))) { - System.err.println(name+" YIKES!! " + item + " still exists but it has been remove."); - handleError(set); - return false; - } - } - - if (validateStructure && (set.size() != 0)) { - System.err.println(name+" YIKES!! a size mismatch."); - handleError(set); - return false; - } - - return true; - } - - public static > boolean testJavaCollection(Collection collection, Type type, String name) { - // Make sure the collection is empty - if (!collection.isEmpty()) { - System.err.println(name+" initial isEmpty() failed."); - handleError(collection); - return false; - } - if (collection.size()!=0) { - System.err.println(name+" initial size() failed."); - handleError(collection); - return false; - } - - long sortedCount = 0; - long unsortedCount = 0; - - long addTime = 0L; - long removeTime = 0L; - - long beforeAddTime = 0L; - long afterAddTime = 0L; - long beforeRemoveTime = 0L; - long afterRemoveTime = 0L; - - long memory = 0L; - - long beforeMemory = 0L; - long afterMemory = 0L; - - long lookupTime = 0L; - - long beforeLookupTime = 0L; - long afterLookupTime = 0L; - - if (debug > 1) System.out.println(name); - testNames[testIndex] = name; - - unsortedCount++; - { // UNSORTED: Add and remove in order (from index zero to length) - beforeMemory = 0L; - afterMemory = 0L; - beforeAddTime = 0L; - afterAddTime = 0L; - if (debugMemory) beforeMemory = DataStructures.getMemoryUse(); - if (debugTime) beforeAddTime = System.nanoTime(); - for (int i = 0; i < unsorted.length; i++) { - T item = null; - if (type==Type.Integer) { - item = (T)unsorted[i]; - } else if (type==Type.String) { - item = (T)String.valueOf(unsorted[i]); - } - boolean added = collection.add(item); - if (!added) { - System.err.println(name+" unsorted add failed."); - handleError(collection); - return false; - } - } - if (debugTime) { - afterAddTime = System.nanoTime(); - addTime += afterAddTime - beforeAddTime; - if (debug > 0) System.out.println(name+" unsorted add time = " + (addTime / unsortedCount) + " ns"); - } - if (debugMemory) { - afterMemory = DataStructures.getMemoryUse(); - memory += afterMemory - beforeMemory; - if (debug > 0) System.out.println(name+" unsorted memory use = " + (memory / (unsortedCount+sortedCount)) + " bytes"); - } - - if (debug > 1) System.out.println(collection.toString()); - - if (validateIterator && !testIterator(collection.iterator())) { - System.err.println(name+" unsorted iterator failed."); - handleError(collection); - return false; - } - - beforeLookupTime = 0L; - afterLookupTime = 0L; - if (debugTime) beforeLookupTime = System.nanoTime(); - for (int i = 0; i < unsorted.length; i++) { - T item = null; - if (type==Type.Integer) { - item = (T)unsorted[i]; - } else if (type==Type.String) { - item = (T)String.valueOf(unsorted[i]); - } - boolean contains = collection.contains(item); - if (!contains) { - System.err.println(name+" unsorted contains failed."); - handleError(collection); - return false; - } - } - if (debugTime) { - afterLookupTime = System.nanoTime(); - lookupTime += afterLookupTime - beforeLookupTime; - if (debug > 0) System.out.println(name+" unsorted lookup time = " + (lookupTime / (unsortedCount+sortedCount)) + " ns"); - } - - beforeRemoveTime = 0L; - afterRemoveTime = 0L; - if (debugTime) beforeRemoveTime = System.nanoTime(); - for (int i = 0; i < unsorted.length; i++) { - T item = null; - if (type==Type.Integer) { - item = (T)unsorted[i]; - } else if (type==Type.String) { - item = (T)String.valueOf(unsorted[i]); - } - boolean removed = collection.remove(item); - if (!removed) { - System.err.println(name+" unsorted remove failed."); - handleError(collection); - return false; - } - } - if (debugTime) { - afterRemoveTime = System.nanoTime(); - removeTime += afterRemoveTime - beforeRemoveTime; - if (debug > 0) System.out.println(name+" unsorted remove time = " + (removeTime / unsortedCount) + " ns"); - } - - if (!collection.isEmpty()) { - System.err.println(name+" unsorted isEmpty() failed."); - handleError(collection); - return false; - } - if (collection.size()!=0) { - System.err.println(name+" unsorted size() failed."); - handleError(collection); - return false; - } - - if (validateIterator && collection instanceof java.util.List && !testListIterator(((java.util.List)collection).listIterator())) { - System.err.println(name+" unsorted list iterator failed."); - handleError(collection); - return false; - } - } - - unsortedCount++; - { // UNSORTED: Add in reverse (from index length-1 to zero) order and then remove in order (from index zero to length) - beforeMemory = 0L; - afterMemory = 0L; - beforeAddTime = 0L; - afterAddTime = 0L; - if (debugMemory) beforeMemory = DataStructures.getMemoryUse(); - if (debugTime) beforeAddTime = System.nanoTime(); - for (int i = unsorted.length - 1; i >= 0; i--) { - T item = null; - if (type==Type.Integer) { - item = (T)unsorted[i]; - } else if (type==Type.String) { - item = (T)String.valueOf(unsorted[i]); - } - boolean added = collection.add(item); - if (!added) { - System.err.println(name+" unsorted add failed."); - handleError(collection); - return false; - } - } - if (debugTime) { - afterAddTime = System.nanoTime(); - addTime += afterAddTime - beforeAddTime; - if (debug > 0) System.out.println(name+" unsorted add time = " + (addTime / unsortedCount) + " ns"); - } - if (debugMemory) { - afterMemory = DataStructures.getMemoryUse(); - memory += afterMemory - beforeMemory; - if (debug > 0) System.out.println(name+" unsorted memory use = " + (memory / (unsortedCount+sortedCount)) + " bytes"); - } - - if (debug > 1) System.out.println(collection.toString()); - - if (validateIterator && !testIterator(collection.iterator())) { - System.err.println(name+" unsorted iterator failed."); - handleError(collection); - return false; - } - - beforeLookupTime = 0L; - afterLookupTime = 0L; - if (debugTime) beforeLookupTime = System.nanoTime(); - for (int i = 0; i < unsorted.length; i++) { - T item = null; - if (type==Type.Integer) { - item = (T)unsorted[i]; - } else if (type==Type.String) { - item = (T)String.valueOf(unsorted[i]); - } - boolean contains = collection.contains(item); - if (!contains) { - System.err.println(name+" unsorted contains failed."); - handleError(collection); - return false; - } - } - if (debugTime) { - afterLookupTime = System.nanoTime(); - lookupTime += afterLookupTime - beforeLookupTime; - if (debug > 0) System.out.println(name+" unsorted lookup time = " + (lookupTime / (unsortedCount+sortedCount)) + " ns"); - } - - beforeRemoveTime = 0L; - afterRemoveTime = 0L; - if (debugTime) beforeRemoveTime = System.nanoTime(); - for (int i = 0; i < unsorted.length; i++) { - T item = null; - if (type==Type.Integer) { - item = (T)unsorted[i]; - } else if (type==Type.String) { - item = (T)String.valueOf(unsorted[i]); - } - boolean removed = collection.remove(item); - if (!removed) { - System.err.println(name+" unsorted remove failed."); - handleError(collection); - return false; - } - } - if (debugTime) { - afterRemoveTime = System.nanoTime(); - removeTime += afterRemoveTime - beforeRemoveTime; - if (debug > 0) System.out.println(name+" unsorted remove time = " + (removeTime / unsortedCount) + " ns"); - } - - if (!collection.isEmpty()) { - System.err.println(name+" unsorted isEmpty() failed."); - handleError(collection); - return false; - } - if (collection.size()!=0) { - System.err.println(name+" unsorted size() failed."); - handleError(collection); - return false; - } - } - - long addSortedTime = 0L; - long removeSortedTime = 0L; - - long beforeAddSortedTime = 0L; - long afterAddSortedTime = 0L; - - long beforeRemoveSortedTime = 0L; - long afterRemoveSortedTime = 0L; - - sortedCount++; - { // SORTED: Add and remove in order (from index zero to length) - beforeMemory = 0L; - afterMemory = 0L; - beforeAddSortedTime = 0L; - afterAddSortedTime = 0L; - if (debugMemory) beforeMemory = DataStructures.getMemoryUse(); - if (debugTime) beforeAddSortedTime = System.nanoTime(); - for (int i = 0; i < sorted.length; i++) { - T item = null; - if (type==Type.Integer) { - item = (T)sorted[i]; - } else if (type==Type.String) { - item = (T)String.valueOf(sorted[i]); - } - boolean added = collection.add(item); - if (!added) { - System.err.println(name+" sorted add failed."); - handleError(collection); - return false; - } - } - if (debugTime) { - afterAddSortedTime = System.nanoTime(); - addSortedTime += afterAddSortedTime - beforeAddSortedTime; - if (debug > 0) System.out.println(name+" sorted add time = " + (addSortedTime / sortedCount) + " ns"); - } - if (debugMemory) { - afterMemory = DataStructures.getMemoryUse(); - memory += afterMemory - beforeMemory; - if (debug > 0) System.out.println(name+" sorted memory use = " + (memory / (unsortedCount+sortedCount)) + " bytes"); - } - - if (debug > 1) System.out.println(collection.toString()); - - if (validateIterator && !testIterator(collection.iterator())) { - System.err.println(name+" sorted iterator failed."); - handleError(collection); - return false; - } - - beforeLookupTime = 0L; - afterLookupTime = 0L; - if (debugTime) beforeLookupTime = System.nanoTime(); - for (int i = 0; i < unsorted.length; i++) { - T item = null; - if (type==Type.Integer) { - item = (T)sorted[i]; - } else if (type==Type.String) { - item = (T)String.valueOf(sorted[i]); - } - boolean contains = collection.contains(item); - if (!contains) { - System.err.println(name+" sorted contains failed."); - handleError(collection); - return false; - } - } - if (debugTime) { - afterLookupTime = System.nanoTime(); - lookupTime += afterLookupTime - beforeLookupTime; - if (debug > 0) System.out.println(name+" sorted lookup time = " + (lookupTime / (unsortedCount+sortedCount)) + " ns"); - } - - beforeRemoveSortedTime = 0L; - afterRemoveSortedTime = 0L; - if (debugTime) beforeRemoveSortedTime = System.nanoTime(); - for (int i = 0; i < sorted.length; i++) { - T item = null; - if (type==Type.Integer) { - item = (T)sorted[i]; - } else if (type==Type.String) { - item = (T)String.valueOf(sorted[i]); - } - boolean removed = collection.remove(item); - if (!removed) { - System.err.println(name+" sorted remove failed."); - handleError(collection); - return false; - } - } - if (debugTime) { - afterRemoveSortedTime = System.nanoTime(); - removeSortedTime += afterRemoveSortedTime - beforeRemoveSortedTime; - if (debug > 0) System.out.println(name+" sorted remove time = " + (removeSortedTime / sortedCount) + " ns"); - } - - if (!collection.isEmpty()) { - System.err.println(name+" sorted isEmpty() failed."); - handleError(collection); - return false; - } - if (collection.size()!=0) { - System.err.println(name+" sorted size() failed."); - handleError(collection); - return false; - } - - if (validateIterator && collection instanceof java.util.List && !testListIterator(((java.util.List)collection).listIterator())) { - System.err.println(name+" sorted list iterator failed."); - handleError(collection); - return false; - } - } - - sortedCount++; - { // SORTED: Add in order (from index zero to length) and then remove in reverse (from index length-1 to zero) order - beforeMemory = 0L; - afterMemory = 0L; - beforeAddSortedTime = 0L; - afterAddSortedTime = 0L; - if (debugMemory) beforeMemory = DataStructures.getMemoryUse(); - if (debugTime) beforeAddSortedTime = System.nanoTime(); - for (int i = 0; i < sorted.length; i++) { - T item = null; - if (type==Type.Integer) { - item = (T)sorted[i]; - } else if (type==Type.String) { - item = (T)String.valueOf(sorted[i]); - } - boolean added = collection.add(item); - if (!added) { - System.err.println(name+" sorted add failed."); - handleError(collection); - return false; - } - } - if (debugTime) { - afterAddSortedTime = System.nanoTime(); - addSortedTime += afterAddSortedTime - beforeAddSortedTime; - if (debug > 0) System.out.println(name+" sorted add time = " + (addSortedTime / sortedCount) + " ns"); - } - if (debugMemory) { - afterMemory = DataStructures.getMemoryUse(); - memory += afterMemory - beforeMemory; - if (debug > 0) System.out.println(name+" sorted memory use = " + (memory / (unsortedCount+sortedCount)) + " bytes"); - } - - if (debug > 1) System.out.println(collection.toString()); - - if (validateIterator && !testIterator(collection.iterator())) { - System.err.println(name+" sorted iterator failed."); - handleError(collection); - return false; - } - - beforeLookupTime = 0L; - afterLookupTime = 0L; - if (debugTime) beforeLookupTime = System.nanoTime(); - for (int i = 0; i < unsorted.length; i++) { - T item = null; - if (type==Type.Integer) { - item = (T)sorted[i]; - } else if (type==Type.String) { - item = (T)String.valueOf(sorted[i]); - } - boolean contains = collection.contains(item); - if (!contains) { - System.err.println(name+" sorted contains failed."); - handleError(collection); - return false; - } - } - if (debugTime) { - afterLookupTime = System.nanoTime(); - lookupTime += afterLookupTime - beforeLookupTime; - if (debug > 0) System.out.println(name+" sorted lookup time = " + (lookupTime / (unsortedCount+sortedCount)) + " ns"); - } - - beforeRemoveSortedTime = 0L; - afterRemoveSortedTime = 0L; - if (debugTime) beforeRemoveSortedTime = System.nanoTime(); - for (int i = sorted.length - 1; i >= 0; i--) { - T item = null; - if (type==Type.Integer) { - item = (T)sorted[i]; - } else if (type==Type.String) { - item = (T)String.valueOf(sorted[i]); - } - boolean removed = collection.remove(item); - if (!removed) { - System.err.println(name+" sorted remove failed."); - handleError(collection); - return false; - } - } - if (debugTime) { - afterRemoveSortedTime = System.nanoTime(); - removeSortedTime += afterRemoveSortedTime - beforeRemoveSortedTime; - if (debug > 0) System.out.println(name+" sorted remove time = " + (removeSortedTime / sortedCount) + " ns"); - } - - if (!collection.isEmpty()) { - System.err.println(name+" sorted isEmpty() failed."); - handleError(collection); - return false; - } - if (collection.size()!=0) { - System.err.println(name+" sorted size() failed."); - handleError(collection); - return false; - } - - if (validateIterator && collection instanceof java.util.List && !testListIterator(((java.util.List)collection).listIterator())) { - System.err.println(name+" sorted list iterator failed."); - handleError(collection); - return false; - } - } - - if (testResults[testIndex] == null) testResults[testIndex] = new long[6]; - testResults[testIndex][0] += addTime / unsortedCount; - testResults[testIndex][1] += removeTime / unsortedCount; - testResults[testIndex][2] += addSortedTime / sortedCount; - testResults[testIndex][3] += removeSortedTime / sortedCount; - testResults[testIndex][4] += lookupTime / (unsortedCount + sortedCount); - testResults[testIndex++][5] += memory / (unsortedCount + sortedCount); - - if (debug > 1) System.out.println(); - - return true; - } - - public static boolean testJavaMap(java.util.Map map, Type keyType, String name) { - // Make sure the map is empty - if (!map.isEmpty()) { - System.err.println(name+" initial isEmpty() failed."); - handleError(map); - return false; - } - if (map.size()!=0) { - System.err.println(name+" initial size() failed."); - handleError(map); - return false; - } - - long sortedCount = 0; - long unsortedCount = 0; - - long addTime = 0L; - long removeTime = 0L; - - long beforeAddTime = 0L; - long afterAddTime = 0L; - long beforeRemoveTime = 0L; - long afterRemoveTime = 0L; - - long memory = 0L; - - long beforeMemory = 0L; - long afterMemory = 0L; - - long lookupTime = 0L; - - long beforeLookupTime = 0L; - long afterLookupTime = 0L; - - if (debug > 1) System.out.println(name); - testNames[testIndex] = name; - - unsortedCount++; - { - beforeMemory = 0L; - afterMemory = 0L; - beforeAddTime = 0L; - afterAddTime = 0L; - if (debugMemory) beforeMemory = DataStructures.getMemoryUse(); - if (debugTime) beforeAddTime = System.nanoTime(); - for (int i = 0; i < unsorted.length; i++) { - Integer item = unsorted[i]; - K k = null; - V v = null; - if (keyType == Type.Integer) { - k = (K)item; - v = (V)String.valueOf(item); - } else if (keyType == Type.String) { - k = (K)String.valueOf(item); - v = (V)item; - } - map.put(k, v); - } - if (debugTime) { - afterAddTime = System.nanoTime(); - addTime += afterAddTime - beforeAddTime; - if (debug > 0) System.out.println(name+" unsorted add time = " + (addTime / unsortedCount) + " ns"); - } - if (debugMemory) { - afterMemory = DataStructures.getMemoryUse(); - memory += afterMemory - beforeMemory; - if (debug > 0) System.out.println(name+" unsorted memory use = " + (memory / (unsortedCount+sortedCount)) + " bytes"); - } - - K invalidKey = null; - if (keyType == Type.Integer) { - invalidKey = (K)INVALID; - } else if (keyType == Type.String) { - invalidKey = (K)String.valueOf(INVALID); - } - boolean contains = map.containsKey(invalidKey); - V removed = map.remove(invalidKey); - if (contains || (removed!=null)) { - System.err.println(name+" unsorted invalidity check. contains=" + contains + " removed=" + removed); - return false; - } - - if (debug > 1) System.out.println(map.toString()); - - beforeLookupTime = 0L; - afterLookupTime = 0L; - if (debugTime) beforeLookupTime = System.nanoTime(); - for (Integer item : unsorted) { - K k = null; - if (keyType == Type.Integer) { - k = (K)item; - } else if (keyType == Type.String) { - k = (K)String.valueOf(item); - } - map.containsKey(k); - } - if (debugTime) { - afterLookupTime = System.nanoTime(); - lookupTime += afterLookupTime - beforeLookupTime; - if (debug > 0) System.out.println(name+" unsorted lookup time = " + (lookupTime / (unsortedCount+sortedCount)) + " ns"); - } - - if (debugTime) beforeRemoveTime = System.nanoTime(); - for (int i = 0; i < unsorted.length; i++) { - Integer item = unsorted[i]; - K k = null; - if (keyType == Type.Integer) { - k = (K)item; - } else if (keyType == Type.String) { - k = (K)String.valueOf(item); - } - removed = map.remove(k); - if (removed==null) { - System.err.println(name+" unsorted invalidity check. removed=" + removed); - return false; - } - - } - if (debugTime) { - afterRemoveTime = System.nanoTime(); - removeTime += afterRemoveTime - beforeRemoveTime; - if (debug > 0) System.out.println(name+" unsorted remove time = " + (removeTime / unsortedCount) + " ns"); - } - - if (validateIterator && !testMapEntrySet(map,keyType)) return false; - - if (!map.isEmpty()) { - System.err.println(name+" unsorted isEmpty() failed."); - handleError(map); - return false; - } - if (map.size()!=0) { - System.err.println(name+" unsorted size() failed."); - handleError(map); - return false; - } - } - - unsortedCount++; - { - beforeMemory = 0L; - afterMemory = 0L; - beforeAddTime = 0L; - afterAddTime = 0L; - if (debugMemory) beforeMemory = DataStructures.getMemoryUse(); - if (debugTime) beforeAddTime = System.nanoTime(); - for (int i = unsorted.length - 1; i >= 0; i--) { - Integer item = unsorted[i]; - K k = null; - V v = null; - if (keyType == Type.Integer) { - k = (K)item; - v = (V)String.valueOf(item); - } else if (keyType == Type.String) { - k = (K)String.valueOf(item); - v = (V)item; - } - map.put(k, v); - } - if (debugTime) { - afterAddTime = System.nanoTime(); - addTime += afterAddTime - beforeAddTime; - if (debug > 0) System.out.println(name+" unsorted add time = " + (addTime / unsortedCount) + " ns"); - } - if (debugMemory) { - afterMemory = DataStructures.getMemoryUse(); - memory += afterMemory - beforeMemory; - if (debug > 0) System.out.println(name+" unsorted memory use = " + (memory / (unsortedCount+sortedCount)) + " bytes"); - } - - K invalidKey = null; - if (keyType == Type.Integer) { - invalidKey = (K)INVALID; - } else if (keyType == Type.String) { - invalidKey = (K)String.valueOf(INVALID); - } - boolean contains = map.containsKey(invalidKey); - V removed = map.remove(invalidKey); - if (contains || (removed!=null)) { - System.err.println(name+" unsorted invalidity check. contains=" + contains + " removed=" + removed); - return false; - } - - if (debug > 1) System.out.println(map.toString()); - - beforeLookupTime = 0L; - afterLookupTime = 0L; - if (debugTime) beforeLookupTime = System.nanoTime(); - for (Integer item : unsorted) { - K k = null; - if (keyType == Type.Integer) { - k = (K)item; - } else if (keyType == Type.String) { - k = (K)String.valueOf(item); - } - map.containsKey(k); - } - if (debugTime) { - afterLookupTime = System.nanoTime(); - lookupTime += afterLookupTime - beforeLookupTime; - if (debug > 0) System.out.println(name+" unsorted lookup time = " + (lookupTime / (unsortedCount+sortedCount)) + " ns"); - } - - beforeRemoveTime = 0L; - afterRemoveTime = 0L; - if (debugTime) beforeRemoveTime = System.nanoTime(); - for (int i = unsorted.length - 1; i >= 0; i--) { - Integer item = unsorted[i]; - K k = null; - if (keyType == Type.Integer) { - k = (K)item; - } else if (keyType == Type.String) { - k = (K)String.valueOf(item); - } - removed = map.remove(k); - if (removed==null) { - System.err.println(name+" unsorted invalidity check. removed=" + removed); - return false; - } - } - if (debugTime) { - afterRemoveTime = System.nanoTime(); - removeTime += afterRemoveTime - beforeRemoveTime; - if (debug > 0) System.out.println(name+" unsorted remove time = " + (removeTime / unsortedCount) + " ns"); - } - - if (!map.isEmpty()) { - System.err.println(name+" unsorted isEmpty() failed."); - handleError(map); - return false; - } - if (map.size()!=0) { - System.err.println(name+" unsorted size() failed."); - handleError(map); - return false; - } - } - - long addSortedTime = 0L; - long removeSortedTime = 0L; - - long beforeAddSortedTime = 0L; - long afterAddSortedTime = 0L; - - long beforeRemoveSortedTime = 0L; - long afterRemoveSortedTime = 0L; - - sortedCount++; - { // sorted - beforeMemory = 0L; - afterMemory = 0L; - beforeAddSortedTime = 0L; - afterAddSortedTime = 0L; - if (debugMemory) beforeMemory = DataStructures.getMemoryUse(); - if (debugTime) beforeAddSortedTime = System.nanoTime(); - for (int i = 0; i < sorted.length; i++) { - Integer item = sorted[i]; - K k = null; - V v = null; - if (keyType == Type.Integer) { - k = (K)item; - v = (V)String.valueOf(item); - } else if (keyType == Type.String) { - k = (K)String.valueOf(item); - v = (V)item; - } - map.put(k, v); - } - if (debugTime) { - afterAddSortedTime = System.nanoTime(); - addSortedTime += afterAddSortedTime - beforeAddSortedTime; - if (debug > 0) System.out.println(name+" sorted add time = " + (addSortedTime / sortedCount) + " ns"); - } - if (debugMemory) { - afterMemory = DataStructures.getMemoryUse(); - memory += afterMemory - beforeMemory; - if (debug > 0) System.out.println(name+" sorted memory use = " + (memory / (unsortedCount+sortedCount)) + " bytes"); - } - - K invalidKey = null; - if (keyType == Type.Integer) { - invalidKey = (K)INVALID; - } else if (keyType == Type.String) { - invalidKey = (K)String.valueOf(INVALID); - } - boolean contains = map.containsKey(invalidKey); - V removed = map.remove(invalidKey); - if (contains || (removed!=null)) { - System.err.println(name+" sorted invalidity check. contains=" + contains + " removed=" + removed); - return false; - } - - if (debug > 1) System.out.println(map.toString()); - - beforeLookupTime = 0L; - afterLookupTime = 0L; - if (debugTime) beforeLookupTime = System.nanoTime(); - for (Integer item : sorted) { - K k = null; - if (keyType == Type.Integer) { - k = (K)item; - } else if (keyType == Type.String) { - k = (K)String.valueOf(item); - } - map.containsKey(k); - } - if (debugTime) { - afterLookupTime = System.nanoTime(); - lookupTime += afterLookupTime - beforeLookupTime; - if (debug > 0) System.out.println(name+" sorted lookup time = " + (lookupTime / (unsortedCount+sortedCount)) + " ns"); - } - - beforeRemoveSortedTime = 0L; - afterRemoveSortedTime = 0L; - if (debugTime) beforeRemoveSortedTime = System.nanoTime(); - for (int i = 0; i < sorted.length; i++) { - Integer item = sorted[i]; - K k = null; - if (keyType == Type.Integer) { - k = (K)item; - } else if (keyType == Type.String) { - k = (K)String.valueOf(item); - } - removed = map.remove(k); - if (removed==null) { - System.err.println(name+" unsorted invalidity check. removed=" + removed); - return false; - } - } - if (debugTime) { - afterRemoveSortedTime = System.nanoTime(); - removeSortedTime += afterRemoveSortedTime - beforeRemoveSortedTime; - if (debug > 0) System.out.println(name+" sorted remove time = " + (removeSortedTime / sortedCount) + " ns"); - } - - if (validateIterator && !testMapEntrySet(map,keyType)) return false; - - if (!map.isEmpty()) { - System.err.println(name+" sorted isEmpty() failed."); - handleError(map); - return false; - } - if (map.size()!=0) { - System.err.println(name+" sorted size() failed."); - handleError(map); - return false; - } - } - - sortedCount++; - { // sorted - beforeMemory = 0L; - afterMemory = 0L; - beforeAddSortedTime = 0L; - afterAddSortedTime = 0L; - if (debugMemory) beforeMemory = DataStructures.getMemoryUse(); - if (debugTime) beforeAddSortedTime = System.nanoTime(); - for (int i = 0; i < sorted.length; i++) { - Integer item = sorted[i]; - K k = null; - V v = null; - if (keyType == Type.Integer) { - k = (K)item; - v = (V)String.valueOf(item); - } else if (keyType == Type.String) { - k = (K)String.valueOf(item); - v = (V)item; - } - map.put(k, v); - } - if (debugTime) { - afterAddSortedTime = System.nanoTime(); - addSortedTime += afterAddSortedTime - beforeAddSortedTime; - if (debug > 0) System.out.println(name+" sorted add time = " + (addSortedTime / sortedCount) + " ns"); - } - if (debugMemory) { - afterMemory = DataStructures.getMemoryUse(); - memory += afterMemory - beforeMemory; - if (debug > 0) System.out.println(name+" sorted memory use = " + (memory / (unsortedCount+sortedCount)) + " bytes"); - } - - K invalidKey = null; - if (keyType == Type.Integer) { - invalidKey = (K)INVALID; - } else if (keyType == Type.String) { - invalidKey = (K)String.valueOf(INVALID); - } - boolean contains = map.containsKey(invalidKey); - V removed = map.remove(invalidKey); - if (contains || (removed!=null)) { - System.err.println(name+" sorted invalidity check. contains=" + contains + " removed=" + removed); - return false; - } - - if (debug > 1) System.out.println(map.toString()); - - beforeLookupTime = 0L; - afterLookupTime = 0L; - if (debugTime) beforeLookupTime = System.nanoTime(); - for (Integer item : sorted) { - K k = null; - if (keyType == Type.Integer) { - k = (K)item; - } else if (keyType == Type.String) { - k = (K)String.valueOf(item); - } - map.containsKey(k); - } - if (debugTime) { - afterLookupTime = System.nanoTime(); - lookupTime += afterLookupTime - beforeLookupTime; - if (debug > 0) System.out.println(name+" sorted lookup time = " + (lookupTime / (unsortedCount+sortedCount)) + " ns"); - } - - beforeRemoveSortedTime = 0L; - afterRemoveSortedTime = 0L; - if (debugTime) beforeRemoveSortedTime = System.nanoTime(); - for (int i = sorted.length - 1; i >= 0; i--) { - Integer item = sorted[i]; - K k = null; - if (keyType == Type.Integer) { - k = (K)item; - } else if (keyType == Type.String) { - k = (K)String.valueOf(item); - } - removed = map.remove(k); - if (removed==null) { - System.err.println(name+" unsorted invalidity check. removed=" + removed); - return false; - } - } - if (debugTime) { - afterRemoveSortedTime = System.nanoTime(); - removeSortedTime += afterRemoveSortedTime - beforeRemoveSortedTime; - if (debug > 0) System.out.println(name+" sorted remove time = " + (removeSortedTime / sortedCount) + " ns"); - } - - if (validateIterator && !testMapEntrySet(map,keyType)) return false; - - if (!map.isEmpty()) { - System.err.println(name+" sorted isEmpty() failed."); - handleError(map); - return false; - } - if (map.size()!=0) { - System.err.println(name+" sorted size() failed."); - handleError(map); - return false; - } - - } - - if (testResults[testIndex] == null) testResults[testIndex] = new long[6]; - testResults[testIndex][0] += addTime / unsortedCount; - testResults[testIndex][1] += removeTime / unsortedCount; - testResults[testIndex][2] += addSortedTime / sortedCount; - testResults[testIndex][3] += removeSortedTime / sortedCount; - testResults[testIndex][4] += lookupTime / (unsortedCount + sortedCount); - testResults[testIndex++][5] += memory / (unsortedCount + sortedCount); - - if (debug > 1) System.out.println(); - - return true; - } - - public static boolean testMapEntrySet(java.util.Map map, Type keyType) { - { // Test keys - for (int i = 0; i < sorted.length; i++) { - Integer item = sorted[i]; - K k = null; - V v = null; - if (keyType == Type.Integer) { - k = (K)item; - v = (V)String.valueOf(item); - } else if (keyType == Type.String) { - k = (K)String.valueOf(item); - v = (V)item; - } - map.put(k, v); - } - - java.util.Set set = map.keySet(); - for (int i = 0; i < sorted.length; i++) { - Integer key = sorted[i]; - K k = null; - if (keyType == Type.Integer) { - k = (K)key; - } else if (keyType == Type.String) { - k = (K)String.valueOf(key); - } - if (!set.contains(k)) { - System.err.println("MayEntry contains() failure."); - handleError(map); - return false; - } - } - - java.util.Iterator keyIter = set.iterator(); - while (keyIter.hasNext()) { - keyIter.next(); - keyIter.remove(); - } - - if (!map.isEmpty()) { - System.err.println("MayEntry isEmpty() failure."); - handleError(map); - return false; - } - if (map.size()!=0) { - System.err.println("MayEntry size()!=0 failure."); - handleError(map); - return false; - } - } - - { // Test values - for (int i = 0; i < sorted.length; i++) { - Integer item = sorted[i]; - K k = null; - V v = null; - if (keyType == Type.Integer) { - k = (K)item; - v = (V)String.valueOf(item); - } else if (keyType == Type.String) { - k = (K)String.valueOf(item); - v = (V)item; - } - map.put(k, v); - } - - java.util.Collection collection = map.values(); - for (int i = 0; i < sorted.length; i++) { - Integer value = sorted[i]; - V v = null; - // These are reversed on purpose - if (keyType == Type.Integer) { - v = (V)String.valueOf(value); - } else if (keyType == Type.String) { - v = (V)value; - } - if (!collection.contains(v)) { - System.err.println("MayEntry contains() failure."); - handleError(map); - return false; - } - } - - java.util.Iterator valueIter = collection.iterator(); - while (valueIter.hasNext()) { - valueIter.next(); - valueIter.remove(); - } - - if (!map.isEmpty()) { - System.err.println("MayEntry isEmpty() failure."); - handleError(map); - return false; - } - if (map.size()!=0) { - System.err.println("MayEntry size()!=0 failure."); - handleError(map); - return false; - } - } - return true; - } - - public static > boolean testIterator(Iterator iter) { - while (iter.hasNext()) { - T item = iter.next(); - if (item==null) { - System.err.println("Iterator failure."); - return false; - } - } - return true; - } - - public static > boolean testListIterator(ListIterator iter) { - // Make sure you catch going prev at the start - boolean exceptionThrown = false; - try { - iter.previous(); - } catch (NoSuchElementException e) { - exceptionThrown = true; - } - if (!exceptionThrown) { - System.err.println("ListIterator exception failure."); - return false; - } - - for (int i = 0; i < unsorted.length; i++) { - T t = (T)unsorted[i]; - iter.add(t); - } - while (iter.hasPrevious()) iter.previous(); - - int i = 0; - while (iter.hasNext()) { - T item = iter.next(); - int idx = iter.nextIndex(); - if (idx!=++i) { - System.err.println("ListIterator index failure."); - return false; - } - if (item==null) { - System.err.println("ListIterator item is null."); - return false; - } - } - - // We should be at the end of the collection, this should fail - exceptionThrown = false; - try { - iter.next(); - } catch (NoSuchElementException e) { - exceptionThrown = true; - } - if (!exceptionThrown) { - System.err.println("ListIterator exception failure."); - return false; - } - - //This should be list.size - iter.nextIndex(); - int listSize = iter.nextIndex(); - if (listSize!=ARRAY_SIZE) { - System.err.println("ListIterator ARRAY_SIZE failure."); - return false; - } - - i--; - while (iter.hasPrevious()) { - T item = iter.previous(); - int idx = iter.previousIndex(); - if (idx!=--i) { - System.err.println("ListIterator index failure."); - return false; - } - if (item==null) { - System.err.println("ListIterator item is null."); - return false; - } - } - - // We should be at the beginning of the collection, this should fail - exceptionThrown = false; - try { - iter.previous(); - } catch (NoSuchElementException e) { - exceptionThrown = true; - } - if (!exceptionThrown) { - System.err.println("ListIterator exception failure."); - return false; - } - - // This should be negative one - iter.previousIndex(); - int negOne = iter.previousIndex(); - if (negOne!=-1) { - System.err.println("ListIterator negative_one failure."); - return false; - } - - // Remove all using iterator - while (iter.hasNext()) { - iter.next(); - iter.remove(); - } - - return true; - } - - private static final String getTestResults(int testNumber, String[] names, long[][] results) { - StringBuilder resultsBuilder = new StringBuilder(); - String format = "%-32s %-10s %-15s %-15s %-20s %-15s %-15s\n"; - Formatter formatter = new Formatter(resultsBuilder, Locale.US); - formatter.format(format, "Data Structure", "Add time", "Remove time", "Sorted add time", "Sorted remove time", "Lookup time", "Size"); - - double KB = 1000; - double MB = 1000 * KB; - - double MILLIS = 1000000; - double SECOND = 1000; - double MINUTES = 60 * SECOND; - - for (int i=0; i MINUTES) { - addTime /= MINUTES; - addTimeString = FORMAT.format(addTime) + " m"; - } else if (addTime > SECOND) { - addTime /= SECOND; - addTimeString = FORMAT.format(addTime) + " s"; - } else { - addTimeString = FORMAT.format(addTime) + " ms"; - } - - double removeTime = result[1] / MILLIS; - removeTime /= testNumber; - String removeTimeString = null; - if (removeTime > MINUTES) { - removeTime /= MINUTES; - removeTimeString = FORMAT.format(removeTime) + " m"; - } else if (removeTime > SECOND) { - removeTime /= SECOND; - removeTimeString = FORMAT.format(removeTime) + " s"; - } else { - removeTimeString = FORMAT.format(removeTime) + " ms"; - } - - // sorted - double addSortedTime = result[2] / MILLIS; - addSortedTime /= testNumber; - String sortedAddTimeString = null; - if (addSortedTime > MINUTES) { - addSortedTime /= MINUTES; - sortedAddTimeString = FORMAT.format(addSortedTime) + " m"; - } else if (addSortedTime > SECOND) { - addSortedTime /= SECOND; - sortedAddTimeString = FORMAT.format(addSortedTime) + " s"; - } else { - sortedAddTimeString = FORMAT.format(addSortedTime) + " ms"; - } - - double removeSortedTime = result[3] / MILLIS; - removeSortedTime /= testNumber; - String sortedRemoveTimeString = null; - if (removeSortedTime > MINUTES) { - removeSortedTime /= MINUTES; - sortedRemoveTimeString = FORMAT.format(removeSortedTime) + " m"; - } else if (removeSortedTime > SECOND) { - removeSortedTime /= SECOND; - sortedRemoveTimeString = FORMAT.format(removeSortedTime) + " s"; - } else { - sortedRemoveTimeString = FORMAT.format(removeSortedTime) + " ms"; - } - - double lookupTime = result[4] / MILLIS; - lookupTime /= testNumber; - String lookupTimeString = null; - if (lookupTime > MINUTES) { - lookupTime /= MINUTES; - lookupTimeString = FORMAT.format(lookupTime) + " m"; - } else if (lookupTime > SECOND) { - lookupTime /= SECOND; - lookupTimeString = FORMAT.format(lookupTime) + " s"; - } else { - lookupTimeString = FORMAT.format(lookupTime) + " ms"; - } - - double size = result[5]; - size /= testNumber; - String sizeString = null; - if (size > MB) { - size = size / MB; - sizeString = FORMAT.format(size) + " MB"; - } else if (size > KB) { - size = size / KB; - sizeString = FORMAT.format(size) + " KB"; - } else { - sizeString = FORMAT.format(size) + " Bytes"; - } - - formatter.format(format, name, addTimeString, removeTimeString, sortedAddTimeString, sortedRemoveTimeString, lookupTimeString, sizeString); - } - } - formatter.close(); - - return resultsBuilder.toString(); - } - - private static final long getMemoryUse() { - putOutTheGarbage(); - long totalMemory = Runtime.getRuntime().totalMemory(); - - putOutTheGarbage(); - long freeMemory = Runtime.getRuntime().freeMemory(); - - return (totalMemory - freeMemory); - } - - private static final void putOutTheGarbage() { - collectGarbage(); - collectGarbage(); - collectGarbage(); - } - - private static final long fSLEEP_INTERVAL = 100; - - private static final void collectGarbage() { - try { - System.gc(); - Thread.sleep(fSLEEP_INTERVAL); - System.runFinalization(); - Thread.sleep(fSLEEP_INTERVAL); - } catch (InterruptedException ex) { - ex.printStackTrace(); - } - } -} diff --git a/src/com/jwetherell/algorithms/DataStructuresTiming.java b/src/com/jwetherell/algorithms/DataStructuresTiming.java new file mode 100644 index 00000000..efa52566 --- /dev/null +++ b/src/com/jwetherell/algorithms/DataStructuresTiming.java @@ -0,0 +1,1720 @@ +package com.jwetherell.algorithms; + +import java.text.DecimalFormat; +import java.util.Arrays; +import java.util.Collection; +import java.util.Comparator; +import java.util.Formatter; +import java.util.Locale; +import java.util.NavigableSet; +import java.util.Random; +import java.util.concurrent.ConcurrentSkipListMap; +import java.util.concurrent.ConcurrentSkipListSet; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.AVLTree; +import com.jwetherell.algorithms.data_structures.BTree; +import com.jwetherell.algorithms.data_structures.BinaryHeap; +import com.jwetherell.algorithms.data_structures.BinarySearchTree; +import com.jwetherell.algorithms.data_structures.HashArrayMappedTrie; +import com.jwetherell.algorithms.data_structures.HashMap; +import com.jwetherell.algorithms.data_structures.List; +import com.jwetherell.algorithms.data_structures.PatriciaTrie; +import com.jwetherell.algorithms.data_structures.Queue; +import com.jwetherell.algorithms.data_structures.RadixTrie; +import com.jwetherell.algorithms.data_structures.RedBlackTree; +import com.jwetherell.algorithms.data_structures.SkipList; +import com.jwetherell.algorithms.data_structures.SkipListMap; +import com.jwetherell.algorithms.data_structures.SplayTree; +import com.jwetherell.algorithms.data_structures.Stack; +import com.jwetherell.algorithms.data_structures.Treap; +import com.jwetherell.algorithms.data_structures.TreeMap; +import com.jwetherell.algorithms.data_structures.Trie; +import com.jwetherell.algorithms.data_structures.TrieMap; + +@SuppressWarnings("unchecked") +public class DataStructuresTiming { + + private static final int NUMBER_OF_TESTS = 3; + private static final Random RANDOM = new Random(); + private static final int ARRAY_SIZE = 1000; + private static final int RANDOM_SIZE = 1000 * ARRAY_SIZE; + private static final Integer INVALID = RANDOM_SIZE + 10; + private static final DecimalFormat FORMAT = new DecimalFormat("0.##"); + + private static Integer[] unsorted = null; + private static Integer[] sorted = null; + private static String string = null; + + private static int debug = 1; // Debug level. 0=None, 1=Time and Memory (if enabled), 2=Time, Memory, data structure debug + private static boolean debugTime = true; // How much time to: add all, remove all, add all items in reverse order, remove all + private static boolean debugMemory = true; // How much memory is used by the data structure + + private static final int TESTS = 38; // Max number of dynamic data structures to test + private static final String[] testNames = new String[TESTS]; // Array to hold the test names + private static final long[][] testResults = new long[TESTS][]; // Array to hold the test results + private static int testIndex = 0; // Index into the tests + private static int testNumber = 0; // Number of aggregate tests which have been run + + private static enum Type {Integer, String}; + + @Test + public void testTiming() { + System.out.println("Starting tests."); + boolean passed = false; + for (int i = 0; i < NUMBER_OF_TESTS; i++) { + try { + passed = runTests(); + } catch (NullPointerException e) { + System.err.println(string); + throw e; + } + if (!passed) break; + } + if (passed) System.out.println("Tests finished. All passed."); + else System.err.println("Tests finished. Detected a failure."); + } + + private static void generateTestData() { + System.out.println("Generating data."); + StringBuilder builder = new StringBuilder(); + builder.append("Array="); + unsorted = new Integer[ARRAY_SIZE]; + java.util.Set set = new java.util.HashSet(); + for (int i = 0; i < ARRAY_SIZE; i++) { + Integer j = RANDOM.nextInt(RANDOM_SIZE); + // Make sure there are no duplicates + boolean found = true; + while (found) { + if (set.contains(j)) { + j = RANDOM.nextInt(RANDOM_SIZE); + } else { + unsorted[i] = j; + set.add(j); + found = false; + } + } + unsorted[i] = j; + if (i!=ARRAY_SIZE-1) builder.append(j).append(','); + } + set.clear(); + set = null; + builder.append('\n'); + string = builder.toString(); + if (debug > 1) System.out.println(string); + + sorted = Arrays.copyOf(unsorted, unsorted.length); + Arrays.sort(sorted); + + System.out.println("Generated data."); + } + + private static boolean runTests() { + testIndex = 0; + testNumber++; + + generateTestData(); + + boolean passed = true; + + // Trees + + passed = testJavaRedBlackIntegerTree(); + if (!passed) { + System.err.println("Java Red-Black [Integer] failed."); + return false; + } + + passed = testRedBlackTree(); + if (!passed) { + System.err.println("Red-Black Tree failed."); + return false; + } + + passed = testAVLTree(); + if (!passed) { + System.err.println("AVL Tree failed."); + return false; + } + + passed = testSplayTree(); + if (!passed) { + System.err.println("Splay Tree failed."); + return false; + } + + passed = testBTree(); + if (!passed) { + System.err.println("B-Tree failed."); + return false; + } + + passed = testTreap(); + if (!passed) { + System.err.println("Treap failed."); + return false; + } + + passed = testBST(); + if (!passed) { + System.err.println("BST failed."); + return false; + } + + passed = testJavaRedBlackStringTree(); + if (!passed) { + System.err.println("Java Red-Black [String] failed."); + return false; + } + + passed = testTrie(); + if (!passed) { + System.err.println("Trie failed."); + return false; + } + + passed = testPatriciaTrie(); + if (!passed) { + System.err.println("Patricia Trie failed."); + return false; + } + + // Sets + + passed = testJavaSkipList(); + if (!passed) { + System.err.println("Java's Skip List failed."); + return false; + } + + passed = testSkipList(); + if (!passed) { + System.err.println("Skip List failed."); + return false; + } + + // Heaps + + passed = testJavaMinHeap(); + if (!passed) { + System.err.println("Java Min-Heap failed."); + return false; + } + + passed = testMinHeap(); + if (!passed) { + System.err.println("Min-Heap failed."); + return false; + } + + passed = testJavaMaxHeap(); + if (!passed) { + System.err.println("Java Max-Heap failed."); + return false; + } + + passed = testMaxHeap(); + if (!passed) { + System.err.println("Max-Heap failed."); + return false; + } + + // Lists + + passed = testJavaArrayList(); + if (!passed) { + System.err.println("Java List failed."); + return false; + } + + passed = testArrayList(); + if (!passed) { + System.err.println("List failed."); + return false; + } + + passed = testJavaLinkedList(); + if (!passed) { + System.err.println("Java List failed."); + return false; + } + + passed = testLinkedList(); + if (!passed) { + System.err.println("List failed."); + return false; + } + + // Queues + + passed = testJavaArrayQueue(); + if (!passed) { + System.err.println("Java Queue failed."); + return false; + } + + passed = testArrayQueue(); + if (!passed) { + System.err.println("Queue failed."); + return false; + } + + passed = testJavaLinkedQueue(); + if (!passed) { + System.err.println("Java Queue failed."); + return false; + } + + passed = testLinkedQueue(); + if (!passed) { + System.err.println("Queue failed."); + return false; + } + + // Stacks + + passed = testJavaStack(); + if (!passed) { + System.err.println("Java Stack failed."); + return false; + } + + passed = testArrayStack(); + if (!passed) { + System.err.println("Stack failed."); + return false; + } + + passed = testLinkedStack(); + if (!passed) { + System.err.println("Stack failed."); + return false; + } + + // Maps + + passed = testJavaHashMap(); + if (!passed) { + System.err.println("Java Hash Map failed."); + return false; + } + + passed = testHashMap(); + if (!passed) { + System.err.println("Hash Map failed."); + return false; + } + + passed = testJavaTreeMap(); + if (!passed) { + System.err.println("Java Tree Map failed."); + return false; + } + + passed = testTreeMap(); + if (!passed) { + System.err.println("Tree Map failed."); + return false; + } + + passed = testTrieMap(); + if (!passed) { + System.err.println("Trie Map failed."); + return false; + } + + passed = testRadixTrie(); + if (!passed) { + System.err.println("Radix Trie failed."); + return false; + } + + passed = testJavaSkipListMap(); + if (!passed) { + System.err.println("Java's Skip List Map failed."); + return false; + } + + passed = testSkipListMap(); + if (!passed) { + System.err.println("Skip List Map failed."); + return false; + } + + passed = testHAMT(); + if (!passed) { + System.err.println("HAMT failed."); + return false; + } + + if (debugTime && debugMemory) { + String results = getTestResults(testNumber, testNames, testResults); + System.out.println(results); + } + + return true; + } + + private static void handleError(Object obj) { + System.err.println(string); + System.err.println(obj.toString()); + throw new RuntimeException("Error in test."); + } + + private static boolean testAVLTree() { + String bstName = "AVL Tree"; + BinarySearchTree bst = new AVLTree(); + Collection bstCollection = bst.toCollection(); + + if (!testJavaCollection(bstCollection,Type.Integer,bstName)) return false; + return true; + } + + private static boolean testBTree() { + String bstName = "B-Tree"; + BTree bst = new BTree(2); + Collection bstCollection = bst.toCollection(); + + if (!testJavaCollection(bstCollection,Type.Integer,bstName)) return false; + return true; + } + + private static boolean testBST() { + String bstName = "BST"; + BinarySearchTree bst = new BinarySearchTree(); + Collection bstCollection = bst.toCollection(); + + if (!testJavaCollection(bstCollection,Type.Integer,bstName)) return false; + return true; + } + + private static boolean testMinHeap() { + String aNameMin = "Min-Heap [array]"; + BinaryHeap.BinaryHeapArray aHeapMin = new BinaryHeap.BinaryHeapArray(BinaryHeap.Type.MIN); + Collection aCollectionMin = aHeapMin.toCollection(); + if (!testJavaCollection(aCollectionMin,Type.Integer,aNameMin)) return false; + + String tNameMin = "Min-Heap [tree]"; + BinaryHeap.BinaryHeapTree tHeapMin = new BinaryHeap.BinaryHeapTree(BinaryHeap.Type.MIN); + Collection tCollectionMin = tHeapMin.toCollection(); + if (!testJavaCollection(tCollectionMin,Type.Integer,tNameMin)) return false; + + return true; + } + + private static boolean testMaxHeap() { + String aNameMax = "Max-Heap [array]"; + BinaryHeap.BinaryHeapArray aHeapMax = new BinaryHeap.BinaryHeapArray(BinaryHeap.Type.MAX); + Collection aCollectionMax = aHeapMax.toCollection(); + if (!testJavaCollection(aCollectionMax,Type.Integer,aNameMax)) return false; + + String lNameMax = "Max-Heap [tree]"; + BinaryHeap.BinaryHeapTree tHeapMax = new BinaryHeap.BinaryHeapTree(BinaryHeap.Type.MAX); + Collection tCollectionMax = tHeapMax.toCollection(); + if (!testJavaCollection(tCollectionMax,Type.Integer,lNameMax)) return false; + + return true; + } + + private static boolean testHashMap() { + String mapName = "HashMap"; + HashMap map = new HashMap(unsorted.length/2); + java.util.Map jMap = map.toMap(); + + if (!testJavaMap(jMap,Type.Integer,mapName)) return false; + return true; + } + + private static boolean testHAMT() { + String mapName = "HAMT"; + HashArrayMappedTrie map = new HashArrayMappedTrie(); + java.util.Map jMap = map.toMap(); + + if (!testJavaMap(jMap,Type.Integer,mapName)) return false; + return true; + } + + private static boolean testJavaHashMap() { + String mapName = "Java's HashMap"; + java.util.Map map = new java.util.HashMap(unsorted.length/2); + + if (!testJavaMap(map,Type.Integer,mapName)) return false; + return true; + } + + private static boolean testJavaMinHeap() { + java.util.PriorityQueue minArrayHeap = new java.util.PriorityQueue(10, + new Comparator() { + + @Override + public int compare(Integer arg0, Integer arg1) { + if (arg0.compareTo(arg1) < 0) + return -1; + else if (arg1.compareTo(arg0) < 0) + return 1; + return 0; + } + }); + if (!testJavaCollection(minArrayHeap,Type.Integer,"Java's Min-Heap [array]")) return false; + + return true; + } + + private static boolean testJavaMaxHeap() { + java.util.PriorityQueue maxArrayHeap = new java.util.PriorityQueue(10, + new Comparator() { + + @Override + public int compare(Integer arg0, Integer arg1) { + if (arg0.compareTo(arg1) > 0) + return -1; + else if (arg1.compareTo(arg0) > 0) + return 1; + return 0; + } + }); + if (!testJavaCollection(maxArrayHeap,Type.Integer,"Java's Max-Heap [array]")) return false; + return true; + } + + private static boolean testJavaArrayList() { + if (!testJavaCollection(new java.util.ArrayList(),Type.Integer,"Java's List [array]")) return false; + return true; + } + + private static boolean testJavaLinkedList() { + if (!testJavaCollection(new java.util.LinkedList(),Type.Integer,"Java's List [linked]")) return false; + return true; + } + + private static boolean testJavaArrayQueue() { + String aName = "Java's Queue [array]"; + java.util.Deque aCollection = new java.util.ArrayDeque(); + + if (!testJavaCollection(aCollection,Type.Integer,aName)) return false; + return true; + } + + private static boolean testJavaLinkedQueue() { + String lName = "Java's Queue [linked]"; + java.util.Deque lCollection = new java.util.LinkedList(); + + if (!testJavaCollection(lCollection,Type.Integer,lName)) return false; + return true; + } + + private static boolean testJavaRedBlackIntegerTree() { + String aName = "Java's Red-Black Tree [Integer]"; + java.util.TreeSet aCollection = new java.util.TreeSet(); + if (!testJavaCollection(aCollection,Type.Integer,aName)) return false; + return true; + } + + private static boolean testJavaRedBlackStringTree() { + String aName = "Java's Red-Black Tree [String]"; + java.util.TreeSet aCollection = new java.util.TreeSet(); + if (!testJavaCollection(aCollection,Type.String,aName)) return false; + return true; + } + + private static boolean testJavaStack() { + String aName = "Java's Stack [array]"; + java.util.Stack aCollection = new java.util.Stack(); + if (!testJavaCollection(aCollection,Type.Integer,aName)) return false; + return true; + } + + private static boolean testJavaTreeMap() { + String mapName = "Java's TreeMap"; + java.util.Map map = new java.util.TreeMap(); + + if (!testJavaMap(map,Type.String,mapName)) return false; + return true; + } + + private static boolean testArrayList() { + String aName = "List [array]"; + List.ArrayList aList = new List.ArrayList(); + Collection aCollection = aList.toCollection(); + + if (!testJavaCollection(aCollection,Type.Integer,aName)) return false; + return true; + } + + private static boolean testLinkedList() { + String lName = "List [linked]"; + List.LinkedList lList = new List.LinkedList(); + Collection lCollection = lList.toCollection(); + + if (!testJavaCollection(lCollection,Type.Integer,lName)) return false; + return true; + } + + private static boolean testPatriciaTrie() { + String bstName = "PatriciaTrie"; + PatriciaTrie bst = new PatriciaTrie(); + Collection bstCollection = bst.toCollection(); + + + if (!testJavaCollection(bstCollection,Type.String,bstName)) return false; + return true; + } + + private static boolean testArrayQueue() { + String aName = "Queue [array]"; + Queue.ArrayQueue aQueue = new Queue.ArrayQueue(); + Collection aCollection = aQueue.toCollection(); + + if (!testJavaCollection(aCollection,Type.Integer,aName)) return false; + return true; + } + + private static boolean testLinkedQueue() { + String lName = "Queue [linked]"; + Queue.LinkedQueue lQueue = new Queue.LinkedQueue(); + Collection lCollection = lQueue.toCollection(); + + if (!testJavaCollection(lCollection,Type.Integer,lName)) return false; + return true; + } + + private static boolean testRadixTrie() { + String mapName = "RadixTrie"; + RadixTrie map = new RadixTrie(); + java.util.Map jMap = map.toMap(); + + if (!testJavaMap(jMap,Type.String,mapName)) return false; + return true; + } + + private static boolean testRedBlackTree() { + String bstName = "Red-Black Tree"; + RedBlackTree bst = new RedBlackTree(); + Collection bstCollection = bst.toCollection(); + + if (!testJavaCollection(bstCollection,Type.Integer,bstName)) return false; + return true; + } + + private static boolean testJavaSkipList() { + String sName = "Java's SkipList"; + NavigableSet sList = new ConcurrentSkipListSet(); + Collection lCollection = sList; + + if (!testJavaCollection(lCollection,Type.Integer,sName)) return false; + return true; + } + + private static boolean testSkipList() { + String sName = "SkipList"; + SkipList sList = new SkipList(); + Collection lCollection = sList.toCollection(); + + if (!testJavaCollection(lCollection,Type.Integer,sName)) return false; + return true; + } + + private static boolean testSplayTree() { + String bstName = "Splay Tree"; + BinarySearchTree bst = new SplayTree(); + Collection bstCollection = bst.toCollection(); + + if (!testJavaCollection(bstCollection,Type.Integer,bstName)) return false; + return true; + } + + private static boolean testArrayStack() { + String aName = "Stack [array]"; + Stack.ArrayStack aStack = new Stack.ArrayStack(); + Collection aCollection = aStack.toCollection(); + + if (!testJavaCollection(aCollection,Type.Integer,aName)) return false; + return true; + } + + private static boolean testLinkedStack() { + String lName = "Stack [linked]"; + Stack.LinkedStack lStack = new Stack.LinkedStack(); + Collection lCollection = lStack.toCollection(); + + if (!testJavaCollection(lCollection,Type.Integer,lName)) return false; + return true; + } + + private static boolean testTreap() { + String bstName = "Treap"; + BinarySearchTree bst = new Treap(); + Collection bstCollection = bst.toCollection(); + + if (!testJavaCollection(bstCollection,Type.Integer,bstName)) return false; + return true; + } + + private static boolean testTreeMap() { + String mapName = "TreeMap"; + TreeMap map = new TreeMap(); + java.util.Map jMap = map.toMap(); + + if (!testJavaMap(jMap,Type.Integer,mapName)) return false; + return true; + } + + private static boolean testTrie() { + String bstName = "Trie"; + Trie bst = new Trie(); + Collection bstCollection = bst.toCollection(); + + if (!testJavaCollection(bstCollection,Type.String,bstName)) return false; + return true; + } + + private static boolean testTrieMap() { + String mapName = "TrieMap"; + TrieMap map = new TrieMap(); + java.util.Map jMap = map.toMap(); + + if (!testJavaMap(jMap,Type.String,mapName)) return false; + return true; + } + + private static boolean testJavaSkipListMap() { + String mapName = "Java's SkipListMap"; + ConcurrentSkipListMap map = new ConcurrentSkipListMap(); + + if (!testJavaMap(map,Type.Integer,mapName)) return false; + return true; + } + + private static boolean testSkipListMap() { + String mapName = "SkipListMap"; + SkipListMap map = new SkipListMap(); + java.util.Map jMap = map.toMap(); + + if (!testJavaMap(jMap,Type.Integer,mapName)) return false; + return true; + } + + private static > boolean testJavaCollection(Collection collection, Type type, String name) { + // Make sure the collection is empty + if (!collection.isEmpty()) { + System.err.println(name+" initial isEmpty() failed."); + handleError(collection); + return false; + } + if (collection.size()!=0) { + System.err.println(name+" initial size() failed."); + handleError(collection); + return false; + } + + long sortedCount = 0; + long unsortedCount = 0; + + long addTime = 0L; + long removeTime = 0L; + + long beforeAddTime = 0L; + long afterAddTime = 0L; + long beforeRemoveTime = 0L; + long afterRemoveTime = 0L; + + long memory = 0L; + + long beforeMemory = 0L; + long afterMemory = 0L; + + long lookupTime = 0L; + + long beforeLookupTime = 0L; + long afterLookupTime = 0L; + + if (debug > 1) System.out.println(name); + testNames[testIndex] = name; + + unsortedCount++; + { // UNSORTED: Add and remove in order (from index zero to length) + beforeMemory = 0L; + afterMemory = 0L; + beforeAddTime = 0L; + afterAddTime = 0L; + if (debugMemory) beforeMemory = DataStructuresTiming.getMemoryUse(); + if (debugTime) beforeAddTime = System.nanoTime(); + for (int i = 0; i < unsorted.length; i++) { + T item = null; + if (type==Type.Integer) { + item = (T)unsorted[i]; + } else if (type==Type.String) { + item = (T)String.valueOf(unsorted[i]); + } + boolean added = collection.add(item); + if (!added) { + System.err.println(name+" unsorted add failed."); + handleError(collection); + return false; + } + } + if (debugTime) { + afterAddTime = System.nanoTime(); + addTime += afterAddTime - beforeAddTime; + if (debug > 0) System.out.println(name+" unsorted add time = " + (addTime / unsortedCount) + " ns"); + } + if (debugMemory) { + afterMemory = DataStructuresTiming.getMemoryUse(); + memory += afterMemory - beforeMemory; + if (debug > 0) System.out.println(name+" unsorted memory use = " + (memory / (unsortedCount+sortedCount)) + " bytes"); + } + + if (debug > 1) System.out.println(collection.toString()); + + beforeLookupTime = 0L; + afterLookupTime = 0L; + if (debugTime) beforeLookupTime = System.nanoTime(); + for (int i = 0; i < unsorted.length; i++) { + T item = null; + if (type==Type.Integer) { + item = (T)unsorted[i]; + } else if (type==Type.String) { + item = (T)String.valueOf(unsorted[i]); + } + boolean contains = collection.contains(item); + if (!contains) { + System.err.println(name+" unsorted contains failed."); + handleError(collection); + return false; + } + } + if (debugTime) { + afterLookupTime = System.nanoTime(); + lookupTime += afterLookupTime - beforeLookupTime; + if (debug > 0) System.out.println(name+" unsorted lookup time = " + (lookupTime / (unsortedCount+sortedCount)) + " ns"); + } + + beforeRemoveTime = 0L; + afterRemoveTime = 0L; + if (debugTime) beforeRemoveTime = System.nanoTime(); + for (int i = 0; i < unsorted.length; i++) { + T item = null; + if (type==Type.Integer) { + item = (T)unsorted[i]; + } else if (type==Type.String) { + item = (T)String.valueOf(unsorted[i]); + } + boolean removed = collection.remove(item); + if (!removed) { + System.err.println(name+" unsorted remove failed."); + handleError(collection); + return false; + } + } + if (debugTime) { + afterRemoveTime = System.nanoTime(); + removeTime += afterRemoveTime - beforeRemoveTime; + if (debug > 0) System.out.println(name+" unsorted remove time = " + (removeTime / unsortedCount) + " ns"); + } + + if (!collection.isEmpty()) { + System.err.println(name+" unsorted isEmpty() failed."); + handleError(collection); + return false; + } + if (collection.size()!=0) { + System.err.println(name+" unsorted size() failed."); + handleError(collection); + return false; + } + } + + unsortedCount++; + { // UNSORTED: Add in reverse (from index length-1 to zero) order and then remove in order (from index zero to length) + beforeMemory = 0L; + afterMemory = 0L; + beforeAddTime = 0L; + afterAddTime = 0L; + if (debugMemory) beforeMemory = DataStructuresTiming.getMemoryUse(); + if (debugTime) beforeAddTime = System.nanoTime(); + for (int i = unsorted.length - 1; i >= 0; i--) { + T item = null; + if (type==Type.Integer) { + item = (T)unsorted[i]; + } else if (type==Type.String) { + item = (T)String.valueOf(unsorted[i]); + } + boolean added = collection.add(item); + if (!added) { + System.err.println(name+" unsorted add failed."); + handleError(collection); + return false; + } + } + if (debugTime) { + afterAddTime = System.nanoTime(); + addTime += afterAddTime - beforeAddTime; + if (debug > 0) System.out.println(name+" unsorted add time = " + (addTime / unsortedCount) + " ns"); + } + if (debugMemory) { + afterMemory = DataStructuresTiming.getMemoryUse(); + memory += afterMemory - beforeMemory; + if (debug > 0) System.out.println(name+" unsorted memory use = " + (memory / (unsortedCount+sortedCount)) + " bytes"); + } + + if (debug > 1) System.out.println(collection.toString()); + + beforeLookupTime = 0L; + afterLookupTime = 0L; + if (debugTime) beforeLookupTime = System.nanoTime(); + for (int i = 0; i < unsorted.length; i++) { + T item = null; + if (type==Type.Integer) { + item = (T)unsorted[i]; + } else if (type==Type.String) { + item = (T)String.valueOf(unsorted[i]); + } + boolean contains = collection.contains(item); + if (!contains) { + System.err.println(name+" unsorted contains failed."); + handleError(collection); + return false; + } + } + if (debugTime) { + afterLookupTime = System.nanoTime(); + lookupTime += afterLookupTime - beforeLookupTime; + if (debug > 0) System.out.println(name+" unsorted lookup time = " + (lookupTime / (unsortedCount+sortedCount)) + " ns"); + } + + beforeRemoveTime = 0L; + afterRemoveTime = 0L; + if (debugTime) beforeRemoveTime = System.nanoTime(); + for (int i = 0; i < unsorted.length; i++) { + T item = null; + if (type==Type.Integer) { + item = (T)unsorted[i]; + } else if (type==Type.String) { + item = (T)String.valueOf(unsorted[i]); + } + boolean removed = collection.remove(item); + if (!removed) { + System.err.println(name+" unsorted remove failed."); + handleError(collection); + return false; + } + } + if (debugTime) { + afterRemoveTime = System.nanoTime(); + removeTime += afterRemoveTime - beforeRemoveTime; + if (debug > 0) System.out.println(name+" unsorted remove time = " + (removeTime / unsortedCount) + " ns"); + } + + if (!collection.isEmpty()) { + System.err.println(name+" unsorted isEmpty() failed."); + handleError(collection); + return false; + } + if (collection.size()!=0) { + System.err.println(name+" unsorted size() failed."); + handleError(collection); + return false; + } + } + + long addSortedTime = 0L; + long removeSortedTime = 0L; + + long beforeAddSortedTime = 0L; + long afterAddSortedTime = 0L; + + long beforeRemoveSortedTime = 0L; + long afterRemoveSortedTime = 0L; + + sortedCount++; + { // SORTED: Add and remove in order (from index zero to length) + beforeMemory = 0L; + afterMemory = 0L; + beforeAddSortedTime = 0L; + afterAddSortedTime = 0L; + if (debugMemory) beforeMemory = DataStructuresTiming.getMemoryUse(); + if (debugTime) beforeAddSortedTime = System.nanoTime(); + for (int i = 0; i < sorted.length; i++) { + T item = null; + if (type==Type.Integer) { + item = (T)sorted[i]; + } else if (type==Type.String) { + item = (T)String.valueOf(sorted[i]); + } + boolean added = collection.add(item); + if (!added) { + System.err.println(name+" sorted add failed."); + handleError(collection); + return false; + } + } + if (debugTime) { + afterAddSortedTime = System.nanoTime(); + addSortedTime += afterAddSortedTime - beforeAddSortedTime; + if (debug > 0) System.out.println(name+" sorted add time = " + (addSortedTime / sortedCount) + " ns"); + } + if (debugMemory) { + afterMemory = DataStructuresTiming.getMemoryUse(); + memory += afterMemory - beforeMemory; + if (debug > 0) System.out.println(name+" sorted memory use = " + (memory / (unsortedCount+sortedCount)) + " bytes"); + } + + if (debug > 1) System.out.println(collection.toString()); + + beforeLookupTime = 0L; + afterLookupTime = 0L; + if (debugTime) beforeLookupTime = System.nanoTime(); + for (int i = 0; i < unsorted.length; i++) { + T item = null; + if (type==Type.Integer) { + item = (T)sorted[i]; + } else if (type==Type.String) { + item = (T)String.valueOf(sorted[i]); + } + boolean contains = collection.contains(item); + if (!contains) { + System.err.println(name+" sorted contains failed."); + handleError(collection); + return false; + } + } + if (debugTime) { + afterLookupTime = System.nanoTime(); + lookupTime += afterLookupTime - beforeLookupTime; + if (debug > 0) System.out.println(name+" sorted lookup time = " + (lookupTime / (unsortedCount+sortedCount)) + " ns"); + } + + beforeRemoveSortedTime = 0L; + afterRemoveSortedTime = 0L; + if (debugTime) beforeRemoveSortedTime = System.nanoTime(); + for (int i = 0; i < sorted.length; i++) { + T item = null; + if (type==Type.Integer) { + item = (T)sorted[i]; + } else if (type==Type.String) { + item = (T)String.valueOf(sorted[i]); + } + boolean removed = collection.remove(item); + if (!removed) { + System.err.println(name+" sorted remove failed."); + handleError(collection); + return false; + } + } + if (debugTime) { + afterRemoveSortedTime = System.nanoTime(); + removeSortedTime += afterRemoveSortedTime - beforeRemoveSortedTime; + if (debug > 0) System.out.println(name+" sorted remove time = " + (removeSortedTime / sortedCount) + " ns"); + } + + if (!collection.isEmpty()) { + System.err.println(name+" sorted isEmpty() failed."); + handleError(collection); + return false; + } + if (collection.size()!=0) { + System.err.println(name+" sorted size() failed."); + handleError(collection); + return false; + } + } + + sortedCount++; + { // SORTED: Add in order (from index zero to length) and then remove in reverse (from index length-1 to zero) order + beforeMemory = 0L; + afterMemory = 0L; + beforeAddSortedTime = 0L; + afterAddSortedTime = 0L; + if (debugMemory) beforeMemory = DataStructuresTiming.getMemoryUse(); + if (debugTime) beforeAddSortedTime = System.nanoTime(); + for (int i = 0; i < sorted.length; i++) { + T item = null; + if (type==Type.Integer) { + item = (T)sorted[i]; + } else if (type==Type.String) { + item = (T)String.valueOf(sorted[i]); + } + boolean added = collection.add(item); + if (!added) { + System.err.println(name+" sorted add failed."); + handleError(collection); + return false; + } + } + if (debugTime) { + afterAddSortedTime = System.nanoTime(); + addSortedTime += afterAddSortedTime - beforeAddSortedTime; + if (debug > 0) System.out.println(name+" sorted add time = " + (addSortedTime / sortedCount) + " ns"); + } + if (debugMemory) { + afterMemory = DataStructuresTiming.getMemoryUse(); + memory += afterMemory - beforeMemory; + if (debug > 0) System.out.println(name+" sorted memory use = " + (memory / (unsortedCount+sortedCount)) + " bytes"); + } + + if (debug > 1) System.out.println(collection.toString()); + + beforeLookupTime = 0L; + afterLookupTime = 0L; + if (debugTime) beforeLookupTime = System.nanoTime(); + for (int i = 0; i < unsorted.length; i++) { + T item = null; + if (type==Type.Integer) { + item = (T)sorted[i]; + } else if (type==Type.String) { + item = (T)String.valueOf(sorted[i]); + } + boolean contains = collection.contains(item); + if (!contains) { + System.err.println(name+" sorted contains failed."); + handleError(collection); + return false; + } + } + if (debugTime) { + afterLookupTime = System.nanoTime(); + lookupTime += afterLookupTime - beforeLookupTime; + if (debug > 0) System.out.println(name+" sorted lookup time = " + (lookupTime / (unsortedCount+sortedCount)) + " ns"); + } + + beforeRemoveSortedTime = 0L; + afterRemoveSortedTime = 0L; + if (debugTime) beforeRemoveSortedTime = System.nanoTime(); + for (int i = sorted.length - 1; i >= 0; i--) { + T item = null; + if (type==Type.Integer) { + item = (T)sorted[i]; + } else if (type==Type.String) { + item = (T)String.valueOf(sorted[i]); + } + boolean removed = collection.remove(item); + if (!removed) { + System.err.println(name+" sorted remove failed."); + handleError(collection); + return false; + } + } + if (debugTime) { + afterRemoveSortedTime = System.nanoTime(); + removeSortedTime += afterRemoveSortedTime - beforeRemoveSortedTime; + if (debug > 0) System.out.println(name+" sorted remove time = " + (removeSortedTime / sortedCount) + " ns"); + } + + if (!collection.isEmpty()) { + System.err.println(name+" sorted isEmpty() failed."); + handleError(collection); + return false; + } + if (collection.size()!=0) { + System.err.println(name+" sorted size() failed."); + handleError(collection); + return false; + } + } + + if (testResults[testIndex] == null) testResults[testIndex] = new long[6]; + testResults[testIndex][0] += addTime / unsortedCount; + testResults[testIndex][1] += removeTime / unsortedCount; + testResults[testIndex][2] += addSortedTime / sortedCount; + testResults[testIndex][3] += removeSortedTime / sortedCount; + testResults[testIndex][4] += lookupTime / (unsortedCount + sortedCount); + testResults[testIndex++][5] += memory / (unsortedCount + sortedCount); + + if (debug > 1) System.out.println(); + + return true; + } + + private static boolean testJavaMap(java.util.Map map, Type keyType, String name) { + // Make sure the map is empty + if (!map.isEmpty()) { + System.err.println(name+" initial isEmpty() failed."); + handleError(map); + return false; + } + if (map.size()!=0) { + System.err.println(name+" initial size() failed."); + handleError(map); + return false; + } + + long sortedCount = 0; + long unsortedCount = 0; + + long addTime = 0L; + long removeTime = 0L; + + long beforeAddTime = 0L; + long afterAddTime = 0L; + long beforeRemoveTime = 0L; + long afterRemoveTime = 0L; + + long memory = 0L; + + long beforeMemory = 0L; + long afterMemory = 0L; + + long lookupTime = 0L; + + long beforeLookupTime = 0L; + long afterLookupTime = 0L; + + if (debug > 1) System.out.println(name); + testNames[testIndex] = name; + + unsortedCount++; + { + beforeMemory = 0L; + afterMemory = 0L; + beforeAddTime = 0L; + afterAddTime = 0L; + if (debugMemory) beforeMemory = DataStructuresTiming.getMemoryUse(); + if (debugTime) beforeAddTime = System.nanoTime(); + for (int i = 0; i < unsorted.length; i++) { + Integer item = unsorted[i]; + K k = null; + V v = null; + if (keyType == Type.Integer) { + k = (K)item; + v = (V)String.valueOf(item); + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + v = (V)item; + } + map.put(k, v); + } + if (debugTime) { + afterAddTime = System.nanoTime(); + addTime += afterAddTime - beforeAddTime; + if (debug > 0) System.out.println(name+" unsorted add time = " + (addTime / unsortedCount) + " ns"); + } + if (debugMemory) { + afterMemory = DataStructuresTiming.getMemoryUse(); + memory += afterMemory - beforeMemory; + if (debug > 0) System.out.println(name+" unsorted memory use = " + (memory / (unsortedCount+sortedCount)) + " bytes"); + } + + K invalidKey = null; + if (keyType == Type.Integer) { + invalidKey = (K)INVALID; + } else if (keyType == Type.String) { + invalidKey = (K)String.valueOf(INVALID); + } + boolean contains = map.containsKey(invalidKey); + V removed = map.remove(invalidKey); + if (contains || (removed!=null)) { + System.err.println(name+" unsorted invalidity check. contains=" + contains + " removed=" + removed); + return false; + } + + if (debug > 1) System.out.println(map.toString()); + + beforeLookupTime = 0L; + afterLookupTime = 0L; + if (debugTime) beforeLookupTime = System.nanoTime(); + for (Integer item : unsorted) { + K k = null; + if (keyType == Type.Integer) { + k = (K)item; + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + } + map.containsKey(k); + } + if (debugTime) { + afterLookupTime = System.nanoTime(); + lookupTime += afterLookupTime - beforeLookupTime; + if (debug > 0) System.out.println(name+" unsorted lookup time = " + (lookupTime / (unsortedCount+sortedCount)) + " ns"); + } + + if (debugTime) beforeRemoveTime = System.nanoTime(); + for (int i = 0; i < unsorted.length; i++) { + Integer item = unsorted[i]; + K k = null; + if (keyType == Type.Integer) { + k = (K)item; + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + } + removed = map.remove(k); + if (removed==null) { + System.err.println(name+" unsorted invalidity check. removed=" + removed); + return false; + } + + } + if (debugTime) { + afterRemoveTime = System.nanoTime(); + removeTime += afterRemoveTime - beforeRemoveTime; + if (debug > 0) System.out.println(name+" unsorted remove time = " + (removeTime / unsortedCount) + " ns"); + } + + if (!map.isEmpty()) { + System.err.println(name+" unsorted isEmpty() failed."); + handleError(map); + return false; + } + if (map.size()!=0) { + System.err.println(name+" unsorted size() failed."); + handleError(map); + return false; + } + } + + unsortedCount++; + { + beforeMemory = 0L; + afterMemory = 0L; + beforeAddTime = 0L; + afterAddTime = 0L; + if (debugMemory) beforeMemory = DataStructuresTiming.getMemoryUse(); + if (debugTime) beforeAddTime = System.nanoTime(); + for (int i = unsorted.length - 1; i >= 0; i--) { + Integer item = unsorted[i]; + K k = null; + V v = null; + if (keyType == Type.Integer) { + k = (K)item; + v = (V)String.valueOf(item); + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + v = (V)item; + } + map.put(k, v); + } + if (debugTime) { + afterAddTime = System.nanoTime(); + addTime += afterAddTime - beforeAddTime; + if (debug > 0) System.out.println(name+" unsorted add time = " + (addTime / unsortedCount) + " ns"); + } + if (debugMemory) { + afterMemory = DataStructuresTiming.getMemoryUse(); + memory += afterMemory - beforeMemory; + if (debug > 0) System.out.println(name+" unsorted memory use = " + (memory / (unsortedCount+sortedCount)) + " bytes"); + } + + K invalidKey = null; + if (keyType == Type.Integer) { + invalidKey = (K)INVALID; + } else if (keyType == Type.String) { + invalidKey = (K)String.valueOf(INVALID); + } + boolean contains = map.containsKey(invalidKey); + V removed = map.remove(invalidKey); + if (contains || (removed!=null)) { + System.err.println(name+" unsorted invalidity check. contains=" + contains + " removed=" + removed); + return false; + } + + if (debug > 1) System.out.println(map.toString()); + + beforeLookupTime = 0L; + afterLookupTime = 0L; + if (debugTime) beforeLookupTime = System.nanoTime(); + for (Integer item : unsorted) { + K k = null; + if (keyType == Type.Integer) { + k = (K)item; + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + } + map.containsKey(k); + } + if (debugTime) { + afterLookupTime = System.nanoTime(); + lookupTime += afterLookupTime - beforeLookupTime; + if (debug > 0) System.out.println(name+" unsorted lookup time = " + (lookupTime / (unsortedCount+sortedCount)) + " ns"); + } + + beforeRemoveTime = 0L; + afterRemoveTime = 0L; + if (debugTime) beforeRemoveTime = System.nanoTime(); + for (int i = unsorted.length - 1; i >= 0; i--) { + Integer item = unsorted[i]; + K k = null; + if (keyType == Type.Integer) { + k = (K)item; + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + } + removed = map.remove(k); + if (removed==null) { + System.err.println(name+" unsorted invalidity check. removed=" + removed); + return false; + } + } + if (debugTime) { + afterRemoveTime = System.nanoTime(); + removeTime += afterRemoveTime - beforeRemoveTime; + if (debug > 0) System.out.println(name+" unsorted remove time = " + (removeTime / unsortedCount) + " ns"); + } + + if (!map.isEmpty()) { + System.err.println(name+" unsorted isEmpty() failed."); + handleError(map); + return false; + } + if (map.size()!=0) { + System.err.println(name+" unsorted size() failed."); + handleError(map); + return false; + } + } + + long addSortedTime = 0L; + long removeSortedTime = 0L; + + long beforeAddSortedTime = 0L; + long afterAddSortedTime = 0L; + + long beforeRemoveSortedTime = 0L; + long afterRemoveSortedTime = 0L; + + sortedCount++; + { // sorted + beforeMemory = 0L; + afterMemory = 0L; + beforeAddSortedTime = 0L; + afterAddSortedTime = 0L; + if (debugMemory) beforeMemory = DataStructuresTiming.getMemoryUse(); + if (debugTime) beforeAddSortedTime = System.nanoTime(); + for (int i = 0; i < sorted.length; i++) { + Integer item = sorted[i]; + K k = null; + V v = null; + if (keyType == Type.Integer) { + k = (K)item; + v = (V)String.valueOf(item); + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + v = (V)item; + } + map.put(k, v); + } + if (debugTime) { + afterAddSortedTime = System.nanoTime(); + addSortedTime += afterAddSortedTime - beforeAddSortedTime; + if (debug > 0) System.out.println(name+" sorted add time = " + (addSortedTime / sortedCount) + " ns"); + } + if (debugMemory) { + afterMemory = DataStructuresTiming.getMemoryUse(); + memory += afterMemory - beforeMemory; + if (debug > 0) System.out.println(name+" sorted memory use = " + (memory / (unsortedCount+sortedCount)) + " bytes"); + } + + K invalidKey = null; + if (keyType == Type.Integer) { + invalidKey = (K)INVALID; + } else if (keyType == Type.String) { + invalidKey = (K)String.valueOf(INVALID); + } + boolean contains = map.containsKey(invalidKey); + V removed = map.remove(invalidKey); + if (contains || (removed!=null)) { + System.err.println(name+" sorted invalidity check. contains=" + contains + " removed=" + removed); + return false; + } + + if (debug > 1) System.out.println(map.toString()); + + beforeLookupTime = 0L; + afterLookupTime = 0L; + if (debugTime) beforeLookupTime = System.nanoTime(); + for (Integer item : sorted) { + K k = null; + if (keyType == Type.Integer) { + k = (K)item; + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + } + map.containsKey(k); + } + if (debugTime) { + afterLookupTime = System.nanoTime(); + lookupTime += afterLookupTime - beforeLookupTime; + if (debug > 0) System.out.println(name+" sorted lookup time = " + (lookupTime / (unsortedCount+sortedCount)) + " ns"); + } + + beforeRemoveSortedTime = 0L; + afterRemoveSortedTime = 0L; + if (debugTime) beforeRemoveSortedTime = System.nanoTime(); + for (int i = 0; i < sorted.length; i++) { + Integer item = sorted[i]; + K k = null; + if (keyType == Type.Integer) { + k = (K)item; + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + } + removed = map.remove(k); + if (removed==null) { + System.err.println(name+" unsorted invalidity check. removed=" + removed); + return false; + } + } + if (debugTime) { + afterRemoveSortedTime = System.nanoTime(); + removeSortedTime += afterRemoveSortedTime - beforeRemoveSortedTime; + if (debug > 0) System.out.println(name+" sorted remove time = " + (removeSortedTime / sortedCount) + " ns"); + } + + if (!map.isEmpty()) { + System.err.println(name+" sorted isEmpty() failed."); + handleError(map); + return false; + } + if (map.size()!=0) { + System.err.println(name+" sorted size() failed."); + handleError(map); + return false; + } + } + + sortedCount++; + { // sorted + beforeMemory = 0L; + afterMemory = 0L; + beforeAddSortedTime = 0L; + afterAddSortedTime = 0L; + if (debugMemory) beforeMemory = DataStructuresTiming.getMemoryUse(); + if (debugTime) beforeAddSortedTime = System.nanoTime(); + for (int i = 0; i < sorted.length; i++) { + Integer item = sorted[i]; + K k = null; + V v = null; + if (keyType == Type.Integer) { + k = (K)item; + v = (V)String.valueOf(item); + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + v = (V)item; + } + map.put(k, v); + } + if (debugTime) { + afterAddSortedTime = System.nanoTime(); + addSortedTime += afterAddSortedTime - beforeAddSortedTime; + if (debug > 0) System.out.println(name+" sorted add time = " + (addSortedTime / sortedCount) + " ns"); + } + if (debugMemory) { + afterMemory = DataStructuresTiming.getMemoryUse(); + memory += afterMemory - beforeMemory; + if (debug > 0) System.out.println(name+" sorted memory use = " + (memory / (unsortedCount+sortedCount)) + " bytes"); + } + + K invalidKey = null; + if (keyType == Type.Integer) { + invalidKey = (K)INVALID; + } else if (keyType == Type.String) { + invalidKey = (K)String.valueOf(INVALID); + } + boolean contains = map.containsKey(invalidKey); + V removed = map.remove(invalidKey); + if (contains || (removed!=null)) { + System.err.println(name+" sorted invalidity check. contains=" + contains + " removed=" + removed); + return false; + } + + if (debug > 1) System.out.println(map.toString()); + + beforeLookupTime = 0L; + afterLookupTime = 0L; + if (debugTime) beforeLookupTime = System.nanoTime(); + for (Integer item : sorted) { + K k = null; + if (keyType == Type.Integer) { + k = (K)item; + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + } + map.containsKey(k); + } + if (debugTime) { + afterLookupTime = System.nanoTime(); + lookupTime += afterLookupTime - beforeLookupTime; + if (debug > 0) System.out.println(name+" sorted lookup time = " + (lookupTime / (unsortedCount+sortedCount)) + " ns"); + } + + beforeRemoveSortedTime = 0L; + afterRemoveSortedTime = 0L; + if (debugTime) beforeRemoveSortedTime = System.nanoTime(); + for (int i = sorted.length - 1; i >= 0; i--) { + Integer item = sorted[i]; + K k = null; + if (keyType == Type.Integer) { + k = (K)item; + } else if (keyType == Type.String) { + k = (K)String.valueOf(item); + } + removed = map.remove(k); + if (removed==null) { + System.err.println(name+" unsorted invalidity check. removed=" + removed); + return false; + } + } + if (debugTime) { + afterRemoveSortedTime = System.nanoTime(); + removeSortedTime += afterRemoveSortedTime - beforeRemoveSortedTime; + if (debug > 0) System.out.println(name+" sorted remove time = " + (removeSortedTime / sortedCount) + " ns"); + } + + if (!map.isEmpty()) { + System.err.println(name+" sorted isEmpty() failed."); + handleError(map); + return false; + } + if (map.size()!=0) { + System.err.println(name+" sorted size() failed."); + handleError(map); + return false; + } + + } + + if (testResults[testIndex] == null) testResults[testIndex] = new long[6]; + testResults[testIndex][0] += addTime / unsortedCount; + testResults[testIndex][1] += removeTime / unsortedCount; + testResults[testIndex][2] += addSortedTime / sortedCount; + testResults[testIndex][3] += removeSortedTime / sortedCount; + testResults[testIndex][4] += lookupTime / (unsortedCount + sortedCount); + testResults[testIndex++][5] += memory / (unsortedCount + sortedCount); + + if (debug > 1) System.out.println(); + + return true; + } + + private static final String getTestResults(int testNumber, String[] names, long[][] results) { + StringBuilder resultsBuilder = new StringBuilder(); + String format = "%-32s %-10s %-15s %-15s %-20s %-15s %-15s\n"; + Formatter formatter = new Formatter(resultsBuilder, Locale.US); + formatter.format(format, "Data Structure", "Add time", "Remove time", "Sorted add time", "Sorted remove time", "Lookup time", "Size"); + + double KB = 1000; + double MB = 1000 * KB; + + double MILLIS = 1000000; + double SECOND = 1000; + double MINUTES = 60 * SECOND; + + for (int i=0; i MINUTES) { + addTime /= MINUTES; + addTimeString = FORMAT.format(addTime) + " m"; + } else if (addTime > SECOND) { + addTime /= SECOND; + addTimeString = FORMAT.format(addTime) + " s"; + } else { + addTimeString = FORMAT.format(addTime) + " ms"; + } + + double removeTime = result[1] / MILLIS; + removeTime /= testNumber; + String removeTimeString = null; + if (removeTime > MINUTES) { + removeTime /= MINUTES; + removeTimeString = FORMAT.format(removeTime) + " m"; + } else if (removeTime > SECOND) { + removeTime /= SECOND; + removeTimeString = FORMAT.format(removeTime) + " s"; + } else { + removeTimeString = FORMAT.format(removeTime) + " ms"; + } + + // sorted + double addSortedTime = result[2] / MILLIS; + addSortedTime /= testNumber; + String sortedAddTimeString = null; + if (addSortedTime > MINUTES) { + addSortedTime /= MINUTES; + sortedAddTimeString = FORMAT.format(addSortedTime) + " m"; + } else if (addSortedTime > SECOND) { + addSortedTime /= SECOND; + sortedAddTimeString = FORMAT.format(addSortedTime) + " s"; + } else { + sortedAddTimeString = FORMAT.format(addSortedTime) + " ms"; + } + + double removeSortedTime = result[3] / MILLIS; + removeSortedTime /= testNumber; + String sortedRemoveTimeString = null; + if (removeSortedTime > MINUTES) { + removeSortedTime /= MINUTES; + sortedRemoveTimeString = FORMAT.format(removeSortedTime) + " m"; + } else if (removeSortedTime > SECOND) { + removeSortedTime /= SECOND; + sortedRemoveTimeString = FORMAT.format(removeSortedTime) + " s"; + } else { + sortedRemoveTimeString = FORMAT.format(removeSortedTime) + " ms"; + } + + double lookupTime = result[4] / MILLIS; + lookupTime /= testNumber; + String lookupTimeString = null; + if (lookupTime > MINUTES) { + lookupTime /= MINUTES; + lookupTimeString = FORMAT.format(lookupTime) + " m"; + } else if (lookupTime > SECOND) { + lookupTime /= SECOND; + lookupTimeString = FORMAT.format(lookupTime) + " s"; + } else { + lookupTimeString = FORMAT.format(lookupTime) + " ms"; + } + + double size = result[5]; + size /= testNumber; + String sizeString = null; + if (size > MB) { + size = size / MB; + sizeString = FORMAT.format(size) + " MB"; + } else if (size > KB) { + size = size / KB; + sizeString = FORMAT.format(size) + " KB"; + } else { + sizeString = FORMAT.format(size) + " Bytes"; + } + + formatter.format(format, name, addTimeString, removeTimeString, sortedAddTimeString, sortedRemoveTimeString, lookupTimeString, sizeString); + } + } + formatter.close(); + + return resultsBuilder.toString(); + } + + private static final long getMemoryUse() { + putOutTheGarbage(); + long totalMemory = Runtime.getRuntime().totalMemory(); + + putOutTheGarbage(); + long freeMemory = Runtime.getRuntime().freeMemory(); + + return (totalMemory - freeMemory); + } + + private static final void putOutTheGarbage() { + collectGarbage(); + collectGarbage(); + collectGarbage(); + } + + private static final long fSLEEP_INTERVAL = 100; + + private static final void collectGarbage() { + try { + System.gc(); + Thread.sleep(fSLEEP_INTERVAL); + System.runFinalization(); + Thread.sleep(fSLEEP_INTERVAL); + } catch (InterruptedException ex) { + ex.printStackTrace(); + } + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/BinaryHeap.java b/src/com/jwetherell/algorithms/data_structures/BinaryHeap.java index 61ecf952..7a3bc6c1 100644 --- a/src/com/jwetherell/algorithms/data_structures/BinaryHeap.java +++ b/src/com/jwetherell/algorithms/data_structures/BinaryHeap.java @@ -24,11 +24,11 @@ public interface BinaryHeap> extends IHeap { public enum HeapType { Tree, Array - }; + } public enum Type { MIN, MAX - }; + } /** * Get the heap in array form. diff --git a/src/com/jwetherell/algorithms/data_structures/ISuffixTree.java b/src/com/jwetherell/algorithms/data_structures/ISuffixTree.java new file mode 100644 index 00000000..d69d099d --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/ISuffixTree.java @@ -0,0 +1,30 @@ +package com.jwetherell.algorithms.data_structures; + +import java.util.Set; + +/** + * In computer science, a suffix tree (also called PAT tree or, in an earlier form, position tree) is a compressed trie + * containing all the suffixes of the given text as their keys and positions in the text as their values. Suffix trees + * allow particularly fast implementations of many important string operations. + * + * http://en.wikipedia.org/wiki/Suffix_tree + * + * @author Justin Wetherell + */ +public interface ISuffixTree { + + /** + * Does the sub-sequence exist in the suffix tree. + * + * @param sub-sequence to locate in the tree. + * @return True if the sub-sequence exist in the tree. + */ + public boolean doesSubStringExist(C sub); + + /** + * Get all the suffixes in the tree. + * + * @return set of suffixes in the tree. + */ + public Set getSuffixes(); +} diff --git a/src/com/jwetherell/algorithms/data_structures/SuffixTree.java b/src/com/jwetherell/algorithms/data_structures/SuffixTree.java index 038225db..f02f7730 100644 --- a/src/com/jwetherell/algorithms/data_structures/SuffixTree.java +++ b/src/com/jwetherell/algorithms/data_structures/SuffixTree.java @@ -18,7 +18,7 @@ * * @author Justin Wetherell */ -public class SuffixTree { +public class SuffixTree implements ISuffixTree { private static final char DEFAULT_END_SEQ_CHAR = '$'; diff --git a/src/com/jwetherell/algorithms/data_structures/SuffixTrie.java b/src/com/jwetherell/algorithms/data_structures/SuffixTrie.java index 640d2bec..3149a566 100644 --- a/src/com/jwetherell/algorithms/data_structures/SuffixTrie.java +++ b/src/com/jwetherell/algorithms/data_structures/SuffixTrie.java @@ -15,7 +15,7 @@ * * @author Justin Wetherell */ -public class SuffixTrie { +public class SuffixTrie implements ISuffixTree { private Trie tree = null; diff --git a/src/com/jwetherell/algorithms/data_structures/test/AVLTreeTests.java b/src/com/jwetherell/algorithms/data_structures/test/AVLTreeTests.java index 93e852a9..522f2e7d 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/AVLTreeTests.java +++ b/src/com/jwetherell/algorithms/data_structures/test/AVLTreeTests.java @@ -27,6 +27,6 @@ public void testAVLTree() { assertTrue(TreeTest.testTree(bst, Type.Integer, bstName, data.unsorted, data.invalid)); assertTrue(JavaCollectionTest.testCollection(bstCollection, Type.Integer, bstName, - data.unsorted, data.sorted)); + data.unsorted, data.sorted, data.invalid)); } } diff --git a/src/com/jwetherell/algorithms/data_structures/test/AllTests.java b/src/com/jwetherell/algorithms/data_structures/test/AllTests.java index 6d51c53c..45c303f0 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/AllTests.java +++ b/src/com/jwetherell/algorithms/data_structures/test/AllTests.java @@ -28,6 +28,12 @@ SkipListTests.class, SplayTreeTests.class, StackTests.class, + SuffixTreeTests.class, + SuffixTrieTests.class, + TreapTests.class, + TreeMapTests.class, + TrieTests.class, + TrieMapTests.class } ) diff --git a/src/com/jwetherell/algorithms/data_structures/test/BTreeTests.java b/src/com/jwetherell/algorithms/data_structures/test/BTreeTests.java index c34875b6..63f5067f 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/BTreeTests.java +++ b/src/com/jwetherell/algorithms/data_structures/test/BTreeTests.java @@ -25,6 +25,6 @@ public void testBTree() { assertTrue(TreeTest.testTree(bst, Type.Integer, bstName, data.unsorted, data.invalid)); assertTrue(JavaCollectionTest.testCollection(bstCollection, Type.Integer, bstName, - data.unsorted, data.sorted)); + data.unsorted, data.sorted, data.invalid)); } } diff --git a/src/com/jwetherell/algorithms/data_structures/test/BinaryHeapTests.java b/src/com/jwetherell/algorithms/data_structures/test/BinaryHeapTests.java index 4cd7f2d2..d959f185 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/BinaryHeapTests.java +++ b/src/com/jwetherell/algorithms/data_structures/test/BinaryHeapTests.java @@ -1,6 +1,6 @@ package com.jwetherell.algorithms.data_structures.test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertTrue; import java.util.Collection; @@ -17,23 +17,23 @@ public class BinaryHeapTests { @Test public void testMinHeap() { - TestData data = Utils.generateTestData(1000); + TestData data = Utils.generateTestData(100); String aNameMin = "Min-Heap [array]"; BinaryHeap.BinaryHeapArray aHeapMin = new BinaryHeap.BinaryHeapArray(BinaryHeap.Type.MIN); Collection aCollectionMin = aHeapMin.toCollection(); - assertTrue(HeapTest.testHeap(aHeapMin, aNameMin, BinaryHeap.Type.MIN, + assertTrue(HeapTest.testHeap(BinaryHeap.Type.MIN, aHeapMin, Type.Integer, aNameMin, data.unsorted, data.sorted, data.invalid)); assertTrue(JavaCollectionTest.testCollection(aCollectionMin, Type.Integer, aNameMin, - data.unsorted, data.sorted)); + data.unsorted, data.sorted, data.invalid)); String tNameMin = "Min-Heap [tree]"; BinaryHeap.BinaryHeapTree tHeapMin = new BinaryHeap.BinaryHeapTree(BinaryHeap.Type.MIN); Collection tCollectionMin = tHeapMin.toCollection(); - assertTrue(HeapTest.testHeap(tHeapMin, tNameMin, BinaryHeap.Type.MIN, + assertTrue(HeapTest.testHeap(BinaryHeap.Type.MIN, tHeapMin, Type.Integer, tNameMin, data.unsorted, data.sorted, data.invalid)); assertTrue(JavaCollectionTest.testCollection(tCollectionMin, Type.Integer, tNameMin, - data.unsorted, data.sorted)); + data.unsorted, data.sorted, data.invalid)); } @Test @@ -43,17 +43,17 @@ public void testMaxHeap() { String aNameMax = "Max-Heap [array]"; BinaryHeap.BinaryHeapArray aHeapMax = new BinaryHeap.BinaryHeapArray(BinaryHeap.Type.MAX); Collection aCollectionMax = aHeapMax.toCollection(); - assertTrue(HeapTest.testHeap(aHeapMax, aNameMax, BinaryHeap.Type.MAX, + assertTrue(HeapTest.testHeap(BinaryHeap.Type.MAX, aHeapMax, Type.Integer, aNameMax, data.unsorted, data.sorted, data.invalid)); assertTrue(JavaCollectionTest.testCollection(aCollectionMax, Type.Integer, aNameMax, - data.unsorted, data.sorted)); + data.unsorted, data.sorted, data.invalid)); String lNameMax = "Max-Heap [tree]"; BinaryHeap.BinaryHeapTree tHeapMax = new BinaryHeap.BinaryHeapTree(BinaryHeap.Type.MAX); Collection tCollectionMax = tHeapMax.toCollection(); - assertTrue(HeapTest.testHeap(tHeapMax, lNameMax, BinaryHeap.Type.MAX, + assertTrue(HeapTest.testHeap(BinaryHeap.Type.MAX, tHeapMax, Type.Integer, lNameMax, data.unsorted, data.sorted, data.invalid)); assertTrue(JavaCollectionTest.testCollection(tCollectionMax, Type.Integer, lNameMax, - data.unsorted, data.sorted)); + data.unsorted, data.sorted, data.invalid)); } } diff --git a/src/com/jwetherell/algorithms/data_structures/test/BinarySearchTreeTests.java b/src/com/jwetherell/algorithms/data_structures/test/BinarySearchTreeTests.java index eac68587..3983906a 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/BinarySearchTreeTests.java +++ b/src/com/jwetherell/algorithms/data_structures/test/BinarySearchTreeTests.java @@ -26,6 +26,6 @@ public void testBST() { assertTrue(TreeTest.testTree(bst, Type.Integer, bstName, data.unsorted, data.invalid)); assertTrue(JavaCollectionTest.testCollection(bstCollection, Type.Integer, bstName, - data.unsorted, data.sorted)); + data.unsorted, data.sorted, data.invalid)); } } diff --git a/src/com/jwetherell/algorithms/data_structures/test/ListTests.java b/src/com/jwetherell/algorithms/data_structures/test/ListTests.java index cb268962..de27cd81 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/ListTests.java +++ b/src/com/jwetherell/algorithms/data_structures/test/ListTests.java @@ -26,7 +26,7 @@ public void testArrayList() { assertTrue(ListTest.testList(aList, aName, data.unsorted, data.invalid)); assertTrue(JavaCollectionTest.testCollection(aCollection, Type.Integer, aName, - data.unsorted, data.sorted)); + data.unsorted, data.sorted, data.invalid)); } @Test @@ -40,6 +40,6 @@ public void testLinkedList() { assertTrue(ListTest.testList(lList, lName, data.unsorted, data.invalid)); assertTrue(JavaCollectionTest.testCollection(lCollection, Type.Integer, lName, - data.unsorted, data.sorted)); + data.unsorted, data.sorted, data.invalid)); } } diff --git a/src/com/jwetherell/algorithms/data_structures/test/PatriciaTreeTests.java b/src/com/jwetherell/algorithms/data_structures/test/PatriciaTreeTests.java index b5f71c86..155cff69 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/PatriciaTreeTests.java +++ b/src/com/jwetherell/algorithms/data_structures/test/PatriciaTreeTests.java @@ -26,6 +26,6 @@ public void testPatriciaTrie() { assertTrue(TreeTest.testTree(bst, Type.String, bstName, data.unsorted, data.invalid)); assertTrue(JavaCollectionTest.testCollection(bstCollection, Type.String, bstName, - data.unsorted, data.sorted)); + data.unsorted, data.sorted, data.invalid)); } } diff --git a/src/com/jwetherell/algorithms/data_structures/test/QueueTests.java b/src/com/jwetherell/algorithms/data_structures/test/QueueTests.java index f545cee6..0fe9f3fc 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/QueueTests.java +++ b/src/com/jwetherell/algorithms/data_structures/test/QueueTests.java @@ -26,7 +26,7 @@ public void testArrayQueue() { assertTrue(QueueTest.testQueue(aQueue, aName, data.unsorted, data.invalid)); assertTrue(JavaCollectionTest.testCollection(aCollection, Type.Integer, aName, - data.unsorted, data.sorted)); + data.unsorted, data.sorted, data.invalid)); } @Test @@ -40,6 +40,6 @@ public void testLinkedQueue() { assertTrue(QueueTest.testQueue(lQueue, lName, data.unsorted, data.invalid)); assertTrue(JavaCollectionTest.testCollection(lCollection, Type.Integer, lName, - data.unsorted, data.sorted)); + data.unsorted, data.sorted, data.invalid)); } } diff --git a/src/com/jwetherell/algorithms/data_structures/test/RedBlackTreeTests.java b/src/com/jwetherell/algorithms/data_structures/test/RedBlackTreeTests.java index 7c4ebe6f..15c55f74 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/RedBlackTreeTests.java +++ b/src/com/jwetherell/algorithms/data_structures/test/RedBlackTreeTests.java @@ -26,6 +26,6 @@ public void testRedBlackTree() { assertTrue(TreeTest.testTree(bst, Type.Integer, bstName, data.unsorted, data.invalid)); assertTrue(JavaCollectionTest.testCollection(bstCollection, Type.Integer, bstName, - data.unsorted, data.sorted)); + data.unsorted, data.sorted, data.invalid)); } } diff --git a/src/com/jwetherell/algorithms/data_structures/test/SegmentTreeTests.java b/src/com/jwetherell/algorithms/data_structures/test/SegmentTreeTests.java index a6998191..0c9f172c 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/SegmentTreeTests.java +++ b/src/com/jwetherell/algorithms/data_structures/test/SegmentTreeTests.java @@ -14,8 +14,6 @@ public class SegmentTreeTests { @Test public void testSegmentTree() { - System.out.println("Segment Tree."); - { // Quadrant Segment tree java.util.List segments = new ArrayList(); segments.add(new SegmentTree.Data.QuadrantData(0, 1, 0, 0, 0)); // first point in the 0th quadrant diff --git a/src/com/jwetherell/algorithms/data_structures/test/SkipListTests.java b/src/com/jwetherell/algorithms/data_structures/test/SkipListTests.java index 9dae89fa..66eb7d4b 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/SkipListTests.java +++ b/src/com/jwetherell/algorithms/data_structures/test/SkipListTests.java @@ -26,6 +26,6 @@ public void testSkipList() { assertTrue(SetTest.testSet(sList, sName, data.unsorted, data.invalid)); assertTrue(JavaCollectionTest.testCollection(lCollection, Type.Integer, sName, - data.unsorted, data.sorted)); + data.unsorted, data.sorted, data.invalid)); } } diff --git a/src/com/jwetherell/algorithms/data_structures/test/SplayTreeTests.java b/src/com/jwetherell/algorithms/data_structures/test/SplayTreeTests.java index 44aa2a8f..fdf77835 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/SplayTreeTests.java +++ b/src/com/jwetherell/algorithms/data_structures/test/SplayTreeTests.java @@ -27,7 +27,7 @@ public void testSplayTree() { assertTrue(TreeTest.testTree(bst, Type.Integer, bstName, data.unsorted, data.invalid)); assertTrue(JavaCollectionTest.testCollection(bstCollection, Type.Integer, bstName, - data.unsorted, data.sorted)); + data.unsorted, data.sorted, data.invalid)); } } diff --git a/src/com/jwetherell/algorithms/data_structures/test/StackTests.java b/src/com/jwetherell/algorithms/data_structures/test/StackTests.java index 9a8fb487..26a08d87 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/StackTests.java +++ b/src/com/jwetherell/algorithms/data_structures/test/StackTests.java @@ -26,7 +26,7 @@ public void testArrayStack() { assertTrue(StackTest.testStack(aStack, aName, data.unsorted, data.invalid)); assertTrue(JavaCollectionTest.testCollection(aCollection, Type.Integer, aName, - data.unsorted, data.sorted)); + data.unsorted, data.sorted, data.invalid)); } @Test @@ -40,6 +40,6 @@ public void testLinkedStack() { assertTrue(StackTest.testStack(lStack, lName, data.unsorted, data.invalid)); assertTrue(JavaCollectionTest.testCollection(lCollection, Type.Integer, lName, - data.unsorted, data.sorted)); + data.unsorted, data.sorted, data.invalid)); } } diff --git a/src/com/jwetherell/algorithms/data_structures/test/SuffixTreeTests.java b/src/com/jwetherell/algorithms/data_structures/test/SuffixTreeTests.java new file mode 100644 index 00000000..014e14a1 --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/SuffixTreeTests.java @@ -0,0 +1,18 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.SuffixTree; +import com.jwetherell.algorithms.data_structures.test.common.SuffixTreeTest; + +public class SuffixTreeTests { + + @Test + public void testSuffixTree() { + String bookkeeper = "bookkeeper"; + SuffixTree tree = new SuffixTree(bookkeeper); + assertTrue(SuffixTreeTest.suffixTreeTest(tree, bookkeeper)); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/SuffixTrieTests.java b/src/com/jwetherell/algorithms/data_structures/test/SuffixTrieTests.java new file mode 100644 index 00000000..0da3e6fb --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/SuffixTrieTests.java @@ -0,0 +1,18 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.SuffixTrie; +import com.jwetherell.algorithms.data_structures.test.common.SuffixTreeTest; + +public class SuffixTrieTests { + + @Test + public void testSuffixTrie() { + String bookkeeper = "bookkeeper"; + SuffixTrie trie = new SuffixTrie(bookkeeper); + assertTrue(SuffixTreeTest.suffixTreeTest(trie, bookkeeper)); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/TreapTests.java b/src/com/jwetherell/algorithms/data_structures/test/TreapTests.java new file mode 100644 index 00000000..5e1fbb3f --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/TreapTests.java @@ -0,0 +1,32 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.assertTrue; + +import java.util.Collection; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.BinarySearchTree; +import com.jwetherell.algorithms.data_structures.Treap; +import com.jwetherell.algorithms.data_structures.test.common.JavaCollectionTest; +import com.jwetherell.algorithms.data_structures.test.common.TreeTest; +import com.jwetherell.algorithms.data_structures.test.common.Utils; +import com.jwetherell.algorithms.data_structures.test.common.Utils.TestData; +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; + +public class TreapTests { + + @Test + public void testTreap() { + TestData data = Utils.generateTestData(1000); + + String bstName = "Treap"; + BinarySearchTree bst = new Treap(); + Collection bstCollection = bst.toCollection(); + + assertTrue(TreeTest.testTree(bst, Type.Integer, bstName, + data.unsorted, data.invalid)); + assertTrue(JavaCollectionTest.testCollection(bstCollection, Type.Integer, bstName, + data.unsorted, data.sorted, data.invalid)); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/TreeMapTests.java b/src/com/jwetherell/algorithms/data_structures/test/TreeMapTests.java new file mode 100644 index 00000000..fb7f430f --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/TreeMapTests.java @@ -0,0 +1,29 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.TreeMap; +import com.jwetherell.algorithms.data_structures.test.common.JavaMapTest; +import com.jwetherell.algorithms.data_structures.test.common.MapTest; +import com.jwetherell.algorithms.data_structures.test.common.Utils; +import com.jwetherell.algorithms.data_structures.test.common.Utils.TestData; +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; + +public class TreeMapTests { + + @Test + public void testTreeMap() { + TestData data = Utils.generateTestData(1000); + + String mapName = "TreeMap"; + TreeMap map = new TreeMap(); + java.util.Map jMap = map.toMap(); + + assertTrue(MapTest.testMap(map, Type.String, mapName, + data.unsorted, data.invalid)); + assertTrue(JavaMapTest.testJavaMap(jMap, Type.Integer, mapName, + data.unsorted, data.sorted, data.invalid)); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/TrieMapTests.java b/src/com/jwetherell/algorithms/data_structures/test/TrieMapTests.java new file mode 100644 index 00000000..4c535b06 --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/TrieMapTests.java @@ -0,0 +1,29 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.TrieMap; +import com.jwetherell.algorithms.data_structures.test.common.JavaMapTest; +import com.jwetherell.algorithms.data_structures.test.common.MapTest; +import com.jwetherell.algorithms.data_structures.test.common.Utils; +import com.jwetherell.algorithms.data_structures.test.common.Utils.TestData; +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; + +public class TrieMapTests { + + @Test + public void testTrieMap() { + TestData data = Utils.generateTestData(1000); + + String mapName = "TrieMap"; + TrieMap map = new TrieMap(); + java.util.Map jMap = map.toMap(); + + assertTrue(MapTest.testMap(map, Type.String, mapName, + data.unsorted, data.invalid)); + assertTrue(JavaMapTest.testJavaMap(jMap, Type.String, mapName, + data.unsorted, data.sorted, data.invalid)); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/TrieTests.java b/src/com/jwetherell/algorithms/data_structures/test/TrieTests.java new file mode 100644 index 00000000..c21b4d04 --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/TrieTests.java @@ -0,0 +1,31 @@ +package com.jwetherell.algorithms.data_structures.test; + +import static org.junit.Assert.assertTrue; + +import java.util.Collection; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.Trie; +import com.jwetherell.algorithms.data_structures.test.common.JavaCollectionTest; +import com.jwetherell.algorithms.data_structures.test.common.TreeTest; +import com.jwetherell.algorithms.data_structures.test.common.Utils; +import com.jwetherell.algorithms.data_structures.test.common.Utils.TestData; +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; + +public class TrieTests { + + @Test + public void testTrie() { + TestData data = Utils.generateTestData(1000); + + String bstName = "Trie"; + Trie bst = new Trie(); + Collection bstCollection = bst.toCollection(); + + assertTrue(TreeTest.testTree(bst, Type.String, bstName, + data.unsorted, data.invalid)); + assertTrue(JavaCollectionTest.testCollection(bstCollection, Type.String, bstName, + data.unsorted, data.sorted, data.invalid)); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/HeapTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/HeapTest.java index 1949395e..b91e0f4e 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/common/HeapTest.java +++ b/src/com/jwetherell/algorithms/data_structures/test/common/HeapTest.java @@ -4,14 +4,42 @@ import com.jwetherell.algorithms.data_structures.BinaryHeap; import com.jwetherell.algorithms.data_structures.IHeap; +import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; public class HeapTest { + /** + * Test the heap invariants. + * + * In computer science, a heap is a specialized tree-based data structure that satisfies the heap property: If A is a parent + * node of B then the key of node A is ordered with respect to the key of node B with the same ordering applying across the + * heap. Either the keys of parent nodes are always greater than or equal to those of the children and the highest key is in + * the root node (this kind of heap is called max heap) or the keys of parent nodes are less than or equal to those of the + * children and the lowest key is in the root node (min heap). + * + * http://en.wikipedia.org/wiki/Heap_(data_structure) + * + * @author Justin Wetherell + * + * @param heapType Type of heap (Min or Max). + * @param heap Heap to test. + * @param type Type of data in the heap (Either String or Integer). + * @param name Name used in debug. + * @param unsorted Unsorted test data. + * @param sorted Sorted test data. + * @param invalid Invalid data which isn't in the data-structure. + * @return True if the heap passes it's invariants tests. + */ @SuppressWarnings("unchecked") - public static > boolean testHeap(IHeap heap, String name, BinaryHeap.Type type, - Integer[] unsorted, Integer[] sorted, Integer INVALID) { + public static > boolean testHeap(BinaryHeap.Type heapType, IHeap heap, Type type, String name, + T[] unsorted, T[] sorted, T invalid) { for (int i = 0; i < unsorted.length; i++) { - T item = (T)unsorted[i]; + T item = null; + if (type==Type.Integer) { + item = unsorted[i]; + } else if (type==Type.String) { + item = (T)String.valueOf(unsorted[i]); + } boolean added = heap.add(item); if (!heap.validate() || (heap.size() != i+1)) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); @@ -25,8 +53,8 @@ public static > boolean testHeap(IHeap heap, String n } } - boolean contains = heap.contains((T)INVALID); - T removed = heap.remove((T)INVALID); + boolean contains = heap.contains(invalid); + T removed = heap.remove(invalid); if (contains || (removed!=null)) { System.err.println(name+" invalidity check. contains=" + contains + " removed=" + removed); Utils.handleError(heap); @@ -36,7 +64,9 @@ public static > boolean testHeap(IHeap heap, String n int size = heap.size(); for (int i = 0; i < size; i++) { T item = heap.removeHead(); - T correct = (T)((type == BinaryHeap.Type.MIN)?sorted[i]:sorted[sorted.length-(i+1)]); + T correct = ((heapType == BinaryHeap.Type.MIN)?sorted[i]:sorted[sorted.length-(i+1)]); + if (type == Type.String) + correct = (T)String.valueOf(correct); if (item.compareTo(correct)!=0) { System.err.println(name+" YIKES!! " + item + " does not match heap item."); Utils.handleError(heap); @@ -57,20 +87,20 @@ public static > boolean testHeap(IHeap heap, String n // Add half, remove a quarter, add three-quarters, remove all int quarter = unsorted.length/4; int half = unsorted.length/2; - Integer[] halfArray = Arrays.copyOf(unsorted, half); + T[] halfArray = Arrays.copyOf(unsorted, half); Arrays.sort(halfArray); - Integer[] quarterArray = new Integer[quarter]; - Integer[] sortedQuarterArray = new Integer[quarter]; //Needed for binary search + T[] quarterArray = (T[])new Comparable[quarter]; + T[] sortedQuarterArray = (T[])new Comparable[quarter]; //Needed for binary search for (int i=0; i[] threeQuartersArray = new Comparable[unsorted.length-(half-quarter)]; + for (T i : unsorted) { int index = Arrays.binarySearch(sortedQuarterArray, i); - if (type == BinaryHeap.Type.MIN) { + if (heapType == BinaryHeap.Type.MIN) { if (index>=0) { threeQuartersArray[idx++] = i; } else { @@ -87,7 +117,7 @@ public static > boolean testHeap(IHeap heap, String n } } for (int i = 0; i < half; i++) { - T item = (T)unsorted[i]; + T item = unsorted[i]; boolean added = heap.add(item); if (!heap.validate() || (heap.size() != i+1)) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); @@ -102,7 +132,7 @@ public static > boolean testHeap(IHeap heap, String n } for (int i = 0; i < quarter; i++) { T item = heap.removeHead(); - T correct = (T)quarterArray[i]; + T correct = quarterArray[i]; if (item.compareTo(correct)!=0) { System.err.println(name+" YIKES!! " + item + " does not match heap item."); Utils.handleError(heap); @@ -135,7 +165,7 @@ public static > boolean testHeap(IHeap heap, String n } for (int i = 0; i < sorted.length; i++) { T item = heap.removeHead(); - T correct = (T)((type == BinaryHeap.Type.MIN)?sorted[i]:sorted[sorted.length-(i+1)]); + T correct = ((heapType == BinaryHeap.Type.MIN)?sorted[i]:sorted[sorted.length-(i+1)]); if (item.compareTo(correct)!=0) { System.err.println(name+" YIKES!! " + item + " does not match heap item."); Utils.handleError(heap); diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/IteratorTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/IteratorTest.java index fd30f061..db4f92c6 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/common/IteratorTest.java +++ b/src/com/jwetherell/algorithms/data_structures/test/common/IteratorTest.java @@ -4,6 +4,16 @@ public class IteratorTest { + /** + * In object-oriented computer programming, an iterator is an object that enables a programmer to traverse a container. + * + * http://en.wikipedia.org/wiki/Iterator + * + * @author Justin Wetherell + * + * @param iter Iterator to test. + * @return True if iterator passes invariant tests. + */ public static > boolean testIterator(Iterator iter) { while (iter.hasNext()) { T item = iter.next(); diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/JavaCollectionTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/JavaCollectionTest.java index 4ad228b8..be442f4f 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/common/JavaCollectionTest.java +++ b/src/com/jwetherell/algorithms/data_structures/test/common/JavaCollectionTest.java @@ -6,8 +6,24 @@ public class JavaCollectionTest { - public static > boolean testCollection(Collection collection, Type type, String name, - Integer[] unsorted, Integer[] sorted) { + /** + * In computer science, a collection or container is a grouping of some variable number of data items + * (possibly zero) that have some shared significance to the problem being solved and need to be operated + * upon together in some controlled fashion. + * + * http://en.wikipedia.org/wiki/Collection_(abstract_data_type) + * + * @author Justin Wetherell + * + * @param collection Collection to test. + * @param type Type of data in the collection (Either String or Integer). + * @param name name Name used in debug. + * @param unsorted Unsorted test data. + * @param sorted Sorted test data. + * @return True if the collection passes it's invariants tests. + */ + public static , T extends Comparable> boolean testCollection(Collection collection, Type type, String name, + T[] unsorted, T[] sorted, T invalid) { // Make sure the collection is empty if (!collection.isEmpty()) { System.err.println(name+" initial isEmpty() failed."); @@ -21,13 +37,13 @@ public static > boolean testCollection(Collection col return false; } - addAndRemoveInOrder(collection, type, name, unsorted); - addInOrderRemoveInReverseOrder(collection, type, name, unsorted); - addInReverseOrderAndRemoveInOrder(collection, type, name, unsorted); + addAndRemoveInOrder(collection, type, name, unsorted, invalid); + addInOrderRemoveInReverseOrder(collection, type, name, unsorted, invalid); + addInReverseOrderAndRemoveInOrder(collection, type, name, unsorted, invalid); - addAndRemoveInOrder(collection, type, name, sorted); - addInOrderRemoveInReverseOrder(collection, type, name, sorted); - addInReverseOrderAndRemoveInOrder(collection, type, name, sorted); + addAndRemoveInOrder(collection, type, name, sorted, invalid); + addInOrderRemoveInReverseOrder(collection, type, name, sorted, invalid); + addInReverseOrderAndRemoveInOrder(collection, type, name, sorted, invalid); // Make sure the collection is empty if (!collection.isEmpty()) { @@ -45,16 +61,20 @@ public static > boolean testCollection(Collection col return true; } - @SuppressWarnings("unchecked") - private static > boolean addAndRemoveInOrder(Collection collection, Type type, String name, - Integer[] data) { + @SuppressWarnings({ "unchecked", "cast" }) + private static , T extends Comparable> boolean addAndRemoveInOrder(Collection collection, Type type, String name, + T[] data, T _invalid) { + T invalid = _invalid; + if (type == Type.String) + invalid = (T)String.valueOf(_invalid); + // Add and remove in order (from index zero to length) for (int i = 0; i < data.length; i++) { - T item = null; + C item = null; if (type==Type.Integer) { - item = (T)data[i]; + item = (C)data[i]; } else if (type==Type.String) { - item = (T)String.valueOf(data[i]); + item = (C)String.valueOf(data[i]); } boolean added = collection.add(item); if (!added) { @@ -79,6 +99,14 @@ private static > boolean addAndRemoveInOrder(Collection< } } + boolean contains = collection.contains((T)invalid); + boolean removed = collection.remove((T)invalid); + if (contains || removed) { + System.err.println(name+" invalidity check. contains=" + contains + " removed=" + removed); + Utils.handleError(collection); + return false; + } + for (int i = 0; i < data.length; i++) { T item = null; if (type==Type.Integer) { @@ -86,7 +114,7 @@ private static > boolean addAndRemoveInOrder(Collection< } else if (type==Type.String) { item = (T)String.valueOf(data[i]); } - boolean removed = collection.remove(item); + removed = collection.remove(item); if (!removed) { System.err.println(name+" addAndRemoveInOrder remove failed."); Utils.handleError(collection); @@ -118,16 +146,20 @@ private static > boolean addAndRemoveInOrder(Collection< return true; } - @SuppressWarnings("unchecked") - private static > boolean addInReverseOrderAndRemoveInOrder(Collection collection, Type type, String name, - Integer[] data) { + @SuppressWarnings({ "unchecked", "cast" }) + private static , T extends Comparable> boolean addInReverseOrderAndRemoveInOrder(Collection collection, Type type, String name, + T[] data, T _invalid) { + T invalid = _invalid; + if (type == Type.String) + invalid = (T)String.valueOf(_invalid); + // Add in reverse (from index length-1 to zero) order and then remove in order (from index zero to length) for (int i = data.length - 1; i >= 0; i--) { - T item = null; + C item = null; if (type==Type.Integer) { - item = (T)data[i]; + item = (C)data[i]; } else if (type==Type.String) { - item = (T)String.valueOf(data[i]); + item = (C)String.valueOf(data[i]); } boolean added = collection.add(item); if (!added) { @@ -137,6 +169,14 @@ private static > boolean addInReverseOrderAndRemoveInOrd } } + boolean contains = collection.contains((T)invalid); + boolean removed = collection.remove((T)invalid); + if (contains || removed) { + System.err.println(name+" invalidity check. contains=" + contains + " removed=" + removed); + Utils.handleError(collection); + return false; + } + if (!IteratorTest.testIterator(collection.iterator())) { System.err.println(name+" addInReverseOrderAndRemoveInOrder iterator failed."); Utils.handleError(collection); @@ -150,7 +190,7 @@ private static > boolean addInReverseOrderAndRemoveInOrd } else if (type==Type.String) { item = (T)String.valueOf(data[i]); } - boolean contains = collection.contains(item); + contains = collection.contains(item); if (!contains) { System.err.println(name+" addInReverseOrderAndRemoveInOrder contains failed."); Utils.handleError(collection); @@ -165,7 +205,7 @@ private static > boolean addInReverseOrderAndRemoveInOrd } else if (type==Type.String) { item = (T)String.valueOf(data[i]); } - boolean removed = collection.remove(item); + removed = collection.remove(item); if (!removed) { System.err.println(name+" addInReverseOrderAndRemoveInOrder remove failed."); Utils.handleError(collection); @@ -188,16 +228,20 @@ private static > boolean addInReverseOrderAndRemoveInOrd return true; } - @SuppressWarnings("unchecked") - public static > boolean addInOrderRemoveInReverseOrder(Collection collection, Type type, String name, - Integer[] data) { + @SuppressWarnings({ "unchecked", "cast" }) + public static , T extends Comparable> boolean addInOrderRemoveInReverseOrder(Collection collection, Type type, String name, + T[] data, T _invalid) { + T invalid = _invalid; + if (type == Type.String) + invalid = (T)String.valueOf(_invalid); + // Add in order (from index zero to length) and then remove in reverse (from index length-1 to zero) order for (int i = 0; i < data.length; i++) { - T item = null; + C item = null; if (type==Type.Integer) { - item = (T)data[i]; + item = (C)data[i]; } else if (type==Type.String) { - item = (T)String.valueOf(data[i]); + item = (C)String.valueOf(data[i]); } boolean added = collection.add(item); if (!added) { @@ -207,6 +251,14 @@ public static > boolean addInOrderRemoveInReverseOrder(C } } + boolean contains = collection.contains((T)invalid); + boolean removed = collection.remove((T)invalid); + if (contains || removed) { + System.err.println(name+" invalidity check. contains=" + contains + " removed=" + removed); + Utils.handleError(collection); + return false; + } + if (!IteratorTest.testIterator(collection.iterator())) { System.err.println(name+" addInOrderRemoveInReverseOrder iterator failed."); Utils.handleError(collection); @@ -220,7 +272,7 @@ public static > boolean addInOrderRemoveInReverseOrder(C } else if (type==Type.String) { item = (T)String.valueOf(data[i]); } - boolean contains = collection.contains(item); + contains = collection.contains(item); if (!contains) { System.err.println(name+" addInOrderRemoveInReverseOrder contains failed."); Utils.handleError(collection); @@ -235,7 +287,7 @@ public static > boolean addInOrderRemoveInReverseOrder(C } else if (type==Type.String) { item = (T)String.valueOf(data[i]); } - boolean removed = collection.remove(item); + removed = collection.remove(item); if (!removed) { System.err.println(name+" addInOrderRemoveInReverseOrder remove failed."); Utils.handleError(collection); diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/JavaMapTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/JavaMapTest.java index 6674d1e6..cda747d2 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/common/JavaMapTest.java +++ b/src/com/jwetherell/algorithms/data_structures/test/common/JavaMapTest.java @@ -4,8 +4,25 @@ public class JavaMapTest { - public static boolean testJavaMap(java.util.Map map, Type keyType, String name, - Integer[] unsorted, Integer[] sorted, Integer INVALID) { + /** + * In computer science, an associative array, map, symbol table, or dictionary is an abstract data + * type composed of a collection of (key, value) pairs, such that each possible key appears at most + * once in the collection. + * + * http://en.wikipedia.org/wiki/Associative_array + * + * @author Justin Wetherell + * + * @param map Map to test. + * @param type Type of data in the map (Either String or Integer). + * @param name Name used in debug. + * @param unsorted Unsorted test data. + * @param sorted Sorted test data. + * @param invalid Invalid data which isn't in the data-structure. + * @return True if the map passes it's invariants tests. + */ + public static > boolean testJavaMap(java.util.Map map, Type type, String name, + T[] unsorted, T[] sorted, T invalid) { // Make sure the map is empty if (!map.isEmpty()) { System.err.println(name+" initial isEmpty() failed."); @@ -18,28 +35,28 @@ public static boolean testJavaMap(java.util.Map map, Type keyType, St return false; } - addInOrderAndRemoveInOrder(map, keyType, name, - unsorted, INVALID); - addInReverseOrderAndRemoveInReverseOrder(map, keyType, name, - unsorted, INVALID); - addInOrderAndRemoveInReverseOrder(map, keyType, name, - unsorted, INVALID); + addInOrderAndRemoveInOrder(map, type, name, + unsorted, invalid); + addInReverseOrderAndRemoveInReverseOrder(map, type, name, + unsorted, invalid); + addInOrderAndRemoveInReverseOrder(map, type, name, + unsorted, invalid); - addInOrderAndRemoveInOrder(map, keyType, name, sorted, INVALID); - addInReverseOrderAndRemoveInReverseOrder(map, keyType, name, - sorted, INVALID); - addInOrderAndRemoveInReverseOrder(map, keyType, name, - sorted, INVALID); + addInOrderAndRemoveInOrder(map, type, name, sorted, invalid); + addInReverseOrderAndRemoveInReverseOrder(map, type, name, + sorted, invalid); + addInOrderAndRemoveInReverseOrder(map, type, name, + sorted, invalid); return true; } @SuppressWarnings("unchecked") - private static boolean addInOrderAndRemoveInOrder(java.util.Map map, Type keyType, String name, - Integer[] data, Integer invalid) + private static > boolean addInOrderAndRemoveInOrder(java.util.Map map, Type keyType, String name, + T[] data, T invalid) { for (int i = 0; i < data.length; i++) { - Integer item = data[i]; + T item = data[i]; K k = null; V v = null; if (keyType == Type.Integer) { @@ -65,7 +82,7 @@ private static boolean addInOrderAndRemoveInOrder(java.util.Map map, return false; } - for (Integer item : data) { + for (T item : data) { K k = null; if (keyType == Type.Integer) { k = (K)item; @@ -76,7 +93,7 @@ private static boolean addInOrderAndRemoveInOrder(java.util.Map map, } for (int i = 0; i < data.length; i++) { - Integer item = data[i]; + T item = data[i]; K k = null; if (keyType == Type.Integer) { k = (K)item; @@ -107,11 +124,11 @@ private static boolean addInOrderAndRemoveInOrder(java.util.Map map, } @SuppressWarnings("unchecked") - private static boolean addInReverseOrderAndRemoveInReverseOrder(java.util.Map map, Type keyType, String name, - Integer[] data, Integer invalid) + private static > boolean addInReverseOrderAndRemoveInReverseOrder(java.util.Map map, Type keyType, String name, + T[] data, T invalid) { for (int i = data.length - 1; i >= 0; i--) { - Integer item = data[i]; + T item = data[i]; K k = null; V v = null; if (keyType == Type.Integer) { @@ -137,7 +154,7 @@ private static boolean addInReverseOrderAndRemoveInReverseOrder(java.util. return false; } - for (Integer item : data) { + for (T item : data) { K k = null; if (keyType == Type.Integer) { k = (K)item; @@ -148,7 +165,7 @@ private static boolean addInReverseOrderAndRemoveInReverseOrder(java.util. } for (int i = data.length - 1; i >= 0; i--) { - Integer item = data[i]; + T item = data[i]; K k = null; if (keyType == Type.Integer) { k = (K)item; @@ -176,10 +193,10 @@ private static boolean addInReverseOrderAndRemoveInReverseOrder(java.util. } @SuppressWarnings("unchecked") - private static boolean addInOrderAndRemoveInReverseOrder(java.util.Map map, Type keyType, String name, - Integer[] data, Integer invalid) { + private static > boolean addInOrderAndRemoveInReverseOrder(java.util.Map map, Type keyType, String name, + T[] data, T invalid) { for (int i = 0; i < data.length; i++) { - Integer item = data[i]; + T item = data[i]; K k = null; V v = null; if (keyType == Type.Integer) { @@ -205,7 +222,7 @@ private static boolean addInOrderAndRemoveInReverseOrder(java.util.Map boolean addInOrderAndRemoveInReverseOrder(java.util.Map= 0; i--) { - Integer item = data[i]; + T item = data[i]; K k = null; if (keyType == Type.Integer) { k = (K)item; @@ -244,12 +261,13 @@ private static boolean addInOrderAndRemoveInReverseOrder(java.util.Map boolean testMapEntrySet(java.util.Map map, Type keyType, - Integer[] data) { + private static > boolean testMapEntrySet(java.util.Map map, Type keyType, + T[] data) { { // Test keys for (int i = 0; i < data.length; i++) { - Integer item = data[i]; + T item = data[i]; K k = null; V v = null; if (keyType == Type.Integer) { @@ -264,7 +282,7 @@ private static boolean testMapEntrySet(java.util.Map map, Type keyTy java.util.Set set = map.keySet(); for (int i = 0; i < data.length; i++) { - Integer key = data[i]; + T key = data[i]; K k = null; if (keyType == Type.Integer) { k = (K)key; @@ -298,7 +316,7 @@ private static boolean testMapEntrySet(java.util.Map map, Type keyTy { // Test values for (int i = 0; i < data.length; i++) { - Integer item = data[i]; + T item = data[i]; K k = null; V v = null; if (keyType == Type.Integer) { @@ -313,7 +331,7 @@ private static boolean testMapEntrySet(java.util.Map map, Type keyTy java.util.Collection collection = map.values(); for (int i = 0; i < data.length; i++) { - Integer value = data[i]; + T value = data[i]; V v = null; // These are reversed on purpose if (keyType == Type.Integer) { diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/ListIteratorTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/ListIteratorTest.java index e46a978a..918e8ddd 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/common/ListIteratorTest.java +++ b/src/com/jwetherell/algorithms/data_structures/test/common/ListIteratorTest.java @@ -5,9 +5,21 @@ public class ListIteratorTest { - @SuppressWarnings("unchecked") + /** + * An iterator for lists that allows the programmer to traverse the list in either direction, + * modify the list during iteration, and obtain the iterator's current position in the list. + * + * http://en.wikipedia.org/wiki/Iterator + * + * @author Justin Wetherell + * + * @param iter List iterator to test. + * @param data Test data to test against. + * @param size Size of the test data. + * @return True if list iterator passes it's invariant tests. + */ public static > boolean testListIterator(ListIterator iter, - Integer[] unsorted, int size) { + T[] data, int size) { // Make sure you catch going prev at the start boolean exceptionThrown = false; try { @@ -20,8 +32,8 @@ public static > boolean testListIterator(ListIterator return false; } - for (int i = 0; i < unsorted.length; i++) { - T t = (T)unsorted[i]; + for (int i = 0; i < data.length; i++) { + T t = data[i]; iter.add(t); } while (iter.hasPrevious()) iter.previous(); diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/ListTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/ListTest.java index 700f2cae..ed078033 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/common/ListTest.java +++ b/src/com/jwetherell/algorithms/data_structures/test/common/ListTest.java @@ -4,11 +4,24 @@ public class ListTest { - @SuppressWarnings("unchecked") + /** + * In computer science, a list or sequence is an abstract data type that implements a + * finite ordered collection of values, where the same value may occur more than once. + * + * http://en.wikipedia.org/wiki/List_(abstract_data_type) + * + * @author Justin Wetherell + * + * @param list List to test. + * @param name Name used in debug. + * @param data Test data. + * @param invalid Invalid data which should not exist in the data. + * @return + */ public static > boolean testList(IList list, String name, - Integer[] data, Integer invalid) { + T[] data, T invalid) { for (int i = 0; i < data.length; i++) { - T item = (T)data[i]; + T item = data[i]; boolean added = list.add(item); if ((!list.validate() || (list.size() != i+1))) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); @@ -22,8 +35,8 @@ public static > boolean testList(IList list, String n } } - boolean contains = list.contains((T)invalid); - boolean removed = list.remove((T)invalid); + boolean contains = list.contains(invalid); + boolean removed = list.remove(invalid); if (contains || removed) { System.err.println(name+" invalidity check. contains=" + contains + " removed=" + removed); Utils.handleError(list); @@ -32,7 +45,7 @@ public static > boolean testList(IList list, String n int size = list.size(); for (int i = 0; i < size; i++) { - T item = (T)data[i]; + T item = data[i]; removed = list.remove(item); if ((!list.validate() || (list.size() != data.length-(i+1)))) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); @@ -50,7 +63,7 @@ public static > boolean testList(IList list, String n int quarter = data.length/4; int half = data.length/2; for (int i = 0; i < half; i++) { - T item = (T)data[i]; + T item = data[i]; boolean added = list.add(item); if ((!list.validate() || (list.size() != i+1))) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); @@ -64,7 +77,7 @@ public static > boolean testList(IList list, String n } } for (int i = (half-1); i >= quarter; i--) { - T item = (T)data[i]; + T item = data[i]; removed = list.remove(item); if ((!list.validate() || (list.size() != i))) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); @@ -78,7 +91,7 @@ public static > boolean testList(IList list, String n } } for (int i = quarter; i < data.length; i++) { - T item = (T)data[i]; + T item = data[i]; boolean added = list.add(item); if ((!list.validate() || (list.size() != i+1))) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); @@ -92,7 +105,7 @@ public static > boolean testList(IList list, String n } } for (int i = data.length-1; i >= 0; i--) { - T item = (T)data[i]; + T item = data[i]; removed = list.remove(item); if ((!list.validate() || (list.size() != i))) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/MapTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/MapTest.java index ee0bc03d..f96e9110 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/common/MapTest.java +++ b/src/com/jwetherell/algorithms/data_structures/test/common/MapTest.java @@ -5,17 +5,33 @@ public class MapTest { + /** + * In computer science, an associative array, map, symbol table, or dictionary is an abstract data + * type composed of a collection of (key, value) pairs, such that each possible key appears at most + * once in the collection. + * + * http://en.wikipedia.org/wiki/Associative_array + * + * @author Justin Wetherell + * + * @param map Map to test. + * @param type Type of data in the map (Either String or Integer). + * @param name Name used in debug. + * @param data test data. + * @param invalid Invalid data which isn't in the data-structure. + * @return True if the map passes it's invariants tests. + */ @SuppressWarnings("unchecked") - public static boolean testMap(IMap map, Type keyType, String name, - Integer[] unsorted, Integer invalid) { - for (int i = 0; i < unsorted.length; i++) { - Integer item = unsorted[i]; + public static > boolean testMap(IMap map, Type type, String name, + T[] data, T invalid) { + for (int i = 0; i < data.length; i++) { + T item = data[i]; K k = null; V v = null; - if (keyType == Type.Integer) { + if (type == Type.Integer) { k = (K)item; v = (V)String.valueOf(item); - } else if (keyType == Type.String) { + } else if (type == Type.String) { k = (K)String.valueOf(item); v = (V)item; } @@ -33,9 +49,9 @@ public static boolean testMap(IMap map, Type keyType, String name, } K invalidKey = null; - if (keyType == Type.Integer) { + if (type == Type.Integer) { invalidKey = (K)invalid; - } else if (keyType == Type.String) { + } else if (type == Type.String) { invalidKey = (K)String.valueOf(invalid); } boolean contains = map.contains(invalidKey); @@ -46,16 +62,16 @@ public static boolean testMap(IMap map, Type keyType, String name, return false; } - for (int i = 0; i < unsorted.length; i++) { - Integer item = unsorted[i]; + for (int i = 0; i < data.length; i++) { + T item = data[i]; K k = null; - if (keyType == Type.Integer) { + if (type == Type.Integer) { k = (K)item; - } else if (keyType == Type.String) { + } else if (type == Type.String) { k = (K)String.valueOf(item); } removed = map.remove(k); - if ((!map.validate() || (map.size() != (unsorted.length-(i+1))))) { + if ((!map.validate() || (map.size() != (data.length-(i+1))))) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); Utils.handleError(map); return false; @@ -68,16 +84,16 @@ public static boolean testMap(IMap map, Type keyType, String name, } // Add half, remove a quarter, add three-quarters, remove all - int quarter = unsorted.length/4; - int half = unsorted.length/2; + int quarter = data.length/4; + int half = data.length/2; for (int i = 0; i < half; i++) { - Integer item = unsorted[i]; + T item = data[i]; K k = null; V v = null; - if (keyType == Type.Integer) { + if (type == Type.Integer) { k = (K)item; v = (V)String.valueOf(item); - } else if (keyType == Type.String) { + } else if (type == Type.String) { k = (K)String.valueOf(item); v = (V)item; } @@ -94,11 +110,11 @@ public static boolean testMap(IMap map, Type keyType, String name, } } for (int i = (half-1); i >= quarter; i--) { - Integer item = unsorted[i]; + T item = data[i]; K k = null; - if (keyType == Type.Integer) { + if (type == Type.Integer) { k = (K)item; - } else if (keyType == Type.String) { + } else if (type == Type.String) { k = (K)String.valueOf(item); } removed = map.remove(k); @@ -113,14 +129,14 @@ public static boolean testMap(IMap map, Type keyType, String name, return false; } } - for (int i = quarter; i < unsorted.length; i++) { - Integer item = unsorted[i]; + for (int i = quarter; i < data.length; i++) { + T item = data[i]; K k = null; V v = null; - if (keyType == Type.Integer) { + if (type == Type.Integer) { k = (K)item; v = (V)String.valueOf(item); - } else if (keyType == Type.String) { + } else if (type == Type.String) { k = (K)String.valueOf(item); v = (V)item; } @@ -136,12 +152,12 @@ public static boolean testMap(IMap map, Type keyType, String name, return false; } } - for (int i = unsorted.length-1; i >= 0; i--) { - Integer item = unsorted[i]; + for (int i = data.length-1; i >= 0; i--) { + T item = data[i]; K k = null; - if (keyType == Type.Integer) { + if (type == Type.Integer) { k = (K)item; - } else if (keyType == Type.String) { + } else if (type == Type.String) { k = (K)String.valueOf(item); } removed = map.remove(k); diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/QueueTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/QueueTest.java index 1d92d2ff..ccd2b8a1 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/common/QueueTest.java +++ b/src/com/jwetherell/algorithms/data_structures/test/common/QueueTest.java @@ -4,11 +4,28 @@ public class QueueTest { - @SuppressWarnings("unchecked") + /** + * In computer science, a queue is a particular kind of abstract data type or collection in which + * the entities in the collection are kept in order and the principal (or only) operations on the + * collection are the addition of entities to the rear terminal position, known as enqueue, and removal + * of entities from the front terminal position, known as dequeue. This makes the queue a First-In-First-Out + * (FIFO) data structure. In a FIFO data structure, the first element added to the queue will be the first + * one to be removed. + * + * http://en.wikipedia.org/wiki/Queue_(abstract_data_type) + * + * @author Justin Wetherell + * + * @param queue Queue to test. + * @param name Name used in debug. + * @param data Test data. + * @param invalid Invalid data which isn't in the data-structure. + * @return Trus if the Queue passes all it's invariants. + */ public static > boolean testQueue(IQueue queue, String name, - Integer[] data, Integer invalid) { + T[] data, T invalid) { for (int i = 0; i < data.length; i++) { - T item = (T)data[i]; + T item = data[i]; boolean added = queue.offer(item); if (!queue.validate() || (queue.size() != i+1)) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); @@ -22,8 +39,8 @@ public static > boolean testQueue(IQueue queue, Strin } } - boolean contains = queue.contains((T)invalid); - boolean removed = queue.remove((T)invalid); + boolean contains = queue.contains(invalid); + boolean removed = queue.remove(invalid); if (contains || removed) { System.err.println(name+" invalidity check. contains=" + contains + " removed=" + removed); Utils.handleError(queue); @@ -33,7 +50,7 @@ public static > boolean testQueue(IQueue queue, Strin int size = queue.size(); for (int i = 0; i < size; i++) { T item = queue.poll(); - T correct = (T)data[i]; + T correct = data[i]; if (item.compareTo(correct)!=0) { System.err.println(name+" YIKES!! " + item + " does not match FIFO item."); Utils.handleError(queue); @@ -56,7 +73,7 @@ public static > boolean testQueue(IQueue queue, Strin int half = data.length/2; int changeOver = half-quarter; for (int i = 0; i < half; i++) { - T item = (T)data[i]; + T item = data[i]; boolean added = queue.offer(item); if (!queue.validate() || (queue.size() != i+1)) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); @@ -71,7 +88,7 @@ public static > boolean testQueue(IQueue queue, Strin } for (int i = 0; i < quarter; i++) { T item = queue.poll(); - T correct = (T)data[i]; + T correct = data[i]; if (item.compareTo(correct)!=0) { System.err.println(name+" YIKES!! " + item + " does not match FIFO item."); Utils.handleError(queue); @@ -89,7 +106,7 @@ public static > boolean testQueue(IQueue queue, Strin } } for (int i = 0; i < quarter; i++) { - T item = (T)data[i]; + T item = data[i]; boolean added = queue.offer(item); if (!queue.validate() || (queue.size() != ((half-quarter)+(i+1)))) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); @@ -103,7 +120,7 @@ public static > boolean testQueue(IQueue queue, Strin } } for (int i = half; i < data.length; i++) { - T item = (T)data[i]; + T item = data[i]; boolean added = queue.offer(item); if (!queue.validate() || (queue.size() != (i+1))) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); @@ -124,7 +141,7 @@ public static > boolean testQueue(IQueue queue, Strin } else if (idx>=changeOver && idx + * + * @param set Set to test. + * @param name Name to use in debug. + * @param data Test data. + * @param invalid Invalid data which isn't in the data-structure. + * @return True if the set passes it's invariants tests. + */ public static > boolean testSet(ISet set, String name, - Integer[] data, Integer invalid) { + T[] data, T invalid) { for (int i = 0; i < data.length; i++) { - T item = (T)data[i]; + T item = data[i]; boolean added = set.add(item); if (!set.validate() || (set.size() != i+1)) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); @@ -22,8 +35,8 @@ public static > boolean testSet(ISet set, String name } } - boolean contains = set.contains((T)invalid); - boolean removed = set.remove((T)invalid); + boolean contains = set.contains(invalid); + boolean removed = set.remove(invalid); if (contains || removed) { System.err.println(name+" invalidity check. contains=" + contains + " removed=" + removed); Utils.handleError(set); @@ -32,7 +45,7 @@ public static > boolean testSet(ISet set, String name int size = set.size(); for (int i = 0; i < size; i++) { - T item = (T)data[i]; + T item = data[i]; removed = set.remove(item); if (!set.validate() || (set.size() != data.length-(i+1))) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); @@ -50,7 +63,7 @@ public static > boolean testSet(ISet set, String name int quarter = data.length/4; int half = data.length/2; for (int i = 0; i < half; i++) { - T item = (T)data[i]; + T item = data[i]; boolean added = set.add(item); if (!set.validate() || (set.size() != i+1)) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); @@ -64,7 +77,7 @@ public static > boolean testSet(ISet set, String name } } for (int i = (half-1); i >= quarter; i--) { - T item = (T)data[i]; + T item = data[i]; removed = set.remove(item); if (!set.validate() || (set.size() != i)) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); @@ -78,7 +91,7 @@ public static > boolean testSet(ISet set, String name } } for (int i = quarter; i < data.length; i++) { - T item = (T)data[i]; + T item = data[i]; boolean added = set.add(item); if (!set.validate() || (set.size() != i+1)) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); @@ -92,7 +105,7 @@ public static > boolean testSet(ISet set, String name } } for (int i = data.length-1; i >= 0; i--) { - T item = (T)data[i]; + T item = data[i]; removed = set.remove(item); if (!set.validate() || (set.size() != i)) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/StackTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/StackTest.java index 6e618b4f..85c4441b 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/common/StackTest.java +++ b/src/com/jwetherell/algorithms/data_structures/test/common/StackTest.java @@ -4,11 +4,25 @@ public class StackTest { - @SuppressWarnings("unchecked") + /** + * In computer science, a stack is a particular kind of abstract data type or collection + * in which the principal (or only) operations on the collection are the addition of an + * entity to the collection, known as push and removal of an entity, known as pop. + * + * http://en.wikipedia.org/wiki/Stack_(abstract_data_type) + * + * @author Justin Wetherell + * + * @param stack Stack to test. + * @param name Name to use in debug. + * @param data Test data. + * @param invalid Invalid data which isn't in the data-structure. + * @return True if the stack passes it's invariants tests. + */ public static > boolean testStack(IStack stack, String name, - Integer[] data, Integer invalid) { + T[] data, T invalid) { for (int i = 0; i < data.length; i++) { - T item = (T)data[i]; + T item = data[i]; boolean added = stack.push(item); if (!stack.validate() || (stack.size() != i+1)) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); @@ -22,8 +36,8 @@ public static > boolean testStack(IStack stack, Strin } } - boolean contains = stack.contains((T)invalid); - boolean removed = stack.remove((T)invalid); + boolean contains = stack.contains(invalid); + boolean removed = stack.remove(invalid); if (contains || removed) { System.err.println(name+" invalidity check. contains=" + contains + " removed=" + removed); Utils.handleError(stack); @@ -33,7 +47,7 @@ public static > boolean testStack(IStack stack, Strin int size = stack.size(); for (int i = 0; i < size; i++) { T item = stack.pop(); - T correct = (T)data[data.length-(i+1)]; + T correct = data[data.length-(i+1)]; if ((item.compareTo(correct)!=0)) { System.err.println(name+" YIKES!! " + item + " does not match LIFO item."); Utils.handleError(stack); @@ -55,7 +69,7 @@ public static > boolean testStack(IStack stack, Strin int quarter = data.length/4; int half = data.length/2; for (int i = 0; i < half; i++) { - T item = (T)data[i]; + T item = data[i]; boolean added = stack.push(item); if (!stack.validate() || (stack.size() != i+1)) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); @@ -70,7 +84,7 @@ public static > boolean testStack(IStack stack, Strin } for (int i = (half-1); i >= quarter; i--) { T item = stack.pop(); - T correct = (T)data[i]; + T correct = data[i]; if (item.compareTo(correct)!=0) { System.err.println(name+" YIKES!! " + item + " does not match LIFO item."); Utils.handleError(stack); @@ -88,7 +102,7 @@ public static > boolean testStack(IStack stack, Strin } } for (int i = quarter; i < data.length; i++) { - T item = (T)data[i]; + T item = data[i]; boolean added = stack.push(item); if (!stack.validate() || (stack.size() != i+1)) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); @@ -103,7 +117,7 @@ public static > boolean testStack(IStack stack, Strin } for (int i = data.length-1; i >= 0; i--) { T item = stack.pop(); - T correct = (T)data[i]; + T correct = data[i]; if (item.compareTo(correct)!=0) { System.err.println(name+" YIKES!! " + item + " does not match LIFO item."); Utils.handleError(stack); diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/SuffixTreeTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/SuffixTreeTest.java new file mode 100644 index 00000000..b1acc1c0 --- /dev/null +++ b/src/com/jwetherell/algorithms/data_structures/test/common/SuffixTreeTest.java @@ -0,0 +1,44 @@ +package com.jwetherell.algorithms.data_structures.test.common; + +import com.jwetherell.algorithms.data_structures.ISuffixTree; + +public class SuffixTreeTest { + + /** + * In computer science, a suffix tree (also called PAT tree or, in an earlier + * form, position tree) is a compressed trie containing all the suffixes of + * the given text as their keys and positions in the text as their values. + * Suffix trees allow particularly fast implementations of many important + * string operations. + * + * @param tree Suffix tree to test. + * @param test String to use in testing the suffix tree. + * @return True if the suffix tree passes it's invariants tests. + */ + public static boolean suffixTreeTest(ISuffixTree tree, String test) { + boolean exists = tree.doesSubStringExist(test); + if (!exists) { + System.err.println("YIKES!! " + test + " doesn't exists."); + Utils.handleError(tree); + return false; + } + + String failed = test+"Z"; + exists = tree.doesSubStringExist(failed); + if (exists) { + System.err.println("YIKES!! " + failed + " exists."); + Utils.handleError(tree); + return false; + } + + String pass = test.substring(0, 6); + exists = tree.doesSubStringExist(pass); + if (!exists) { + System.err.println("YIKES!! " + pass + " doesn't exists."); + Utils.handleError(tree); + return false; + } + + return true; + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/TreeTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/TreeTest.java index 976c1cad..f041f56f 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/common/TreeTest.java +++ b/src/com/jwetherell/algorithms/data_structures/test/common/TreeTest.java @@ -5,16 +5,32 @@ public class TreeTest { + /** + * In computer science, a tree is a widely used abstract data type (ADT) or data structure implementing this ADT + * that simulates a hierarchical tree structure, with a root value and subtrees of children, represented as a set + * of linked nodes. + * + * http://en.wikipedia.org/wiki/Tree_(data_structure) + * + * @author Justin Wetherell + * + * @param tree Tree to test. + * @param type Type of data in the heap (Either String or Integer). + * @param name Name used in debug. + * @param data Test data. + * @param invalid Invalid data which isn't in the data-structure. + * @return True if the tree passes it's invariants tests. + */ @SuppressWarnings("unchecked") - public static > boolean testTree(ITree tree, Type type, String name, - Integer[] unsorted, Integer invalid) { - for (int i = 0; i < unsorted.length; i++) { - Integer value = unsorted[i]; - T item = null; + public static , T extends Comparable> boolean testTree(ITree tree, Type type, String name, + T[] data, T invalid) { + for (int i = 0; i < data.length; i++) { + T value = data[i]; + C item = null; if (type == Type.Integer) { - item = (T)value; + item = (C)value; } else if (type == Type.String) { - item = (T)String.valueOf(value); + item = (C)String.valueOf(value); } boolean added = tree.add(item); if (!tree.validate() || (tree.size() != i+1)) { @@ -29,14 +45,14 @@ public static > boolean testTree(ITree tree, Type typ } } - T invalidItem = null; + C invalidItem = null; if (type == Type.Integer) { - invalidItem = (T)invalid; + invalidItem = (C)invalid; } else if (type == Type.String) { - invalidItem = (T)String.valueOf(invalid); + invalidItem = (C)String.valueOf(invalid); } boolean contains = tree.contains(invalidItem); - T removed = tree.remove(invalidItem); + C removed = tree.remove(invalidItem); if (contains || removed!=null) { System.err.println(name+" invalidity check. contains=" + contains + " removed=" + removed); Utils.handleError(tree); @@ -45,15 +61,15 @@ public static > boolean testTree(ITree tree, Type typ int size = tree.size(); for (int i = 0; i < size; i++) { - Integer value = unsorted[i]; - T item = null; + T value = data[i]; + C item = null; if (type == Type.Integer) { - item = (T)value; + item = (C)value; } else if (type == Type.String) { - item = (T)String.valueOf(value); + item = (C)String.valueOf(value); } removed = tree.remove(item); - if (!tree.validate() || (tree.size() != unsorted.length-(i+1))) { + if (!tree.validate() || (tree.size() != data.length-(i+1))) { System.err.println(name+" YIKES!! " + item + " caused a size mismatch."); Utils.handleError(tree); return false; @@ -66,15 +82,15 @@ public static > boolean testTree(ITree tree, Type typ } // Add half, remove a quarter, add three-quarters - int quarter = unsorted.length/4; - int half = unsorted.length/2; + int quarter = data.length/4; + int half = data.length/2; for (int i = 0; i < half; i++) { - Integer value = unsorted[i]; - T item = null; + T value = data[i]; + C item = null; if (type == Type.Integer) { - item = (T)value; + item = (C)value; } else if (type == Type.String) { - item = (T)String.valueOf(value); + item = (C)String.valueOf(value); } boolean added = tree.add(item); if (!tree.validate() || (tree.size() != i+1)) { @@ -89,12 +105,12 @@ public static > boolean testTree(ITree tree, Type typ } } for (int i = (half-1); i >= quarter; i--) { - Integer value = unsorted[i]; - T item = null; + T value = data[i]; + C item = null; if (type == Type.Integer) { - item = (T)value; + item = (C)value; } else if (type == Type.String) { - item = (T)String.valueOf(value); + item = (C)String.valueOf(value); } removed = tree.remove(item); if (!tree.validate() || (tree.size() != i)) { @@ -108,13 +124,13 @@ public static > boolean testTree(ITree tree, Type typ return false; } } - for (int i = quarter; i < unsorted.length; i++) { - Integer value = unsorted[i]; - T item = null; + for (int i = quarter; i < data.length; i++) { + T value = data[i]; + C item = null; if (type == Type.Integer) { - item = (T)value; + item = (C)value; } else if (type == Type.String) { - item = (T)String.valueOf(value); + item = (C)String.valueOf(value); } boolean added = tree.add(item); if (!tree.validate() || (tree.size() != i+1)) { @@ -128,13 +144,13 @@ public static > boolean testTree(ITree tree, Type typ return false; } } - for (int i = unsorted.length-1; i >= 0; i--) { - Integer value = unsorted[i]; - T item = null; + for (int i = data.length-1; i >= 0; i--) { + T value = data[i]; + C item = null; if (type == Type.Integer) { - item = (T)value; + item = (C)value; } else if (type == Type.String) { - item = (T)String.valueOf(value); + item = (C)String.valueOf(value); } removed = tree.remove(item); if (!tree.validate() || (tree.size() != i)) { From 362eee0d371771473e60bcf8c3938c8d183a9f01 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Mon, 16 Jun 2014 13:16:24 -0400 Subject: [PATCH 33/61] Moved the timing tests into their own package --- .../{ => data_structures/timing}/DataStructuresTiming.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/com/jwetherell/algorithms/{ => data_structures/timing}/DataStructuresTiming.java (99%) diff --git a/src/com/jwetherell/algorithms/DataStructuresTiming.java b/src/com/jwetherell/algorithms/data_structures/timing/DataStructuresTiming.java similarity index 99% rename from src/com/jwetherell/algorithms/DataStructuresTiming.java rename to src/com/jwetherell/algorithms/data_structures/timing/DataStructuresTiming.java index efa52566..b8625ec5 100644 --- a/src/com/jwetherell/algorithms/DataStructuresTiming.java +++ b/src/com/jwetherell/algorithms/data_structures/timing/DataStructuresTiming.java @@ -1,4 +1,4 @@ -package com.jwetherell.algorithms; +package com.jwetherell.algorithms.data_structures.timing; import java.text.DecimalFormat; import java.util.Arrays; From cf1ebd95685e378a074aabf7a8d55120bfe546e7 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Mon, 16 Jun 2014 13:17:11 -0400 Subject: [PATCH 34/61] Moved the interfaces into their own package --- src/com/jwetherell/algorithms/data_structures/BTree.java | 2 ++ src/com/jwetherell/algorithms/data_structures/BinaryHeap.java | 2 ++ .../jwetherell/algorithms/data_structures/BinarySearchTree.java | 2 ++ .../algorithms/data_structures/HashArrayMappedTrie.java | 2 ++ src/com/jwetherell/algorithms/data_structures/HashMap.java | 2 ++ src/com/jwetherell/algorithms/data_structures/List.java | 2 ++ src/com/jwetherell/algorithms/data_structures/PatriciaTrie.java | 2 ++ src/com/jwetherell/algorithms/data_structures/Queue.java | 2 ++ src/com/jwetherell/algorithms/data_structures/RadixTrie.java | 2 ++ src/com/jwetherell/algorithms/data_structures/SkipList.java | 2 ++ src/com/jwetherell/algorithms/data_structures/SkipListMap.java | 1 + src/com/jwetherell/algorithms/data_structures/Stack.java | 2 ++ src/com/jwetherell/algorithms/data_structures/SuffixTree.java | 2 ++ src/com/jwetherell/algorithms/data_structures/SuffixTrie.java | 1 + src/com/jwetherell/algorithms/data_structures/TreeMap.java | 1 + src/com/jwetherell/algorithms/data_structures/Trie.java | 2 ++ src/com/jwetherell/algorithms/data_structures/TrieMap.java | 1 + .../algorithms/data_structures/{ => interfaces}/IHeap.java | 2 +- .../algorithms/data_structures/{ => interfaces}/IList.java | 2 +- .../algorithms/data_structures/{ => interfaces}/IMap.java | 2 +- .../algorithms/data_structures/{ => interfaces}/IQueue.java | 2 +- .../algorithms/data_structures/{ => interfaces}/ISet.java | 2 +- .../algorithms/data_structures/{ => interfaces}/IStack.java | 2 +- .../data_structures/{ => interfaces}/ISuffixTree.java | 2 +- .../algorithms/data_structures/{ => interfaces}/ITree.java | 2 +- .../algorithms/data_structures/test/common/HeapTest.java | 2 +- .../algorithms/data_structures/test/common/ListTest.java | 2 +- .../algorithms/data_structures/test/common/MapTest.java | 2 +- .../algorithms/data_structures/test/common/QueueTest.java | 2 +- .../algorithms/data_structures/test/common/SetTest.java | 2 +- .../algorithms/data_structures/test/common/StackTest.java | 2 +- .../algorithms/data_structures/test/common/SuffixTreeTest.java | 2 +- .../algorithms/data_structures/test/common/TreeTest.java | 2 +- 33 files changed, 46 insertions(+), 16 deletions(-) rename src/com/jwetherell/algorithms/data_structures/{ => interfaces}/IHeap.java (97%) rename src/com/jwetherell/algorithms/data_structures/{ => interfaces}/IList.java (95%) rename src/com/jwetherell/algorithms/data_structures/{ => interfaces}/IMap.java (96%) rename src/com/jwetherell/algorithms/data_structures/{ => interfaces}/IQueue.java (97%) rename src/com/jwetherell/algorithms/data_structures/{ => interfaces}/ISet.java (96%) rename src/com/jwetherell/algorithms/data_structures/{ => interfaces}/IStack.java (97%) rename src/com/jwetherell/algorithms/data_structures/{ => interfaces}/ISuffixTree.java (93%) rename src/com/jwetherell/algorithms/data_structures/{ => interfaces}/ITree.java (96%) diff --git a/src/com/jwetherell/algorithms/data_structures/BTree.java b/src/com/jwetherell/algorithms/data_structures/BTree.java index 00b8c0f4..02fae012 100644 --- a/src/com/jwetherell/algorithms/data_structures/BTree.java +++ b/src/com/jwetherell/algorithms/data_structures/BTree.java @@ -5,6 +5,8 @@ import java.util.Comparator; import java.util.Deque; +import com.jwetherell.algorithms.data_structures.interfaces.ITree; + /** * B-tree is a tree data structure that keeps data sorted and allows searches, * sequential access, insertions, and deletions in logarithmic time. The B-tree diff --git a/src/com/jwetherell/algorithms/data_structures/BinaryHeap.java b/src/com/jwetherell/algorithms/data_structures/BinaryHeap.java index 7a3bc6c1..2ea57687 100644 --- a/src/com/jwetherell/algorithms/data_structures/BinaryHeap.java +++ b/src/com/jwetherell/algorithms/data_structures/BinaryHeap.java @@ -6,6 +6,8 @@ import java.util.Deque; import java.util.List; +import com.jwetherell.algorithms.data_structures.interfaces.IHeap; + /** * A binary heap is a heap data structure created using a binary tree. It can be * seen as a binary tree with two additional constraints: 1) The shape property: diff --git a/src/com/jwetherell/algorithms/data_structures/BinarySearchTree.java b/src/com/jwetherell/algorithms/data_structures/BinarySearchTree.java index 6da25208..779f7fdd 100644 --- a/src/com/jwetherell/algorithms/data_structures/BinarySearchTree.java +++ b/src/com/jwetherell/algorithms/data_structures/BinarySearchTree.java @@ -9,6 +9,8 @@ import java.util.Queue; import java.util.Set; +import com.jwetherell.algorithms.data_structures.interfaces.ITree; + /** * A binary search tree (BST), which may sometimes also be called an ordered or * sorted binary tree, is a node-based binary tree data structure which has the diff --git a/src/com/jwetherell/algorithms/data_structures/HashArrayMappedTrie.java b/src/com/jwetherell/algorithms/data_structures/HashArrayMappedTrie.java index e3a2464d..23f468cb 100644 --- a/src/com/jwetherell/algorithms/data_structures/HashArrayMappedTrie.java +++ b/src/com/jwetherell/algorithms/data_structures/HashArrayMappedTrie.java @@ -4,6 +4,8 @@ import java.util.List; import java.util.Map; +import com.jwetherell.algorithms.data_structures.interfaces.IMap; + /** * A hash array mapped trie (HAMT) is an implementation of an associative * array that combines the characteristics of a hash table and an array mapped diff --git a/src/com/jwetherell/algorithms/data_structures/HashMap.java b/src/com/jwetherell/algorithms/data_structures/HashMap.java index 7b3e2c51..42140f68 100644 --- a/src/com/jwetherell/algorithms/data_structures/HashMap.java +++ b/src/com/jwetherell/algorithms/data_structures/HashMap.java @@ -3,6 +3,8 @@ import java.util.LinkedList; import java.util.List; +import com.jwetherell.algorithms.data_structures.interfaces.IMap; + /** * Hash Map backed by an array of ArrayLists. hash map is a data structure that * uses a hash function to map identifying values, known as keys, to their diff --git a/src/com/jwetherell/algorithms/data_structures/List.java b/src/com/jwetherell/algorithms/data_structures/List.java index df737fcc..bbc04b1c 100644 --- a/src/com/jwetherell/algorithms/data_structures/List.java +++ b/src/com/jwetherell/algorithms/data_structures/List.java @@ -2,6 +2,8 @@ import java.util.Arrays; +import com.jwetherell.algorithms.data_structures.interfaces.IList; + @SuppressWarnings("unchecked") public interface List extends IList { diff --git a/src/com/jwetherell/algorithms/data_structures/PatriciaTrie.java b/src/com/jwetherell/algorithms/data_structures/PatriciaTrie.java index 9f7a8b59..1e9ec3f6 100644 --- a/src/com/jwetherell/algorithms/data_structures/PatriciaTrie.java +++ b/src/com/jwetherell/algorithms/data_structures/PatriciaTrie.java @@ -2,6 +2,8 @@ import java.util.Arrays; +import com.jwetherell.algorithms.data_structures.interfaces.ITree; + /** * A Patricia trie (radix tree) is a space-optimized trie data structure where each * non-terminating (black) node with only one child is merged with its child. diff --git a/src/com/jwetherell/algorithms/data_structures/Queue.java b/src/com/jwetherell/algorithms/data_structures/Queue.java index 3ea2e733..6604a931 100644 --- a/src/com/jwetherell/algorithms/data_structures/Queue.java +++ b/src/com/jwetherell/algorithms/data_structures/Queue.java @@ -1,5 +1,7 @@ package com.jwetherell.algorithms.data_structures; +import com.jwetherell.algorithms.data_structures.interfaces.IQueue; + @SuppressWarnings("unchecked") public interface Queue extends IQueue { diff --git a/src/com/jwetherell/algorithms/data_structures/RadixTrie.java b/src/com/jwetherell/algorithms/data_structures/RadixTrie.java index 0dd7335e..75d1a308 100644 --- a/src/com/jwetherell/algorithms/data_structures/RadixTrie.java +++ b/src/com/jwetherell/algorithms/data_structures/RadixTrie.java @@ -1,5 +1,7 @@ package com.jwetherell.algorithms.data_structures; +import com.jwetherell.algorithms.data_structures.interfaces.IMap; + /** * A radix trie or radix tree is a space-optimized trie data structure where * each node with only one child is merged with its child. The result is that diff --git a/src/com/jwetherell/algorithms/data_structures/SkipList.java b/src/com/jwetherell/algorithms/data_structures/SkipList.java index 14ed90ec..d3e75440 100644 --- a/src/com/jwetherell/algorithms/data_structures/SkipList.java +++ b/src/com/jwetherell/algorithms/data_structures/SkipList.java @@ -2,6 +2,8 @@ import java.util.Random; +import com.jwetherell.algorithms.data_structures.interfaces.ISet; + /** * Skip List. A skip list is a data structure for storing a sorted list of items * using a hierarchy of linked lists that connect increasingly sparse diff --git a/src/com/jwetherell/algorithms/data_structures/SkipListMap.java b/src/com/jwetherell/algorithms/data_structures/SkipListMap.java index 6a454220..df811c23 100644 --- a/src/com/jwetherell/algorithms/data_structures/SkipListMap.java +++ b/src/com/jwetherell/algorithms/data_structures/SkipListMap.java @@ -1,6 +1,7 @@ package com.jwetherell.algorithms.data_structures; import com.jwetherell.algorithms.data_structures.SkipList.Node; +import com.jwetherell.algorithms.data_structures.interfaces.IMap; /** * A set used to store key->values pairs, this is an implementation of an diff --git a/src/com/jwetherell/algorithms/data_structures/Stack.java b/src/com/jwetherell/algorithms/data_structures/Stack.java index 5fcc0089..a2685e8d 100644 --- a/src/com/jwetherell/algorithms/data_structures/Stack.java +++ b/src/com/jwetherell/algorithms/data_structures/Stack.java @@ -2,6 +2,8 @@ import java.util.Arrays; +import com.jwetherell.algorithms.data_structures.interfaces.IStack; + @SuppressWarnings("unchecked") public interface Stack extends IStack { diff --git a/src/com/jwetherell/algorithms/data_structures/SuffixTree.java b/src/com/jwetherell/algorithms/data_structures/SuffixTree.java index f02f7730..e65e62d3 100644 --- a/src/com/jwetherell/algorithms/data_structures/SuffixTree.java +++ b/src/com/jwetherell/algorithms/data_structures/SuffixTree.java @@ -8,6 +8,8 @@ import java.util.TreeMap; import java.util.TreeSet; +import com.jwetherell.algorithms.data_structures.interfaces.ISuffixTree; + /** * A suffix tree is a data structure that presents the suffixes of a given * string in a way that allows for a particularly fast implementation of many diff --git a/src/com/jwetherell/algorithms/data_structures/SuffixTrie.java b/src/com/jwetherell/algorithms/data_structures/SuffixTrie.java index 3149a566..32438139 100644 --- a/src/com/jwetherell/algorithms/data_structures/SuffixTrie.java +++ b/src/com/jwetherell/algorithms/data_structures/SuffixTrie.java @@ -4,6 +4,7 @@ import java.util.TreeSet; import com.jwetherell.algorithms.data_structures.Trie.Node; +import com.jwetherell.algorithms.data_structures.interfaces.ISuffixTree; /** * A suffix trie is a data structure that presents the suffixes of a given diff --git a/src/com/jwetherell/algorithms/data_structures/TreeMap.java b/src/com/jwetherell/algorithms/data_structures/TreeMap.java index d19544f9..3198e1c4 100644 --- a/src/com/jwetherell/algorithms/data_structures/TreeMap.java +++ b/src/com/jwetherell/algorithms/data_structures/TreeMap.java @@ -4,6 +4,7 @@ import java.util.List; import com.jwetherell.algorithms.data_structures.BinarySearchTree.Node; +import com.jwetherell.algorithms.data_structures.interfaces.IMap; /** * An tree used to store key->values pairs, this is an implementation of an diff --git a/src/com/jwetherell/algorithms/data_structures/Trie.java b/src/com/jwetherell/algorithms/data_structures/Trie.java index 7f313ecc..dce0ee7a 100644 --- a/src/com/jwetherell/algorithms/data_structures/Trie.java +++ b/src/com/jwetherell/algorithms/data_structures/Trie.java @@ -2,6 +2,8 @@ import java.util.Arrays; +import com.jwetherell.algorithms.data_structures.interfaces.ITree; + /** * A trie, or prefix tree, is an ordered tree data structure that is used to * store an associative array where the keys are usually strings. diff --git a/src/com/jwetherell/algorithms/data_structures/TrieMap.java b/src/com/jwetherell/algorithms/data_structures/TrieMap.java index e4b10d1c..529df0a6 100644 --- a/src/com/jwetherell/algorithms/data_structures/TrieMap.java +++ b/src/com/jwetherell/algorithms/data_structures/TrieMap.java @@ -1,6 +1,7 @@ package com.jwetherell.algorithms.data_structures; import com.jwetherell.algorithms.data_structures.Trie.Node; +import com.jwetherell.algorithms.data_structures.interfaces.IMap; /** * A trie used to store key->values pairs, this is an implementation of an diff --git a/src/com/jwetherell/algorithms/data_structures/IHeap.java b/src/com/jwetherell/algorithms/data_structures/interfaces/IHeap.java similarity index 97% rename from src/com/jwetherell/algorithms/data_structures/IHeap.java rename to src/com/jwetherell/algorithms/data_structures/interfaces/IHeap.java index 0dfcb876..ca70da88 100644 --- a/src/com/jwetherell/algorithms/data_structures/IHeap.java +++ b/src/com/jwetherell/algorithms/data_structures/interfaces/IHeap.java @@ -1,4 +1,4 @@ -package com.jwetherell.algorithms.data_structures; +package com.jwetherell.algorithms.data_structures.interfaces; /** * In computer science, a heap is a specialized tree-based data structure that diff --git a/src/com/jwetherell/algorithms/data_structures/IList.java b/src/com/jwetherell/algorithms/data_structures/interfaces/IList.java similarity index 95% rename from src/com/jwetherell/algorithms/data_structures/IList.java rename to src/com/jwetherell/algorithms/data_structures/interfaces/IList.java index 26d5cfb1..345b421f 100644 --- a/src/com/jwetherell/algorithms/data_structures/IList.java +++ b/src/com/jwetherell/algorithms/data_structures/interfaces/IList.java @@ -1,4 +1,4 @@ -package com.jwetherell.algorithms.data_structures; +package com.jwetherell.algorithms.data_structures.interfaces; /** * A list or sequence is an abstract data type that implements an ordered diff --git a/src/com/jwetherell/algorithms/data_structures/IMap.java b/src/com/jwetherell/algorithms/data_structures/interfaces/IMap.java similarity index 96% rename from src/com/jwetherell/algorithms/data_structures/IMap.java rename to src/com/jwetherell/algorithms/data_structures/interfaces/IMap.java index 0ce9a455..131d78aa 100644 --- a/src/com/jwetherell/algorithms/data_structures/IMap.java +++ b/src/com/jwetherell/algorithms/data_structures/interfaces/IMap.java @@ -1,4 +1,4 @@ -package com.jwetherell.algorithms.data_structures; +package com.jwetherell.algorithms.data_structures.interfaces; /** * In computer science, an associative array, map, or dictionary is an abstract diff --git a/src/com/jwetherell/algorithms/data_structures/IQueue.java b/src/com/jwetherell/algorithms/data_structures/interfaces/IQueue.java similarity index 97% rename from src/com/jwetherell/algorithms/data_structures/IQueue.java rename to src/com/jwetherell/algorithms/data_structures/interfaces/IQueue.java index d1eddab0..3cf40dd8 100644 --- a/src/com/jwetherell/algorithms/data_structures/IQueue.java +++ b/src/com/jwetherell/algorithms/data_structures/interfaces/IQueue.java @@ -1,4 +1,4 @@ -package com.jwetherell.algorithms.data_structures; +package com.jwetherell.algorithms.data_structures.interfaces; /** * A queue is a particular kind of abstract data type or collection in diff --git a/src/com/jwetherell/algorithms/data_structures/ISet.java b/src/com/jwetherell/algorithms/data_structures/interfaces/ISet.java similarity index 96% rename from src/com/jwetherell/algorithms/data_structures/ISet.java rename to src/com/jwetherell/algorithms/data_structures/interfaces/ISet.java index 28fb17ae..6929c83a 100644 --- a/src/com/jwetherell/algorithms/data_structures/ISet.java +++ b/src/com/jwetherell/algorithms/data_structures/interfaces/ISet.java @@ -1,4 +1,4 @@ -package com.jwetherell.algorithms.data_structures; +package com.jwetherell.algorithms.data_structures.interfaces; /** * In computer science, a set is an abstract data structure that can store certain values, without diff --git a/src/com/jwetherell/algorithms/data_structures/IStack.java b/src/com/jwetherell/algorithms/data_structures/interfaces/IStack.java similarity index 97% rename from src/com/jwetherell/algorithms/data_structures/IStack.java rename to src/com/jwetherell/algorithms/data_structures/interfaces/IStack.java index d8dfd802..0a00f781 100644 --- a/src/com/jwetherell/algorithms/data_structures/IStack.java +++ b/src/com/jwetherell/algorithms/data_structures/interfaces/IStack.java @@ -1,4 +1,4 @@ -package com.jwetherell.algorithms.data_structures; +package com.jwetherell.algorithms.data_structures.interfaces; /** * A stack is a last in, first out (LIFO) abstract data type and linear diff --git a/src/com/jwetherell/algorithms/data_structures/ISuffixTree.java b/src/com/jwetherell/algorithms/data_structures/interfaces/ISuffixTree.java similarity index 93% rename from src/com/jwetherell/algorithms/data_structures/ISuffixTree.java rename to src/com/jwetherell/algorithms/data_structures/interfaces/ISuffixTree.java index d69d099d..6aec9aa3 100644 --- a/src/com/jwetherell/algorithms/data_structures/ISuffixTree.java +++ b/src/com/jwetherell/algorithms/data_structures/interfaces/ISuffixTree.java @@ -1,4 +1,4 @@ -package com.jwetherell.algorithms.data_structures; +package com.jwetherell.algorithms.data_structures.interfaces; import java.util.Set; diff --git a/src/com/jwetherell/algorithms/data_structures/ITree.java b/src/com/jwetherell/algorithms/data_structures/interfaces/ITree.java similarity index 96% rename from src/com/jwetherell/algorithms/data_structures/ITree.java rename to src/com/jwetherell/algorithms/data_structures/interfaces/ITree.java index 297e41a4..a1b63cd7 100644 --- a/src/com/jwetherell/algorithms/data_structures/ITree.java +++ b/src/com/jwetherell/algorithms/data_structures/interfaces/ITree.java @@ -1,4 +1,4 @@ -package com.jwetherell.algorithms.data_structures; +package com.jwetherell.algorithms.data_structures.interfaces; /** * A tree can be defined recursively (locally) as a collection of nodes (starting at a root node), diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/HeapTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/HeapTest.java index b91e0f4e..036a01fc 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/common/HeapTest.java +++ b/src/com/jwetherell/algorithms/data_structures/test/common/HeapTest.java @@ -3,7 +3,7 @@ import java.util.Arrays; import com.jwetherell.algorithms.data_structures.BinaryHeap; -import com.jwetherell.algorithms.data_structures.IHeap; +import com.jwetherell.algorithms.data_structures.interfaces.IHeap; import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; public class HeapTest { diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/ListTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/ListTest.java index ed078033..3baf1857 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/common/ListTest.java +++ b/src/com/jwetherell/algorithms/data_structures/test/common/ListTest.java @@ -1,6 +1,6 @@ package com.jwetherell.algorithms.data_structures.test.common; -import com.jwetherell.algorithms.data_structures.IList; +import com.jwetherell.algorithms.data_structures.interfaces.IList; public class ListTest { diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/MapTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/MapTest.java index f96e9110..90e30e42 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/common/MapTest.java +++ b/src/com/jwetherell/algorithms/data_structures/test/common/MapTest.java @@ -1,6 +1,6 @@ package com.jwetherell.algorithms.data_structures.test.common; -import com.jwetherell.algorithms.data_structures.IMap; +import com.jwetherell.algorithms.data_structures.interfaces.IMap; import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; public class MapTest { diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/QueueTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/QueueTest.java index ccd2b8a1..1bc7fedb 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/common/QueueTest.java +++ b/src/com/jwetherell/algorithms/data_structures/test/common/QueueTest.java @@ -1,6 +1,6 @@ package com.jwetherell.algorithms.data_structures.test.common; -import com.jwetherell.algorithms.data_structures.IQueue; +import com.jwetherell.algorithms.data_structures.interfaces.IQueue; public class QueueTest { diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/SetTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/SetTest.java index b48b1ea5..0dfb059a 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/common/SetTest.java +++ b/src/com/jwetherell/algorithms/data_structures/test/common/SetTest.java @@ -1,6 +1,6 @@ package com.jwetherell.algorithms.data_structures.test.common; -import com.jwetherell.algorithms.data_structures.ISet; +import com.jwetherell.algorithms.data_structures.interfaces.ISet; public class SetTest { diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/StackTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/StackTest.java index 85c4441b..95797069 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/common/StackTest.java +++ b/src/com/jwetherell/algorithms/data_structures/test/common/StackTest.java @@ -1,6 +1,6 @@ package com.jwetherell.algorithms.data_structures.test.common; -import com.jwetherell.algorithms.data_structures.IStack; +import com.jwetherell.algorithms.data_structures.interfaces.IStack; public class StackTest { diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/SuffixTreeTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/SuffixTreeTest.java index b1acc1c0..0acc3ff9 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/common/SuffixTreeTest.java +++ b/src/com/jwetherell/algorithms/data_structures/test/common/SuffixTreeTest.java @@ -1,6 +1,6 @@ package com.jwetherell.algorithms.data_structures.test.common; -import com.jwetherell.algorithms.data_structures.ISuffixTree; +import com.jwetherell.algorithms.data_structures.interfaces.ISuffixTree; public class SuffixTreeTest { diff --git a/src/com/jwetherell/algorithms/data_structures/test/common/TreeTest.java b/src/com/jwetherell/algorithms/data_structures/test/common/TreeTest.java index f041f56f..2f25b084 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/common/TreeTest.java +++ b/src/com/jwetherell/algorithms/data_structures/test/common/TreeTest.java @@ -1,6 +1,6 @@ package com.jwetherell.algorithms.data_structures.test.common; -import com.jwetherell.algorithms.data_structures.ITree; +import com.jwetherell.algorithms.data_structures.interfaces.ITree; import com.jwetherell.algorithms.data_structures.test.common.Utils.Type; public class TreeTest { From 6b89f42a0b3f0856cfb388f4903f18dc9f285bcf Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Mon, 16 Jun 2014 14:59:56 -0400 Subject: [PATCH 35/61] Change the Graph testing to use JUnit --- src/com/jwetherell/algorithms/Graphs.java | 968 ------------------ .../data_structures/test/BTreeTests.java | 2 +- .../test/BinarySearchTreeTests.java | 2 +- .../test/HashArrayMappedTreeTests.java | 2 +- .../algorithms/graph/test/Graphs.java | 924 +++++++++++++++++ 5 files changed, 927 insertions(+), 971 deletions(-) delete mode 100644 src/com/jwetherell/algorithms/Graphs.java create mode 100644 src/com/jwetherell/algorithms/graph/test/Graphs.java diff --git a/src/com/jwetherell/algorithms/Graphs.java b/src/com/jwetherell/algorithms/Graphs.java deleted file mode 100644 index e65d8039..00000000 --- a/src/com/jwetherell/algorithms/Graphs.java +++ /dev/null @@ -1,968 +0,0 @@ -package com.jwetherell.algorithms; - -import java.util.ArrayList; -import java.util.Map; -import java.util.Set; - -import com.jwetherell.algorithms.data_structures.Graph; -import com.jwetherell.algorithms.data_structures.Graph.Edge; -import com.jwetherell.algorithms.data_structures.Graph.Vertex; -import com.jwetherell.algorithms.graph.BellmanFord; -import com.jwetherell.algorithms.graph.CycleDetection; -import com.jwetherell.algorithms.graph.Dijkstra; -import com.jwetherell.algorithms.graph.FloydWarshall; -import com.jwetherell.algorithms.graph.Johnson; -import com.jwetherell.algorithms.graph.Prim; -import com.jwetherell.algorithms.graph.TopologicalSort; - -public class Graphs { - - private static int debug = 1; // Debug level. 0=None, 1=Some - - @SuppressWarnings("unchecked") - private static boolean testGraph() { - { // UNDIRECTED GRAPH - if (debug > 1) System.out.println("Undirected Graph."); - java.util.List> verticies = new ArrayList>(); - Graph.Vertex v1 = new Graph.Vertex(1); - verticies.add(v1); - Graph.Vertex v2 = new Graph.Vertex(2); - verticies.add(v2); - Graph.Vertex v3 = new Graph.Vertex(3); - verticies.add(v3); - Graph.Vertex v4 = new Graph.Vertex(4); - verticies.add(v4); - Graph.Vertex v5 = new Graph.Vertex(5); - verticies.add(v5); - Graph.Vertex v6 = new Graph.Vertex(6); - verticies.add(v6); - - java.util.List> edges = new ArrayList>(); - Graph.Edge e1_2 = new Graph.Edge(7, v1, v2); - edges.add(e1_2); - Graph.Edge e1_3 = new Graph.Edge(9, v1, v3); - edges.add(e1_3); - Graph.Edge e1_6 = new Graph.Edge(14, v1, v6); - edges.add(e1_6); - Graph.Edge e2_3 = new Graph.Edge(10, v2, v3); - edges.add(e2_3); - Graph.Edge e2_4 = new Graph.Edge(15, v2, v4); - edges.add(e2_4); - Graph.Edge e3_4 = new Graph.Edge(11, v3, v4); - edges.add(e3_4); - Graph.Edge e3_6 = new Graph.Edge(2, v3, v6); - edges.add(e3_6); - Graph.Edge e5_6 = new Graph.Edge(9, v5, v6); - edges.add(e5_6); - Graph.Edge e4_5 = new Graph.Edge(6, v4, v5); - edges.add(e4_5); - - Graph undirected = new Graph(verticies, edges); - if (debug > 1) System.out.println(undirected.toString()); - - Graph.Vertex start = v1; - Graph.Vertex end = v5; - - System.out.println("Dijstra's shortest paths of the undirected graph from " + start.getValue()+" to all."); - Map, Graph.CostPathPair> map1 = Dijkstra.getShortestPaths(undirected, start); - if (debug > 1) System.out.println(getPathMapString(start, map1)); - - // Ideal path - Map, Graph.CostPathPair> result1 = new java.util.HashMap, Graph.CostPathPair>(); - { - { - int cost = 11; - Set> set = new java.util.LinkedHashSet>(); - set.add(e1_3); - set.add(e3_6); - Graph.CostPathPair path = new Graph.CostPathPair(cost, set); - result1.put(v6, path); - } - { - int cost = 20; - Set> set = new java.util.LinkedHashSet>(); - set.add(e1_3); - set.add(e3_6); - set.add(new Graph.Edge(9, v6, v5)); - Graph.CostPathPair path = new Graph.CostPathPair(cost, set); - result1.put(v5, path); - } - { - int cost = 9; - Set> set = new java.util.LinkedHashSet>(); - set.add(e1_3); - Graph.CostPathPair path = new Graph.CostPathPair(cost, set); - result1.put(v3, path); - } - { - int cost = 20; - Set> set = new java.util.LinkedHashSet>(); - set.add(e1_3); - set.add(e3_4); - Graph.CostPathPair path = new Graph.CostPathPair(cost, set); - result1.put(v4, path); - } - { - int cost = 7; - Set> set = new java.util.LinkedHashSet>(); - set.add(e1_2); - Graph.CostPathPair path = new Graph.CostPathPair(cost, set); - result1.put(v2, path); - } - { - int cost = 0; - Set> set = new java.util.LinkedHashSet>(); - Graph.CostPathPair path = new Graph.CostPathPair(cost, set); - result1.put(v1, path); - } - } - - // Compare results - for (Graph.Vertex v : map1.keySet()) { - Graph.CostPathPair path1 = map1.get(v); - Graph.CostPathPair path2 = result1.get(v); - if (path1==null||path2==null) { - System.out.println("Dijstra's shortest path error. path1="+path1+" path2="+path2); - return false; - } - if (!path1.equals(path2)) { - System.err.println("Dijstra's shortest path error. path1="+path1+" path2="+path2); - return false; - } - } - System.out.println("Dijstra's shortest path worked correctly."); - - System.out.println("Dijstra's shortest path of the undirected graph from " + start.getValue() + " to " + end.getValue()+"."); - Graph.CostPathPair pair1 = Dijkstra.getShortestPath(undirected, start, end); - if (debug > 1) System.out.println(pair1.toString()); - if (pair1 == null) { - System.out.println("No path from " + start.getValue() + " to " + end.getValue()); - return false; - } - - // Ideal pair - int cost = 20; - Set> set = new java.util.LinkedHashSet>(); - set.add(e1_3); - set.add(e3_6); - set.add(new Graph.Edge(9, v6, v5)); - Graph.CostPathPair result2 = new Graph.CostPathPair(cost, set); - - if (!pair1.equals(result2)) { - System.err.println("Dijstra's shortest path error. pair1="+pair1+" pair2="+result2); - return false; - } - System.out.println("Dijstra's shortest path worked correctly"); - - System.out.println("Bellman-Ford's shortest paths of the undirected graph from " + start.getValue()+" to all."); - Map, Graph.CostPathPair> map2 = BellmanFord.getShortestPaths(undirected, start); - if (debug > 1) System.out.println(getPathMapString(start, map2)); - - // Compare results - for (Graph.Vertex v : map2.keySet()) { - Graph.CostPathPair path1 = map2.get(v); - Graph.CostPathPair path2 = result1.get(v); - if (path1==null||path2==null) { - System.out.println("Bellman-Ford's shortest path error. path1="+path1+" path2="+path2); - return false; - } - if (!path1.equals(path2)) { - System.err.println("Bellman-Ford's shortest path error. path1="+path1+" path2="+path2); - return false; - } - } - System.out.println("Bellman-Ford's shortest path worked correctly."); - - System.out.println("Bellman-Ford's shortest path of the undirected graph from " + start.getValue() + " to " + end.getValue()+"."); - Graph.CostPathPair pair2 = BellmanFord.getShortestPath(undirected, start, end); - if (pair2 == null) { - System.out.println("No path from " + start.getValue() + " to " + end.getValue()); - return false; - } - - if (!pair2.equals(result2)) { - System.err.println("Bellman-Ford's shortest path error. pair2="+pair2+" result2="+result2); - return false; - } - System.out.println("Bellman-Ford's shortest path worked correctly"); - - // MST - - System.out.println("Prim's minimum spanning tree of the undirected graph starting from vertex " + start.getValue()+"."); - Graph.CostPathPair pair3 = Prim.getMinimumSpanningTree(undirected, start); - if (debug > 1) System.out.println(pair3.toString()); - { - // Ideal MST - cost = 33; - set = new java.util.LinkedHashSet>(); - set.add(e1_2); - set.add(e1_3); - set.add(e3_6); - set.add(new Graph.Edge(9, v6, v5)); - set.add(new Graph.Edge(6, v5, v4)); - Graph.CostPathPair result3 = new Graph.CostPathPair(cost, set); - - if (!pair3.equals(result3)) { - System.err.println("Prim's minimum spanning tree error. pair3="+pair3+" result3="+result3); - return false; - } - System.out.println("Prim's minimum spanning tree worked correctly"); - } - - // Prim on a graph with cycles - java.util.List> cyclicVerticies = new ArrayList>(); - Graph.Vertex cv1 = new Graph.Vertex(1); - cyclicVerticies.add(cv1); - Graph.Vertex cv2 = new Graph.Vertex(2); - cyclicVerticies.add(cv2); - Graph.Vertex cv3 = new Graph.Vertex(3); - cyclicVerticies.add(cv3); - Graph.Vertex cv4 = new Graph.Vertex(4); - cyclicVerticies.add(cv4); - Graph.Vertex cv5 = new Graph.Vertex(5); - cyclicVerticies.add(cv5); - - java.util.List> cyclicEdges = new ArrayList>(); - Graph.Edge ce1_2 = new Graph.Edge(3, cv1, cv2); - cyclicEdges.add(ce1_2); - Graph.Edge ce2_3 = new Graph.Edge(2, cv2, cv3); - cyclicEdges.add(ce2_3); - Graph.Edge ce3_4 = new Graph.Edge(4, cv3, cv4); - cyclicEdges.add(ce3_4); - Graph.Edge ce4_1 = new Graph.Edge(1, cv4, cv1); - cyclicEdges.add(ce4_1); - Graph.Edge ce4_5 = new Graph.Edge(1, cv4, cv5); - cyclicEdges.add(ce4_5); - - Graph cyclicUndirected = new Graph(cyclicVerticies, cyclicEdges); - if (debug > 1) System.out.println(cyclicUndirected.toString()); - - start = cv1; - - if (debug > 1) System.out.println("Prim's minimum spanning tree of a cyclic undirected graph from " + start.getValue()); - Graph.CostPathPair pair4 = Prim.getMinimumSpanningTree(cyclicUndirected, start); - if (debug > 1) System.out.println(pair4.toString()); - { - // Ideal MST - cost = 7; - set = new java.util.LinkedHashSet>(); - set.add(new Graph.Edge(1, v1, v4)); - set.add(ce4_5); - set.add(ce1_2); - set.add(ce2_3); - Graph.CostPathPair result4 = new Graph.CostPathPair(cost, set); - - if (!pair4.equals(result4)) { - System.err.println("Prim's minimum spanning tree error. pair4="+pair4+" result4="+result4); - return false; - } - System.out.println("Prim's minimum spanning tree worked correctly"); - } - - if (debug > 1) System.out.println(); - } - - { // DIRECTED GRAPH - if (debug > 1) System.out.println("Directed Graph."); - java.util.List> verticies = new ArrayList>(); - Graph.Vertex v1 = new Graph.Vertex(1); - verticies.add(v1); - Graph.Vertex v2 = new Graph.Vertex(2); - verticies.add(v2); - Graph.Vertex v3 = new Graph.Vertex(3); - verticies.add(v3); - Graph.Vertex v4 = new Graph.Vertex(4); - verticies.add(v4); - Graph.Vertex v5 = new Graph.Vertex(5); - verticies.add(v5); - Graph.Vertex v6 = new Graph.Vertex(6); - verticies.add(v6); - Graph.Vertex v7 = new Graph.Vertex(7); - verticies.add(v7); - - java.util.List> edges = new ArrayList>(); - Graph.Edge e1_2 = new Graph.Edge(7, v1, v2); - edges.add(e1_2); - Graph.Edge e1_3 = new Graph.Edge(9, v1, v3); - edges.add(e1_3); - Graph.Edge e1_6 = new Graph.Edge(14, v1, v6); - edges.add(e1_6); - Graph.Edge e2_3 = new Graph.Edge(10, v2, v3); - edges.add(e2_3); - Graph.Edge e2_4 = new Graph.Edge(15, v2, v4); - edges.add(e2_4); - Graph.Edge e3_4 = new Graph.Edge(11, v3, v4); - edges.add(e3_4); - Graph.Edge e3_6 = new Graph.Edge(2, v3, v6); - edges.add(e3_6); - Graph.Edge e6_5 = new Graph.Edge(9, v6, v5); - edges.add(e6_5); - Graph.Edge e4_5 = new Graph.Edge(6, v4, v5); - edges.add(e4_5); - Graph.Edge e4_7 = new Graph.Edge(16, v4, v7); - edges.add(e4_7); - - Graph directed = new Graph(Graph.TYPE.DIRECTED, verticies, edges); - if (debug > 1) System.out.println(directed.toString()); - - Graph.Vertex start = v1; - Graph.Vertex end = v5; - - System.out.println("Dijstra's shortest paths of the directed graph from " + start.getValue() + " to all."); - Map, Graph.CostPathPair> map1 = Dijkstra.getShortestPaths(directed, start); - if (debug > 1) System.out.println(getPathMapString(start, map1)); - - // Ideal path - Map, Graph.CostPathPair> result1 = new java.util.HashMap, Graph.CostPathPair>(); - { - { - int cost = 11; - Set> set = new java.util.LinkedHashSet>(); - set.add(e1_3); - set.add(e3_6); - Graph.CostPathPair path = new Graph.CostPathPair(cost, set); - result1.put(v6, path); - } - { - int cost = 20; - Set> set = new java.util.LinkedHashSet>(); - set.add(e1_3); - set.add(e3_6); - set.add(new Graph.Edge(9, v6, v5)); - Graph.CostPathPair path = new Graph.CostPathPair(cost, set); - result1.put(v5, path); - } - { - int cost = 36; - Set> set = new java.util.LinkedHashSet>(); - set.add(e1_3); - set.add(e3_4); - set.add(e4_7); - Graph.CostPathPair path = new Graph.CostPathPair(cost, set); - result1.put(v7, path); - } - { - int cost = 9; - Set> set = new java.util.LinkedHashSet>(); - set.add(e1_3); - Graph.CostPathPair path = new Graph.CostPathPair(cost, set); - result1.put(v3, path); - } - { - int cost = 20; - Set> set = new java.util.LinkedHashSet>(); - set.add(e1_3); - set.add(e3_4); - Graph.CostPathPair path = new Graph.CostPathPair(cost, set); - result1.put(v4, path); - } - { - int cost = 7; - Set> set = new java.util.LinkedHashSet>(); - set.add(e1_2); - Graph.CostPathPair path = new Graph.CostPathPair(cost, set); - result1.put(v2, path); - } - { - int cost = 0; - Set> set = new java.util.LinkedHashSet>(); - Graph.CostPathPair path = new Graph.CostPathPair(cost, set); - result1.put(v1, path); - } - } - - // Compare results - for (Graph.Vertex v : map1.keySet()) { - Graph.CostPathPair path1 = map1.get(v); - Graph.CostPathPair path2 = result1.get(v); - if (path1==null||path2==null) { - System.out.println("Dijstra's shortest path error. path1="+path1+" path2="+path2); - return false; - } - if (!path1.equals(path2)) { - System.err.println("Dijstra's shortest path error. path1="+path1+" path2="+path2); - return false; - } - } - System.out.println("Dijstra's shortest path worked correctly."); - - System.out.println("Dijstra's shortest path of the directed graph from " + start.getValue() + " to " + end.getValue() + "."); - Graph.CostPathPair pair1 = Dijkstra.getShortestPath(directed, start, end); - if (pair1 == null) { - System.out.println("No path from " + start.getValue() + " to " + end.getValue()); - return false; - } - - // Ideal pair - int cost = 20; - Set> set = new java.util.LinkedHashSet>(); - set.add(e1_3); - set.add(e3_6); - set.add(new Graph.Edge(9, v6, v5)); - Graph.CostPathPair result2 = new Graph.CostPathPair(cost, set); - - // Compare pair - if (!pair1.equals(result2)) { - System.err.println("Dijstra's shortest path error. pair1="+pair1+" result2="+result2); - return false; - } - System.out.println("Dijstra's shortest path worked correctly"); - - System.out.println("Bellman-Ford's shortest paths of the directed graph from " + start.getValue() + " to all."); - Map, Graph.CostPathPair> map2 = BellmanFord.getShortestPaths(directed, start); - if (debug > 1) System.out.println(getPathMapString(start, map2)); - - // Compare results - for (Graph.Vertex v : map2.keySet()) { - Graph.CostPathPair path1 = map2.get(v); - Graph.CostPathPair path2 = result1.get(v); - if (path1==null||path2==null) { - System.out.println("Bellman-Ford's shortest path error. path1="+path1+" path2="+path2); - return false; - } - if (!path1.equals(path2)) { - System.err.println("Bellman-Ford's shortest path error. path1="+path1+" path2="+path2); - return false; - } - } - System.out.println("Bellman-Ford's shortest path worked correctly."); - - System.out.println("Bellman-Ford's shortest path of the directed graph from " + start.getValue() + " to " + end.getValue() + "."); - Graph.CostPathPair pair2 = BellmanFord.getShortestPath(directed, start, end); - if (pair2 == null) { - System.out.println("No path from " + start.getValue() + " to " + end.getValue()); - return false; - } - - // Compare pair - if (!pair2.equals(result2)) { - System.err.println("Bellman-Ford's shortest path error. pair2="+pair2+" result2="+result2); - return false; - } - System.out.println("Bellman-Ford's shortest path worked correctly"); - - if (debug > 1) System.out.println(); - } - - { // DIRECTED GRAPH (WITH NEGATIVE WEIGHTS) - if (debug > 1) System.out.println("Directed Graph with Negative Weights."); - java.util.List> verticies = new ArrayList>(); - Graph.Vertex v1 = new Graph.Vertex(1); - verticies.add(v1); - Graph.Vertex v2 = new Graph.Vertex(2); - verticies.add(v2); - Graph.Vertex v3 = new Graph.Vertex(3); - verticies.add(v3); - Graph.Vertex v4 = new Graph.Vertex(4); - verticies.add(v4); - - java.util.List> edges = new ArrayList>(); - Graph.Edge e1_4 = new Graph.Edge(2, v1, v4); - edges.add(e1_4); - Graph.Edge e2_1 = new Graph.Edge(6, v2, v1); - edges.add(e2_1); - Graph.Edge e2_3 = new Graph.Edge(3, v2, v3); - edges.add(e2_3); - Graph.Edge e3_1 = new Graph.Edge(4, v3, v1); - edges.add(e3_1); - Graph.Edge e3_4 = new Graph.Edge(5, v3, v4); - edges.add(e3_4); - Graph.Edge e4_2 = new Graph.Edge(-7, v4, v2); - edges.add(e4_2); - Graph.Edge e4_3 = new Graph.Edge(-3, v4, v3); - edges.add(e4_3); - - Graph directed = new Graph(Graph.TYPE.DIRECTED, verticies, edges); - if (debug > 1) System.out.println(directed.toString()); - - Graph.Vertex start = v1; - Graph.Vertex end = v3; - - System.out.println("Bellman-Ford's shortest paths of the directed graph with negative weight from " + start.getValue()+" to all."); - Map, Graph.CostPathPair> map1 = BellmanFord.getShortestPaths(directed, start); - if (debug > 1) System.out.println(getPathMapString(start, map1)); - - // Ideal path - Map, Graph.CostPathPair> result1 = new java.util.HashMap, Graph.CostPathPair>(); - { - { - int cost = -2; - Set> set = new java.util.LinkedHashSet>(); - set.add(e1_4); - set.add(e4_2); - set.add(e2_3); - Graph.CostPathPair path = new Graph.CostPathPair(cost, set); - result1.put(v3, path); - } - { - int cost = 2; - Set> set = new java.util.LinkedHashSet>(); - set.add(e1_4); - Graph.CostPathPair path = new Graph.CostPathPair(cost, set); - result1.put(v4, path); - } - { - int cost = -5; - Set> set = new java.util.LinkedHashSet>(); - set.add(e1_4); - set.add(e4_2); - Graph.CostPathPair path = new Graph.CostPathPair(cost, set); - result1.put(v2, path); - } - { - int cost = 0; - Set> set = new java.util.LinkedHashSet>(); - Graph.CostPathPair path = new Graph.CostPathPair(cost, set); - result1.put(v1, path); - } - } - - // Compare results - for (Graph.Vertex v : map1.keySet()) { - Graph.CostPathPair path1 = map1.get(v); - Graph.CostPathPair path2 = result1.get(v); - if (path1==null||path2==null) { - System.out.println("Bellman-Ford's shortest path error. path1="+path1+" path2="+path2); - return false; - } - if (!path1.equals(path2)) { - System.err.println("Bellman-Ford's shortest path error. path1="+path1+" path2="+path2); - return false; - } - } - System.out.println("Bellman-Ford's shortest path worked correctly."); - - System.out.println("Bellman-Ford's shortest path of the directed graph from with negative weight " + start.getValue() + " to " + end.getValue()+ "."); - Graph.CostPathPair pair1 = BellmanFord.getShortestPath(directed, start, end); - if (pair1 == null) { - System.out.println("No path from " + start.getValue() + " to " + end.getValue()); - return false; - } - - // Ideal pair - int cost = -2; - Set> set = new java.util.LinkedHashSet>(); - set.add(e1_4); - set.add(e4_2); - set.add(e2_3); - Graph.CostPathPair result2 = new Graph.CostPathPair(cost, set); - - // Compare pair - if (!pair1.equals(result2)) { - System.err.println("Bellman-Ford's shortest path error. pair1="+pair1+" result2="+result2); - return false; - } - System.out.println("Bellman-Ford's shortest path worked correctly"); - - System.out.println("Johnson's all-pairs shortest path of the directed graph with negative weight."); - Map, Map, Set>>> path1 = Johnson.getAllPairsShortestPaths(directed); - if (debug > 1) System.out.println(getPathMapString(path1)); - if (path1 == null) { - System.err.println("Directed graph contains a negative weight cycle."); - return false; - } - - Map, Map, Set>>> result3 = new java.util.HashMap, Map, Set>>>(); - { - { // vertex 3 - Map, Set>> m = new java.util.HashMap, Set>>(); - Set> s3 = new java.util.LinkedHashSet>(); - m.put(v3, s3); - Set> s4 = new java.util.LinkedHashSet>(); - s4.add(e3_4); - m.put(v4, s4); - Set> s2 = new java.util.LinkedHashSet>(); - s2.add(e3_4); - s2.add(e4_2); - m.put(v2, s2); - Set> s1 = new java.util.LinkedHashSet>(); - s1.add(e3_1); - m.put(v1, s1); - result3.put(v3, m); - } - { // vertex 4 - Map, Set>> m = new java.util.HashMap, Set>>(); - Set> s3 = new java.util.LinkedHashSet>(); - s3.add(e4_2); - s3.add(e2_3); - m.put(v3, s3); - Set> s4 = new java.util.LinkedHashSet>(); - s4.add(e4_2); - s4.add(e2_3); - s4.add(e3_4); - m.put(v4, s4); - Set> s2 = new java.util.LinkedHashSet>(); - s2.add(e4_2); - m.put(v2, s2); - Set> s1 = new java.util.LinkedHashSet>(); - s1.add(e4_2); - s1.add(e2_1); - m.put(v1, s1); - result3.put(v4, m); - } - { // vertex 2 - Map, Set>> m = new java.util.HashMap, Set>>(); - Set> s3 = new java.util.LinkedHashSet>(); - s3.add(e2_3); - m.put(v3, s3); - Set> s4 = new java.util.LinkedHashSet>(); - s4.add(e2_1); - s4.add(e1_4); - m.put(v4, s4); - Set> s2 = new java.util.LinkedHashSet>(); - m.put(v2, s2); - Set> s1 = new java.util.LinkedHashSet>(); - s1.add(e2_1); - m.put(v1, s1); - result3.put(v2, m); - } - { // vertex 1 - Map, Set>> m = new java.util.HashMap, Set>>(); - Set> s3 = new java.util.LinkedHashSet>(); - s3.add(e1_4); - s3.add(e4_2); - s3.add(e2_3); - m.put(v3, s3); - Set> s4 = new java.util.LinkedHashSet>(); - s4.add(e1_4); - m.put(v4, s4); - Set> s2 = new java.util.LinkedHashSet>(); - s2.add(e1_4); - s2.add(e4_2); - m.put(v2, s2); - Set> s1 = new java.util.LinkedHashSet>(); - s1.add(e1_4); - m.put(v1, s1); - result3.put(v1, m); - } - } - - // Compare results - for (Vertex vertex1 : path1.keySet()) { - Map, Set>> m1 = path1.get(vertex1); - Map, Set>> m2 = result3.get(vertex1); - for (Vertex vertex2 : m1.keySet()) { - Set> set3 = m1.get(vertex2); - Set> set4 = m2.get(vertex2); - Object[] objs1 = set3.toArray(); - Object[] objs2 = set4.toArray(); - int size = objs1.length; - for (int i=0; i e1 = (Edge)objs1[i]; - Edge e2 = (Edge)objs2[i]; - if (!e1.getFromVertex().equals(e2.getFromVertex())) { - System.err.println("Johnson's all-pairs shortest path error. e1.from="+e1.getFromVertex()+" e2.from="+e2.getFromVertex()); - return false; - } - if (!e1.getToVertex().equals(e2.getToVertex())) { - System.err.println("Johnson's all-pairs shortest path error. e1.to="+e1.getToVertex()+" e2.to="+e2.getToVertex()); - return false; - } - } - } - } - System.out.println("Bellman-Ford's shortest path worked correctly."); - - System.out.println("Floyd-Warshall's all-pairs shortest path weights of the directed graph with negative weight."); - Map, Map, Integer>> pathWeights = FloydWarshall.getAllPairsShortestPaths(directed); - if (debug > 1) System.out.println(getWeightMapString(pathWeights)); - - Map, Map, Integer>> result4 = new java.util.HashMap, Map, Integer>>(); - { - // Ideal weights - { // Vertex 3 - Map, Integer> m = new java.util.HashMap, Integer>(); - { - // Vertex 3 - m.put(v3, 0); - } - { - // Vertex 4 - m.put(v4, 5); - } - { - // Vertex 2 - m.put(v2, -2); - } - { - // Vertex 1 - m.put(v1, 4); - } - result4.put(v3, m); - } - { // Vertex 4 - Map, Integer> m = new java.util.HashMap, Integer>(); - { - // Vertex 3 - m.put(v3, -4); - } - { - // Vertex 4 - m.put(v4, 0); - } - { - // Vertex 2 - m.put(v2, -7); - } - { - // Vertex 1 - m.put(v1, -1); - } - result4.put(v4, m); - } - { // Vertex 2 - Map, Integer> m = new java.util.HashMap, Integer>(); - { - // Vertex 3 - m.put(v3, 3); - } - { - // Vertex 4 - m.put(v4, 8); - } - { - // Vertex 2 - m.put(v2, 0); - } - { - // Vertex 1 - m.put(v1, 6); - } - result4.put(v2, m); - } - { // Vertex 1 - Map, Integer> m = new java.util.HashMap, Integer>(); - { - // Vertex 3 - m.put(v3, -2); - } - { - // Vertex 4 - m.put(v4, 2); - } - { - // Vertex 2 - m.put(v2, -5); - } - { - // Vertex 1 - m.put(v1, 0); - } - result4.put(v1, m); - } - } - - // Compare results - for (Vertex vertex1 : pathWeights.keySet()) { - Map, Integer> m1 = pathWeights.get(vertex1); - Map, Integer> m2 = result4.get(vertex1); - for (Vertex v : m1.keySet()) { - int i1 = m1.get(v); - int i2 = m2.get(v); - if (i1 != i2) { - System.err.println("Floyd-Warshall's all-pairs shortest path weights error. i1="+i1+" i2="+i2); - return false; - } - } - - } - System.out.println("Bellman-Ford's shortest path worked correctly."); - - if (debug > 1) System.out.println(); - } - - { // UNDIRECTED GRAPH - if (debug > 1) System.out.println("Undirected Graph cycle check."); - java.util.List> cycledVerticies = new ArrayList>(); - Graph.Vertex cv1 = new Graph.Vertex(1); - cycledVerticies.add(cv1); - Graph.Vertex cv2 = new Graph.Vertex(2); - cycledVerticies.add(cv2); - Graph.Vertex cv3 = new Graph.Vertex(3); - cycledVerticies.add(cv3); - Graph.Vertex cv4 = new Graph.Vertex(4); - cycledVerticies.add(cv4); - Graph.Vertex cv5 = new Graph.Vertex(5); - cycledVerticies.add(cv5); - Graph.Vertex cv6 = new Graph.Vertex(6); - cycledVerticies.add(cv6); - - java.util.List> cycledEdges = new ArrayList>(); - Graph.Edge ce1_2 = new Graph.Edge(7, cv1, cv2); - cycledEdges.add(ce1_2); - Graph.Edge ce2_4 = new Graph.Edge(15, cv2, cv4); - cycledEdges.add(ce2_4); - Graph.Edge ce3_4 = new Graph.Edge(11, cv3, cv4); - cycledEdges.add(ce3_4); - Graph.Edge ce3_6 = new Graph.Edge(2, cv3, cv6); - cycledEdges.add(ce3_6); - Graph.Edge ce5_6 = new Graph.Edge(9, cv5, cv6); - cycledEdges.add(ce5_6); - Graph.Edge ce4_5 = new Graph.Edge(6, cv4, cv5); - cycledEdges.add(ce4_5); - - Graph undirectedWithCycle = new Graph(cycledVerticies, cycledEdges); - if (debug > 1) System.out.println(undirectedWithCycle.toString()); - - System.out.println("Cycle detection of the undirected graph with a cycle."); - boolean result = CycleDetection.detect(undirectedWithCycle); - if (result) System.out.println("Cycle detection worked correctly."); - else { - System.err.println("Cycle detection error."); - return false; - } - - java.util.List> verticies = new ArrayList>(); - Graph.Vertex v1 = new Graph.Vertex(1); - verticies.add(v1); - Graph.Vertex v2 = new Graph.Vertex(2); - verticies.add(v2); - Graph.Vertex v3 = new Graph.Vertex(3); - verticies.add(v3); - Graph.Vertex v4 = new Graph.Vertex(4); - verticies.add(v4); - Graph.Vertex v5 = new Graph.Vertex(5); - verticies.add(v5); - Graph.Vertex v6 = new Graph.Vertex(6); - verticies.add(v6); - - java.util.List> edges = new ArrayList>(); - Graph.Edge e1_2 = new Graph.Edge(7, v1, v2); - edges.add(e1_2); - Graph.Edge e2_4 = new Graph.Edge(15, v2, v4); - edges.add(e2_4); - Graph.Edge e3_4 = new Graph.Edge(11, v3, v4); - edges.add(e3_4); - Graph.Edge e3_6 = new Graph.Edge(2, v3, v6); - edges.add(e3_6); - Graph.Edge e4_5 = new Graph.Edge(6, v4, v5); - edges.add(e4_5); - - Graph undirectedWithoutCycle = new Graph(verticies, edges); - if (debug > 1) System.out.println(undirectedWithoutCycle.toString()); - - System.out.println("Cycle detection of the undirected graph without a cycle."); - result = CycleDetection.detect(undirectedWithoutCycle); - if (!result) System.out.println("Cycle detection worked correctly."); - else { - System.err.println("Cycle detection error."); - return false; - } - } - - { // DIRECTED GRAPH - if (debug > 1) System.out.println("Directed Graph topological sort."); - java.util.List> verticies = new ArrayList>(); - Graph.Vertex cv1 = new Graph.Vertex(1); - verticies.add(cv1); - Graph.Vertex cv2 = new Graph.Vertex(2); - verticies.add(cv2); - Graph.Vertex cv3 = new Graph.Vertex(3); - verticies.add(cv3); - Graph.Vertex cv4 = new Graph.Vertex(4); - verticies.add(cv4); - Graph.Vertex cv5 = new Graph.Vertex(5); - verticies.add(cv5); - Graph.Vertex cv6 = new Graph.Vertex(6); - verticies.add(cv6); - - java.util.List> edges = new ArrayList>(); - Graph.Edge ce1_2 = new Graph.Edge(1, cv1, cv2); - edges.add(ce1_2); - Graph.Edge ce2_4 = new Graph.Edge(2, cv2, cv4); - edges.add(ce2_4); - Graph.Edge ce4_3 = new Graph.Edge(3, cv4, cv3); - edges.add(ce4_3); - Graph.Edge ce3_6 = new Graph.Edge(4, cv3, cv6); - edges.add(ce3_6); - Graph.Edge ce5_6 = new Graph.Edge(5, cv5, cv6); - edges.add(ce5_6); - Graph.Edge ce4_5 = new Graph.Edge(6, cv4, cv5); - edges.add(ce4_5); - - Graph directed = new Graph(Graph.TYPE.DIRECTED, verticies, edges); - if (debug > 1) System.out.println(directed.toString()); - - System.out.println("Topological sort of the directed graph."); - java.util.List> results = TopologicalSort.sort(directed); - if (debug > 1) System.out.println("result=" + results); - if (results==null || results.size()==0) { - System.out.println("Topological sort error. results="+results); - return false; - } - - java.util.List> results2 = new java.util.ArrayList>(results.size()); - { // Ideal sort - results2.add(cv6); - results2.add(cv3); - results2.add(cv5); - results2.add(cv4); - results2.add(cv2); - results2.add(cv1); - } - - // Compare results - { - Object[] objs1 = results.toArray(); - Object[] objs2 = results2.toArray(); - int size = objs1.length; - for (int i=0; i v1 = (Graph.Vertex) objs1[i]; - Graph.Vertex v2 = (Graph.Vertex) objs2[i]; - if (!v1.equals(v2)) { - System.err.println("Topological sort error. v1="+v1+" v2"); - return false; - } - } - } - System.out.println("Topological sort worked correctly."); - - if (debug > 1) System.out.println(); - } - - return true; - } - - private static final String getPathMapString(Graph.Vertex start, Map, Graph.CostPathPair> map) { - StringBuilder builder = new StringBuilder(); - for (Graph.Vertex v : map.keySet()) { - Graph.CostPathPair pair = map.get(v); - builder.append("From ").append(start.getValue()).append(" to vertex=").append(v.getValue()).append("\n"); - if (pair != null) - builder.append(pair.toString()).append("\n"); - - } - return builder.toString(); - } - - private static final String getPathMapString(Map, Map, Set>>> paths) { - StringBuilder builder = new StringBuilder(); - for (Graph.Vertex v : paths.keySet()) { - Map, Set>> map = paths.get(v); - for (Graph.Vertex v2 : map.keySet()) { - builder.append("From=").append(v.getValue()).append(" to=").append(v2.getValue()).append("\n"); - Set> path = map.get(v2); - builder.append(path).append("\n"); - } - } - return builder.toString(); - } - - private static final String getWeightMapString(Map, Map, Integer>> paths) { - StringBuilder builder = new StringBuilder(); - for (Graph.Vertex v : paths.keySet()) { - Map, Integer> map = paths.get(v); - for (Graph.Vertex v2 : map.keySet()) { - builder.append("From=").append(v.getValue()).append(" to=").append(v2.getValue()).append("\n"); - Integer weight = map.get(v2); - builder.append(weight).append("\n"); - } - } - return builder.toString(); - } - - public static void main(String[] args) { - boolean passed = testGraph(); - if (!passed) System.err.println("Graph failed."); - } -} diff --git a/src/com/jwetherell/algorithms/data_structures/test/BTreeTests.java b/src/com/jwetherell/algorithms/data_structures/test/BTreeTests.java index 63f5067f..0607e94d 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/BTreeTests.java +++ b/src/com/jwetherell/algorithms/data_structures/test/BTreeTests.java @@ -1,6 +1,6 @@ package com.jwetherell.algorithms.data_structures.test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertTrue; import java.util.Collection; diff --git a/src/com/jwetherell/algorithms/data_structures/test/BinarySearchTreeTests.java b/src/com/jwetherell/algorithms/data_structures/test/BinarySearchTreeTests.java index 3983906a..25e9fabf 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/BinarySearchTreeTests.java +++ b/src/com/jwetherell/algorithms/data_structures/test/BinarySearchTreeTests.java @@ -1,6 +1,6 @@ package com.jwetherell.algorithms.data_structures.test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertTrue; import java.util.Collection; diff --git a/src/com/jwetherell/algorithms/data_structures/test/HashArrayMappedTreeTests.java b/src/com/jwetherell/algorithms/data_structures/test/HashArrayMappedTreeTests.java index a83e91be..1ea2caaa 100644 --- a/src/com/jwetherell/algorithms/data_structures/test/HashArrayMappedTreeTests.java +++ b/src/com/jwetherell/algorithms/data_structures/test/HashArrayMappedTreeTests.java @@ -1,6 +1,6 @@ package com.jwetherell.algorithms.data_structures.test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertTrue; import org.junit.Test; diff --git a/src/com/jwetherell/algorithms/graph/test/Graphs.java b/src/com/jwetherell/algorithms/graph/test/Graphs.java new file mode 100644 index 00000000..70c6654b --- /dev/null +++ b/src/com/jwetherell/algorithms/graph/test/Graphs.java @@ -0,0 +1,924 @@ +package com.jwetherell.algorithms.graph.test; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.junit.Test; + +import com.jwetherell.algorithms.data_structures.Graph; +import com.jwetherell.algorithms.data_structures.Graph.Edge; +import com.jwetherell.algorithms.data_structures.Graph.Vertex; +import com.jwetherell.algorithms.graph.BellmanFord; +import com.jwetherell.algorithms.graph.CycleDetection; +import com.jwetherell.algorithms.graph.Dijkstra; +import com.jwetherell.algorithms.graph.FloydWarshall; +import com.jwetherell.algorithms.graph.Johnson; +import com.jwetherell.algorithms.graph.Prim; +import com.jwetherell.algorithms.graph.TopologicalSort; + +public class Graphs { + + private static int debug = 0; // Debug level. 0=None, 1=Some + + // Undirected + private static class UndirectedGraph { + List> verticies = new ArrayList>(); + Graph.Vertex v1 = new Graph.Vertex(1); + Graph.Vertex v2 = new Graph.Vertex(2); + Graph.Vertex v3 = new Graph.Vertex(3); + Graph.Vertex v4 = new Graph.Vertex(4); + Graph.Vertex v5 = new Graph.Vertex(5); + Graph.Vertex v6 = new Graph.Vertex(6); + { + verticies.add(v1); + verticies.add(v2); + verticies.add(v3); + verticies.add(v4); + verticies.add(v5); + verticies.add(v6); + } + + List> edges = new ArrayList>(); + Graph.Edge e1_2 = new Graph.Edge(7, v1, v2); + Graph.Edge e1_3 = new Graph.Edge(9, v1, v3); + Graph.Edge e1_6 = new Graph.Edge(14, v1, v6); + Graph.Edge e2_3 = new Graph.Edge(10, v2, v3); + Graph.Edge e2_4 = new Graph.Edge(15, v2, v4); + Graph.Edge e3_4 = new Graph.Edge(11, v3, v4); + Graph.Edge e3_6 = new Graph.Edge(2, v3, v6); + Graph.Edge e5_6 = new Graph.Edge(9, v5, v6); + Graph.Edge e4_5 = new Graph.Edge(6, v4, v5); + { + edges.add(e1_2); + edges.add(e1_3); + edges.add(e1_6); + edges.add(e2_3); + edges.add(e2_4); + edges.add(e3_4); + edges.add(e3_6); + edges.add(e5_6); + edges.add(e4_5); + } + + Graph graph = new Graph(verticies, edges); + } + private UndirectedGraph undirected = new UndirectedGraph(); + + // Ideal undirected path + private Map, Graph.CostPathPair> idealUndirectedPath = new HashMap, Graph.CostPathPair>(); + { + { + int cost = 11; + Set> set = new LinkedHashSet>(); + set.add(undirected.e1_3); + set.add(undirected.e3_6); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + idealUndirectedPath.put(undirected.v6, path); + } + { + int cost = 20; + Set> set = new LinkedHashSet>(); + set.add(undirected.e1_3); + set.add(undirected.e3_6); + set.add(new Graph.Edge(9, undirected.v6, undirected.v5)); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + idealUndirectedPath.put(undirected.v5, path); + } + { + int cost = 9; + Set> set = new LinkedHashSet>(); + set.add(undirected.e1_3); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + idealUndirectedPath.put(undirected.v3, path); + } + { + int cost = 20; + Set> set = new LinkedHashSet>(); + set.add(undirected.e1_3); + set.add(undirected.e3_4); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + idealUndirectedPath.put(undirected.v4, path); + } + { + int cost = 7; + Set> set = new LinkedHashSet>(); + set.add(undirected.e1_2); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + idealUndirectedPath.put(undirected.v2, path); + } + { + int cost = 0; + Set> set = new LinkedHashSet>(); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + idealUndirectedPath.put(undirected.v1, path); + } + } + + // Ideal undirected PathPair + private Graph.CostPathPair idealUndirectedPathPair = null; + { + int cost = 20; + Set> set = new LinkedHashSet>(); + set.add(undirected.e1_3); + set.add(undirected.e3_6); + set.add(new Graph.Edge(9, undirected.v6, undirected.v5)); + idealUndirectedPathPair = new Graph.CostPathPair(cost, set); + } + + // Directed + private static class DirectedGraph { + List> verticies = new ArrayList>(); + Graph.Vertex v1 = new Graph.Vertex(1); + Graph.Vertex v2 = new Graph.Vertex(2); + Graph.Vertex v3 = new Graph.Vertex(3); + Graph.Vertex v4 = new Graph.Vertex(4); + Graph.Vertex v5 = new Graph.Vertex(5); + Graph.Vertex v6 = new Graph.Vertex(6); + Graph.Vertex v7 = new Graph.Vertex(7); + { + verticies.add(v1); + verticies.add(v2); + verticies.add(v3); + verticies.add(v4); + verticies.add(v5); + verticies.add(v6); + verticies.add(v7); + } + + List> edges = new ArrayList>(); + Graph.Edge e1_2 = new Graph.Edge(7, v1, v2); + Graph.Edge e1_3 = new Graph.Edge(9, v1, v3); + Graph.Edge e1_6 = new Graph.Edge(14, v1, v6); + Graph.Edge e2_3 = new Graph.Edge(10, v2, v3); + Graph.Edge e2_4 = new Graph.Edge(15, v2, v4); + Graph.Edge e3_4 = new Graph.Edge(11, v3, v4); + Graph.Edge e3_6 = new Graph.Edge(2, v3, v6); + Graph.Edge e6_5 = new Graph.Edge(9, v6, v5); + Graph.Edge e4_5 = new Graph.Edge(6, v4, v5); + Graph.Edge e4_7 = new Graph.Edge(16, v4, v7); + { + edges.add(e1_2); + edges.add(e1_3); + edges.add(e1_6); + edges.add(e2_3); + edges.add(e2_4); + edges.add(e3_4); + edges.add(e3_6); + edges.add(e6_5); + edges.add(e4_5); + edges.add(e4_7); + } + + Graph graph = new Graph(Graph.TYPE.DIRECTED, verticies, edges); + } + private DirectedGraph directed = new DirectedGraph(); + + // Ideal directed path + private Map, Graph.CostPathPair> idealDirectedPath = new HashMap, Graph.CostPathPair>(); + { + { + int cost = 11; + Set> set = new LinkedHashSet>(); + set.add(directed.e1_3); + set.add(directed.e3_6); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + idealDirectedPath.put(directed.v6, path); + } + { + int cost = 20; + Set> set = new LinkedHashSet>(); + set.add(directed.e1_3); + set.add(directed.e3_6); + set.add(new Graph.Edge(9, directed.v6, directed.v5)); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + idealDirectedPath.put(directed.v5, path); + } + { + int cost = 36; + Set> set = new LinkedHashSet>(); + set.add(directed.e1_3); + set.add(directed.e3_4); + set.add(directed.e4_7); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + idealDirectedPath.put(directed.v7, path); + } + { + int cost = 9; + Set> set = new LinkedHashSet>(); + set.add(directed.e1_3); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + idealDirectedPath.put(directed.v3, path); + } + { + int cost = 20; + Set> set = new LinkedHashSet>(); + set.add(directed.e1_3); + set.add(directed.e3_4); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + idealDirectedPath.put(directed.v4, path); + } + { + int cost = 7; + Set> set = new LinkedHashSet>(); + set.add(directed.e1_2); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + idealDirectedPath.put(directed.v2, path); + } + { + int cost = 0; + Set> set = new LinkedHashSet>(); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + idealDirectedPath.put(directed.v1, path); + } + } + + // Ideal directed Path Pair + private Graph.CostPathPair idealPathPair = null; + { + int cost = 20; + Set> set = new LinkedHashSet>(); + set.add(directed.e1_3); + set.add(directed.e3_6); + set.add(new Graph.Edge(9, directed.v6, directed.v5)); + idealPathPair = new Graph.CostPathPair(cost, set); + } + + // Directed with negative weights + private static class DirectedWithNegativeWeights { + List> verticies = new ArrayList>(); + Graph.Vertex v1 = new Graph.Vertex(1); + Graph.Vertex v2 = new Graph.Vertex(2); + Graph.Vertex v3 = new Graph.Vertex(3); + Graph.Vertex v4 = new Graph.Vertex(4); + { + verticies.add(v1); + verticies.add(v2); + verticies.add(v3); + verticies.add(v4); + } + + List> edges = new ArrayList>(); + Graph.Edge e1_4 = new Graph.Edge(2, v1, v4); + Graph.Edge e2_1 = new Graph.Edge(6, v2, v1); + Graph.Edge e2_3 = new Graph.Edge(3, v2, v3); + Graph.Edge e3_1 = new Graph.Edge(4, v3, v1); + Graph.Edge e3_4 = new Graph.Edge(5, v3, v4); + Graph.Edge e4_2 = new Graph.Edge(-7, v4, v2); + Graph.Edge e4_3 = new Graph.Edge(-3, v4, v3); + { + edges.add(e1_4); + edges.add(e2_1); + edges.add(e2_3); + edges.add(e3_1); + edges.add(e3_4); + edges.add(e4_2); + edges.add(e4_3); + } + + Graph graph = new Graph(Graph.TYPE.DIRECTED, verticies, edges); + } + private DirectedWithNegativeWeights directedWithNegWeights = new DirectedWithNegativeWeights(); + + // Ideal directed with negative weight path + private Map, Graph.CostPathPair> idealDirectedNegWeight = new HashMap, Graph.CostPathPair>(); + { + { + int cost = -2; + Set> set = new LinkedHashSet>(); + set.add(directedWithNegWeights.e1_4); + set.add(directedWithNegWeights.e4_2); + set.add(directedWithNegWeights.e2_3); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + idealDirectedNegWeight.put(directedWithNegWeights.v3, path); + } + { + int cost = 2; + Set> set = new LinkedHashSet>(); + set.add(directedWithNegWeights.e1_4); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + idealDirectedNegWeight.put(directedWithNegWeights.v4, path); + } + { + int cost = -5; + Set> set = new LinkedHashSet>(); + set.add(directedWithNegWeights.e1_4); + set.add(directedWithNegWeights.e4_2); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + idealDirectedNegWeight.put(directedWithNegWeights.v2, path); + } + { + int cost = 0; + Set> set = new LinkedHashSet>(); + Graph.CostPathPair path = new Graph.CostPathPair(cost, set); + idealDirectedNegWeight.put(directedWithNegWeights.v1, path); + } + } + + // Ideal pair + Graph.CostPathPair idealDirectedWithNegWeightsPathPair = null; + { + int cost = -2; + Set> set = new LinkedHashSet>(); + set.add(directedWithNegWeights.e1_4); + set.add(directedWithNegWeights.e4_2); + set.add(directedWithNegWeights.e2_3); + idealDirectedWithNegWeightsPathPair = new Graph.CostPathPair(cost, set); + } + + @Test + public void testDijstraUndirected() { + if (debug > 0) System.out.println("Undirected Graph."); + + Graph.Vertex start = undirected.v1; + Graph.Vertex end = undirected.v5; + + { // UNDIRECTED GRAPH + if (debug > 0) System.out.println("Dijstra's shortest paths of the undirected graph from " + start.getValue()+" to all."); + Map, Graph.CostPathPair> map1 = Dijkstra.getShortestPaths(undirected.graph, start); + if (debug > 0) System.out.println(getPathMapString(start, map1)); + + // Compare results + for (Graph.Vertex v : map1.keySet()) { + Graph.CostPathPair path1 = map1.get(v); + Graph.CostPathPair path2 = idealUndirectedPath.get(v); + assertTrue("Dijstra's shortest path error. path1="+path1+" path2="+path2, path1.equals(path2)); + } + if (debug > 0) System.out.println("Dijstra's shortest path worked correctly."); + + if (debug > 0) System.out.println("Dijstra's shortest path of the undirected graph from " + start.getValue() + " to " + end.getValue()+"."); + Graph.CostPathPair pair1 = Dijkstra.getShortestPath(undirected.graph, start, end); + assertTrue("No path from " + start.getValue() + " to " + end.getValue(), (pair1 != null)); + if (debug > 0) System.out.println(pair1.toString()); + + assertTrue("Dijstra's shortest path error. pair="+pair1+" pair="+idealUndirectedPathPair, pair1.equals(idealUndirectedPathPair)); + if (debug > 0) System.out.println("Dijstra's shortest path worked correctly"); + } + } + + @Test + public void testBellmanFordUndirected() { + if (debug > 0) System.out.println("Undirected Graph."); + + Graph.Vertex start = undirected.v1; + Graph.Vertex end = undirected.v5; + + { + if (debug > 0) System.out.println("Bellman-Ford's shortest paths of the undirected graph from " + start.getValue()+" to all."); + Map, Graph.CostPathPair> map2 = BellmanFord.getShortestPaths(undirected.graph, start); + if (debug > 0) System.out.println(getPathMapString(start, map2)); + + // Compare results + for (Graph.Vertex v : map2.keySet()) { + Graph.CostPathPair path1 = map2.get(v); + Graph.CostPathPair path2 = idealUndirectedPath.get(v); + assertTrue("Bellman-Ford's shortest path error. path1="+path1+" path2="+path2, path1.equals(path2)); + } + if (debug>0) System.out.println("Bellman-Ford's shortest path worked correctly."); + + if (debug>0) System.out.println("Bellman-Ford's shortest path of the undirected graph from " + start.getValue() + " to " + end.getValue()+"."); + Graph.CostPathPair pair2 = BellmanFord.getShortestPath(undirected.graph, start, end); + assertTrue("Bellman-Ford's shortest path error. pair="+pair2+" result="+idealUndirectedPathPair, pair2.equals(idealUndirectedPathPair)); + if (debug>0) System.out.println("Bellman-Ford's shortest path worked correctly"); + } + } + + @Test + public void testPrimUndirected() { + if (debug > 0) System.out.println(undirected.toString()); + + { + Graph.Vertex start = undirected.v1; + + if (debug > 0) System.out.println("Prim's minimum spanning tree of the undirected graph starting from vertex " + start.getValue()+"."); + Graph.CostPathPair resultMST = Prim.getMinimumSpanningTree(undirected.graph, start); + if (debug > 0) System.out.println(resultMST.toString()); + { + // Ideal MST + int cost = 33; + Set> set = new LinkedHashSet>(); + set.add(undirected.e1_2); + set.add(undirected.e1_3); + set.add(undirected.e3_6); + set.add(new Graph.Edge(9, undirected.v6, undirected.v5)); + set.add(new Graph.Edge(6, undirected.v5, undirected.v4)); + Graph.CostPathPair idealMST = new Graph.CostPathPair(cost, set); + + assertTrue("Prim's minimum spanning tree error. resultMST="+resultMST+" idealMST="+idealMST, resultMST.equals(idealMST)); + if (debug > 0) System.out.println("Prim's minimum spanning tree worked correctly"); + } + + // Prim on a graph with cycles + List> cyclicVerticies = new ArrayList>(); + Graph.Vertex cv1 = new Graph.Vertex(1); + cyclicVerticies.add(cv1); + Graph.Vertex cv2 = new Graph.Vertex(2); + cyclicVerticies.add(cv2); + Graph.Vertex cv3 = new Graph.Vertex(3); + cyclicVerticies.add(cv3); + Graph.Vertex cv4 = new Graph.Vertex(4); + cyclicVerticies.add(cv4); + Graph.Vertex cv5 = new Graph.Vertex(5); + cyclicVerticies.add(cv5); + + List> cyclicEdges = new ArrayList>(); + Graph.Edge ce1_2 = new Graph.Edge(3, cv1, cv2); + cyclicEdges.add(ce1_2); + Graph.Edge ce2_3 = new Graph.Edge(2, cv2, cv3); + cyclicEdges.add(ce2_3); + Graph.Edge ce3_4 = new Graph.Edge(4, cv3, cv4); + cyclicEdges.add(ce3_4); + Graph.Edge ce4_1 = new Graph.Edge(1, cv4, cv1); + cyclicEdges.add(ce4_1); + Graph.Edge ce4_5 = new Graph.Edge(1, cv4, cv5); + cyclicEdges.add(ce4_5); + + Graph cyclicUndirected = new Graph(cyclicVerticies, cyclicEdges); + if (debug > 0) System.out.println(cyclicUndirected.toString()); + + start = cv1; + + if (debug > 0) System.out.println("Prim's minimum spanning tree of a cyclic undirected graph from " + start.getValue()); + Graph.CostPathPair pair4 = Prim.getMinimumSpanningTree(cyclicUndirected, start); + if (debug > 0) System.out.println(pair4.toString()); + { + // Ideal MST + int cost = 7; + Set> set = new LinkedHashSet>(); + set.add(new Graph.Edge(1, undirected.v1, undirected.v4)); + set.add(ce4_5); + set.add(ce1_2); + set.add(ce2_3); + Graph.CostPathPair result4 = new Graph.CostPathPair(cost, set); + + assertTrue("Prim's minimum spanning tree error. pair4="+pair4+" result4="+result4, pair4.equals(result4)); + if (debug > 0) System.out.println("Prim's minimum spanning tree worked correctly"); + } + } + } + + @Test + public void testDijstraDirected() { + if (debug>0) System.out.println(directed.toString()); + + Graph.Vertex start = directed.v1; + Graph.Vertex end = directed.v5; + + if (debug>0) System.out.println("Dijstra's shortest paths of the directed graph from "+start.getValue()+" to all."); + Map, Graph.CostPathPair> map1 = Dijkstra.getShortestPaths(directed.graph, start); + if (debug>0) System.out.println(getPathMapString(start, map1)); + + // Compare results + for (Graph.Vertex v : map1.keySet()) { + Graph.CostPathPair path1 = map1.get(v); + Graph.CostPathPair path2 = idealDirectedPath.get(v); + assertTrue("Dijstra's shortest path error. path1="+path1+" path2="+path2, path1.equals(path2)); + } + if (debug>0) System.out.println("Dijstra's shortest path worked correctly."); + + if (debug>0) System.out.println("Dijstra's shortest path of the directed graph from "+start.getValue()+" to "+end.getValue()+"."); + Graph.CostPathPair pair1 = Dijkstra.getShortestPath(directed.graph, start, end); + assertTrue("No path from "+start.getValue()+" to "+end.getValue(), (pair1!=null)); + + // Compare pair + assertTrue("Dijstra's shortest path error. pair1="+pair1+" idealPathPair="+idealPathPair, pair1.equals(idealPathPair)); + if (debug>0) System.out.println("Dijstra's shortest path worked correctly"); + } + + @Test + public void testBellmanFordDirected() { + Graph.Vertex start = directed.v1; + Graph.Vertex end = directed.v5; + + if (debug>0) System.out.println("Bellman-Ford's shortest paths of the directed graph from "+start.getValue()+" to all."); + Map, Graph.CostPathPair> map2 = BellmanFord.getShortestPaths(directed.graph, start); + if (debug>0) System.out.println(getPathMapString(start, map2)); + + // Compare results + for (Graph.Vertex v : map2.keySet()) { + Graph.CostPathPair path1 = map2.get(v); + Graph.CostPathPair path2 = idealDirectedPath.get(v); + assertTrue("Bellman-Ford's shortest path error. path1="+path1+" path2="+path2, path1.equals(path2)); + } + if (debug>0) System.out.println("Bellman-Ford's shortest path worked correctly."); + + if (debug>0) System.out.println("Bellman-Ford's shortest path of the directed graph from "+start.getValue()+" to "+end.getValue()+"."); + Graph.CostPathPair pair2 = BellmanFord.getShortestPath(directed.graph, start, end); + assertTrue("No path from "+start.getValue()+" to "+end.getValue(), pair2!=null); + + // Compare pair + assertTrue("Bellman-Ford's shortest path error. pair2="+pair2+" idealPathPair="+idealPathPair, pair2.equals(idealPathPair)); + if (debug>0) System.out.println("Bellman-Ford's shortest path worked correctly"); + } + + @Test + public void testDijstraDirectedWihtNegativeWeights() { + { // DIRECTED GRAPH (WITH NEGATIVE WEIGHTS) + if (debug > 0) System.out.println("Directed Graph with Negative Weights."); + + if (debug > 0) System.out.println(directedWithNegWeights.toString()); + + Graph.Vertex start = directedWithNegWeights.v1; + Graph.Vertex end = directedWithNegWeights.v3; + + if (debug > 0) System.out.println("Bellman-Ford's shortest paths of the directed graph with negative weight from " + start.getValue()+" to all."); + Map, Graph.CostPathPair> map1 = BellmanFord.getShortestPaths(directedWithNegWeights.graph, start); + if (debug > 0) System.out.println(getPathMapString(start, map1)); + + // Compare results + for (Graph.Vertex v : map1.keySet()) { + Graph.CostPathPair path1 = map1.get(v); + Graph.CostPathPair path2 = idealDirectedNegWeight.get(v); + assertTrue("Bellman-Ford's shortest path error. path1="+path1+" path2="+path2, path1.equals(path2)); + } + if (debug > 0) System.out.println("Bellman-Ford's shortest path worked correctly."); + + if (debug > 0) System.out.println("Bellman-Ford's shortest path of the directed graph from with negative weight " + start.getValue() + " to " + end.getValue()+ "."); + Graph.CostPathPair pair1 = BellmanFord.getShortestPath(directedWithNegWeights.graph, start, end); + assertTrue("No path from " + start.getValue() + " to " + end.getValue(), pair1 != null); + + // Compare pair + assertTrue("Bellman-Ford's shortest path error. pair1="+pair1+" result2="+idealDirectedWithNegWeightsPathPair, pair1.equals(idealDirectedWithNegWeightsPathPair)); + if (debug > 0) System.out.println("Bellman-Ford's shortest path worked correctly"); + } + } + + @Test + @SuppressWarnings("unchecked") + public void testJohnonsonsAllPairsShortestPathOnDirecteWithNegWeights() { + { + if (debug > 0) System.out.println("Johnson's all-pairs shortest path of the directed graph with negative weight."); + Map, Map, Set>>> path1 = Johnson.getAllPairsShortestPaths(directedWithNegWeights.graph); + if (debug > 0) System.out.println(getPathMapString(path1)); + assertTrue("Directed graph contains a negative weight cycle.", (path1 != null)); + + Map, Map, Set>>> result3 = new HashMap, Map, Set>>>(); + { + { // vertex 3 + Map, Set>> m = new HashMap, Set>>(); + Set> s3 = new LinkedHashSet>(); + m.put(directedWithNegWeights.v3, s3); + Set> s4 = new LinkedHashSet>(); + s4.add(directedWithNegWeights.e3_4); + m.put(directedWithNegWeights.v4, s4); + Set> s2 = new LinkedHashSet>(); + s2.add(directedWithNegWeights.e3_4); + s2.add(directedWithNegWeights.e4_2); + m.put(directedWithNegWeights.v2, s2); + Set> s1 = new LinkedHashSet>(); + s1.add(directedWithNegWeights.e3_1); + m.put(directedWithNegWeights.v1, s1); + result3.put(directedWithNegWeights.v3, m); + } + { // vertex 4 + Map, Set>> m = new HashMap, Set>>(); + Set> s3 = new LinkedHashSet>(); + s3.add(directedWithNegWeights.e4_2); + s3.add(directedWithNegWeights.e2_3); + m.put(directedWithNegWeights.v3, s3); + Set> s4 = new LinkedHashSet>(); + s4.add(directedWithNegWeights.e4_2); + s4.add(directedWithNegWeights.e2_3); + s4.add(directedWithNegWeights.e3_4); + m.put(directedWithNegWeights.v4, s4); + Set> s2 = new LinkedHashSet>(); + s2.add(directedWithNegWeights.e4_2); + m.put(directedWithNegWeights.v2, s2); + Set> s1 = new LinkedHashSet>(); + s1.add(directedWithNegWeights.e4_2); + s1.add(directedWithNegWeights.e2_1); + m.put(directedWithNegWeights.v1, s1); + result3.put(directedWithNegWeights.v4, m); + } + { // vertex 2 + Map, Set>> m = new HashMap, Set>>(); + Set> s3 = new LinkedHashSet>(); + s3.add(directedWithNegWeights.e2_3); + m.put(directedWithNegWeights.v3, s3); + Set> s4 = new LinkedHashSet>(); + s4.add(directedWithNegWeights.e2_1); + s4.add(directedWithNegWeights.e1_4); + m.put(directedWithNegWeights.v4, s4); + Set> s2 = new LinkedHashSet>(); + m.put(directedWithNegWeights.v2, s2); + Set> s1 = new LinkedHashSet>(); + s1.add(directedWithNegWeights.e2_1); + m.put(directedWithNegWeights.v1, s1); + result3.put(directedWithNegWeights.v2, m); + } + { // vertex 1 + Map, Set>> m = new HashMap, Set>>(); + Set> s3 = new LinkedHashSet>(); + s3.add(directedWithNegWeights.e1_4); + s3.add(directedWithNegWeights.e4_2); + s3.add(directedWithNegWeights.e2_3); + m.put(directedWithNegWeights.v3, s3); + Set> s4 = new LinkedHashSet>(); + s4.add(directedWithNegWeights.e1_4); + m.put(directedWithNegWeights.v4, s4); + Set> s2 = new LinkedHashSet>(); + s2.add(directedWithNegWeights.e1_4); + s2.add(directedWithNegWeights.e4_2); + m.put(directedWithNegWeights.v2, s2); + Set> s1 = new LinkedHashSet>(); + s1.add(directedWithNegWeights.e1_4); + m.put(directedWithNegWeights.v1, s1); + result3.put(directedWithNegWeights.v1, m); + } + } + + // Compare results + for (Vertex vertex1 : path1.keySet()) { + Map, Set>> m1 = path1.get(vertex1); + Map, Set>> m2 = result3.get(vertex1); + for (Vertex vertex2 : m1.keySet()) { + Set> set3 = m1.get(vertex2); + Set> set4 = m2.get(vertex2); + Object[] objs1 = set3.toArray(); + Object[] objs2 = set4.toArray(); + int size = objs1.length; + for (int i=0; i e1 = (Edge)objs1[i]; + Edge e2 = (Edge)objs2[i]; + assertTrue("Johnson's all-pairs shortest path error. e1.from="+e1.getFromVertex()+" e2.from="+e2.getFromVertex(), + e1.getFromVertex().equals(e2.getFromVertex())); + assertTrue("Johnson's all-pairs shortest path error. e1.to="+e1.getToVertex()+" e2.to="+e2.getToVertex(), + e1.getToVertex().equals(e2.getToVertex())); + } + } + } + if (debug > 0) System.out.println("Johnson's all-pairs shortest path worked correctly."); + } + } + + @Test + public void testFloydWarshallonDirectedWithNegWeights() { + { + if (debug > 0) System.out.println("Floyd-Warshall's all-pairs shortest path weights of the directed graph with negative weight."); + Map, Map, Integer>> pathWeights = FloydWarshall.getAllPairsShortestPaths(directedWithNegWeights.graph); + if (debug > 0) System.out.println(getWeightMapString(pathWeights)); + + Map, Map, Integer>> result4 = new HashMap, Map, Integer>>(); + { + // Ideal weights + { // Vertex 3 + Map, Integer> m = new HashMap, Integer>(); + { + // Vertex 3 + m.put(directedWithNegWeights.v3, 0); + // Vertex 4 + m.put(directedWithNegWeights.v4, 5); + // Vertex 2 + m.put(directedWithNegWeights.v2, -2); + // Vertex 1 + m.put(directedWithNegWeights.v1, 4); + } + result4.put(directedWithNegWeights.v3, m); + } + { // Vertex 4 + Map, Integer> m = new HashMap, Integer>(); + { + // Vertex 3 + m.put(directedWithNegWeights.v3, -4); + // Vertex 4 + m.put(directedWithNegWeights.v4, 0); + // Vertex 2 + m.put(directedWithNegWeights.v2, -7); + // Vertex 1 + m.put(directedWithNegWeights.v1, -1); + } + result4.put(directedWithNegWeights.v4, m); + } + { // Vertex 2 + Map, Integer> m = new HashMap, Integer>(); + { + // Vertex 3 + m.put(directedWithNegWeights.v3, 3); + // Vertex 4 + m.put(directedWithNegWeights.v4, 8); + // Vertex 2 + m.put(directedWithNegWeights.v2, 0); + // Vertex 1 + m.put(directedWithNegWeights.v1, 6); + } + result4.put(directedWithNegWeights.v2, m); + } + { // Vertex 1 + Map, Integer> m = new HashMap, Integer>(); + { + // Vertex 3 + m.put(directedWithNegWeights.v3, -2); + // Vertex 4 + m.put(directedWithNegWeights.v4, 2); + // Vertex 2 + m.put(directedWithNegWeights.v2, -5); + // Vertex 1 + m.put(directedWithNegWeights.v1, 0); + } + result4.put(directedWithNegWeights.v1, m); + } + } + + // Compare results + for (Vertex vertex1 : pathWeights.keySet()) { + Map, Integer> m1 = pathWeights.get(vertex1); + Map, Integer> m2 = result4.get(vertex1); + for (Vertex v : m1.keySet()) { + int i1 = m1.get(v); + int i2 = m2.get(v); + assertTrue("Floyd-Warshall's all-pairs shortest path weights error. i1="+i1+" i2="+i2, i1 == i2); + } + + } + if (debug > 0) System.out.println("Floyd-Warshall's all-pairs shortest path worked correctly."); + } + } + + @Test + public void cycleCheckOnUndirected() { + { // UNDIRECTED GRAPH + if (debug > 0) System.out.println("Undirected Graph cycle check."); + List> cycledVerticies = new ArrayList>(); + Graph.Vertex cv1 = new Graph.Vertex(1); + cycledVerticies.add(cv1); + Graph.Vertex cv2 = new Graph.Vertex(2); + cycledVerticies.add(cv2); + Graph.Vertex cv3 = new Graph.Vertex(3); + cycledVerticies.add(cv3); + Graph.Vertex cv4 = new Graph.Vertex(4); + cycledVerticies.add(cv4); + Graph.Vertex cv5 = new Graph.Vertex(5); + cycledVerticies.add(cv5); + Graph.Vertex cv6 = new Graph.Vertex(6); + cycledVerticies.add(cv6); + + List> cycledEdges = new ArrayList>(); + Graph.Edge ce1_2 = new Graph.Edge(7, cv1, cv2); + cycledEdges.add(ce1_2); + Graph.Edge ce2_4 = new Graph.Edge(15, cv2, cv4); + cycledEdges.add(ce2_4); + Graph.Edge ce3_4 = new Graph.Edge(11, cv3, cv4); + cycledEdges.add(ce3_4); + Graph.Edge ce3_6 = new Graph.Edge(2, cv3, cv6); + cycledEdges.add(ce3_6); + Graph.Edge ce5_6 = new Graph.Edge(9, cv5, cv6); + cycledEdges.add(ce5_6); + Graph.Edge ce4_5 = new Graph.Edge(6, cv4, cv5); + cycledEdges.add(ce4_5); + + Graph undirectedWithCycle = new Graph(cycledVerticies, cycledEdges); + if (debug > 0) System.out.println(undirectedWithCycle.toString()); + + if (debug > 0) System.out.println("Cycle detection of the undirected graph with a cycle."); + boolean result = CycleDetection.detect(undirectedWithCycle); + assertTrue("Cycle detection error.", result); + if (debug > 0) System.out.println("Cycle detection worked correctly."); + + List> verticies = new ArrayList>(); + Graph.Vertex v1 = new Graph.Vertex(1); + verticies.add(v1); + Graph.Vertex v2 = new Graph.Vertex(2); + verticies.add(v2); + Graph.Vertex v3 = new Graph.Vertex(3); + verticies.add(v3); + Graph.Vertex v4 = new Graph.Vertex(4); + verticies.add(v4); + Graph.Vertex v5 = new Graph.Vertex(5); + verticies.add(v5); + Graph.Vertex v6 = new Graph.Vertex(6); + verticies.add(v6); + + List> edges = new ArrayList>(); + Graph.Edge e1_2 = new Graph.Edge(7, v1, v2); + edges.add(e1_2); + Graph.Edge e2_4 = new Graph.Edge(15, v2, v4); + edges.add(e2_4); + Graph.Edge e3_4 = new Graph.Edge(11, v3, v4); + edges.add(e3_4); + Graph.Edge e3_6 = new Graph.Edge(2, v3, v6); + edges.add(e3_6); + Graph.Edge e4_5 = new Graph.Edge(6, v4, v5); + edges.add(e4_5); + + Graph undirectedWithoutCycle = new Graph(verticies, edges); + if (debug > 0) System.out.println(undirectedWithoutCycle.toString()); + + if (debug > 0) System.out.println("Cycle detection of the undirected graph without a cycle."); + result = CycleDetection.detect(undirectedWithoutCycle); + assertFalse("Cycle detection error.", result); + if (debug > 0) System.out.println("Cycle detection worked correctly."); + } + } + + @SuppressWarnings("unchecked") + @Test + public void topologicalSortOnDirectedGraph() { + { // DIRECTED GRAPH + if (debug > 0) System.out.println("Directed Graph topological sort."); + List> verticies = new ArrayList>(); + Graph.Vertex cv1 = new Graph.Vertex(1); + verticies.add(cv1); + Graph.Vertex cv2 = new Graph.Vertex(2); + verticies.add(cv2); + Graph.Vertex cv3 = new Graph.Vertex(3); + verticies.add(cv3); + Graph.Vertex cv4 = new Graph.Vertex(4); + verticies.add(cv4); + Graph.Vertex cv5 = new Graph.Vertex(5); + verticies.add(cv5); + Graph.Vertex cv6 = new Graph.Vertex(6); + verticies.add(cv6); + + List> edges = new ArrayList>(); + Graph.Edge ce1_2 = new Graph.Edge(1, cv1, cv2); + edges.add(ce1_2); + Graph.Edge ce2_4 = new Graph.Edge(2, cv2, cv4); + edges.add(ce2_4); + Graph.Edge ce4_3 = new Graph.Edge(3, cv4, cv3); + edges.add(ce4_3); + Graph.Edge ce3_6 = new Graph.Edge(4, cv3, cv6); + edges.add(ce3_6); + Graph.Edge ce5_6 = new Graph.Edge(5, cv5, cv6); + edges.add(ce5_6); + Graph.Edge ce4_5 = new Graph.Edge(6, cv4, cv5); + edges.add(ce4_5); + + Graph directed = new Graph(Graph.TYPE.DIRECTED, verticies, edges); + if (debug > 0) System.out.println(directed.toString()); + + System.out.println("Topological sort of the directed graph."); + List> results = TopologicalSort.sort(directed); + if (debug > 0) System.out.println("result=" + results); + assertTrue("Topological sort error. results="+results, results.size()!=0); + + List> results2 = new ArrayList>(results.size()); + { // Ideal sort + results2.add(cv6); + results2.add(cv3); + results2.add(cv5); + results2.add(cv4); + results2.add(cv2); + results2.add(cv1); + } + + // Compare results + { + Object[] objs1 = results.toArray(); + Object[] objs2 = results2.toArray(); + int size = objs1.length; + for (int i=0; i v1 = (Graph.Vertex) objs1[i]; + Graph.Vertex v2 = (Graph.Vertex) objs2[i]; + assertTrue("Topological sort error. v1="+v1+" v2", v1.equals(v2)); + } + } + if (debug > 0) System.out.println("Topological sort worked correctly."); + + if (debug > 0) System.out.println(); + } + } + + private static final String getPathMapString(Graph.Vertex start, Map, Graph.CostPathPair> map) { + StringBuilder builder = new StringBuilder(); + for (Graph.Vertex v : map.keySet()) { + Graph.CostPathPair pair = map.get(v); + builder.append("From ").append(start.getValue()).append(" to vertex=").append(v.getValue()).append("\n"); + if (pair != null) + builder.append(pair.toString()).append("\n"); + + } + return builder.toString(); + } + + private static final String getPathMapString(Map, Map, Set>>> paths) { + StringBuilder builder = new StringBuilder(); + for (Graph.Vertex v : paths.keySet()) { + Map, Set>> map = paths.get(v); + for (Graph.Vertex v2 : map.keySet()) { + builder.append("From=").append(v.getValue()).append(" to=").append(v2.getValue()).append("\n"); + Set> path = map.get(v2); + builder.append(path).append("\n"); + } + } + return builder.toString(); + } + + private static final String getWeightMapString(Map, Map, Integer>> paths) { + StringBuilder builder = new StringBuilder(); + for (Graph.Vertex v : paths.keySet()) { + Map, Integer> map = paths.get(v); + for (Graph.Vertex v2 : map.keySet()) { + builder.append("From=").append(v.getValue()).append(" to=").append(v2.getValue()).append("\n"); + Integer weight = map.get(v2); + builder.append(weight).append("\n"); + } + } + return builder.toString(); + } +} From a5425a74166b9415f438291407086bf7c44e9ca1 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Mon, 16 Jun 2014 16:12:27 -0400 Subject: [PATCH 36/61] Changed the mathematics testing to JUnit --- .../mathematics/test/Mathematics.java | 167 ++++++++++++++++++ .../timing/MathematicsTiming.java} | 0 2 files changed, 167 insertions(+) create mode 100644 src/com/jwetherell/algorithms/mathematics/test/Mathematics.java rename src/com/jwetherell/algorithms/{Mathematics.java => mathematics/timing/MathematicsTiming.java} (100%) diff --git a/src/com/jwetherell/algorithms/mathematics/test/Mathematics.java b/src/com/jwetherell/algorithms/mathematics/test/Mathematics.java new file mode 100644 index 00000000..a01067ae --- /dev/null +++ b/src/com/jwetherell/algorithms/mathematics/test/Mathematics.java @@ -0,0 +1,167 @@ +package com.jwetherell.algorithms.mathematics.test; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.HashMap; +import java.util.Map; +import java.util.Random; + +import org.junit.Test; + +import com.jwetherell.algorithms.mathematics.Distance; +import com.jwetherell.algorithms.mathematics.Division; +import com.jwetherell.algorithms.mathematics.Knapsack; +import com.jwetherell.algorithms.mathematics.Multiplication; +import com.jwetherell.algorithms.mathematics.Primes; + +public class Mathematics { + + private static final int MIN = 1; + private static final int MAX = 1000; + + private static final Random RANDOM = new Random(); + private static int nextRandomInt(int min, int max) { + // nextInt is normally exclusive of the top value, + // so add 1 to make it inclusive + return RANDOM.nextInt((max - min) + 1) + min; + } + + @Test + public void multiplication() { + int a = nextRandomInt(MIN, MAX); + int b = nextRandomInt(MIN, MAX); + long result = Multiplication.multiplyUsingLoop(a, b); + long check = Multiplication.multiplication(a, b); + assertTrue("Multiplication using a loop. a=" + a + " b=" + b + " result=" + result + " check=" + check, (result == check)); + + result = Multiplication.multiplyUsingRecursion(a, b); + check = Multiplication.multiplication(a, b); + assertTrue("Multiplication using recursion. a=" + a + " b=" + b + " result=" + result + " check=" + check, (result == check)); + + result = Multiplication.multiplyUsingShift(a, b); + check = Multiplication.multiplication(a, b); + assertTrue("Multiplication using shifts. a=" + a + " b=" + b + " result=" + result + " check=" + check, (result == check)); + + result = Multiplication.multiplyUsingLogs(a, b); + check = Multiplication.multiplication(a, b); + assertTrue("Multiplication using logs. a=" + a + " b=" + b + " result=" + result + " check=" + check, (result == check)); + } + + @Test + public void division() { + int a = nextRandomInt(MIN, MAX); + int b = nextRandomInt(MIN, MAX); + long result = Division.divisionUsingLoop(a, b); + long check = Division.division(a, b); + assertTrue("Division using a loop. a=" + a + " b=" + b + " result=" + result + " check=" + check, (result == check)); + + result = Division.divisionUsingRecursion(a, b); + check = Division.division(a, b); + assertTrue("Division using recursion. a=" + a + " b=" + b + " result=" + result + " check=" + check, (result == check)); + + result = Division.divisionUsingShift(a, b); + check = Division.division(a, b); + assertTrue("Division using shifts. a=" + a + " b=" + b + " result=" + result + " check=" + check, (result == check)); + + result = Division.divisionUsingLogs(a, b); + check = Division.division(a, b); + assertTrue("Division using logs. a=" + a + " b=" + b + " result=" + result + " check=" + check, (result == check)); + + result = Division.divisionUsingMultiplication(a, b); + check = Division.division(a, b); + assertTrue("Division using multiplication. a=" + a + " b=" + b + " result=" + result + " check=" + check, (result == check)); + } + + @Test + public void knapsack() { + int[] values = { 7, 4, 8, 6, 2, 5 }; + int[] weights = { 2, 3, 5, 4, 2, 3 }; + int capacity = 9; + int[] result = Knapsack.zeroOneKnapsack(values, weights, capacity); + int[] check = new int[]{5,3,0}; + for (int i=0; i Date: Mon, 16 Jun 2014 16:13:07 -0400 Subject: [PATCH 37/61] Change the Graph testing to use JUnit --- .../algorithms/mathematics/Distance.java | 5 +- .../algorithms/mathematics/Primes.java | 14 ++- .../mathematics/timing/MathematicsTiming.java | 107 +----------------- 3 files changed, 18 insertions(+), 108 deletions(-) diff --git a/src/com/jwetherell/algorithms/mathematics/Distance.java b/src/com/jwetherell/algorithms/mathematics/Distance.java index 8a4b310e..ef8e47ee 100644 --- a/src/com/jwetherell/algorithms/mathematics/Distance.java +++ b/src/com/jwetherell/algorithms/mathematics/Distance.java @@ -2,8 +2,7 @@ public class Distance { - private Distance() { - } + private Distance() { } /* * Chess distance @@ -13,7 +12,7 @@ public static final long chebyshevDistance(long[] point1, long[] point2) { long y1 = point1[1]; long x2 = point2[0]; long y2 = point2[1]; - return (int) Math.max(Math.abs(x1 - x2), Math.abs(y1 - y2)); + return Math.max(Math.abs(x1 - x2), Math.abs(y1 - y2)); } public static final double squaredDistance(double x1, double y1, double x2, double y2) { diff --git a/src/com/jwetherell/algorithms/mathematics/Primes.java b/src/com/jwetherell/algorithms/mathematics/Primes.java index b633f0d3..bcf21c9f 100644 --- a/src/com/jwetherell/algorithms/mathematics/Primes.java +++ b/src/com/jwetherell/algorithms/mathematics/Primes.java @@ -1,5 +1,6 @@ package com.jwetherell.algorithms.mathematics; +import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -74,17 +75,22 @@ public static final boolean isPrime(long value) { public static final boolean sieveOfEratosthenes(int number) { if (sieve == null || number >= sieve.length) { int start = 2; - if (sieve == null) - sieve = new boolean[number]; - else + if (sieve == null) { + sieve = new boolean[number+1]; + } else if (number >= sieve.length) { + sieve = Arrays.copyOf(sieve, number+1); start = sieve.length; - for (int i = start; Math.pow(i, 2) < sieve.length; i++) { + } + sieve[0] = true; + sieve[1] = false; + for (int i = start; (int) Math.pow(i, 2) < sieve.length; i++) { if (!sieve[i]) { for (int j = (int) Math.pow(i, 2); j < sieve.length; j += i) { sieve[j] = true; } } } + sieve[2] = true; } return !sieve[number]; } diff --git a/src/com/jwetherell/algorithms/mathematics/timing/MathematicsTiming.java b/src/com/jwetherell/algorithms/mathematics/timing/MathematicsTiming.java index cc265c58..f60316ab 100644 --- a/src/com/jwetherell/algorithms/mathematics/timing/MathematicsTiming.java +++ b/src/com/jwetherell/algorithms/mathematics/timing/MathematicsTiming.java @@ -1,16 +1,18 @@ -package com.jwetherell.algorithms; +package com.jwetherell.algorithms.mathematics.timing; import java.text.DecimalFormat; +import org.junit.Test; + import com.jwetherell.algorithms.mathematics.Division; -import com.jwetherell.algorithms.mathematics.Knapsack; import com.jwetherell.algorithms.mathematics.Multiplication; -public class Mathematics { +public class MathematicsTiming { private static final DecimalFormat FORMAT = new DecimalFormat("#.######"); - public static void main(String[] args) { + @Test + public void mathematicsTiming() { // MULTIPLICATION { int a = 12; @@ -22,8 +24,6 @@ public static void main(String[] args) { long check = Multiplication.multiplication(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "x" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -34,8 +34,6 @@ public static void main(String[] args) { check = Multiplication.multiplication(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "x" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -46,8 +44,6 @@ public static void main(String[] args) { check = Multiplication.multiplication(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "x" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -58,8 +54,6 @@ public static void main(String[] args) { check = Multiplication.multiplication(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "x" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.out.println(); System.gc(); @@ -75,8 +69,6 @@ public static void main(String[] args) { long check = Multiplication.multiplication(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "x" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -87,8 +79,6 @@ public static void main(String[] args) { check = Multiplication.multiplication(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "x" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -99,8 +89,6 @@ public static void main(String[] args) { check = Multiplication.multiplication(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "x" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -111,8 +99,6 @@ public static void main(String[] args) { check = Multiplication.multiplication(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "x" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.out.println(); System.gc(); @@ -128,8 +114,6 @@ public static void main(String[] args) { long check = Multiplication.multiplication(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "x" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -140,8 +124,6 @@ public static void main(String[] args) { check = Multiplication.multiplication(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "x" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -152,8 +134,6 @@ public static void main(String[] args) { check = Multiplication.multiplication(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "x" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -164,8 +144,6 @@ public static void main(String[] args) { check = Multiplication.multiplication(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "x" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.out.println(); System.gc(); @@ -181,8 +159,6 @@ public static void main(String[] args) { long check = Multiplication.multiplication(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "x" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -193,8 +169,6 @@ public static void main(String[] args) { check = Multiplication.multiplication(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "x" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -205,8 +179,6 @@ public static void main(String[] args) { check = Multiplication.multiplication(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "x" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -217,8 +189,6 @@ public static void main(String[] args) { check = Multiplication.multiplication(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "x" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.out.println(); System.gc(); @@ -235,8 +205,6 @@ public static void main(String[] args) { long check = Division.division(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "/" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -247,8 +215,6 @@ public static void main(String[] args) { check = Division.division(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "/" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -259,8 +225,6 @@ public static void main(String[] args) { check = Division.division(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "/" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -271,8 +235,6 @@ public static void main(String[] args) { check = Division.division(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "/" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -283,8 +245,6 @@ public static void main(String[] args) { check = Division.division(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "/" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.out.println(); System.gc(); @@ -300,8 +260,6 @@ public static void main(String[] args) { long check = Division.division(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "/" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -312,8 +270,6 @@ public static void main(String[] args) { check = Division.division(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "/" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -324,8 +280,6 @@ public static void main(String[] args) { check = Division.division(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "/" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -336,8 +290,6 @@ public static void main(String[] args) { check = Division.division(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "/" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -348,8 +300,6 @@ public static void main(String[] args) { check = Division.division(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "/" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.out.println(); System.gc(); @@ -365,8 +315,6 @@ public static void main(String[] args) { long check = Division.division(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "/" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -377,8 +325,6 @@ public static void main(String[] args) { check = Division.division(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "/" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -389,8 +335,6 @@ public static void main(String[] args) { check = Division.division(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "/" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -401,8 +345,6 @@ public static void main(String[] args) { check = Division.division(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "/" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -413,8 +355,6 @@ public static void main(String[] args) { check = Division.division(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "/" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.out.println(); System.gc(); @@ -430,8 +370,6 @@ public static void main(String[] args) { long check = Division.division(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "/" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -442,8 +380,6 @@ public static void main(String[] args) { check = Division.division(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "/" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -454,8 +390,6 @@ public static void main(String[] args) { check = Division.division(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "/" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -466,8 +400,6 @@ public static void main(String[] args) { check = Division.division(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "/" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.gc(); @@ -478,36 +410,9 @@ public static void main(String[] args) { check = Division.division(a, b); if (result != check) System.out.println("ERROR with a=" + a + " b=" + b + " result=" + result + " check=" + check); - else - System.out.println(a + "/" + b + "=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.out.println(); System.gc(); } - - { - int[] values = { 7, 4, 8, 6, 2, 5 }; - int[] weights = { 2, 3, 5, 4, 2, 3 }; - int capacity = 9; - System.out.println("Knapsack problem."); - long before = System.nanoTime(); - int[] result = Knapsack.zeroOneKnapsack(values, weights, capacity); - long after = System.nanoTime(); - System.out.println("result=" + getIntegerString(result)); - System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); - System.gc(); - } - } - - private static final String getIntegerString(int[] result) { - StringBuilder builder = new StringBuilder(); - for (int i = 0; i < result.length; i++) { - int v = result[i]; - builder.append(v); - if (i != result.length - 1) - builder.append(", "); - } - return builder.toString(); } - } From 0e64808289b412f1995a6cbef8ef5cecdc19c846 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Tue, 17 Jun 2014 09:19:58 -0400 Subject: [PATCH 38/61] Fixed error in Sieve Of Eratosthenes calculation and updated testing code --- .../algorithms/mathematics/Primes.java | 9 +++------ .../algorithms/mathematics/test/Mathematics.java | 16 ++++++++++++++-- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/com/jwetherell/algorithms/mathematics/Primes.java b/src/com/jwetherell/algorithms/mathematics/Primes.java index bcf21c9f..a694b0ac 100644 --- a/src/com/jwetherell/algorithms/mathematics/Primes.java +++ b/src/com/jwetherell/algorithms/mathematics/Primes.java @@ -79,18 +79,15 @@ public static final boolean sieveOfEratosthenes(int number) { sieve = new boolean[number+1]; } else if (number >= sieve.length) { sieve = Arrays.copyOf(sieve, number+1); - start = sieve.length; } - sieve[0] = true; - sieve[1] = false; - for (int i = start; (int) Math.pow(i, 2) < sieve.length; i++) { + + for (int i = start; i < Math.sqrt(number); i++) { if (!sieve[i]) { - for (int j = (int) Math.pow(i, 2); j < sieve.length; j += i) { + for (int j = i*2; j <= number; j += i) { sieve[j] = true; } } } - sieve[2] = true; } return !sieve[number]; } diff --git a/src/com/jwetherell/algorithms/mathematics/test/Mathematics.java b/src/com/jwetherell/algorithms/mathematics/test/Mathematics.java index a01067ae..05375d84 100644 --- a/src/com/jwetherell/algorithms/mathematics/test/Mathematics.java +++ b/src/com/jwetherell/algorithms/mathematics/test/Mathematics.java @@ -51,7 +51,7 @@ public void multiplication() { @Test public void division() { int a = nextRandomInt(MIN, MAX); - int b = nextRandomInt(MIN, MAX); + int b = nextRandomInt(a, MAX); long result = Division.divisionUsingLoop(a, b); long check = Division.division(a, b); assertTrue("Division using a loop. a=" + a + " b=" + b + " result=" + result + " check=" + check, (result == check)); @@ -154,7 +154,7 @@ public void sieveOfEratosthenes() { number = 4178; isPrime = Primes.sieveOfEratosthenes(number); - assertTrue("Sieve Of Eratosthenes error.", isPrime); + assertFalse("Sieve Of Eratosthenes error.", isPrime); number = 7919; isPrime = Primes.sieveOfEratosthenes(number); @@ -163,5 +163,17 @@ public void sieveOfEratosthenes() { number = 556; isPrime = Primes.sieveOfEratosthenes(number); assertFalse("Sieve Of Eratosthenes error.", isPrime); + + number = 6091; + isPrime = Primes.sieveOfEratosthenes(number); + assertTrue("Sieve Of Eratosthenes error.", isPrime); + + number = 6090; + isPrime = Primes.sieveOfEratosthenes(number); + assertFalse("Sieve Of Eratosthenes error.", isPrime); + + number = 6089; + isPrime = Primes.sieveOfEratosthenes(number); + assertTrue("Sieve Of Eratosthenes error.", isPrime); } } From b1a258351722a3d22b959179c4be181649003618 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Tue, 17 Jun 2014 11:28:13 -0400 Subject: [PATCH 39/61] Changed the Numbers tests to use JUnit --- .../algorithms/numbers/Integers.java | 7 + .../jwetherell/algorithms/numbers/Longs.java | 3 + .../algorithms/numbers/test/Numbers.java | 129 ++++++++++++++++++ .../timing/NumbersTiming.java} | 63 ++++----- 4 files changed, 169 insertions(+), 33 deletions(-) create mode 100644 src/com/jwetherell/algorithms/numbers/test/Numbers.java rename src/com/jwetherell/algorithms/{Numbers.java => numbers/timing/NumbersTiming.java} (67%) diff --git a/src/com/jwetherell/algorithms/numbers/Integers.java b/src/com/jwetherell/algorithms/numbers/Integers.java index d42785a0..0e139a02 100644 --- a/src/com/jwetherell/algorithms/numbers/Integers.java +++ b/src/com/jwetherell/algorithms/numbers/Integers.java @@ -10,6 +10,7 @@ public class Integers { private static final BigDecimal TWO = new BigDecimal(2); public static final String toBinaryUsingDivideAndModulus(int integer) { + if (integer<0) throw new IllegalArgumentException("Method argument cannot be negative. number="+integer); StringBuilder builder = new StringBuilder(); int temp = 0; while (integer > 0) { @@ -21,6 +22,7 @@ public static final String toBinaryUsingDivideAndModulus(int integer) { } public static final String toBinaryUsingShiftsAndModulus(int integer) { + if (integer<0) throw new IllegalArgumentException("Method argument cannot be negative. number="+integer); StringBuilder builder = new StringBuilder(); int temp = 0; while (integer > 0) { @@ -32,6 +34,7 @@ public static final String toBinaryUsingShiftsAndModulus(int integer) { } public static final String toBinaryUsingBigDecimal(int integer) { + if (integer<0) throw new IllegalArgumentException("Method argument cannot be negative. number="+integer); StringBuilder builder = new StringBuilder(); BigDecimal number = new BigDecimal(integer); BigDecimal[] decimals = null; @@ -44,6 +47,7 @@ public static final String toBinaryUsingBigDecimal(int integer) { } public static final String toBinaryUsingDivideAndDouble(int integer) { + if (integer<0) throw new IllegalArgumentException("Method argument cannot be negative. number="+integer); StringBuilder builder = new StringBuilder(); double temp = 0d; while (integer > 0) { @@ -184,6 +188,8 @@ private static final String handleUnderOneThousand(int x) { } public static final String toEnglish(int x) { + if (x>Integer.MAX_VALUE || x<=Integer.MIN_VALUE) + throw new IllegalArgumentException("Number has to be <= Integer.MAX_VALUE and > Integer.MIN_VALUE. number="+x); StringBuilder builder = new StringBuilder(); if (x==0) { //Zero is a special case @@ -195,6 +201,7 @@ public static final String toEnglish(int x) { boolean thousand = false; if (x<0) { builder.append("negative "); + // Make the number positive x = x * -1; } int m = x / BILLION; diff --git a/src/com/jwetherell/algorithms/numbers/Longs.java b/src/com/jwetherell/algorithms/numbers/Longs.java index dc642a85..ac38f2a9 100644 --- a/src/com/jwetherell/algorithms/numbers/Longs.java +++ b/src/com/jwetherell/algorithms/numbers/Longs.java @@ -5,6 +5,7 @@ public class Longs { public static final String toBinaryUsingDivideAndModulus(long longNumber) { + if (longNumber<0) throw new IllegalArgumentException("Method argument cannot be negative. number="+longNumber); StringBuilder builder = new StringBuilder(); long temp = 0l; while (longNumber > 0) { @@ -16,6 +17,7 @@ public static final String toBinaryUsingDivideAndModulus(long longNumber) { } public static final String toBinaryUsingShiftsAndModulus(long longNumber) { + if (longNumber<0) throw new IllegalArgumentException("Method argument cannot be negative. number="+longNumber); StringBuilder builder = new StringBuilder(); long temp = 0l; while (longNumber > 0) { @@ -27,6 +29,7 @@ public static final String toBinaryUsingShiftsAndModulus(long longNumber) { } public static final String toBinaryUsingBigDecimal(long longNumber) { + if (longNumber<0) throw new IllegalArgumentException("Method argument cannot be negative. number="+longNumber); StringBuilder builder = new StringBuilder(); BigDecimal zero = new BigDecimal(0); BigDecimal two = new BigDecimal(2); diff --git a/src/com/jwetherell/algorithms/numbers/test/Numbers.java b/src/com/jwetherell/algorithms/numbers/test/Numbers.java new file mode 100644 index 00000000..547c9024 --- /dev/null +++ b/src/com/jwetherell/algorithms/numbers/test/Numbers.java @@ -0,0 +1,129 @@ +package com.jwetherell.algorithms.numbers.test; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.Random; + +import org.junit.Test; + +import com.jwetherell.algorithms.numbers.Integers; +import com.jwetherell.algorithms.numbers.Longs; + +public class Numbers { + + private static final Random RANDOM = new Random(); + + @Test + public void testGCD() { + int x = 1989; + int y = 867; + int gcd = Integers.euclidsGreatestCommonDivsor(x, y); + int check = 51; + assertTrue("Euclids GCD error. expected="+check+" got="+gcd, (gcd==check)); + + x = 567; + y = 56; + gcd = Integers.euclidsGreatestCommonDivsor(x, y); + check = 7; + assertTrue("Euclids GCD error. expected="+check+" got="+gcd, (gcd==check)); + + x = 10002345; + y = 67885; + gcd = Integers.euclidsGreatestCommonDivsor(x, y); + check = 5; + assertTrue("Euclids GCD error. expected="+check+" got="+gcd, (gcd==check)); + } + + @Test + public void testPowerOf2() { + int is = 256; + int isNot = 1673; + + boolean isPowOf2is = Integers.powerOfTwoUsingBits(is); + boolean isPowOf2isNot = Integers.powerOfTwoUsingBits(isNot); + assertTrue("Is power of 2 using bits error", isPowOf2is); + assertFalse("Is power of 2 using bits error", isPowOf2isNot); + + isPowOf2is = Integers.powerOfTwoUsingLog(is); + isPowOf2isNot = Integers.powerOfTwoUsingLog(isNot); + assertTrue("Is power of 2 using logarithm error", isPowOf2is); + assertFalse("Is power of 2 using logarithm error", isPowOf2isNot); + + isPowOf2is = Integers.powerOfTwoUsingLoop(is); + isPowOf2isNot = Integers.powerOfTwoUsingLoop(isNot); + assertTrue("Is power of 2 using loops error", isPowOf2is); + assertFalse("Is power of 2 using loops error", isPowOf2isNot); + + isPowOf2is = Integers.powerOfTwoUsingRecursion(is); + isPowOf2isNot = Integers.powerOfTwoUsingRecursion(isNot); + assertTrue("Is power of 2 using recursion error", isPowOf2is); + assertFalse("Is power of 2 using recursion error", isPowOf2isNot); + } + + @Test + public void testIntegerToBinaryString() { + int a = Math.abs(RANDOM.nextInt()); + String check = Integer.toBinaryString(a); + + String result1 = Integers.toBinaryUsingBigDecimal(a); + assertTrue("toBinary using BigDecimal error. random="+a+" expected=\n"+check+"\ngot=\n"+result1+"\n", (check.equals(result1))); + + String result2 = Integers.toBinaryUsingDivideAndDouble(a); + assertTrue("toBinary using BigDecimal error. random="+a+" expected=\n"+check+"\ngot="+result2+"\n", (check.equals(result2))); + + String result3 = Integers.toBinaryUsingDivideAndModulus(a); + assertTrue("toBinary using BigDecimal error. random="+a+" expected=\n"+check+"\ngot="+result3+"\n", (check.equals(result3))); + + String result4 = Integers.toBinaryUsingShiftsAndModulus(a); + assertTrue("toBinary using BigDecimal error. random="+a+" expected=\n"+check+"\ngot="+result4+"\n", (check.equals(result4))); + } + + @Test + public void testLongToBinaryString() { + long a = Math.abs(RANDOM.nextLong()); + String check = Long.toBinaryString(a); + + String result1 = Longs.toBinaryUsingBigDecimal(a); + assertTrue("toBinary using BigDecimal error. random="+a+" expected=\n"+check+"\ngot=\n"+result1+"\n", (check.equals(result1))); + + String result2 = Longs.toBinaryUsingDivideAndModulus(a); + assertTrue("toBinary using BigDecimal error. random="+a+" expected=\n"+check+"\ngot=\n"+result2+"\n", (check.equals(result2))); + + String result3 = Longs.toBinaryUsingShiftsAndModulus(a); + assertTrue("toBinary using BigDecimal error. random="+a+" expected=\n"+check+"\ngot=\n"+result3+"\n", (check.equals(result3))); + } + + @Test + public void testToEnglish() { + int a = -1001; + String check = "negative one-thousand one"; + String english = Integers.toEnglish(a); + assertTrue("toEnglish error. a="+a+" expected="+check+" got="+english, (check.equals(english))); + + a = -1; + check = "negative one"; + english = Integers.toEnglish(a); + assertTrue("toEnglish error. a="+a+" expected="+check+" got="+english, (check.equals(english))); + + a = 0; + check = "zero"; + english = Integers.toEnglish(a); + assertTrue("toEnglish error. a="+a+" expected="+check+" got="+english, (check.equals(english))); + + a = 199; + check = "one-hundred ninty-nine"; + english = Integers.toEnglish(a); + assertTrue("toEnglish error. a="+a+" expected="+check+" got="+english, (check.equals(english))); + + a = Integer.MAX_VALUE; // 2,147,483,647 + check = "two-billion one-hundred fourty-seven-million four-hundred eighty-three-thousand six-hundred fourty-seven"; + english = Integers.toEnglish(a); + assertTrue("toEnglish error. a="+a+" expected="+check+" got="+english, (check.equals(english))); + + a = Integer.MIN_VALUE+1; // -2,147,483,647 + check = "negative two-billion one-hundred fourty-seven-million four-hundred eighty-three-thousand six-hundred fourty-seven"; + english = Integers.toEnglish(a); + assertTrue("toEnglish error. a="+a+" expected="+check+" got="+english, (check.equals(english))); + } +} diff --git a/src/com/jwetherell/algorithms/Numbers.java b/src/com/jwetherell/algorithms/numbers/timing/NumbersTiming.java similarity index 67% rename from src/com/jwetherell/algorithms/Numbers.java rename to src/com/jwetherell/algorithms/numbers/timing/NumbersTiming.java index feb6d594..dd0d1ea5 100644 --- a/src/com/jwetherell/algorithms/Numbers.java +++ b/src/com/jwetherell/algorithms/numbers/timing/NumbersTiming.java @@ -1,98 +1,95 @@ -package com.jwetherell.algorithms; +package com.jwetherell.algorithms.numbers.timing; import java.text.DecimalFormat; +import org.junit.Test; + import com.jwetherell.algorithms.numbers.Integers; import com.jwetherell.algorithms.numbers.Longs; -public class Numbers { +public class NumbersTiming { private static final DecimalFormat FORMAT = new DecimalFormat("#.######"); - public static void main(String[] args) { + @Test + public void numbersTiming() { // Integers { int a = Integer.MAX_VALUE; System.out.println("Integer to binary string using division and modulus."); long before = System.nanoTime(); - String result = Integers.toBinaryUsingDivideAndModulus(a); + Integers.toBinaryUsingDivideAndModulus(a); long after = System.nanoTime(); - System.out.println("a=" + a + " " + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); System.gc(); System.out.println("Integer to binary string using shifts and modulus."); before = System.nanoTime(); - result = Integers.toBinaryUsingShiftsAndModulus(a); + Integers.toBinaryUsingShiftsAndModulus(a); after = System.nanoTime(); - System.out.println("a=" + a + " " + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); System.gc(); System.out.println("Integer to binary string using BigDecimal."); before = System.nanoTime(); - result = Integers.toBinaryUsingBigDecimal(a); + Integers.toBinaryUsingBigDecimal(a); after = System.nanoTime(); - System.out.println("a=" + a + " " + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); System.gc(); System.out.println("Integer to binary string using divide and double."); before = System.nanoTime(); - result = Integers.toBinaryUsingDivideAndDouble(a); + Integers.toBinaryUsingDivideAndDouble(a); after = System.nanoTime(); - System.out.println("a=" + a + " " + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); System.gc(); System.out.println("Euclid's Greatest Common Divisor."); int x = 1989; int y = 867; before = System.nanoTime(); - int gcd = Integers.euclidsGreatestCommonDivsor(x, y); + Integers.euclidsGreatestCommonDivsor(x, y); after = System.nanoTime(); - System.out.println("x=" + x + " " + "y=" + y + " " + gcd); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); System.gc(); a = (int) Math.pow(2, 30); System.out.println("Power of 2 using loop."); before = System.nanoTime(); - boolean isPowOf2 = Integers.powerOfTwoUsingLoop(a); + Integers.powerOfTwoUsingLoop(a); after = System.nanoTime(); - System.out.println("a=" + a + " is a power of 2? " + isPowOf2); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); System.gc(); System.out.println("Power of 2 using recursion."); before = System.nanoTime(); - isPowOf2 = Integers.powerOfTwoUsingRecursion(a); + Integers.powerOfTwoUsingRecursion(a); after = System.nanoTime(); - System.out.println("a=" + a + " is a power of 2? " + isPowOf2); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); System.gc(); System.out.println("Power of 2 using logarithm."); before = System.nanoTime(); - isPowOf2 = Integers.powerOfTwoUsingLog(a); + Integers.powerOfTwoUsingLog(a); after = System.nanoTime(); - System.out.println("a=" + a + " is a power of 2? " + isPowOf2); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); System.gc(); System.out.println("Power of 2 using bits."); before = System.nanoTime(); - isPowOf2 = Integers.powerOfTwoUsingBits(a); + Integers.powerOfTwoUsingBits(a); after = System.nanoTime(); - System.out.println("a=" + a + " is a power of 2? " + isPowOf2); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); - System.gc(); - - System.out.println("Integer to English"); - for (int i=-1001; i<=1001; i++) { - System.out.println(Integers.toEnglish(i)); - } System.out.println(); + System.gc(); } // Longs @@ -100,26 +97,26 @@ public static void main(String[] args) { long a = Long.MAX_VALUE; System.out.println("Long to binary string using division and modulus."); long before = System.nanoTime(); - String result = Longs.toBinaryUsingDivideAndModulus(a); + Longs.toBinaryUsingDivideAndModulus(a); long after = System.nanoTime(); - System.out.println("a=" + a + " " + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); System.gc(); System.out.println("Long to binary string using shifts and modulus."); before = System.nanoTime(); - result = Longs.toBinaryUsingShiftsAndModulus(a); + Longs.toBinaryUsingShiftsAndModulus(a); after = System.nanoTime(); - System.out.println("a=" + a + " " + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); System.gc(); System.out.println("Long to binary string using BigDecimal."); before = System.nanoTime(); - result = Longs.toBinaryUsingBigDecimal(a); + Longs.toBinaryUsingBigDecimal(a); after = System.nanoTime(); - System.out.println("a=" + a + " " + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); System.gc(); } } From 48c767a29f9e2575d7e6b07ba952ef80b6fa354d Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Tue, 17 Jun 2014 11:39:43 -0400 Subject: [PATCH 40/61] Changed the timing classes to be applications instead of JUnits --- .../timing/DataStructuresTiming.java | 5 +- .../mathematics/timing/MathematicsTiming.java | 5 +- .../numbers/timing/NumbersTiming.java | 5 +- .../algorithms/{ => search/test}/Search.java | 33 ++---- .../search/timing/SearchTiming.java | 100 ++++++++++++++++++ 5 files changed, 114 insertions(+), 34 deletions(-) rename src/com/jwetherell/algorithms/{ => search/test}/Search.java (72%) create mode 100644 src/com/jwetherell/algorithms/search/timing/SearchTiming.java diff --git a/src/com/jwetherell/algorithms/data_structures/timing/DataStructuresTiming.java b/src/com/jwetherell/algorithms/data_structures/timing/DataStructuresTiming.java index b8625ec5..8ae0a5b2 100644 --- a/src/com/jwetherell/algorithms/data_structures/timing/DataStructuresTiming.java +++ b/src/com/jwetherell/algorithms/data_structures/timing/DataStructuresTiming.java @@ -11,8 +11,6 @@ import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.ConcurrentSkipListSet; -import org.junit.Test; - import com.jwetherell.algorithms.data_structures.AVLTree; import com.jwetherell.algorithms.data_structures.BTree; import com.jwetherell.algorithms.data_structures.BinaryHeap; @@ -59,8 +57,7 @@ public class DataStructuresTiming { private static enum Type {Integer, String}; - @Test - public void testTiming() { + public static void main(String[] args) { System.out.println("Starting tests."); boolean passed = false; for (int i = 0; i < NUMBER_OF_TESTS; i++) { diff --git a/src/com/jwetherell/algorithms/mathematics/timing/MathematicsTiming.java b/src/com/jwetherell/algorithms/mathematics/timing/MathematicsTiming.java index f60316ab..91020b2a 100644 --- a/src/com/jwetherell/algorithms/mathematics/timing/MathematicsTiming.java +++ b/src/com/jwetherell/algorithms/mathematics/timing/MathematicsTiming.java @@ -2,8 +2,6 @@ import java.text.DecimalFormat; -import org.junit.Test; - import com.jwetherell.algorithms.mathematics.Division; import com.jwetherell.algorithms.mathematics.Multiplication; @@ -11,8 +9,7 @@ public class MathematicsTiming { private static final DecimalFormat FORMAT = new DecimalFormat("#.######"); - @Test - public void mathematicsTiming() { + public static void main(String[] args) { // MULTIPLICATION { int a = 12; diff --git a/src/com/jwetherell/algorithms/numbers/timing/NumbersTiming.java b/src/com/jwetherell/algorithms/numbers/timing/NumbersTiming.java index dd0d1ea5..3f0b539e 100644 --- a/src/com/jwetherell/algorithms/numbers/timing/NumbersTiming.java +++ b/src/com/jwetherell/algorithms/numbers/timing/NumbersTiming.java @@ -2,8 +2,6 @@ import java.text.DecimalFormat; -import org.junit.Test; - import com.jwetherell.algorithms.numbers.Integers; import com.jwetherell.algorithms.numbers.Longs; @@ -11,8 +9,7 @@ public class NumbersTiming { private static final DecimalFormat FORMAT = new DecimalFormat("#.######"); - @Test - public void numbersTiming() { + public static void main(String[] args) { // Integers { int a = Integer.MAX_VALUE; diff --git a/src/com/jwetherell/algorithms/Search.java b/src/com/jwetherell/algorithms/search/test/Search.java similarity index 72% rename from src/com/jwetherell/algorithms/Search.java rename to src/com/jwetherell/algorithms/search/test/Search.java index b1be21b9..3ae1b807 100644 --- a/src/com/jwetherell/algorithms/Search.java +++ b/src/com/jwetherell/algorithms/search/test/Search.java @@ -1,4 +1,4 @@ -package com.jwetherell.algorithms; +package com.jwetherell.algorithms.search.test; import java.text.DecimalFormat; @@ -30,14 +30,12 @@ public static void main(String[] args) { { System.out.println("Brute Force."); long before = System.nanoTime(); - int result = LinearSearch.find(valueInArray, sorted); + LinearSearch.find(valueInArray, sorted); long after = System.nanoTime(); - System.out.println("result=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); before = System.nanoTime(); - result = LinearSearch.find(valueNotInArray, sorted); + LinearSearch.find(valueNotInArray, sorted); after = System.nanoTime(); - System.out.println("result=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.out.println(); System.gc(); @@ -46,14 +44,12 @@ public static void main(String[] args) { { System.out.println("Binary Search."); long before = System.nanoTime(); - int result = BinarySearch.find(valueInArray, sorted, false); + BinarySearch.find(valueInArray, sorted, false); long after = System.nanoTime(); - System.out.println("result=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); before = System.nanoTime(); - result = BinarySearch.find(valueNotInArray, sorted, false); + BinarySearch.find(valueNotInArray, sorted, false); after = System.nanoTime(); - System.out.println("result=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.out.println(); System.gc(); @@ -62,14 +58,12 @@ public static void main(String[] args) { { System.out.println("Optimized Binary Search."); long before = System.nanoTime(); - int result = BinarySearch.find(valueInArray, sorted, true); + BinarySearch.find(valueInArray, sorted, true); long after = System.nanoTime(); - System.out.println("result=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); before = System.nanoTime(); - result = BinarySearch.find(valueNotInArray, sorted, true); + BinarySearch.find(valueNotInArray, sorted, true); after = System.nanoTime(); - System.out.println("result=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.out.println(); System.gc(); @@ -78,14 +72,12 @@ public static void main(String[] args) { { System.out.println("Interpolation Search."); long before = System.nanoTime(); - int result = InterpolationSearch.find(valueInArray, sorted); + InterpolationSearch.find(valueInArray, sorted); long after = System.nanoTime(); - System.out.println("result=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); before = System.nanoTime(); - result = InterpolationSearch.find(valueNotInArray, sorted); + InterpolationSearch.find(valueNotInArray, sorted); after = System.nanoTime(); - System.out.println("result=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.out.println(); System.gc(); @@ -94,18 +86,15 @@ public static void main(String[] args) { { System.out.println("Quick Select"); long before = System.nanoTime(); - int result = QuickSelect.find(valueInArray, sorted); + QuickSelect.find(valueInArray, sorted); long after = System.nanoTime(); - System.out.println("result=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); before = System.nanoTime(); - result = QuickSelect.find(valueNotInArray, sorted); + QuickSelect.find(valueNotInArray, sorted); after = System.nanoTime(); - System.out.println("result=" + result); System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); System.out.println(); System.gc(); } } - } diff --git a/src/com/jwetherell/algorithms/search/timing/SearchTiming.java b/src/com/jwetherell/algorithms/search/timing/SearchTiming.java new file mode 100644 index 00000000..66d42e21 --- /dev/null +++ b/src/com/jwetherell/algorithms/search/timing/SearchTiming.java @@ -0,0 +1,100 @@ +package com.jwetherell.algorithms.search.timing; + +import java.text.DecimalFormat; + +import com.jwetherell.algorithms.search.BinarySearch; +import com.jwetherell.algorithms.search.LinearSearch; +import com.jwetherell.algorithms.search.InterpolationSearch; +import com.jwetherell.algorithms.search.QuickSelect; + +public class SearchTiming { + + private static final DecimalFormat FORMAT = new DecimalFormat("#.######"); + private static final int SIZE = 9999; + private static final int offset = 123; + + private static int[] sorted = null; + + public static void main(String[] args) { + System.out.println("Generating sorted array."); + sorted = new int[SIZE]; + for (int i = offset; i < offset + sorted.length; i++) { + sorted[i - offset] = i; + } + System.out.println("Generated sorted array."); + System.out.println(); + + int valueInArray = sorted[SIZE - (SIZE / 4)]; + int valueNotInArray = sorted[SIZE - 1] + offset; + + { + System.out.println("Linear Search."); + long before = System.nanoTime(); + LinearSearch.find(valueInArray, sorted); + long after = System.nanoTime(); + System.out.println("Linear Search. found in " + FORMAT.format(after - before) + " ns"); + before = System.nanoTime(); + LinearSearch.find(valueNotInArray, sorted); + after = System.nanoTime(); + System.out.println("Linear Search. not found in " + FORMAT.format(after - before) + " ns"); + System.out.println(); + System.gc(); + } + + { + System.out.println("Binary Search."); + long before = System.nanoTime(); + BinarySearch.find(valueInArray, sorted, false); + long after = System.nanoTime(); + System.out.println("Binary Search. found in " + FORMAT.format(after - before) + " ns"); + before = System.nanoTime(); + BinarySearch.find(valueNotInArray, sorted, false); + after = System.nanoTime(); + System.out.println("Binary Search. not found in " + FORMAT.format(after - before) + " ns"); + System.out.println(); + System.gc(); + } + + { + System.out.println("Optimized Binary Search."); + long before = System.nanoTime(); + BinarySearch.find(valueInArray, sorted, true); + long after = System.nanoTime(); + System.out.println("Optimized Binary Search. found in " + FORMAT.format(after - before) + " ns"); + before = System.nanoTime(); + BinarySearch.find(valueNotInArray, sorted, true); + after = System.nanoTime(); + System.out.println("Optimized Binary Search. not found in " + FORMAT.format(after - before) + " ns"); + System.out.println(); + System.gc(); + } + + { + System.out.println("Interpolation Search."); + long before = System.nanoTime(); + InterpolationSearch.find(valueInArray, sorted); + long after = System.nanoTime(); + System.out.println("Interpolation Search. found in " + FORMAT.format(after - before) + " ns"); + before = System.nanoTime(); + InterpolationSearch.find(valueNotInArray, sorted); + after = System.nanoTime(); + System.out.println("Interpolation Search. not found in " + FORMAT.format(after - before) + " ns"); + System.out.println(); + System.gc(); + } + + { + System.out.println("Quick Select."); + long before = System.nanoTime(); + QuickSelect.find(valueInArray, sorted); + long after = System.nanoTime(); + System.out.println("Quick Select. found in " + FORMAT.format(after - before) + " ns"); + before = System.nanoTime(); + QuickSelect.find(valueNotInArray, sorted); + after = System.nanoTime(); + System.out.println("Quick Select. not found in " + FORMAT.format(after - before) + " ns"); + System.out.println(); + System.gc(); + } + } +} From 561a254b87590a9a89f1ad10aaa6800e0868dadf Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Tue, 17 Jun 2014 11:53:27 -0400 Subject: [PATCH 41/61] Changed the Search tests to use JUnit --- .../algorithms/search/test/Search.java | 130 +++++++----------- 1 file changed, 48 insertions(+), 82 deletions(-) diff --git a/src/com/jwetherell/algorithms/search/test/Search.java b/src/com/jwetherell/algorithms/search/test/Search.java index 3ae1b807..39d94d8d 100644 --- a/src/com/jwetherell/algorithms/search/test/Search.java +++ b/src/com/jwetherell/algorithms/search/test/Search.java @@ -1,100 +1,66 @@ package com.jwetherell.algorithms.search.test; -import java.text.DecimalFormat; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; import com.jwetherell.algorithms.search.BinarySearch; -import com.jwetherell.algorithms.search.LinearSearch; import com.jwetherell.algorithms.search.InterpolationSearch; +import com.jwetherell.algorithms.search.LinearSearch; import com.jwetherell.algorithms.search.QuickSelect; public class Search { - private static final DecimalFormat FORMAT = new DecimalFormat("#.######"); - private static final int SIZE = 9999; - private static final int offset = 123; - - private static int[] sorted = null; + private static final int SIZE = 9999; + private static final int offset = 123; - public static void main(String[] args) { - System.out.println("Generating sorted array."); - sorted = new int[SIZE]; - for (int i = offset; i < offset + sorted.length; i++) { - sorted[i - offset] = i; + private static int[] sorted = new int[SIZE]; + static { + for (int i = offset; i Date: Tue, 17 Jun 2014 15:46:34 -0400 Subject: [PATCH 43/61] Changed the Sorts tests to use JUnit --- .../algorithms/sorts/test/Sorts.java | 178 ++++++++++++++++++ .../algorithms/{ => sorts/timing}/Sorts.java | 2 +- 2 files changed, 179 insertions(+), 1 deletion(-) create mode 100644 src/com/jwetherell/algorithms/sorts/test/Sorts.java rename src/com/jwetherell/algorithms/{ => sorts/timing}/Sorts.java (99%) diff --git a/src/com/jwetherell/algorithms/sorts/test/Sorts.java b/src/com/jwetherell/algorithms/sorts/test/Sorts.java new file mode 100644 index 00000000..e4039fbe --- /dev/null +++ b/src/com/jwetherell/algorithms/sorts/test/Sorts.java @@ -0,0 +1,178 @@ +package com.jwetherell.algorithms.sorts.test; + +import static org.junit.Assert.assertTrue; + +import java.util.Random; + +import org.junit.Test; + +import com.jwetherell.algorithms.sorts.AmericanFlagSort; +import com.jwetherell.algorithms.sorts.BubbleSort; +import com.jwetherell.algorithms.sorts.CountingSort; +import com.jwetherell.algorithms.sorts.HeapSort; +import com.jwetherell.algorithms.sorts.InsertionSort; +import com.jwetherell.algorithms.sorts.MergeSort; +import com.jwetherell.algorithms.sorts.QuickSort; +import com.jwetherell.algorithms.sorts.RadixSort; +import com.jwetherell.algorithms.sorts.ShellSort; + +public class Sorts { + + private static final Random RANDOM = new Random(); + private static final int SIZE = 10000; + + private static Integer[] unsorted = null; + private static Integer[] sorted = null; + private static Integer[] reverse = null; + + static { + unsorted = new Integer[SIZE]; + int i = 0; + while (i < unsorted.length) { + int j = RANDOM.nextInt(unsorted.length * 10); + unsorted[i++] = j; + } + + sorted = new Integer[SIZE]; + for (i = 0; i < sorted.length; i++) + sorted[i] = i; + + reverse = new Integer[SIZE]; + for (i = (reverse.length - 1); i >= 0; i--) + reverse[i] = (SIZE - 1) - i; + } + + @Test + public void testInsertionSorts() { + // Insertion sort + Integer[] result = InsertionSort.sort(unsorted.clone()); + assertTrue("Inerstion sort unsorted error. result="+print(result), check(result)); + result = InsertionSort.sort(sorted.clone()); + assertTrue("Inerstion sort sorted error. result="+print(result), check(result)); + result = InsertionSort.sort(reverse.clone()); + assertTrue("Inerstion sort reverse error. result="+print(result), check(result)); + } + + @Test + public void testBubbleSorts() { + // Bubble sort + Integer[] result = BubbleSort.sort(unsorted.clone()); + assertTrue("Bubble sort unsorted error. result="+print(result), check(result)); + result = BubbleSort.sort(sorted.clone()); + assertTrue("Bubble sort sorted error. result="+print(result), check(result)); + result = BubbleSort.sort(reverse.clone()); + assertTrue("Bubble sort reverse error. result="+print(result), check(result)); + } + + @Test + public void testShellsSorts() { + int[] shells = new int[] { 10, 5, 3, 1 }; + // Shell's sort + Integer[] result = ShellSort.sort(shells, unsorted.clone()); + assertTrue("Shell's sort unsorted error. result="+print(result), check(result)); + result = ShellSort.sort(shells, sorted.clone()); + assertTrue("Shell's sort sorted error. result="+print(result), check(result)); + result = ShellSort.sort(shells, reverse.clone()); + assertTrue("Shell's sort reverse error. result="+print(result), check(result)); + } + + @Test + public void testMergeSorts() { + // Merge sort + Integer[] result = MergeSort.sort(unsorted.clone()); + assertTrue("Merge sort unsorted error. result="+print(result), check(result)); + result = MergeSort.sort(sorted.clone()); + assertTrue("Merge sort sorted error. result="+print(result), check(result)); + result = MergeSort.sort(reverse.clone()); + assertTrue("merge sort reverse error. result="+print(result), check(result)); + } + + @Test + public void testQuickSorts() { + // Quicksort + Integer[] result = QuickSort.sort(QuickSort.PIVOT_TYPE.FIRST, unsorted.clone()); + assertTrue("Quick sort pivot firt unsorted error. result="+print(result), check(result)); + result = QuickSort.sort(QuickSort.PIVOT_TYPE.FIRST, sorted.clone()); + assertTrue("Quick sort pivot firt sorted error. result="+print(result), check(result)); + result = QuickSort.sort(QuickSort.PIVOT_TYPE.FIRST, reverse.clone()); + assertTrue("Quick sort pivot firt reverse error. result="+print(result), check(result)); + result = QuickSort.sort(QuickSort.PIVOT_TYPE.MIDDLE, unsorted.clone()); + assertTrue("Quick sort pivot middle unsorted error. result="+print(result), check(result)); + result = QuickSort.sort(QuickSort.PIVOT_TYPE.MIDDLE, sorted.clone()); + assertTrue("Quick sort pivot middle sorted error. result="+print(result), check(result)); + result = QuickSort.sort(QuickSort.PIVOT_TYPE.MIDDLE, reverse.clone()); + assertTrue("Quick sort pivot middle reverse error. result="+print(result), check(result)); + result = QuickSort.sort(QuickSort.PIVOT_TYPE.RANDOM, unsorted.clone()); + assertTrue("Quick sort pivot random unsorted error. result="+print(result), check(result)); + result = QuickSort.sort(QuickSort.PIVOT_TYPE.RANDOM, sorted.clone()); + assertTrue("Quick sort pivot random sorted error. result="+print(result), check(result)); + result = QuickSort.sort(QuickSort.PIVOT_TYPE.RANDOM, reverse.clone()); + assertTrue("Quick sort pivot random reverse error. result="+print(result), check(result)); + } + + @Test + public void testHeapSorts() { + // Heapsort + Integer[] result = HeapSort.sort(unsorted.clone()); + assertTrue("Heap sort unsorted error. result="+print(result), check(result)); + result = HeapSort.sort(sorted.clone()); + assertTrue("Heap sort sorted error. result="+print(result), check(result)); + result = HeapSort.sort(reverse.clone()); + assertTrue("Heap sort reverse error. result="+print(result), check(result)); + } + + @Test + public void testCountingSorts() { + // Counting sort + Integer[] result = CountingSort.sort(unsorted.clone()); + assertTrue("Counting sort unsorted error. result="+print(result), check(result)); + result = CountingSort.sort(sorted.clone()); + assertTrue("Counting sort sorted error. result="+print(result), check(result)); + result = CountingSort.sort(reverse.clone()); + assertTrue("Counting sort reverse error. result="+print(result), check(result)); + } + + @Test + public void testRadixSorts() { + // Radix sort + Integer[] result = RadixSort.sort(unsorted.clone()); + assertTrue("Radix sort unsorted error. result="+print(result), check(result)); + result = RadixSort.sort(sorted.clone()); + assertTrue("Radix sort sorted error. result="+print(result), check(result)); + result = RadixSort.sort(reverse.clone()); + assertTrue("Radix sort reverse error. result="+print(result), check(result)); + } + + @Test + public void testAmericanFlagSorts() { + // American Flag sort + Integer[] result = AmericanFlagSort.sort(unsorted.clone()); + assertTrue("American flag sort unsorted error. result="+print(result), check(result)); + result = AmericanFlagSort.sort(sorted.clone()); + assertTrue("American flag sort sorted error. result="+print(result), check(result)); + result = AmericanFlagSort.sort(reverse.clone()); + assertTrue("American flag sort reverse error. result="+print(result), check(result)); + } + + private static final boolean check(Integer[] array) { + for (int i = 1; iarray[i]) + return false; + } + return true; + } + + private static final String print(Integer[] array) { + return print(array, 0, array.length); + } + + private static final String print(Integer[] array, int start, int length) { + final Integer[] clone = array.clone(); + StringBuilder builder = new StringBuilder(); + for (int i = 0; i Date: Tue, 17 Jun 2014 15:49:05 -0400 Subject: [PATCH 44/61] Changed the Sequences tests to use JUnit --- src/com/jwetherell/algorithms/Strings.java | 158 ----- .../algorithms/sorts/timing/Sorts.java | 664 ------------------ 2 files changed, 822 deletions(-) delete mode 100644 src/com/jwetherell/algorithms/Strings.java delete mode 100644 src/com/jwetherell/algorithms/sorts/timing/Sorts.java diff --git a/src/com/jwetherell/algorithms/Strings.java b/src/com/jwetherell/algorithms/Strings.java deleted file mode 100644 index ccb607a3..00000000 --- a/src/com/jwetherell/algorithms/Strings.java +++ /dev/null @@ -1,158 +0,0 @@ -package com.jwetherell.algorithms; - -import java.text.DecimalFormat; - -import com.jwetherell.algorithms.strings.StringFunctions; - -public class Strings { - - private static final DecimalFormat FORMAT = new DecimalFormat("#.######"); - - public static void main(String[] args) { - // REVERSE CHARS IN A STRING - { - String string = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - System.out.println("Reversing a string using concatination."); - long before = System.nanoTime(); - String result = StringFunctions.reverseWithStringConcat(string); - long after = System.nanoTime(); - System.out.println("before=" + string + " after=" + result); - System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); - System.gc(); - - System.out.println("Reversing a string with a StringBuilder."); - before = System.nanoTime(); - result = StringFunctions.reverseWithStringBuilder(string); - after = System.nanoTime(); - System.out.println("before=" + string + " after=" + result); - System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); - System.gc(); - - System.out.println("Reversing a string with StringBuilder built-in reverse method."); - before = System.nanoTime(); - result = StringFunctions.reverseWithStringBuilderBuiltinMethod(string); - after = System.nanoTime(); - System.out.println("before=" + string + " after=" + result); - System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); - System.gc(); - - System.out.println("Reversing a string with swaps."); - before = System.nanoTime(); - result = StringFunctions.reverseWithSwaps(string); - after = System.nanoTime(); - System.out.println("before=" + string + " after=" + result); - System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); - System.gc(); - - System.out.println("Reversing a string with XOR."); - before = System.nanoTime(); - result = StringFunctions.reverseWithXOR(string); - after = System.nanoTime(); - System.out.println("before=" + string + " after=" + result); - System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); - System.out.println(); - System.gc(); - } - - // REVERSE WORDS IN A STRING - { - String string = "Could you pretty please reverse this sentence"; - System.out.println("Reversing a string using additional array."); - long before = System.nanoTime(); - String result = StringFunctions.reverseWordsByCharWithAdditionalStorage(string); - long after = System.nanoTime(); - System.out.println("before=" + string + " after=" + result); - System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); - System.gc(); - - System.out.println("Reversing a string using StringTokenizer with additional storage."); - before = System.nanoTime(); - result = StringFunctions.reverseWordsUsingStringTokenizerWithAdditionalStorage(string); - after = System.nanoTime(); - System.out.println("before=" + string + " after=" + result); - System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); - System.gc(); - - System.out.println("Reversing a string using split with additional storage."); - before = System.nanoTime(); - result = StringFunctions.reverseWordsUsingStringTokenizerWithAdditionalStorage(string); - after = System.nanoTime(); - System.out.println("before=" + string + " after=" + result); - System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); - System.gc(); - - System.out.println("Reversing a string in-place."); - before = System.nanoTime(); - result = StringFunctions.reverseWordsInPlace(string); - after = System.nanoTime(); - System.out.println("before=" + string + " after=" + result); - System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); - System.out.println(); - System.gc(); - } - - // PALINDROME - { - String string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - System.out.println("Is Palindrome with additional storage?"); - long before = System.nanoTime(); - boolean result = StringFunctions.isPalindromeWithAdditionalStorage(string); - long after = System.nanoTime(); - System.out.println("string=" + string + " isPalindrome=" + result); - System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); - System.gc(); - System.out.println("Is Palindrome in-place?"); - before = System.nanoTime(); - result = StringFunctions.isPalindromeInPlace(string); - after = System.nanoTime(); - System.out.println("string=" + string + " isPalindrome=" + result); - System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); - System.gc(); - - string = "ABCDEFGHIJKLMNOPQRSTUVWXYZZYXWVUTSRQPONMLKJIHGFEDCBA"; - System.out.println("Is Palindrome with additional storage?"); - before = System.nanoTime(); - result = StringFunctions.isPalindromeWithAdditionalStorage(string); - after = System.nanoTime(); - System.out.println("string=" + string + " isPalindrome=" + result); - System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); - System.gc(); - System.out.println("Is Palindrome in-place?"); - before = System.nanoTime(); - result = StringFunctions.isPalindromeInPlace(string); - after = System.nanoTime(); - System.out.println("string=" + string + " isPalindrome=" + result); - System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); - System.out.println(); - System.gc(); - } - - // COMBINATIONS - { - String string = "abc"; - System.out.println("All possible subsets."); - long before = System.nanoTime(); - String[] result = StringFunctions.generateSubsets(string); - long after = System.nanoTime(); - System.out.println("string=" + string + " subsets=" + result.length); - System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); - System.out.println(); - System.gc(); - } - - // Edit Distance - { - String string1 = "kitten"; - String string2 = "sitting"; - System.out.println("Edit Distance"); - long before = System.nanoTime(); - int result = StringFunctions.levenshteinDistance(string1, string2); - long after = System.nanoTime(); - System.out.println("string1='" + string1 + "' string2='" + string2 + "' edit (levenshtein) distance=" - + result); - System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); - System.out.println(); - System.gc(); - } - } -} diff --git a/src/com/jwetherell/algorithms/sorts/timing/Sorts.java b/src/com/jwetherell/algorithms/sorts/timing/Sorts.java deleted file mode 100644 index be4fde9c..00000000 --- a/src/com/jwetherell/algorithms/sorts/timing/Sorts.java +++ /dev/null @@ -1,664 +0,0 @@ -package com.jwetherell.algorithms.sorts.timing; - -import java.text.DecimalFormat; -import java.util.Random; - -import com.jwetherell.algorithms.sorts.AmericanFlagSort; -import com.jwetherell.algorithms.sorts.BubbleSort; -import com.jwetherell.algorithms.sorts.CountingSort; -import com.jwetherell.algorithms.sorts.HeapSort; -import com.jwetherell.algorithms.sorts.InsertionSort; -import com.jwetherell.algorithms.sorts.MergeSort; -import com.jwetherell.algorithms.sorts.QuickSort; -import com.jwetherell.algorithms.sorts.RadixSort; -import com.jwetherell.algorithms.sorts.ShellSort; - -public class Sorts { - - private static final DecimalFormat FORMAT = new DecimalFormat("#.###"); - private static final int SIZE = 10000; - - private static final boolean showResult = false; - private static final boolean showComparison = true; - private static final boolean checkResults = true; - - private static int insertionCount = 0; - private static final double[] insertionResults = new double[1 * 3]; - private static int bubbleCount = 0; - private static final double[] bubbleResults = new double[1 * 3]; - private static int shellCount = 0; - private static final double[] shellResults = new double[1 * 3]; - private static int mergeCount = 0; - private static final double[] mergeResults = new double[1 * 3]; - private static int quickCount = 0; - private static final double[] quickResults = new double[3 * 3]; - private static int heapCount = 0; - private static final double[] heapResults = new double[1 * 3]; - private static int countingCount = 0; - private static final double[] countingResults = new double[1 * 3]; - private static int radixCount = 0; - private static final double[] radixResults = new double[1 * 3]; - private static int americanFlagCount = 0; - private static final double[] americanFlagResults = new double[1 * 3]; - - private static final boolean showInsertion = true; - private static final boolean showBubble = true; - private static final boolean showShell = true; - private static final boolean showMerge = true; - private static final boolean showQuick = true; - private static final boolean showHeap = true; - private static final boolean showCounting = true; - private static final boolean showRadix = true; - private static final boolean showAmericanFlag = true; - - private static Integer[] unsorted = null; - private static Integer[] sorted = null; - private static Integer[] reverse = null; - - public static void main(String[] args) { - System.out.println("Generating random array."); - Random random = new Random(); - unsorted = new Integer[SIZE]; - int i = 0; - while (i < unsorted.length) { - int j = random.nextInt(unsorted.length * 10); - unsorted[i++] = j; - } - System.out.println("Generated random array."); - - System.out.println("Generating sorted array."); - sorted = new Integer[SIZE]; - for (i = 0; i < sorted.length; i++) { - sorted[i] = i; - } - System.out.println("Generated sorted array."); - - System.out.println("Generating reverse sorted array."); - reverse = new Integer[SIZE]; - for (i = (reverse.length - 1); i >= 0; i--) { - reverse[i] = (SIZE - 1) - i; - } - System.out.println("Generated reverse sorted array."); - System.out.println(); - System.out.flush(); - - System.out.println("Starting sorts..."); - System.out.println(); - System.out.flush(); - if (showInsertion) { - // Insertion sort - long bInsertion = System.nanoTime(); - Integer[] result = InsertionSort.sort(unsorted.clone()); - if (checkResults && !check(result)) - System.err.println("InsertionSort failed."); - long aInsertion = System.nanoTime(); - double diff = (aInsertion - bInsertion) / 1000000d / 1000d; - System.out.println("Random: InsertionSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(unsorted, result); - if (showComparison) - insertionResults[insertionCount++] = diff; - System.gc(); - - bInsertion = System.nanoTime(); - result = InsertionSort.sort(sorted.clone()); - if (checkResults && !check(result)) - System.err.println("InsertionSort failed."); - aInsertion = System.nanoTime(); - diff = (aInsertion - bInsertion) / 1000000d / 1000d; - System.out.println("Sorted: InsertionSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(sorted, result); - if (showComparison) - insertionResults[insertionCount++] = diff; - System.gc(); - - bInsertion = System.nanoTime(); - result = InsertionSort.sort(reverse.clone()); - if (checkResults && !check(result)) - System.err.println("InsertionSort failed."); - aInsertion = System.nanoTime(); - diff = (aInsertion - bInsertion) / 1000000d / 1000d; - System.out.println("Reverse sorted: InsertionSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(reverse, result); - if (showComparison) - insertionResults[insertionCount++] = diff; - System.gc(); - - System.out.println(); - System.out.flush(); - } - - if (showBubble) { - // Bubble sort - long bBubble = System.nanoTime(); - Integer[] result = BubbleSort.sort(unsorted.clone()); - if (checkResults && !check(result)) - System.err.println("BubbleSort failed."); - long aBubble = System.nanoTime(); - double diff = (aBubble - bBubble) / 1000000d / 1000d; - System.out.println("Random: BubbleSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(unsorted, result); - if (showComparison) - bubbleResults[bubbleCount++] = diff; - System.gc(); - - bBubble = System.nanoTime(); - result = BubbleSort.sort(sorted.clone()); - if (checkResults && !check(result)) - System.err.println("BubbleSort failed."); - aBubble = System.nanoTime(); - diff = (aBubble - bBubble) / 1000000d / 1000d; - System.out.println("Sorted: BubbleSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(sorted, result); - if (showComparison) - bubbleResults[bubbleCount++] = diff; - System.gc(); - - bBubble = System.nanoTime(); - result = BubbleSort.sort(reverse.clone()); - if (checkResults && !check(result)) - System.err.println("BubbleSort failed."); - aBubble = System.nanoTime(); - diff = (aBubble - bBubble) / 1000000d / 1000d; - System.out.println("Reverse sorted: BubbleSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(reverse, result); - if (showComparison) - bubbleResults[bubbleCount++] = diff; - System.gc(); - - System.out.println(); - System.out.flush(); - } - - if (showShell) { - int[] shells = new int[] { 10, 5, 3, 1 }; - // Shell's sort - long bShell = System.nanoTime(); - Integer[] result = ShellSort.sort(shells, unsorted.clone()); - if (checkResults && !check(result)) - System.err.println("ShellSort failed."); - long aShell = System.nanoTime(); - double diff = (aShell - bShell) / 1000000d / 1000d; - System.out.println("Random: ShellSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(unsorted, result); - if (showComparison) - shellResults[shellCount++] = diff; - System.gc(); - - bShell = System.nanoTime(); - result = ShellSort.sort(shells, sorted.clone()); - if (checkResults && !check(result)) - System.err.println("ShellSort failed."); - aShell = System.nanoTime(); - diff = (aShell - bShell) / 1000000d / 1000d; - System.out.println("Sorted: ShellSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(sorted, result); - if (showComparison) - shellResults[shellCount++] = diff; - System.gc(); - - bShell = System.nanoTime(); - result = ShellSort.sort(shells, reverse.clone()); - if (checkResults && !check(result)) - System.err.println("ShellSort failed."); - aShell = System.nanoTime(); - diff = (aShell - bShell) / 1000000d / 1000d; - System.out.println("Reverse sorted: ShellSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(reverse, result); - if (showComparison) - shellResults[shellCount++] = diff; - System.gc(); - - System.out.println(); - System.out.flush(); - } - - if (showMerge) { - // Merge sort - long bMerge = System.nanoTime(); - Integer[] result = MergeSort.sort(unsorted.clone()); - if (checkResults && !check(result)) - System.err.println("MergeSort failed."); - long aMerge = System.nanoTime(); - double diff = (aMerge - bMerge) / 1000000d / 1000d; - System.out.println("Random: MergeSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(unsorted, result); - if (showComparison) - mergeResults[mergeCount++] = diff; - System.gc(); - - bMerge = System.nanoTime(); - result = MergeSort.sort(sorted.clone()); - if (checkResults && !check(result)) - System.err.println("MergeSort failed."); - aMerge = System.nanoTime(); - diff = (aMerge - bMerge) / 1000000d / 1000d; - System.out.println("Sorted: MergeSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(sorted, result); - if (showComparison) - mergeResults[mergeCount++] = diff; - System.gc(); - - bMerge = System.nanoTime(); - result = MergeSort.sort(reverse.clone()); - if (checkResults && !check(result)) - System.err.println("MergeSort failed."); - aMerge = System.nanoTime(); - diff = (aMerge - bMerge) / 1000000d / 1000d; - System.out.println("Reverse sorted: MergeSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(reverse, result); - if (showComparison) - mergeResults[mergeCount++] = diff; - System.gc(); - - System.out.println(); - System.out.flush(); - } - - if (showQuick) { - // Quicksort - long bQuick = System.nanoTime(); - Integer[] result = QuickSort.sort(QuickSort.PIVOT_TYPE.FIRST, unsorted.clone()); - if (checkResults && !check(result)) - System.err.println("QuickSort failed."); - long aQuick = System.nanoTime(); - double diff = (aQuick - bQuick) / 1000000d / 1000d; - System.out.println("Random: QuickSort first element pivot=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(unsorted, result); - if (showComparison) - quickResults[quickCount++] = diff; - System.gc(); - - bQuick = System.nanoTime(); - result = QuickSort.sort(QuickSort.PIVOT_TYPE.FIRST, sorted.clone()); - if (checkResults && !check(result)) - System.err.println("QuickSort failed."); - aQuick = System.nanoTime(); - diff = (aQuick - bQuick) / 1000000d / 1000d; - System.out.println("Sorted: QuickSort first element pivot=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(sorted, result); - if (showComparison) - quickResults[quickCount++] = diff; - System.gc(); - - bQuick = System.nanoTime(); - result = QuickSort.sort(QuickSort.PIVOT_TYPE.FIRST, reverse.clone()); - if (checkResults && !check(result)) - System.err.println("QuickSort failed."); - aQuick = System.nanoTime(); - diff = (aQuick - bQuick) / 1000000d / 1000d; - System.out.println("Reverse sorted: QuickSort first element pivot=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(reverse, result); - if (showComparison) - quickResults[quickCount++] = diff; - System.gc(); - - System.out.println(); - System.out.flush(); - - bQuick = System.nanoTime(); - result = QuickSort.sort(QuickSort.PIVOT_TYPE.MIDDLE, unsorted.clone()); - if (checkResults && !check(result)) - System.err.println("QuickSort failed."); - aQuick = System.nanoTime(); - diff = (aQuick - bQuick) / 1000000d / 1000d; - System.out.println("Random: QuickSort middle element pivot=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(unsorted, result); - if (showComparison) - quickResults[quickCount++] = diff; - System.gc(); - - bQuick = System.nanoTime(); - result = QuickSort.sort(QuickSort.PIVOT_TYPE.MIDDLE, sorted.clone()); - if (checkResults && !check(result)) - System.err.println("QuickSort failed."); - aQuick = System.nanoTime(); - diff = (aQuick - bQuick) / 1000000d / 1000d; - System.out.println("Sorted: QuickSort middle element pivot=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(sorted, result); - if (showComparison) - quickResults[quickCount++] = diff; - System.gc(); - - bQuick = System.nanoTime(); - result = QuickSort.sort(QuickSort.PIVOT_TYPE.MIDDLE, reverse.clone()); - if (checkResults && !check(result)) - System.err.println("QuickSort failed."); - aQuick = System.nanoTime(); - diff = (aQuick - bQuick) / 1000000d / 1000d; - System.out.println("Reverse sorted: QuickSort middle element pivot=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(reverse, result); - if (showComparison) - quickResults[quickCount++] = diff; - System.gc(); - - System.out.println(); - System.out.flush(); - - bQuick = System.nanoTime(); - result = QuickSort.sort(QuickSort.PIVOT_TYPE.RANDOM, unsorted.clone()); - if (checkResults && !check(result)) - System.err.println("Random QuickSort failed."); - aQuick = System.nanoTime(); - diff = (aQuick - bQuick) / 1000000d / 1000d; - System.out.println("Random: Randomized QuickSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(unsorted, result); - if (showComparison) - quickResults[quickCount++] = diff; - System.gc(); - - bQuick = System.nanoTime(); - result = QuickSort.sort(QuickSort.PIVOT_TYPE.RANDOM, sorted.clone()); - if (checkResults && !check(result)) - System.err.println("Random QuickSort failed."); - aQuick = System.nanoTime(); - diff = (aQuick - bQuick) / 1000000d / 1000d; - System.out.println("Sorted: Randomized QuickSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(sorted, result); - if (showComparison) - quickResults[quickCount++] = diff; - System.gc(); - - bQuick = System.nanoTime(); - result = QuickSort.sort(QuickSort.PIVOT_TYPE.RANDOM, reverse.clone()); - if (checkResults && !check(result)) - System.err.println("Random QuickSort failed."); - aQuick = System.nanoTime(); - diff = (aQuick - bQuick) / 1000000d / 1000d; - System.out.println("Reverse sorted: Randomized QuickSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(reverse, result); - if (showComparison) - quickResults[quickCount++] = diff; - System.gc(); - - System.out.println(); - System.out.flush(); - } - - if (showHeap) { - // Heapsort - long bHeap = System.nanoTime(); - Integer[] result = HeapSort.sort(unsorted.clone()); - if (checkResults && !check(result)) - System.err.println("HeapSort failed."); - long aHeap = System.nanoTime(); - double diff = (aHeap - bHeap) / 1000000d / 1000d; - System.out.println("Random: HeapSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(unsorted, result); - if (showComparison) - heapResults[heapCount++] = diff; - System.gc(); - - bHeap = System.nanoTime(); - result = HeapSort.sort(sorted.clone()); - if (checkResults && !check(result)) - System.err.println("HeapSort failed."); - aHeap = System.nanoTime(); - diff = (aHeap - bHeap) / 1000000d / 1000d; - System.out.println("Sorted: HeapSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(sorted, result); - if (showComparison) - heapResults[heapCount++] = diff; - System.gc(); - - bHeap = System.nanoTime(); - result = HeapSort.sort(reverse.clone()); - if (checkResults && !check(result)) - System.err.println("HeapSort failed."); - aHeap = System.nanoTime(); - diff = (aHeap - bHeap) / 1000000d / 1000d; - System.out.println("Reverse sorted: HeapSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(reverse, result); - if (showComparison) - heapResults[heapCount++] = diff; - System.gc(); - - System.out.println(); - System.out.flush(); - } - - if (showCounting) { - // Counting sort - long bCounting = System.nanoTime(); - Integer[] result = CountingSort.sort(unsorted.clone()); - if (checkResults && !check(result)) - System.err.println("CountingSort failed."); - long aCounting = System.nanoTime(); - double diff = (aCounting - bCounting) / 1000000d / 1000d; - System.out.println("Random: CountingSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(unsorted, result); - if (showComparison) - countingResults[countingCount++] = diff; - System.gc(); - - bCounting = System.nanoTime(); - result = CountingSort.sort(sorted.clone()); - if (checkResults && !check(result)) - System.err.println("CountingSort failed."); - aCounting = System.nanoTime(); - diff = (aCounting - bCounting) / 1000000d / 1000d; - System.out.println("Sorted: CountingSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(sorted, result); - if (showComparison) - countingResults[countingCount++] = diff; - System.gc(); - - bCounting = System.nanoTime(); - result = CountingSort.sort(reverse.clone()); - if (checkResults && !check(result)) - System.err.println("CountingSort failed."); - aCounting = System.nanoTime(); - diff = (aCounting - bCounting) / 1000000d / 1000d; - System.out.println("Reverse sorted: CountingSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(reverse, result); - if (showComparison) - countingResults[countingCount++] = diff; - System.gc(); - - System.out.println(); - System.out.flush(); - } - - if (showRadix) { - // Radix sort - long bRadix = System.nanoTime(); - Integer[] result = RadixSort.sort(unsorted.clone()); - if (checkResults && !check(result)) - System.err.println("RadixSort failed."); - long aRadix = System.nanoTime(); - double diff = (aRadix - bRadix) / 1000000d / 1000d; - System.out.println("Random: RadixSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(unsorted, result); - if (showComparison) - radixResults[radixCount++] = diff; - System.gc(); - - bRadix = System.nanoTime(); - result = RadixSort.sort(sorted.clone()); - if (checkResults && !check(result)) - System.err.println("RadixSort failed."); - aRadix = System.nanoTime(); - diff = (aRadix - bRadix) / 1000000d / 1000d; - System.out.println("Sorted: RadixSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(sorted, result); - if (showComparison) - radixResults[radixCount++] = diff; - System.gc(); - - bRadix = System.nanoTime(); - result = RadixSort.sort(reverse.clone()); - if (checkResults && !check(result)) - System.err.println("RadixSort failed."); - aRadix = System.nanoTime(); - diff = (aRadix - bRadix) / 1000000d / 1000d; - System.out.println("Reverse sorted: RadixSort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(reverse, result); - if (showComparison) - radixResults[radixCount++] = diff; - System.gc(); - - System.out.println(); - System.out.flush(); - } - - if (showAmericanFlag) { - // American Flag sort - long bRadix = System.nanoTime(); - Integer[] result = AmericanFlagSort.sort(unsorted.clone()); - if (checkResults && !check(result)) - System.err.println("AmericanFlag sort failed."); - long aRadix = System.nanoTime(); - double diff = (aRadix - bRadix) / 1000000d / 1000d; - System.out.println("Random: AmericanFlag sort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(unsorted, result); - if (showComparison) - americanFlagResults[americanFlagCount++] = diff; - System.gc(); - - bRadix = System.nanoTime(); - result = AmericanFlagSort.sort(sorted.clone()); - if (checkResults && !check(result)) - System.err.println("AmericanFlag sort failed."); - aRadix = System.nanoTime(); - diff = (aRadix - bRadix) / 1000000d / 1000d; - System.out.println("Sorted: AmericanFlag sort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(sorted, result); - if (showComparison) - americanFlagResults[americanFlagCount++] = diff; - System.gc(); - - bRadix = System.nanoTime(); - result = AmericanFlagSort.sort(reverse.clone()); - if (checkResults && !check(result)) - System.err.println("AmericanFlag sort failed."); - aRadix = System.nanoTime(); - diff = (aRadix - bRadix) / 1000000d / 1000d; - System.out.println("Reverse sorted: AmericanFlag sort=" + FORMAT.format(diff) + " secs"); - if (showResult) - showResult(reverse, result); - if (showComparison) - americanFlagResults[americanFlagCount++] = diff; - System.gc(); - - System.out.println(); - System.out.flush(); - } - - if (showComparison) - showComparison(); - } - - private static final void showComparison() { - System.out.println("Algorithm\t\t\tRandom\tSorted\tReverse Sorted"); - if (showInsertion) { - int i = 0; - System.out.println("Insertion sort\t\t\t" + FORMAT.format(insertionResults[i++]) + "\t" + FORMAT.format(insertionResults[i++]) + "\t" + FORMAT.format(insertionResults[i++])); - } - if (showBubble) { - int i = 0; - System.out.println("Bubble sort\t\t\t" + FORMAT.format(bubbleResults[i++]) + "\t" + FORMAT.format(bubbleResults[i++]) + "\t" + FORMAT.format(bubbleResults[i++])); - } - if (showShell) { - int i = 0; - System.out.println("Shell sort\t\t\t" + FORMAT.format(shellResults[i++]) + "\t" + FORMAT.format(shellResults[i++]) + "\t" + FORMAT.format(shellResults[i++])); - } - if (showMerge) { - int i = 0; - System.out.println("Merge sort\t\t\t" + FORMAT.format(mergeResults[i++]) + "\t" + FORMAT.format(mergeResults[i++]) + "\t" + FORMAT.format(mergeResults[i++])); - } - if (showQuick) { - int i = 0; - System.out.println("Quicksort with first as pivot\t" + FORMAT.format(quickResults[i++]) + "\t" + FORMAT.format(quickResults[i++]) + "\t" + FORMAT.format(quickResults[i++])); - System.out.println("Quicksort with middle as pivot\t" + FORMAT.format(quickResults[i++]) + "\t" + FORMAT.format(quickResults[i++]) + "\t" + FORMAT.format(quickResults[i++])); - System.out.println("Quicksort with random as pivot\t" + FORMAT.format(quickResults[i++]) + "\t" + FORMAT.format(quickResults[i++]) + "\t" + FORMAT.format(quickResults[i++])); - } - if (showHeap) { - int i = 0; - System.out.println("Heap sort\t\t\t" + FORMAT.format(heapResults[i++]) + "\t" + FORMAT.format(heapResults[i++]) + "\t" + FORMAT.format(heapResults[i++])); - } - if (showCounting) { - int i = 0; - System.out.println("Counting sort\t\t\t" + FORMAT.format(countingResults[i++]) + "\t" + FORMAT.format(countingResults[i++]) + "\t" + FORMAT.format(countingResults[i++])); - } - if (showRadix) { - int i = 0; - System.out.println("Radix sort\t\t\t" + FORMAT.format(radixResults[i++]) + "\t" + FORMAT.format(radixResults[i++]) + "\t" + FORMAT.format(radixResults[i++])); - } - if (showAmericanFlag) { - int i = 0; - System.out.println("American Flag sort\t\t" + FORMAT.format(americanFlagResults[i++]) + "\t" + FORMAT.format(americanFlagResults[i++]) + "\t" + FORMAT.format(americanFlagResults[i++])); - } - } - - private static final void showResult(Integer[] unsorted, Integer[] result) { - System.out.println("Unsorted: " + print(unsorted)); - System.out.println("Sorted: " + print(result)); - System.out.flush(); - } - - private static final boolean check(Integer[] array) { - for (int i = 1; i < array.length; i++) { - if (array[i - 1] > array[i]) - return false; - } - return true; - } - - public static final String print(Integer[] array) { - return print(array, 0, array.length); - } - - public static final String print(Integer[] array, int start, int length) { - final Integer[] clone = array.clone(); - StringBuilder builder = new StringBuilder(); - for (int i = 0; i < length; i++) { - int e = clone[start + i]; - builder.append(e + " "); - } - return builder.toString(); - } - - public static final String printWithPivot(Integer[] array, int pivotIndex, int start, int length) { - final Integer[] clone = array.clone(); - StringBuilder builder = new StringBuilder(); - for (int i = 0; i < length; i++) { - int e = clone[start + i]; - if (i == pivotIndex) - builder.append("`" + e + "` "); - else - builder.append(e + " "); - } - return builder.toString(); - } -} From 368bc4ddbc6795ec256aa37923eb59090dfdadb9 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Tue, 17 Jun 2014 15:50:30 -0400 Subject: [PATCH 45/61] Changed the Sorts tests to use JUnit --- .../algorithms/sorts/timing/SortsTiming.java | 664 ++++++++++++++++++ 1 file changed, 664 insertions(+) create mode 100644 src/com/jwetherell/algorithms/sorts/timing/SortsTiming.java diff --git a/src/com/jwetherell/algorithms/sorts/timing/SortsTiming.java b/src/com/jwetherell/algorithms/sorts/timing/SortsTiming.java new file mode 100644 index 00000000..749619e3 --- /dev/null +++ b/src/com/jwetherell/algorithms/sorts/timing/SortsTiming.java @@ -0,0 +1,664 @@ +package com.jwetherell.algorithms.sorts.timing; + +import java.text.DecimalFormat; +import java.util.Random; + +import com.jwetherell.algorithms.sorts.AmericanFlagSort; +import com.jwetherell.algorithms.sorts.BubbleSort; +import com.jwetherell.algorithms.sorts.CountingSort; +import com.jwetherell.algorithms.sorts.HeapSort; +import com.jwetherell.algorithms.sorts.InsertionSort; +import com.jwetherell.algorithms.sorts.MergeSort; +import com.jwetherell.algorithms.sorts.QuickSort; +import com.jwetherell.algorithms.sorts.RadixSort; +import com.jwetherell.algorithms.sorts.ShellSort; + +public class SortsTiming { + + private static final DecimalFormat FORMAT = new DecimalFormat("#.###"); + private static final int SIZE = 10000; + + private static final boolean showResult = false; + private static final boolean showComparison = true; + private static final boolean checkResults = true; + + private static int insertionCount = 0; + private static final double[] insertionResults = new double[1 * 3]; + private static int bubbleCount = 0; + private static final double[] bubbleResults = new double[1 * 3]; + private static int shellCount = 0; + private static final double[] shellResults = new double[1 * 3]; + private static int mergeCount = 0; + private static final double[] mergeResults = new double[1 * 3]; + private static int quickCount = 0; + private static final double[] quickResults = new double[3 * 3]; + private static int heapCount = 0; + private static final double[] heapResults = new double[1 * 3]; + private static int countingCount = 0; + private static final double[] countingResults = new double[1 * 3]; + private static int radixCount = 0; + private static final double[] radixResults = new double[1 * 3]; + private static int americanFlagCount = 0; + private static final double[] americanFlagResults = new double[1 * 3]; + + private static final boolean showInsertion = true; + private static final boolean showBubble = true; + private static final boolean showShell = true; + private static final boolean showMerge = true; + private static final boolean showQuick = true; + private static final boolean showHeap = true; + private static final boolean showCounting = true; + private static final boolean showRadix = true; + private static final boolean showAmericanFlag = true; + + private static Integer[] unsorted = null; + private static Integer[] sorted = null; + private static Integer[] reverse = null; + + public static void main(String[] args) { + System.out.println("Generating random array."); + Random random = new Random(); + unsorted = new Integer[SIZE]; + int i = 0; + while (i < unsorted.length) { + int j = random.nextInt(unsorted.length * 10); + unsorted[i++] = j; + } + System.out.println("Generated random array."); + + System.out.println("Generating sorted array."); + sorted = new Integer[SIZE]; + for (i = 0; i < sorted.length; i++) { + sorted[i] = i; + } + System.out.println("Generated sorted array."); + + System.out.println("Generating reverse sorted array."); + reverse = new Integer[SIZE]; + for (i = (reverse.length - 1); i >= 0; i--) { + reverse[i] = (SIZE - 1) - i; + } + System.out.println("Generated reverse sorted array."); + System.out.println(); + System.out.flush(); + + System.out.println("Starting sorts..."); + System.out.println(); + System.out.flush(); + if (showInsertion) { + // Insertion sort + long bInsertion = System.nanoTime(); + Integer[] result = InsertionSort.sort(unsorted.clone()); + if (checkResults && !check(result)) + System.err.println("InsertionSort failed."); + long aInsertion = System.nanoTime(); + double diff = (aInsertion - bInsertion) / 1000000d / 1000d; + System.out.println("Random: InsertionSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(unsorted, result); + if (showComparison) + insertionResults[insertionCount++] = diff; + System.gc(); + + bInsertion = System.nanoTime(); + result = InsertionSort.sort(sorted.clone()); + if (checkResults && !check(result)) + System.err.println("InsertionSort failed."); + aInsertion = System.nanoTime(); + diff = (aInsertion - bInsertion) / 1000000d / 1000d; + System.out.println("Sorted: InsertionSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(sorted, result); + if (showComparison) + insertionResults[insertionCount++] = diff; + System.gc(); + + bInsertion = System.nanoTime(); + result = InsertionSort.sort(reverse.clone()); + if (checkResults && !check(result)) + System.err.println("InsertionSort failed."); + aInsertion = System.nanoTime(); + diff = (aInsertion - bInsertion) / 1000000d / 1000d; + System.out.println("Reverse sorted: InsertionSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(reverse, result); + if (showComparison) + insertionResults[insertionCount++] = diff; + System.gc(); + + System.out.println(); + System.out.flush(); + } + + if (showBubble) { + // Bubble sort + long bBubble = System.nanoTime(); + Integer[] result = BubbleSort.sort(unsorted.clone()); + if (checkResults && !check(result)) + System.err.println("BubbleSort failed."); + long aBubble = System.nanoTime(); + double diff = (aBubble - bBubble) / 1000000d / 1000d; + System.out.println("Random: BubbleSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(unsorted, result); + if (showComparison) + bubbleResults[bubbleCount++] = diff; + System.gc(); + + bBubble = System.nanoTime(); + result = BubbleSort.sort(sorted.clone()); + if (checkResults && !check(result)) + System.err.println("BubbleSort failed."); + aBubble = System.nanoTime(); + diff = (aBubble - bBubble) / 1000000d / 1000d; + System.out.println("Sorted: BubbleSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(sorted, result); + if (showComparison) + bubbleResults[bubbleCount++] = diff; + System.gc(); + + bBubble = System.nanoTime(); + result = BubbleSort.sort(reverse.clone()); + if (checkResults && !check(result)) + System.err.println("BubbleSort failed."); + aBubble = System.nanoTime(); + diff = (aBubble - bBubble) / 1000000d / 1000d; + System.out.println("Reverse sorted: BubbleSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(reverse, result); + if (showComparison) + bubbleResults[bubbleCount++] = diff; + System.gc(); + + System.out.println(); + System.out.flush(); + } + + if (showShell) { + int[] shells = new int[] { 10, 5, 3, 1 }; + // Shell's sort + long bShell = System.nanoTime(); + Integer[] result = ShellSort.sort(shells, unsorted.clone()); + if (checkResults && !check(result)) + System.err.println("ShellSort failed."); + long aShell = System.nanoTime(); + double diff = (aShell - bShell) / 1000000d / 1000d; + System.out.println("Random: ShellSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(unsorted, result); + if (showComparison) + shellResults[shellCount++] = diff; + System.gc(); + + bShell = System.nanoTime(); + result = ShellSort.sort(shells, sorted.clone()); + if (checkResults && !check(result)) + System.err.println("ShellSort failed."); + aShell = System.nanoTime(); + diff = (aShell - bShell) / 1000000d / 1000d; + System.out.println("Sorted: ShellSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(sorted, result); + if (showComparison) + shellResults[shellCount++] = diff; + System.gc(); + + bShell = System.nanoTime(); + result = ShellSort.sort(shells, reverse.clone()); + if (checkResults && !check(result)) + System.err.println("ShellSort failed."); + aShell = System.nanoTime(); + diff = (aShell - bShell) / 1000000d / 1000d; + System.out.println("Reverse sorted: ShellSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(reverse, result); + if (showComparison) + shellResults[shellCount++] = diff; + System.gc(); + + System.out.println(); + System.out.flush(); + } + + if (showMerge) { + // Merge sort + long bMerge = System.nanoTime(); + Integer[] result = MergeSort.sort(unsorted.clone()); + if (checkResults && !check(result)) + System.err.println("MergeSort failed."); + long aMerge = System.nanoTime(); + double diff = (aMerge - bMerge) / 1000000d / 1000d; + System.out.println("Random: MergeSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(unsorted, result); + if (showComparison) + mergeResults[mergeCount++] = diff; + System.gc(); + + bMerge = System.nanoTime(); + result = MergeSort.sort(sorted.clone()); + if (checkResults && !check(result)) + System.err.println("MergeSort failed."); + aMerge = System.nanoTime(); + diff = (aMerge - bMerge) / 1000000d / 1000d; + System.out.println("Sorted: MergeSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(sorted, result); + if (showComparison) + mergeResults[mergeCount++] = diff; + System.gc(); + + bMerge = System.nanoTime(); + result = MergeSort.sort(reverse.clone()); + if (checkResults && !check(result)) + System.err.println("MergeSort failed."); + aMerge = System.nanoTime(); + diff = (aMerge - bMerge) / 1000000d / 1000d; + System.out.println("Reverse sorted: MergeSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(reverse, result); + if (showComparison) + mergeResults[mergeCount++] = diff; + System.gc(); + + System.out.println(); + System.out.flush(); + } + + if (showQuick) { + // Quicksort + long bQuick = System.nanoTime(); + Integer[] result = QuickSort.sort(QuickSort.PIVOT_TYPE.FIRST, unsorted.clone()); + if (checkResults && !check(result)) + System.err.println("QuickSort failed."); + long aQuick = System.nanoTime(); + double diff = (aQuick - bQuick) / 1000000d / 1000d; + System.out.println("Random: QuickSort first element pivot=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(unsorted, result); + if (showComparison) + quickResults[quickCount++] = diff; + System.gc(); + + bQuick = System.nanoTime(); + result = QuickSort.sort(QuickSort.PIVOT_TYPE.FIRST, sorted.clone()); + if (checkResults && !check(result)) + System.err.println("QuickSort failed."); + aQuick = System.nanoTime(); + diff = (aQuick - bQuick) / 1000000d / 1000d; + System.out.println("Sorted: QuickSort first element pivot=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(sorted, result); + if (showComparison) + quickResults[quickCount++] = diff; + System.gc(); + + bQuick = System.nanoTime(); + result = QuickSort.sort(QuickSort.PIVOT_TYPE.FIRST, reverse.clone()); + if (checkResults && !check(result)) + System.err.println("QuickSort failed."); + aQuick = System.nanoTime(); + diff = (aQuick - bQuick) / 1000000d / 1000d; + System.out.println("Reverse sorted: QuickSort first element pivot=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(reverse, result); + if (showComparison) + quickResults[quickCount++] = diff; + System.gc(); + + System.out.println(); + System.out.flush(); + + bQuick = System.nanoTime(); + result = QuickSort.sort(QuickSort.PIVOT_TYPE.MIDDLE, unsorted.clone()); + if (checkResults && !check(result)) + System.err.println("QuickSort failed."); + aQuick = System.nanoTime(); + diff = (aQuick - bQuick) / 1000000d / 1000d; + System.out.println("Random: QuickSort middle element pivot=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(unsorted, result); + if (showComparison) + quickResults[quickCount++] = diff; + System.gc(); + + bQuick = System.nanoTime(); + result = QuickSort.sort(QuickSort.PIVOT_TYPE.MIDDLE, sorted.clone()); + if (checkResults && !check(result)) + System.err.println("QuickSort failed."); + aQuick = System.nanoTime(); + diff = (aQuick - bQuick) / 1000000d / 1000d; + System.out.println("Sorted: QuickSort middle element pivot=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(sorted, result); + if (showComparison) + quickResults[quickCount++] = diff; + System.gc(); + + bQuick = System.nanoTime(); + result = QuickSort.sort(QuickSort.PIVOT_TYPE.MIDDLE, reverse.clone()); + if (checkResults && !check(result)) + System.err.println("QuickSort failed."); + aQuick = System.nanoTime(); + diff = (aQuick - bQuick) / 1000000d / 1000d; + System.out.println("Reverse sorted: QuickSort middle element pivot=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(reverse, result); + if (showComparison) + quickResults[quickCount++] = diff; + System.gc(); + + System.out.println(); + System.out.flush(); + + bQuick = System.nanoTime(); + result = QuickSort.sort(QuickSort.PIVOT_TYPE.RANDOM, unsorted.clone()); + if (checkResults && !check(result)) + System.err.println("Random QuickSort failed."); + aQuick = System.nanoTime(); + diff = (aQuick - bQuick) / 1000000d / 1000d; + System.out.println("Random: Randomized QuickSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(unsorted, result); + if (showComparison) + quickResults[quickCount++] = diff; + System.gc(); + + bQuick = System.nanoTime(); + result = QuickSort.sort(QuickSort.PIVOT_TYPE.RANDOM, sorted.clone()); + if (checkResults && !check(result)) + System.err.println("Random QuickSort failed."); + aQuick = System.nanoTime(); + diff = (aQuick - bQuick) / 1000000d / 1000d; + System.out.println("Sorted: Randomized QuickSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(sorted, result); + if (showComparison) + quickResults[quickCount++] = diff; + System.gc(); + + bQuick = System.nanoTime(); + result = QuickSort.sort(QuickSort.PIVOT_TYPE.RANDOM, reverse.clone()); + if (checkResults && !check(result)) + System.err.println("Random QuickSort failed."); + aQuick = System.nanoTime(); + diff = (aQuick - bQuick) / 1000000d / 1000d; + System.out.println("Reverse sorted: Randomized QuickSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(reverse, result); + if (showComparison) + quickResults[quickCount++] = diff; + System.gc(); + + System.out.println(); + System.out.flush(); + } + + if (showHeap) { + // Heapsort + long bHeap = System.nanoTime(); + Integer[] result = HeapSort.sort(unsorted.clone()); + if (checkResults && !check(result)) + System.err.println("HeapSort failed."); + long aHeap = System.nanoTime(); + double diff = (aHeap - bHeap) / 1000000d / 1000d; + System.out.println("Random: HeapSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(unsorted, result); + if (showComparison) + heapResults[heapCount++] = diff; + System.gc(); + + bHeap = System.nanoTime(); + result = HeapSort.sort(sorted.clone()); + if (checkResults && !check(result)) + System.err.println("HeapSort failed."); + aHeap = System.nanoTime(); + diff = (aHeap - bHeap) / 1000000d / 1000d; + System.out.println("Sorted: HeapSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(sorted, result); + if (showComparison) + heapResults[heapCount++] = diff; + System.gc(); + + bHeap = System.nanoTime(); + result = HeapSort.sort(reverse.clone()); + if (checkResults && !check(result)) + System.err.println("HeapSort failed."); + aHeap = System.nanoTime(); + diff = (aHeap - bHeap) / 1000000d / 1000d; + System.out.println("Reverse sorted: HeapSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(reverse, result); + if (showComparison) + heapResults[heapCount++] = diff; + System.gc(); + + System.out.println(); + System.out.flush(); + } + + if (showCounting) { + // Counting sort + long bCounting = System.nanoTime(); + Integer[] result = CountingSort.sort(unsorted.clone()); + if (checkResults && !check(result)) + System.err.println("CountingSort failed."); + long aCounting = System.nanoTime(); + double diff = (aCounting - bCounting) / 1000000d / 1000d; + System.out.println("Random: CountingSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(unsorted, result); + if (showComparison) + countingResults[countingCount++] = diff; + System.gc(); + + bCounting = System.nanoTime(); + result = CountingSort.sort(sorted.clone()); + if (checkResults && !check(result)) + System.err.println("CountingSort failed."); + aCounting = System.nanoTime(); + diff = (aCounting - bCounting) / 1000000d / 1000d; + System.out.println("Sorted: CountingSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(sorted, result); + if (showComparison) + countingResults[countingCount++] = diff; + System.gc(); + + bCounting = System.nanoTime(); + result = CountingSort.sort(reverse.clone()); + if (checkResults && !check(result)) + System.err.println("CountingSort failed."); + aCounting = System.nanoTime(); + diff = (aCounting - bCounting) / 1000000d / 1000d; + System.out.println("Reverse sorted: CountingSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(reverse, result); + if (showComparison) + countingResults[countingCount++] = diff; + System.gc(); + + System.out.println(); + System.out.flush(); + } + + if (showRadix) { + // Radix sort + long bRadix = System.nanoTime(); + Integer[] result = RadixSort.sort(unsorted.clone()); + if (checkResults && !check(result)) + System.err.println("RadixSort failed."); + long aRadix = System.nanoTime(); + double diff = (aRadix - bRadix) / 1000000d / 1000d; + System.out.println("Random: RadixSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(unsorted, result); + if (showComparison) + radixResults[radixCount++] = diff; + System.gc(); + + bRadix = System.nanoTime(); + result = RadixSort.sort(sorted.clone()); + if (checkResults && !check(result)) + System.err.println("RadixSort failed."); + aRadix = System.nanoTime(); + diff = (aRadix - bRadix) / 1000000d / 1000d; + System.out.println("Sorted: RadixSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(sorted, result); + if (showComparison) + radixResults[radixCount++] = diff; + System.gc(); + + bRadix = System.nanoTime(); + result = RadixSort.sort(reverse.clone()); + if (checkResults && !check(result)) + System.err.println("RadixSort failed."); + aRadix = System.nanoTime(); + diff = (aRadix - bRadix) / 1000000d / 1000d; + System.out.println("Reverse sorted: RadixSort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(reverse, result); + if (showComparison) + radixResults[radixCount++] = diff; + System.gc(); + + System.out.println(); + System.out.flush(); + } + + if (showAmericanFlag) { + // American Flag sort + long bRadix = System.nanoTime(); + Integer[] result = AmericanFlagSort.sort(unsorted.clone()); + if (checkResults && !check(result)) + System.err.println("AmericanFlag sort failed."); + long aRadix = System.nanoTime(); + double diff = (aRadix - bRadix) / 1000000d / 1000d; + System.out.println("Random: AmericanFlag sort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(unsorted, result); + if (showComparison) + americanFlagResults[americanFlagCount++] = diff; + System.gc(); + + bRadix = System.nanoTime(); + result = AmericanFlagSort.sort(sorted.clone()); + if (checkResults && !check(result)) + System.err.println("AmericanFlag sort failed."); + aRadix = System.nanoTime(); + diff = (aRadix - bRadix) / 1000000d / 1000d; + System.out.println("Sorted: AmericanFlag sort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(sorted, result); + if (showComparison) + americanFlagResults[americanFlagCount++] = diff; + System.gc(); + + bRadix = System.nanoTime(); + result = AmericanFlagSort.sort(reverse.clone()); + if (checkResults && !check(result)) + System.err.println("AmericanFlag sort failed."); + aRadix = System.nanoTime(); + diff = (aRadix - bRadix) / 1000000d / 1000d; + System.out.println("Reverse sorted: AmericanFlag sort=" + FORMAT.format(diff) + " secs"); + if (showResult) + showResult(reverse, result); + if (showComparison) + americanFlagResults[americanFlagCount++] = diff; + System.gc(); + + System.out.println(); + System.out.flush(); + } + + if (showComparison) + showComparison(); + } + + private static final void showComparison() { + System.out.println("Algorithm\t\t\tRandom\tSorted\tReverse Sorted"); + if (showInsertion) { + int i = 0; + System.out.println("Insertion sort\t\t\t" + FORMAT.format(insertionResults[i++]) + "\t" + FORMAT.format(insertionResults[i++]) + "\t" + FORMAT.format(insertionResults[i++])); + } + if (showBubble) { + int i = 0; + System.out.println("Bubble sort\t\t\t" + FORMAT.format(bubbleResults[i++]) + "\t" + FORMAT.format(bubbleResults[i++]) + "\t" + FORMAT.format(bubbleResults[i++])); + } + if (showShell) { + int i = 0; + System.out.println("Shell sort\t\t\t" + FORMAT.format(shellResults[i++]) + "\t" + FORMAT.format(shellResults[i++]) + "\t" + FORMAT.format(shellResults[i++])); + } + if (showMerge) { + int i = 0; + System.out.println("Merge sort\t\t\t" + FORMAT.format(mergeResults[i++]) + "\t" + FORMAT.format(mergeResults[i++]) + "\t" + FORMAT.format(mergeResults[i++])); + } + if (showQuick) { + int i = 0; + System.out.println("Quicksort with first as pivot\t" + FORMAT.format(quickResults[i++]) + "\t" + FORMAT.format(quickResults[i++]) + "\t" + FORMAT.format(quickResults[i++])); + System.out.println("Quicksort with middle as pivot\t" + FORMAT.format(quickResults[i++]) + "\t" + FORMAT.format(quickResults[i++]) + "\t" + FORMAT.format(quickResults[i++])); + System.out.println("Quicksort with random as pivot\t" + FORMAT.format(quickResults[i++]) + "\t" + FORMAT.format(quickResults[i++]) + "\t" + FORMAT.format(quickResults[i++])); + } + if (showHeap) { + int i = 0; + System.out.println("Heap sort\t\t\t" + FORMAT.format(heapResults[i++]) + "\t" + FORMAT.format(heapResults[i++]) + "\t" + FORMAT.format(heapResults[i++])); + } + if (showCounting) { + int i = 0; + System.out.println("Counting sort\t\t\t" + FORMAT.format(countingResults[i++]) + "\t" + FORMAT.format(countingResults[i++]) + "\t" + FORMAT.format(countingResults[i++])); + } + if (showRadix) { + int i = 0; + System.out.println("Radix sort\t\t\t" + FORMAT.format(radixResults[i++]) + "\t" + FORMAT.format(radixResults[i++]) + "\t" + FORMAT.format(radixResults[i++])); + } + if (showAmericanFlag) { + int i = 0; + System.out.println("American Flag sort\t\t" + FORMAT.format(americanFlagResults[i++]) + "\t" + FORMAT.format(americanFlagResults[i++]) + "\t" + FORMAT.format(americanFlagResults[i++])); + } + } + + private static final void showResult(Integer[] unsorted, Integer[] result) { + System.out.println("Unsorted: " + print(unsorted)); + System.out.println("Sorted: " + print(result)); + System.out.flush(); + } + + private static final boolean check(Integer[] array) { + for (int i = 1; i < array.length; i++) { + if (array[i - 1] > array[i]) + return false; + } + return true; + } + + public static final String print(Integer[] array) { + return print(array, 0, array.length); + } + + public static final String print(Integer[] array, int start, int length) { + final Integer[] clone = array.clone(); + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < length; i++) { + int e = clone[start + i]; + builder.append(e + " "); + } + return builder.toString(); + } + + public static final String printWithPivot(Integer[] array, int pivotIndex, int start, int length) { + final Integer[] clone = array.clone(); + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < length; i++) { + int e = clone[start + i]; + if (i == pivotIndex) + builder.append("`" + e + "` "); + else + builder.append(e + " "); + } + return builder.toString(); + } +} From 604cb0f80c61feb0f35b8b639004d8f8bb9aa1b9 Mon Sep 17 00:00:00 2001 From: Justin Wetherell Date: Tue, 17 Jun 2014 16:26:46 -0400 Subject: [PATCH 46/61] Changed the String functions tests to use JUnit --- .../algorithms/strings/StringFunctions.java | 6 +- .../algorithms/strings/test/Strings.java | 96 +++++++++++ .../strings/timing/StringsTiming.java | 154 ++++++++++++++++++ 3 files changed, 253 insertions(+), 3 deletions(-) create mode 100644 src/com/jwetherell/algorithms/strings/test/Strings.java create mode 100644 src/com/jwetherell/algorithms/strings/timing/StringsTiming.java diff --git a/src/com/jwetherell/algorithms/strings/StringFunctions.java b/src/com/jwetherell/algorithms/strings/StringFunctions.java index bad40aab..0bdc4725 100644 --- a/src/com/jwetherell/algorithms/strings/StringFunctions.java +++ b/src/com/jwetherell/algorithms/strings/StringFunctions.java @@ -85,7 +85,7 @@ public static final String reverseWordsUsingStringTokenizerWithAdditionalStorage output = (st.nextToken()) + ' ' + output; } - return output; + return output.trim(); } public static final String reverseWordsUsingSplitWithAdditionalStorage(String string) { @@ -93,10 +93,10 @@ public static final String reverseWordsUsingSplitWithAdditionalStorage(String st String[] temp = string.split(" "); for (int i = (temp.length - 1); i >= 0; i--) { - builder.append(temp[i]); + builder.append(temp[i]).append(' '); } - return builder.toString(); + return builder.toString().trim(); } public static final String reverseWordsInPlace(String string) { diff --git a/src/com/jwetherell/algorithms/strings/test/Strings.java b/src/com/jwetherell/algorithms/strings/test/Strings.java new file mode 100644 index 00000000..714f5a82 --- /dev/null +++ b/src/com/jwetherell/algorithms/strings/test/Strings.java @@ -0,0 +1,96 @@ +package com.jwetherell.algorithms.strings.test; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.Arrays; + +import org.junit.Test; + +import com.jwetherell.algorithms.strings.StringFunctions; + +public class Strings { + + @Test + public void testReverseCharsInString() { + // REVERSE CHARS IN A STRING + String string = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + String check = "zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA"; + String result = StringFunctions.reverseWithStringConcat(string); + assertTrue("Reverse With String Concat error. expect="+check+" got="+result, check.equals(result)); + + result = StringFunctions.reverseWithStringBuilder(string); + assertTrue("Reverse With String String Builder error. expect="+check+" got="+result, check.equals(result)); + + result = StringFunctions.reverseWithStringBuilderBuiltinMethod(string); + assertTrue("Reverse With Built-in error. expect="+check+" got="+result, check.equals(result)); + + result = StringFunctions.reverseWithSwaps(string); + assertTrue("Reverse With Swaps error. expect="+check+" got="+result, check.equals(result)); + + result = StringFunctions.reverseWithXOR(string); + assertTrue("Reverse With XOR error. expect="+check+" got="+result, check.equals(result)); + } + + @Test + public void testReverseWordsInString() { + // REVERSE WORDS IN A STRING + String string = "Could you pretty please reverse this sentence"; + String check = "sentence this reverse please pretty you Could"; + String result = StringFunctions.reverseWordsByCharWithAdditionalStorage(string); + assertTrue("Reverse Words By Char w/ Additional Storage error. expect="+check+" got="+result, check.equals(result)); + + result = StringFunctions.reverseWordsUsingStringTokenizerWithAdditionalStorage(string); + assertTrue("Reverse Words Using String Tokenizer w/ Additional Storage error. expect="+check+" got="+result, check.equals(result)); + + result = StringFunctions.reverseWordsUsingSplitWithAdditionalStorage(string); + assertTrue("Reverse Words Using Split w/ Additional Storage error. expect="+check+" got="+result, check.equals(result)); + + result = StringFunctions.reverseWordsInPlace(string); + assertTrue("Reverse Words In-Place error. expect="+check+" got="+result, check.equals(result)); + } + + @Test + public void testIsPalinDrone() { + // PALINDROME + String string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + boolean result = StringFunctions.isPalindromeWithAdditionalStorage(string); + assertFalse("Is Palindrome With Additional Storage error. expected=false got="+result, result); + + result = StringFunctions.isPalindromeInPlace(string); + assertFalse("Is Palindrome In Place error. expected=false got="+result, result); + + string = "ABCDEFGHIJKKJIHGFEDCBA"; + result = StringFunctions.isPalindromeWithAdditionalStorage(string); + assertTrue("Is Palindrome With Additional Storage error. expected=true got="+result, result); + + result = StringFunctions.isPalindromeInPlace(string); + assertTrue("Is Palindrome In Place error. expected=true got="+result, result); + } + + @Test + public void testGenerateSubSets() { + // COMBINATIONS + String string = "abc"; + String[] check = new String[] {"", "c", "b", "cb", "a", "ca", "ba", "cba"}; + String[] result = StringFunctions.generateSubsets(string); + assertTrue("Generate Subsets error. expected="+print(check)+" got="+print(result), Arrays.equals(check, result)); + } + + @Test + public void testEditDistance() { + // Edit Distance + String string1 = "kitten"; + String string2 = "sitting"; + int check = 3; + int result = StringFunctions.levenshteinDistance(string1, string2); + assertTrue("Edit Distance error. expected="+check+" got="+result, (check==result)); + } + + private static final String print(String[] strings) { + StringBuilder builder = new StringBuilder(); + for (String s : strings) + builder.append(s).append(' '); + return builder.toString(); + } +} diff --git a/src/com/jwetherell/algorithms/strings/timing/StringsTiming.java b/src/com/jwetherell/algorithms/strings/timing/StringsTiming.java new file mode 100644 index 00000000..3851af88 --- /dev/null +++ b/src/com/jwetherell/algorithms/strings/timing/StringsTiming.java @@ -0,0 +1,154 @@ +package com.jwetherell.algorithms.strings.timing; + +import java.text.DecimalFormat; + +import com.jwetherell.algorithms.strings.StringFunctions; + +public class StringsTiming { + + private static final DecimalFormat FORMAT = new DecimalFormat("#.######"); + + public static void main(String[] args) { + // REVERSE CHARS IN A STRING + { + String string = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + System.out.println("Reversing a string using concatination."); + long before = System.nanoTime(); + StringFunctions.reverseWithStringConcat(string); + long after = System.nanoTime(); + System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); + System.gc(); + + System.out.println("Reversing a string with a StringBuilder."); + before = System.nanoTime(); + StringFunctions.reverseWithStringBuilder(string); + after = System.nanoTime(); + System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); + System.gc(); + + System.out.println("Reversing a string with StringBuilder built-in reverse method."); + before = System.nanoTime(); + StringFunctions.reverseWithStringBuilderBuiltinMethod(string); + after = System.nanoTime(); + System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); + System.gc(); + + System.out.println("Reversing a string with swaps."); + before = System.nanoTime(); + StringFunctions.reverseWithSwaps(string); + after = System.nanoTime(); + System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); + System.gc(); + + System.out.println("Reversing a string with XOR."); + before = System.nanoTime(); + StringFunctions.reverseWithXOR(string); + after = System.nanoTime(); + System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); + System.gc(); + } + + // REVERSE WORDS IN A STRING + { + String string = "Could you pretty please reverse this sentence"; + System.out.println("Reversing a string using additional array."); + long before = System.nanoTime(); + StringFunctions.reverseWordsByCharWithAdditionalStorage(string); + long after = System.nanoTime(); + System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); + System.gc(); + + System.out.println("Reversing a string using StringTokenizer with additional storage."); + before = System.nanoTime(); + StringFunctions.reverseWordsUsingStringTokenizerWithAdditionalStorage(string); + after = System.nanoTime(); + System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); + System.gc(); + + System.out.println("Reversing a string using split with additional storage."); + before = System.nanoTime(); + StringFunctions.reverseWordsUsingStringTokenizerWithAdditionalStorage(string); + after = System.nanoTime(); + System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); + System.gc(); + + System.out.println("Reversing a string in-place."); + before = System.nanoTime(); + StringFunctions.reverseWordsInPlace(string); + after = System.nanoTime(); + System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); + System.gc(); + } + + // PALINDROME + { + String string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + System.out.println("Is Palindrome with additional storage?"); + long before = System.nanoTime(); + StringFunctions.isPalindromeWithAdditionalStorage(string); + long after = System.nanoTime(); + System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); + System.gc(); + + System.out.println("Is Palindrome in-place?"); + before = System.nanoTime(); + StringFunctions.isPalindromeInPlace(string); + after = System.nanoTime(); + System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); + System.gc(); + + string = "ABCDEFGHIJKLMNOPQRSTUVWXYZZYXWVUTSRQPONMLKJIHGFEDCBA"; + System.out.println("Is Palindrome with additional storage?"); + before = System.nanoTime(); + StringFunctions.isPalindromeWithAdditionalStorage(string); + after = System.nanoTime(); + System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); + System.gc(); + + System.out.println("Is Palindrome in-place?"); + before = System.nanoTime(); + StringFunctions.isPalindromeInPlace(string); + after = System.nanoTime(); + System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); + System.gc(); + } + + // COMBINATIONS + { + String string = "abc"; + System.out.println("All possible subsets."); + long before = System.nanoTime(); + StringFunctions.generateSubsets(string); + long after = System.nanoTime(); + System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); + System.gc(); + } + + // Edit Distance + { + String string1 = "kitten"; + String string2 = "sitting"; + System.out.println("Edit Distance"); + long before = System.nanoTime(); + StringFunctions.levenshteinDistance(string1, string2); + long after = System.nanoTime(); + System.out.println("Computed in " + FORMAT.format(after - before) + " ns"); + System.out.println(); + System.gc(); + } + } +} From 2c14c179e4368e77d919ce452bef4dbfe28b120b Mon Sep 17 00:00:00 2001 From: denghongshuai Date: Sun, 19 Jan 2020 17:13:04 +0800 Subject: [PATCH 47/61] TEST --- .classpath | 7 -- .idea/.gitignore | 2 + .idea/.name | 1 + .idea/inspectionProfiles/Project_Default.xml | 36 +++++++++ .idea/misc.xml | 6 ++ .idea/modules.xml | 8 ++ .idea/vcs.xml | 6 ++ .project | 17 ----- .settings/org.eclipse.jdt.core.prefs | 12 --- JavaAlgorithmsImplementation.iml | 27 +++++++ .../algorithms/data_structures/AVLTree.java | 55 +++++++++----- .../data_structures/BinaryHeap.java | 7 +- .../algorithms/data_structures/KdTree.java | 55 +++++++++----- .../data_structures/PatriciaTrie.java | 73 +++++++++++++------ 14 files changed, 216 insertions(+), 96 deletions(-) delete mode 100644 .classpath create mode 100644 .idea/.gitignore create mode 100644 .idea/.name create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml delete mode 100644 .project delete mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 JavaAlgorithmsImplementation.iml diff --git a/.classpath b/.classpath deleted file mode 100644 index 43952db6..00000000 --- a/.classpath +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..5c98b428 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,2 @@ +# Default ignored files +/workspace.xml \ No newline at end of file diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 00000000..9db94d5f --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +JavaAlgorithmsImplementation \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 00000000..6560a989 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,36 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..84da703c --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..6257a3e4 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..35eb1ddf --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.project b/.project deleted file mode 100644 index 3cd55b5c..00000000 --- a/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - JavaAlgorithmsImplementation - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 21101703..00000000 --- a/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,12 +0,0 @@ -#Thu Dec 15 14:40:25 EST 2011 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.6 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.6 diff --git a/JavaAlgorithmsImplementation.iml b/JavaAlgorithmsImplementation.iml new file mode 100644 index 00000000..e1cf479a --- /dev/null +++ b/JavaAlgorithmsImplementation.iml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/com/jwetherell/algorithms/data_structures/AVLTree.java b/src/com/jwetherell/algorithms/data_structures/AVLTree.java index ceff11f9..9e1a8fae 100644 --- a/src/com/jwetherell/algorithms/data_structures/AVLTree.java +++ b/src/com/jwetherell/algorithms/data_structures/AVLTree.java @@ -124,12 +124,15 @@ protected Node removeValue(T value) { // Find the parent of the replacement node to re-factor the // height/balance of the tree AVLNode nodeToRefactor = null; - if (replacementNode != null) + if (replacementNode != null) { nodeToRefactor = (AVLNode) replacementNode.parent; - if (nodeToRefactor == null) + } + if (nodeToRefactor == null) { nodeToRefactor = (AVLNode) nodeToRemoved.parent; - if (nodeToRefactor != null && nodeToRefactor.equals(nodeToRemoved)) + } + if (nodeToRefactor != null && nodeToRefactor.equals(nodeToRemoved)) { nodeToRefactor = (AVLNode) replacementNode; + } // Replace the node replaceNodeWithNode(nodeToRemoved, replacementNode); @@ -163,17 +166,20 @@ private void balanceAfterDelete(AVLNode node) { if (lesser >= greater) { rotateRight(node); node.updateHeight(); - if (node.parent != null) + if (node.parent != null) { ((AVLNode) node.parent).updateHeight(); + } } else { rotateLeft(node.lesser); rotateRight(node); AVLNode p = (AVLNode) node.parent; - if (p.lesser != null) + if (p.lesser != null) { ((AVLNode) p.lesser).updateHeight(); - if (p.greater != null) + } + if (p.greater != null) { ((AVLNode) p.greater).updateHeight(); + } p.updateHeight(); } } else if (balanceFactor == 2) { @@ -184,17 +190,20 @@ private void balanceAfterDelete(AVLNode node) { if (greater >= lesser) { rotateLeft(node); node.updateHeight(); - if (node.parent != null) + if (node.parent != null) { ((AVLNode) node.parent).updateHeight(); + } } else { rotateRight(node.greater); rotateLeft(node); AVLNode p = (AVLNode) node.parent; - if (p.lesser != null) + if (p.lesser != null) { ((AVLNode) p.lesser).updateHeight(); - if (p.greater != null) + } + if (p.greater != null) { ((AVLNode) p.greater).updateHeight(); + } p.updateHeight(); } } @@ -207,8 +216,9 @@ private void balanceAfterDelete(AVLNode node) { @Override protected boolean validateNode(Node node) { boolean bst = super.validateNode(node); - if (!bst) + if (!bst) { return false; + } AVLNode avlNode = (AVLNode) node; int balanceFactor = avlNode.getBalanceFactor(); @@ -221,16 +231,19 @@ protected boolean validateNode(Node node) { } else { AVLNode avlNodeLesser = (AVLNode) avlNode.lesser; int lesserHeight = 1; - if (avlNodeLesser != null) + if (avlNodeLesser != null) { lesserHeight = avlNodeLesser.height; + } AVLNode avlNodeGreater = (AVLNode) avlNode.greater; int greaterHeight = 1; - if (avlNodeGreater != null) + if (avlNodeGreater != null) { greaterHeight = avlNodeGreater.height; + } - if (avlNode.height == (lesserHeight + 1) || avlNode.height == (greaterHeight + 1)) + if (avlNode.height == (lesserHeight + 1) || avlNode.height == (greaterHeight + 1)) { return true; + } return false; } @@ -335,14 +348,16 @@ public String toString() { protected static class AVLTreePrinter { public static > String getString(AVLTree tree) { - if (tree.root == null) + if (tree.root == null) { return "Tree has no nodes."; + } return getString((AVLNode) tree.root, "", true); } public static > String getString(AVLNode node) { - if (node == null) + if (node == null) { return "Sub-tree has no nodes."; + } return getString(node, "", true); } @@ -353,10 +368,12 @@ private static > String getString(AVLNode node, Strin List> children = null; if (node.lesser != null || node.greater != null) { children = new ArrayList>(2); - if (node.lesser != null) + if (node.lesser != null) { children.add(node.lesser); - if (node.greater != null) + } + if (node.greater != null) { children.add(node.greater); + } } if (children != null) { for (int i = 0; i < children.size() - 1; i++) { @@ -371,4 +388,8 @@ private static > String getString(AVLNode node, Strin return builder.toString(); } } + + public static void main(String[] args) { + System.out.println("this is a test"); + } } diff --git a/src/com/jwetherell/algorithms/data_structures/BinaryHeap.java b/src/com/jwetherell/algorithms/data_structures/BinaryHeap.java index 2ea57687..4ec2e0bd 100644 --- a/src/com/jwetherell/algorithms/data_structures/BinaryHeap.java +++ b/src/com/jwetherell/algorithms/data_structures/BinaryHeap.java @@ -552,8 +552,11 @@ private void replaceNode(Node node) { if (node.right!=null) node.right.parent = lastNode; if (node.equals(root)) { - if (!lastNode.equals(root)) root = lastNode; - else root = null; + if (!lastNode.equals(root)) { + root = lastNode; + } else { + root = null; + } } size--; diff --git a/src/com/jwetherell/algorithms/data_structures/KdTree.java b/src/com/jwetherell/algorithms/data_structures/KdTree.java index 378dad83..9674a0ca 100644 --- a/src/com/jwetherell/algorithms/data_structures/KdTree.java +++ b/src/com/jwetherell/algorithms/data_structures/KdTree.java @@ -34,8 +34,9 @@ public class KdTree { public int compare(XYZPoint o1, XYZPoint o2) { if (o1.x < o2.x) return -1; - if (o1.x > o2.x) + if (o1.x > o2.x) { return 1; + } return 0; } }; @@ -47,10 +48,12 @@ public int compare(XYZPoint o1, XYZPoint o2) { */ @Override public int compare(XYZPoint o1, XYZPoint o2) { - if (o1.y < o2.y) + if (o1.y < o2.y) { return -1; - if (o1.y > o2.y) + } + if (o1.y > o2.y) { return 1; + } return 0; } }; @@ -62,10 +65,12 @@ public int compare(XYZPoint o1, XYZPoint o2) { */ @Override public int compare(XYZPoint o1, XYZPoint o2) { - if (o1.z < o2.z) + if (o1.z < o2.z) { return -1; - if (o1.z > o2.z) + } + if (o1.z > o2.z) { return 1; + } return 0; } }; @@ -107,12 +112,13 @@ private static KdNode createNode(List list, int k, int depth) { return null; int axis = depth % k; - if (axis == X_AXIS) + if (axis == X_AXIS) { Collections.sort(list, X_COMPARATOR); - else if (axis == Y_AXIS) + } else if (axis == Y_AXIS) { Collections.sort(list, Y_COMPARATOR); - else + } else { Collections.sort(list, Z_COMPARATOR); + } KdNode node = null; if (list.size() > 0) { @@ -205,8 +211,9 @@ public boolean add(T value) { * @return True if tree contains value. */ public boolean contains(T value) { - if (value == null) + if (value == null) { return false; + } KdNode node = getNode(this, value); return (node != null); @@ -421,8 +428,9 @@ private static final void searchNode(T value, KdNode boolean lineIntersectsCube = ((valuePlusDistance <= nodePoint) ? true : false); // Continue down lesser branch - if (lineIntersectsCube) + if (lineIntersectsCube) { searchNode(value, lesser, K, results, examined); + } } if (greater != null && !examined.contains(greater)) { examined.add(greater); @@ -442,8 +450,9 @@ private static final void searchNode(T value, KdNode boolean lineIntersectsCube = ((valuePlusDistance >= nodePoint) ? true : false); // Continue down greater branch - if (lineIntersectsCube) + if (lineIntersectsCube) { searchNode(value, greater, K, results, examined); + } } } @@ -499,10 +508,12 @@ public KdNode(int k, int depth, XYZPoint id) { public static int compareTo(int depth, int k, XYZPoint o1, XYZPoint o2) { int axis = depth % k; - if (axis == X_AXIS) + if (axis == X_AXIS) { return X_COMPARATOR.compare(o1, o2); - if (axis == Y_AXIS) + } + if (axis == Y_AXIS) { return Y_COMPARATOR.compare(o1, o2); + } return Z_COMPARATOR.compare(o1, o2); } @@ -519,10 +530,12 @@ public int hashCode() { */ @Override public boolean equals(Object obj) { - if (obj == null) + if (obj == null) { return false; - if (!(obj instanceof KdNode)) + } + if (!(obj instanceof KdNode)) { return false; + } KdNode kdNode = (KdNode) obj; if (this.compareTo(kdNode) == 0) @@ -606,10 +619,12 @@ public int hashCode() { */ @Override public boolean equals(Object obj) { - if (obj == null) + if (obj == null) { return false; - if (!(obj instanceof XYZPoint)) + } + if (!(obj instanceof XYZPoint)) { return false; + } XYZPoint xyzPoint = (XYZPoint) obj; return compareTo(xyzPoint) == 0; @@ -621,11 +636,13 @@ public boolean equals(Object obj) { @Override public int compareTo(XYZPoint o) { int xComp = X_COMPARATOR.compare(this, o); - if (xComp != 0) + if (xComp != 0) { return xComp; + } int yComp = Y_COMPARATOR.compare(this, o); - if (yComp != 0) + if (yComp != 0) { return yComp; + } int zComp = Z_COMPARATOR.compare(this, o); return zComp; } diff --git a/src/com/jwetherell/algorithms/data_structures/PatriciaTrie.java b/src/com/jwetherell/algorithms/data_structures/PatriciaTrie.java index 1e9ec3f6..cfe64503 100644 --- a/src/com/jwetherell/algorithms/data_structures/PatriciaTrie.java +++ b/src/com/jwetherell/algorithms/data_structures/PatriciaTrie.java @@ -336,19 +336,27 @@ public int size() { public boolean validate() { java.util.Set keys = new java.util.HashSet(); Node node = root; - if (node!=null && !validate(node,"",keys)) return false; + if (node!=null && !validate(node,"",keys)) { + return false; + } return (keys.size()==size()); } private boolean validate(Node node, String string, java.util.Set keys) { StringBuilder builder = new StringBuilder(string); - if (node.string!=null) builder.append(node.string); + if (node.string!=null) { + builder.append(node.string); + } String s = builder.toString(); if (node.type == WHITE) { C c = (C)s; - if (c==null) return false; - if (keys.contains(c)) return false; + if (c==null) { + return false; + } + if (keys.contains(c)) { + return false; + } keys.add(c); } for (int i=0; i= childrenSize) return null; + if (index >= childrenSize) { + return null; + } return children[index]; } @@ -464,8 +476,9 @@ protected Node getChildBeginningWithChar(char c) { Node node = null; for (int i = 0; i < this.childrenSize; i++) { Node child = this.children[i]; - if (child.string[0] == c) + if (child.string[0] == c) { return child; + } } return node; } @@ -477,7 +490,9 @@ protected Node getChildBeginningWithChar(char c) { public String toString() { StringBuilder builder = new StringBuilder(); String output = null; - if (string != null) output = String.valueOf(string); + if (string != null) { + output = String.valueOf(string); + } builder.append("string = ").append((output != null) ? output : "NULL").append("\n"); builder.append("type = ").append(type).append("\n"); return builder.toString(); @@ -488,10 +503,14 @@ public String toString() { */ @Override public int compareTo(Node node) { - if (node == null) return -1; + if (node == null) { + return -1; + } int length = string.length; - if (node.string.length < length) length = node.string.length; + if (node.string.length < length) { + length = node.string.length; + } for (int i = 0; i < length; i++) { Character a = string[i]; Character b = node.string[i]; @@ -499,11 +518,17 @@ public int compareTo(Node node) { if (c != 0) return c; } - if (this.type == BLACK && node.type == WHITE) return -1; - else if (node.type == BLACK && this.type == WHITE) return 1; + if (this.type == BLACK && node.type == WHITE) { + return -1; + } else if (node.type == BLACK && this.type == WHITE) { + return 1; + } - if (this.getChildrenSize() < node.getChildrenSize()) return -1; - else if (this.getChildrenSize() > node.getChildrenSize()) return 1; + if (this.getChildrenSize() < node.getChildrenSize()) { + return -1; + } else if (this.getChildrenSize() > node.getChildrenSize()) { + return 1; + } return 0; } @@ -536,11 +561,9 @@ protected static String getString(Node node, String pre String thisString = null; if (node.string != null) thisString = String.valueOf(node.string); String fullString = ((previousString != null) ? previousString : "") + thisString; - builder.append(prefix - + (isTail ? "└── " : "├── ") - + ((thisString != null) ? "[" + ((node.type == WHITE) ? "white" : "black") + "] " - + ((node.type == WHITE) ? "(" + thisString + ") " + fullString : thisString) : "[" - + ((node.type == WHITE) ? "white" : "black") + "]") + "\n"); + builder.append(prefix).append(isTail ? "└── " : "├── ").append((thisString != null) ? "[" + ((node.type == WHITE) ? "white" : "black") + "] " + + ((node.type == WHITE) ? "(" + thisString + ") " + fullString : thisString) : "[" + + ((node.type == WHITE) ? "white" : "black") + "]").append("\n"); if (node.children != null) { for (int i = 0; i < node.getChildrenSize() - 1; i++) { builder.append(getString(node.getChild(i), prefix + (isTail ? " " : "│ "), thisString, false)); @@ -621,8 +644,12 @@ protected PatriciaTrieIterator(PatriciaTrie trie) { private void getNodesWhichRepresentsWords(PatriciaTrie.Node node, String string, java.util.Map nodesMap) { StringBuilder builder = new StringBuilder(string); - if (node.string!=null) builder.append(node.string); - if (node.type == PatriciaTrie.WHITE) nodesMap.put(node,builder.toString()); //Terminating + if (node.string!=null) { + builder.append(node.string); + } + if (node.type == PatriciaTrie.WHITE) { + nodesMap.put(node,builder.toString()); //Terminating + } for (int i=0; i Date: Sun, 19 Jan 2020 17:22:58 +0800 Subject: [PATCH 48/61] TEST --- src/com/gw/myalgo/HelloAlgo.java | 7 +++ .../algorithms/data_structures/KdTree.java | 58 ++++++++++++------- .../algorithms/search/BinarySearch.java | 15 +++-- .../algorithms/strings/test/Strings.java | 3 +- 4 files changed, 56 insertions(+), 27 deletions(-) create mode 100644 src/com/gw/myalgo/HelloAlgo.java diff --git a/src/com/gw/myalgo/HelloAlgo.java b/src/com/gw/myalgo/HelloAlgo.java new file mode 100644 index 00000000..ea2a9aa4 --- /dev/null +++ b/src/com/gw/myalgo/HelloAlgo.java @@ -0,0 +1,7 @@ +package com.gw.myalgo; + +public class HelloAlgo { + public static void main(String[] args) { + System.out.println("Hello, idea algo"); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/KdTree.java b/src/com/jwetherell/algorithms/data_structures/KdTree.java index 9674a0ca..aac6bced 100644 --- a/src/com/jwetherell/algorithms/data_structures/KdTree.java +++ b/src/com/jwetherell/algorithms/data_structures/KdTree.java @@ -108,8 +108,9 @@ public KdTree(List list) { * @return node created. */ private static KdNode createNode(List list, int k, int depth) { - if (list == null || list.size() == 0) + if (list == null || list.size() == 0) { return null; + } int axis = depth % k; if (axis == X_AXIS) { @@ -128,8 +129,9 @@ private static KdNode createNode(List list, int k, int depth) { List more = new ArrayList(list.size() - 1); // Process list to see where each non-median point lies for (int i = 0; i < list.size(); i++) { - if (i == medianIndex) + if (i == medianIndex) { continue; + } XYZPoint p = list.get(i); if (KdNode.compareTo(depth, k, p, node.id) <= 0) { less.add(p); @@ -169,8 +171,9 @@ private static KdNode createNode(List list, int k, int depth) { * @return True if successfully added to tree. */ public boolean add(T value) { - if (value == null) + if (value == null) { return false; + } if (root == null) { root = new KdNode(value); @@ -229,8 +232,9 @@ public boolean contains(T value) { * @return KdNode or NULL if not found */ private static final KdNode getNode(KdTree tree, T value) { - if (tree == null || tree.root == null || value == null) + if (tree == null || tree.root == null || value == null) { return null; + } KdNode node = tree.root; while (true) { @@ -260,12 +264,14 @@ private static final KdNode getNode(KdTree tree, * @return True if value was removed from the tree. */ public boolean remove(T value) { - if (value == null) + if (value == null) { return false; + } KdNode node = getNode(this, value); - if (node == null) + if (node == null) { return false; + } KdNode parent = node.parent; if (parent != null) { @@ -293,10 +299,11 @@ public boolean remove(T value) { } else { // root List nodes = getTree(node); - if (nodes.size() > 0) + if (nodes.size() > 0) { root = createNode(nodes, node.k, node.depth); - else + } else { root = null; + } } return true; @@ -311,8 +318,9 @@ public boolean remove(T value) { */ private static final List getTree(KdNode root) { List list = new ArrayList(); - if (root == null) + if (root == null) { return list; + } if (root.lesser != null) { list.add(root.lesser.id); @@ -338,8 +346,9 @@ private static final List getTree(KdNode root) { */ @SuppressWarnings("unchecked") public Collection nearestNeighbourSearch(int K, T value) { - if (value == null) + if (value == null) { return null; + } // Map used for results TreeSet results = new TreeSet(new EuclideanComparator(value)); @@ -375,8 +384,9 @@ public Collection nearestNeighbourSearch(int K, T value) { // Load up the collection of the results Collection collection = new ArrayList(K); - for (KdNode kdNode : results) + for (KdNode kdNode : results) { collection.add((T) kdNode.id); + } return Collections.unmodifiableCollection(collection); } @@ -393,8 +403,9 @@ private static final void searchNode(T value, KdNode } Double nodeDistance = node.id.euclideanDistance(value); if (nodeDistance.compareTo(lastDistance) < 0) { - if (results.size() == K && lastNode != null) + if (results.size() == K && lastNode != null) { results.remove(lastNode); + } results.add(node); } else if (nodeDistance.equals(lastDistance)) { results.add(node); @@ -479,10 +490,11 @@ public EuclideanComparator(XYZPoint point) { public int compare(KdNode o1, KdNode o2) { Double d1 = point.euclideanDistance(o1.id); Double d2 = point.euclideanDistance(o2.id); - if (d1.compareTo(d2) < 0) + if (d1.compareTo(d2) < 0) { return -1; - else if (d2.compareTo(d1) < 0) + } else if (d2.compareTo(d1) < 0) { return 1; + } return o1.id.compareTo(o2.id); } }; @@ -566,9 +578,9 @@ public String toString() { public static class XYZPoint implements Comparable { - private double x = Double.NEGATIVE_INFINITY; - private double y = Double.NEGATIVE_INFINITY; - private double z = Double.NEGATIVE_INFINITY; + public double x = Double.NEGATIVE_INFINITY; + public double y = Double.NEGATIVE_INFINITY; + public double z = Double.NEGATIVE_INFINITY; public XYZPoint(double x, double y) { this.x = x; @@ -665,8 +677,9 @@ public String toString() { protected static class TreePrinter { public static String getString(KdTree tree) { - if (tree.root == null) + if (tree.root == null) { return "Tree has no nodes."; + } return getString(tree.root, "", true); } @@ -675,8 +688,9 @@ private static String getString(KdNode node, String prefix, boolean isTail) { if (node.parent != null) { String side = "left"; - if (node.parent.greater != null && node.id.equals(node.parent.greater.id)) + if (node.parent.greater != null && node.id.equals(node.parent.greater.id)) { side = "right"; + } builder.append(prefix + (isTail ? "└── " : "├── ") + "[" + side + "] " + "depth=" + node.depth + " id=" + node.id + "\n"); } else { @@ -685,10 +699,12 @@ private static String getString(KdNode node, String prefix, boolean isTail) { List children = null; if (node.lesser != null || node.greater != null) { children = new ArrayList(2); - if (node.lesser != null) + if (node.lesser != null) { children.add(node.lesser); - if (node.greater != null) + } + if (node.greater != null) { children.add(node.greater); + } } if (children != null) { for (int i = 0; i < children.size() - 1; i++) { diff --git a/src/com/jwetherell/algorithms/search/BinarySearch.java b/src/com/jwetherell/algorithms/search/BinarySearch.java index 5c731430..7ec85d01 100644 --- a/src/com/jwetherell/algorithms/search/BinarySearch.java +++ b/src/com/jwetherell/algorithms/search/BinarySearch.java @@ -19,8 +19,9 @@ public static final int find(int value, int[] array, boolean optimize) { private static int recursiveFind(int value, int start, int end, boolean optimize) { if (start == end) { int lastValue = sorted[start]; // start==end - if (value == lastValue) + if (value == lastValue) { return start; // start==end + } return Integer.MAX_VALUE; } @@ -29,23 +30,27 @@ private static int recursiveFind(int value, int start, int end, boolean optimize int middle = low + ((high - low) / 2); int middleValue = sorted[middle]; - if (value == middleValue) + if (value == middleValue) { return middle; + } if (value > middleValue) { - if (optimize && (end - middle) <= SWITCH_TO_BRUTE_FORCE) + if (optimize && (end - middle) <= SWITCH_TO_BRUTE_FORCE) { return linearSearch(value, middle + 1, end); + } return recursiveFind(value, middle + 1, end, optimize); } - if (optimize && (end - middle) <= SWITCH_TO_BRUTE_FORCE) + if (optimize && (end - middle) <= SWITCH_TO_BRUTE_FORCE) { return linearSearch(value, start, middle - 1); + } return recursiveFind(value, start, middle - 1, optimize); } private static final int linearSearch(int value, int start, int end) { for (int i = start; i <= end; i++) { int iValue = sorted[i]; - if (value == iValue) + if (value == iValue) { return i; + } } return Integer.MAX_VALUE; } diff --git a/src/com/jwetherell/algorithms/strings/test/Strings.java b/src/com/jwetherell/algorithms/strings/test/Strings.java index 714f5a82..b52a11aa 100644 --- a/src/com/jwetherell/algorithms/strings/test/Strings.java +++ b/src/com/jwetherell/algorithms/strings/test/Strings.java @@ -89,8 +89,9 @@ public void testEditDistance() { private static final String print(String[] strings) { StringBuilder builder = new StringBuilder(); - for (String s : strings) + for (String s : strings) { builder.append(s).append(' '); + } return builder.toString(); } } From 9098c2ad343f79fe426915e19cf41d188cce7f1a Mon Sep 17 00:00:00 2001 From: denghongshuai Date: Sun, 19 Jan 2020 17:26:40 +0800 Subject: [PATCH 49/61] TEST --- bin/com/gw/myalgo/HelloAlgo.class | Bin 0 -> 563 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 bin/com/gw/myalgo/HelloAlgo.class diff --git a/bin/com/gw/myalgo/HelloAlgo.class b/bin/com/gw/myalgo/HelloAlgo.class new file mode 100644 index 0000000000000000000000000000000000000000..9e65f28df6bff3166ec212a5312a9367d4babbb4 GIT binary patch literal 563 zcmZ`$O;5r=5Pi!>OKSxL0r3+&p)vMi;sIk~OpJ#{O)y+MEwHIe+O8=@!_U%#CLa6& z{wU+L7?A|`FthXC?AtfHpI`4E0FJP0Lc^+o3aUBOOst`d1dJ7>rrx$W`5wL4KL1Gk-A$U~PT$_r=)v!ljgUtGx8LH<|vFjlglBd252 z!WOm}iV1trkORRRu?rnL78+5?ylPFT9d$d0y28viAoc@<$3gvI8)OfZ4 literal 0 HcmV?d00001 From db13fdd0c811a9a943e42639b47e68c8cdeee4ab Mon Sep 17 00:00:00 2001 From: denghongshuai Date: Sun, 19 Jan 2020 17:28:54 +0800 Subject: [PATCH 50/61] TEST --- src/com/jwetherell/algorithms/data_structures/AVLTree.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/com/jwetherell/algorithms/data_structures/AVLTree.java b/src/com/jwetherell/algorithms/data_structures/AVLTree.java index 9e1a8fae..fd2e783a 100644 --- a/src/com/jwetherell/algorithms/data_structures/AVLTree.java +++ b/src/com/jwetherell/algorithms/data_structures/AVLTree.java @@ -389,7 +389,4 @@ private static > String getString(AVLNode node, Strin } } - public static void main(String[] args) { - System.out.println("this is a test"); - } } From 22d27371bf7dcf841575219011720459cf22b275 Mon Sep 17 00:00:00 2001 From: denghongshuai Date: Sun, 19 Jan 2020 18:31:21 +0800 Subject: [PATCH 51/61] TEST --- JavaAlgorithmsImplementation.iml | 32 +- Test Results - Sorts_testInsertionSorts.html | 614 ++++++++++++++++++ lib/apiguardian-api-1.0.0.jar | Bin 0 -> 2164 bytes lib/junit-4.11.jar | Bin 0 -> 245039 bytes lib/junit-4_4.3.1.jar | Bin 116824 -> 0 bytes lib/junit-jupiter-5.4.2.jar | Bin 0 -> 5904 bytes lib/junit-jupiter-api-5.4.2.jar | Bin 0 -> 134167 bytes lib/junit-jupiter-engine-5.4.2.jar | Bin 0 -> 177798 bytes lib/junit-jupiter-params-5.4.2.jar | Bin 0 -> 511865 bytes lib/junit-platform-commons-1.4.2.jar | Bin 0 -> 89363 bytes lib/junit-platform-engine-1.4.2.jar | Bin 0 -> 141848 bytes lib/opentest4j-1.1.1.jar | Bin 0 -> 7121 bytes .../algorithms/data_structures/BTree.java | 73 ++- .../jwetherell/algorithms/sorts/HeapSort.java | 5 +- .../algorithms/sorts/test/Sorts.java | 9 +- 15 files changed, 703 insertions(+), 30 deletions(-) create mode 100644 Test Results - Sorts_testInsertionSorts.html create mode 100644 lib/apiguardian-api-1.0.0.jar create mode 100644 lib/junit-4.11.jar delete mode 100644 lib/junit-4_4.3.1.jar create mode 100644 lib/junit-jupiter-5.4.2.jar create mode 100644 lib/junit-jupiter-api-5.4.2.jar create mode 100644 lib/junit-jupiter-engine-5.4.2.jar create mode 100644 lib/junit-jupiter-params-5.4.2.jar create mode 100644 lib/junit-platform-commons-1.4.2.jar create mode 100644 lib/junit-platform-engine-1.4.2.jar create mode 100644 lib/opentest4j-1.1.1.jar diff --git a/JavaAlgorithmsImplementation.iml b/JavaAlgorithmsImplementation.iml index e1cf479a..108a2c04 100644 --- a/JavaAlgorithmsImplementation.iml +++ b/JavaAlgorithmsImplementation.iml @@ -11,13 +11,39 @@ + - + + + + + + + + + + - + + + + + + + + + + + + + + + + + - + diff --git a/Test Results - Sorts_testInsertionSorts.html b/Test Results - Sorts_testInsertionSorts.html new file mode 100644 index 00000000..3f6d761a --- /dev/null +++ b/Test Results - Sorts_testInsertionSorts.html @@ -0,0 +1,614 @@ + + + + + Test Results — Sorts.testInsertionSorts + + + + + + + + + +

+ +
+
    + &quot;C:\Program Files\Java\jdk\bin\java.exe&quot; -ea -Didea.test.cyclic.buffer.size=1048576 -javaagent:D:\program\intelliJ\lib\idea_rt.jar=58805:D:\program\intelliJ\bin -Dfile.encoding=UTF-8 -classpath &quot;D:\program\intelliJ\lib\idea_rt.jar;D:\program\intelliJ\plugins\junit\lib\junit-rt.jar;D:\program\intelliJ\plugins\junit\lib\junit5-rt.jar;D:\program\ideaworkspace\java-algo\bin;C:\Program Files\Java\jdk\jre\lib\charsets.jar;C:\Program Files\Java\jdk\jre\lib\deploy.jar;C:\Program Files\Java\jdk\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk\jre\lib\javaws.jar;C:\Program Files\Java\jdk\jre\lib\jce.jar;C:\Program Files\Java\jdk\jre\lib\jfr.jar;C:\Program Files\Java\jdk\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk\jre\lib\jsse.jar;C:\Program Files\Java\jdk\jre\lib\management-agent.jar;C:\Program Files\Java\jdk\jre\lib\plugin.jar;C:\Program Files\Java\jdk\jre\lib\resources.jar;C:\Program Files\Java\jdk\jre\lib\rt.jar;D:\program\intelliJ\lib\hamcrest-core-1.3.jar;D:\program\ideaworkspace\java-algo\lib\junit-jupiter-5.4.2.jar;D:\program\ideaworkspace\java-algo\lib\junit-jupiter-api-5.4.2.jar;D:\program\ideaworkspace\java-algo\lib\apiguardian-api-1.0.0.jar;D:\program\ideaworkspace\java-algo\lib\opentest4j-1.1.1.jar;D:\program\ideaworkspace\java-algo\lib\junit-platform-commons-1.4.2.jar;D:\program\ideaworkspace\java-algo\lib\junit-jupiter-params-5.4.2.jar;D:\program\ideaworkspace\java-algo\lib\junit-jupiter-engine-5.4.2.jar;D:\program\ideaworkspace\java-algo\lib\junit-platform-engine-1.4.2.jar;D:\program\ideaworkspace\java-algo\lib\junit-4.11.jar&quot; com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 com.jwetherell.algorithms.sorts.test.Sorts,testInsertionSorts +Process finished with exit code 0 + +
  • + +
    201 ms
    +
    passedSorts.testInsertionSorts
    +
      +
    • + +
    • +
    +
  • +
+
+
+ + + diff --git a/lib/apiguardian-api-1.0.0.jar b/lib/apiguardian-api-1.0.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..6cbff70f2246125cbb47a6fd417b11e209d8b1e6 GIT binary patch literal 2164 zcmWIWW@h1HVBp|jsEX6_W&i>v5CH_7Kki zS)s3^pQoE^aEP9-Tj>Pv?862EE$`X>v&%+zwaERb%$nqMQZYBvcYSK^+U5h>dX&U} zz1OzpRpDinZ86#W`|O(p16?_rzb@qlWg49cHhtUv-bn0kW|x=COs#2GZM^tKz2MdX zhr_mgVUxGlPB1A+|9VBSw$bjzn%kR=b)&buK3Ou$u92VVq^nz{!ifFS&`2Rio(+LJUfgy-8ZfAkl*n{@%6F974G_(tfwXa z3wcf09nS9Co|1ew~XB{MM(uX<2?fXqZz4`gHLk+EJ?IvMDYt3XGn;Lzh3;HeT^l2}q&te2dV zSX|s2Qty8`L7?u`u5H>+uR9!5Tg35-?G($w_}M$SOe2HXBGq^O2$w9K)^l!3ul^(P zi4!|6X8gF#pSq_ylE;PR_Lp`3@89iwzIWf-^YQWZ3=s~BY?6_(-woF%#T;dpE!5c* zdC6c+a6zZBT$aa%`Xz}yf0KDVzxkUixnUnVaq1VjXNTOadVl#;QeQm(3U3dei6-n@YSv!Vjk5^NW_^42 zPpa4SpGz&ymPLGy`?V%;@dKI35<5=KPP^kEcRobm=aHi^Y-%6x9LT+6XwVbL%xRXK zGbtxXV(NwZu=y<+YcKMwc<*6V?DhNCwZ8D|iQA6YS9wKP*{W}3FMhsv<>tRdt(CVf z7XGrC;xs9g>4|Wx{k5+r*ZFUh_xY%>!pV*2x&b5SbsX#X zXetuToYvQKVrFAos))&GH;sp~N8XQ9# z6yI7e^k^?j34OQV`bszJ7sac**qQx8-zJ=}Y$^GWuB9o&HRWRa^^*6OcGb-C5?1r< zFIjr;sO`h&1+G4gWww7$xN)7lkD9quatnHA0t=-pz=SP}J5fVYb8C>V|7{0>T5iQ> zt97^3nB@NK(qgeqSQ)OjKxM_m2A95-Ay2o=Sh@8?r1JXSBk`{n+ApwQ^(tD_ROZe% zgU!~)`S+yHzU!ZVe;@OYjvbn--zTao$%gfAr z?ke@ldUDvV9fr4lRaaQO+5i7;^%{fcJ-#l9y$_;m*B|z|Z6Y(Zb))9#)yuCvJ2LA| z+0)hQHU%+qaeL;)noevodd=Sccvsk0$Hc-Z;jT*QYKxE9wD#KsEEEmhW+MDEXU@)Z zDOyhZ)~cuc@>lFBo#^#aec$y+*Ii|{>!zP{$&s|b!+Egx$LS5n=f-?_el{H*rPtoiHQpWVFY4*3cF$wWfB6#z=Y2joBnZUD9{bDP_3rBSlFv&%37_J< zIJ>@5p>=BJ=Lf&Sg!Jl`Ps`tB)B3i4|9881R^u&^bt`VNwI8)PP|VnUM(^jE!$!jA zKm0MgDC2CoC*d^LV#zg+RL?6PTi+2Oy;w2gcw71GdwajFYc=1eQPEv~24n z=WeNE4De=T5@E(&F99PK2m~13I)Z3;ErqTPy_Nzg27x7wnm`h+4XMsTHvyy?xvU29 zAr_|s6B($K#is*Qazg;fshv!*Qv0IM`GwEzGB literal 0 HcmV?d00001 diff --git a/lib/junit-4.11.jar b/lib/junit-4.11.jar new file mode 100644 index 0000000000000000000000000000000000000000..aaf74448492932e95902b40a70c7a4da5bad4744 GIT binary patch literal 245039 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

^K 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 Zm9-%!eZV646_hI`4?(783XX*6{{TREv-ki2 literal 0 HcmV?d00001 diff --git a/lib/junit-4_4.3.1.jar b/lib/junit-4_4.3.1.jar deleted file mode 100644 index 5d9ccff6ea557410d2ea1cd7a5cdfa4a7e7a6040..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116824 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%0DCk#@)q8Vd`{jJOW8)z}w`m$M( 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 ZDN#t^jSbW>0sh$s)`xc{fQ1*>{{sO0X-5D6 literal 0 HcmV?d00001 diff --git a/lib/junit-jupiter-engine-5.4.2.jar b/lib/junit-jupiter-engine-5.4.2.jar new file mode 100644 index 0000000000000000000000000000000000000000..3444a9806a99db8ad323c9e567b3c827de043634 GIT binary patch literal 177798 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
(Z?|Qbr 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%0DAmKFzl1*YWoR>13%$UJj1PWM_QN$z+XSXl*ER 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 literal 0 HcmV?d00001 diff --git a/lib/junit-platform-commons-1.4.2.jar b/lib/junit-platform-commons-1.4.2.jar new file mode 100644 index 0000000000000000000000000000000000000000..270552518e79807b8562ae8909a5490e3246ef71 GIT binary patch literal 89363 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

Qc}iZ4S&{lDw7OAj(} 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 XR#O%2_GJM8*tgfwE!n-~cfbA*vLA6= literal 0 HcmV?d00001 diff --git a/src/com/jwetherell/algorithms/data_structures/BTree.java b/src/com/jwetherell/algorithms/data_structures/BTree.java index 02fae012..edc29aab 100644 --- a/src/com/jwetherell/algorithms/data_structures/BTree.java +++ b/src/com/jwetherell/algorithms/data_structures/BTree.java @@ -156,7 +156,9 @@ private void split(Node node) { parent.addChild(left); parent.addChild(right); - if (parent.numberOfKeys() > maxKeySize) split(parent); + if (parent.numberOfKeys() > maxKeySize) { + split(parent); + } } } @@ -181,7 +183,9 @@ public T remove(T value) { * @return True if value was removed from the tree. */ private T remove(T value, Node node) { - if (node == null) return null; + if (node == null) { + return null; + } T removed = null; int index = node.indexOf(value); @@ -258,10 +262,11 @@ private Node getNode(T value) { while (node != null) { T lesser = node.getKey(0); if (value.compareTo(lesser) < 0) { - if (node.numberOfChildren() > 0) + if (node.numberOfChildren() > 0) { node = node.getChild(0); - else + } else { node = null; + } continue; } @@ -269,10 +274,11 @@ private Node getNode(T value) { int last = size - 1; T greater = node.getKey(last); if (value.compareTo(greater) > 0) { - if (node.numberOfChildren() > size) + if (node.numberOfChildren() > size) { node = node.getChild(size); - else + } else { node = null; + } continue; } @@ -431,8 +437,9 @@ private boolean combined(Node node) { private int getIndexOfPreviousValue(Node node, T value) { for (int i = 1; i < node.numberOfKeys(); i++) { T t = node.getKey(i); - if (t.compareTo(value) >= 0) + if (t.compareTo(value) >= 0) { return i - 1; + } } return node.numberOfKeys() - 1; } @@ -449,8 +456,9 @@ private int getIndexOfPreviousValue(Node node, T value) { private int getIndexOfNextValue(Node node, T value) { for (int i = 0; i < node.numberOfKeys(); i++) { T t = node.getKey(i); - if (t.compareTo(value) >= 0) + if (t.compareTo(value) >= 0) { return i; + } } return node.numberOfKeys() - 1; } @@ -468,7 +476,9 @@ public int size() { */ @Override public boolean validate() { - if (root == null) return true; + if (root == null) { + return true; + } return validateNode(root); } @@ -486,8 +496,9 @@ private boolean validateNode(Node node) { for (int i = 1; i < keySize; i++) { T p = node.getKey(i - 1); T n = node.getKey(i); - if (p.compareTo(n) > 0) + if (p.compareTo(n) > 0) { return false; + } } } int childrenSize = node.numberOfChildren(); @@ -539,17 +550,20 @@ private boolean validateNode(Node node) { T p = node.getKey(i - 1); T n = node.getKey(i); Node c = node.getChild(i); - if (p.compareTo(c.getKey(0)) > 0) + if (p.compareTo(c.getKey(0)) > 0) { return false; - if (n.compareTo(c.getKey(c.numberOfKeys() - 1)) < 0) + } + if (n.compareTo(c.getKey(c.numberOfKeys() - 1)) < 0) { return false; + } } for (int i = 0; i < node.childrenSize; i++) { Node c = node.getChild(i); boolean valid = this.validateNode(c); - if (!valid) + if (!valid) { return false; + } } return true; @@ -600,7 +614,9 @@ private T getKey(int index) { private int indexOf(T value) { for (int i = 0; i < keysSize; i++) { - if (keys[i].equals(value)) return i; + if (keys[i].equals(value)) { + return i; + } } return -1; } @@ -613,7 +629,9 @@ private void addKey(T value) { private T removeKey(T value) { T removed = null; boolean found = false; - if (keysSize == 0) return null; + if (keysSize == 0) { + return null; + } for (int i = 0; i < keysSize; i++) { if (keys[i].equals(value)) { found = true; @@ -631,8 +649,9 @@ private T removeKey(T value) { } private T removeKey(int index) { - if (index >= keysSize) + if (index >= keysSize) { return null; + } T value = keys[index]; for (int i = index + 1; i < keysSize; i++) { // shift the rest of the keys down @@ -648,15 +667,17 @@ private int numberOfKeys() { } private Node getChild(int index) { - if (index >= childrenSize) + if (index >= childrenSize) { return null; + } return children[index]; } private int indexOf(Node child) { for (int i = 0; i < childrenSize; i++) { - if (children[i].equals(child)) + if (children[i].equals(child)) { return i; + } } return -1; } @@ -688,8 +709,9 @@ private boolean removeChild(Node child) { } private Node removeChild(int index) { - if (index >= childrenSize) + if (index >= childrenSize) { return null; + } Node value = children[index]; children[index] = null; for (int i = index + 1; i < childrenSize; i++) { @@ -716,8 +738,9 @@ public String toString() { for (int i = 0; i < numberOfKeys(); i++) { T value = getKey(i); builder.append(value); - if (i < numberOfKeys() - 1) + if (i < numberOfKeys() - 1) { builder.append(", "); + } } builder.append("]\n"); @@ -726,8 +749,9 @@ public String toString() { for (int i = 0; i < parent.numberOfKeys(); i++) { T value = parent.getKey(i); builder.append(value); - if (i < parent.numberOfKeys() - 1) + if (i < parent.numberOfKeys() - 1) { builder.append(", "); + } } builder.append("]\n"); } @@ -743,7 +767,9 @@ public String toString() { private static class TreePrinter { public static > String getString(BTree tree) { - if (tree.root == null) return "Tree has no nodes."; + if (tree.root == null) { + return "Tree has no nodes."; + } return getString(tree.root, "", true); } @@ -754,8 +780,9 @@ private static > String getString(Node node, String p for (int i = 0; i < node.numberOfKeys(); i++) { T value = node.getKey(i); builder.append(value); - if (i < node.numberOfKeys() - 1) + if (i < node.numberOfKeys() - 1) { builder.append(", "); + } } builder.append("\n"); diff --git a/src/com/jwetherell/algorithms/sorts/HeapSort.java b/src/com/jwetherell/algorithms/sorts/HeapSort.java index 6df121af..1f0b8851 100644 --- a/src/com/jwetherell/algorithms/sorts/HeapSort.java +++ b/src/com/jwetherell/algorithms/sorts/HeapSort.java @@ -35,11 +35,14 @@ private static > void sortHeap(T[] unsorted) { while (true) { int left = (i * 2) + 1; if (left >= index) // node has no left child + { break; + } int right = left + 1; if (right >= index) { // node has a left child, but no right child - if (unsorted[left].compareTo(unsorted[i]) > 0) + if (unsorted[left].compareTo(unsorted[i]) > 0) { swap(left, i, unsorted); // if left child is greater than node + } break; } T ithElement = unsorted[i]; diff --git a/src/com/jwetherell/algorithms/sorts/test/Sorts.java b/src/com/jwetherell/algorithms/sorts/test/Sorts.java index e4039fbe..197900a7 100644 --- a/src/com/jwetherell/algorithms/sorts/test/Sorts.java +++ b/src/com/jwetherell/algorithms/sorts/test/Sorts.java @@ -34,12 +34,14 @@ public class Sorts { } sorted = new Integer[SIZE]; - for (i = 0; i < sorted.length; i++) + for (i = 0; i < sorted.length; i++) { sorted[i] = i; + } reverse = new Integer[SIZE]; - for (i = (reverse.length - 1); i >= 0; i--) + for (i = (reverse.length - 1); i >= 0; i--) { reverse[i] = (SIZE - 1) - i; + } } @Test @@ -156,8 +158,9 @@ public void testAmericanFlagSorts() { private static final boolean check(Integer[] array) { for (int i = 1; iarray[i]) + if (array[i-1]>array[i]) { return false; + } } return true; } From f031c0ebb941b2f7aeaddec4c0764d39ced9bb07 Mon Sep 17 00:00:00 2001 From: denghongshuai Date: Sun, 19 Jan 2020 18:36:15 +0800 Subject: [PATCH 52/61] TEST --- src/com/jwetherell/algorithms/sorts/test/Sorts.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/com/jwetherell/algorithms/sorts/test/Sorts.java b/src/com/jwetherell/algorithms/sorts/test/Sorts.java index 197900a7..11af4c2f 100644 --- a/src/com/jwetherell/algorithms/sorts/test/Sorts.java +++ b/src/com/jwetherell/algorithms/sorts/test/Sorts.java @@ -2,8 +2,10 @@ import static org.junit.Assert.assertTrue; +import java.util.Arrays; import java.util.Random; +import com.sun.deploy.util.ArrayUtil; import org.junit.Test; import com.jwetherell.algorithms.sorts.AmericanFlagSort; @@ -48,7 +50,7 @@ public class Sorts { public void testInsertionSorts() { // Insertion sort Integer[] result = InsertionSort.sort(unsorted.clone()); - assertTrue("Inerstion sort unsorted error. result="+print(result), check(result)); + System.out.println(Arrays.toString(result)); result = InsertionSort.sort(sorted.clone()); assertTrue("Inerstion sort sorted error. result="+print(result), check(result)); result = InsertionSort.sort(reverse.clone()); From 07d9312e484bb9d905f2facccc1d2c2d1271a8cc Mon Sep 17 00:00:00 2001 From: denghongshuai Date: Mon, 20 Jan 2020 11:55:19 +0800 Subject: [PATCH 53/61] TEST --- .gitignore | 10 +++ .../data_structures/BinarySearchTree.java | 81 ++++++++++++------- .../algorithms/sorts/test/Sorts.java | 2 +- 3 files changed, 65 insertions(+), 28 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..73977323 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +# Created by .ignore support plugin (hsz.mobi) +### Example user template template +### Example user template + +# IntelliJ project files +.idea +*.iml +out +gen +*.html diff --git a/src/com/jwetherell/algorithms/data_structures/BinarySearchTree.java b/src/com/jwetherell/algorithms/data_structures/BinarySearchTree.java index 779f7fdd..19543b4b 100644 --- a/src/com/jwetherell/algorithms/data_structures/BinarySearchTree.java +++ b/src/com/jwetherell/algorithms/data_structures/BinarySearchTree.java @@ -171,8 +171,9 @@ protected void rotateLeft(Node node) { node.parent = greater; node.greater = lesser; - if (lesser != null) + if (lesser != null) { lesser.parent = node; + } if (parentPosition != null) { if (parentPosition == Position.LEFT) { @@ -214,8 +215,9 @@ protected void rotateRight(Node node) { node.parent = lesser; node.lesser = greater; - if (greater != null) + if (greater != null) { greater.parent = node; + } if (parentPosition != null) { if (parentPosition == Position.LEFT) { @@ -240,16 +242,18 @@ protected void rotateRight(Node node) { * sub-tree or NULL if startingNode has no greater children. */ protected Node getGreatest(Node startingNode) { - if (startingNode == null) + if (startingNode == null) { return null; + } Node greater = startingNode.greater; while (greater != null && greater.id != null) { Node node = greater.greater; - if (node != null && node.id != null) + if (node != null && node.id != null) { greater = node; - else + } else { break; + } } return greater; } @@ -264,16 +268,18 @@ protected Node getGreatest(Node startingNode) { * sub-tree or NULL if startingNode has no lesser children. */ protected Node getLeast(Node startingNode) { - if (startingNode == null) + if (startingNode == null) { return null; + } Node lesser = startingNode.lesser; while (lesser != null && lesser.id != null) { Node node = lesser.lesser; - if (node != null && node.id != null) + if (node != null && node.id != null) { lesser = node; - else + } else { break; + } } return lesser; } @@ -296,7 +302,9 @@ public T remove(T value) { */ protected Node removeValue(T value) { Node nodeToRemoved = this.getNode(value); - if (nodeToRemoved != null) nodeToRemoved = removeNode(nodeToRemoved); + if (nodeToRemoved != null) { + nodeToRemoved = removeNode(nodeToRemoved); + } return nodeToRemoved; } @@ -341,12 +349,14 @@ protected Node getReplacementNode(Node nodeToRemoved) { // greatest/least on deletion if (modifications % 2 != 0) { replacement = this.getGreatest(nodeToRemoved.lesser); - if (replacement == null) + if (replacement == null) { replacement = nodeToRemoved.lesser; + } } else { replacement = this.getLeast(nodeToRemoved.greater); - if (replacement == null) + if (replacement == null) { replacement = nodeToRemoved.greater; + } } modifications++; } @@ -388,12 +398,14 @@ protected void replaceNodeWithNode(Node nodeToRemoved, Node replacementNod Node replacementParentGreater = replacementParent.greater; if (replacementParentLesser != null && replacementParentLesser.equals(replacementNode)) { replacementParent.lesser = replacementNodeGreater; - if (replacementNodeGreater != null) + if (replacementNodeGreater != null) { replacementNodeGreater.parent = replacementParent; + } } else if (replacementParentGreater != null && replacementParentGreater.equals(replacementNode)) { replacementParent.greater = replacementNodeLesser; - if (replacementNodeLesser != null) + if (replacementNodeLesser != null) { replacementNodeLesser.parent = replacementParent; + } } } } @@ -404,16 +416,19 @@ protected void replaceNodeWithNode(Node nodeToRemoved, Node replacementNod if (parent == null) { // Replacing the root node root = replacementNode; - if (root != null) + if (root != null) { root.parent = null; + } } else if (parent.lesser != null && (parent.lesser.id.compareTo(nodeToRemoved.id) == 0)) { parent.lesser = replacementNode; - if (replacementNode != null) + if (replacementNode != null) { replacementNode.parent = parent; + } } else if (parent.greater != null && (parent.greater.id.compareTo(nodeToRemoved.id) == 0)) { parent.greater = replacementNode; - if (replacementNode != null) + if (replacementNode != null) { replacementNode.parent = parent; + } } size--; } @@ -440,7 +455,9 @@ public int size() { */ @Override public boolean validate() { - if (root == null) return true; + if (root == null) { + return true; + } return validateNode(root); } @@ -458,17 +475,20 @@ protected boolean validateNode(Node node) { boolean lesserCheck = true; if (lesser != null && lesser.id != null) { lesserCheck = (lesser.id.compareTo(node.id) <= 0); - if (lesserCheck) + if (lesserCheck) { lesserCheck = validateNode(lesser); + } } - if (!lesserCheck) + if (!lesserCheck) { return false; + } boolean greaterCheck = true; if (greater != null && greater.id != null) { greaterCheck = (greater.id.compareTo(node.id) > 0); - if (greaterCheck) + if (greaterCheck) { greaterCheck = validateNode(greater); + } } return greaterCheck; } @@ -485,14 +505,17 @@ public T[] getBFS() { Node node = root; while (node != null) { values[count++] = node.id; - if (node.lesser != null) + if (node.lesser != null) { queue.add(node.lesser); - if (node.greater != null) + } + if (node.greater != null) { queue.add(node.greater); - if (!queue.isEmpty()) + } + if (!queue.isEmpty()) { node = queue.remove(); - else + } else { node = null; + } } return values; } @@ -674,10 +697,12 @@ private static > String getString(Node node, String p List> children = null; if (node.lesser != null || node.greater != null) { children = new ArrayList>(2); - if (node.lesser != null) + if (node.lesser != null) { children.add(node.lesser); - if (node.greater != null) + } + if (node.greater != null) { children.add(node.greater); + } } if (children != null) { for (int i = 0; i < children.size() - 1; i++) { @@ -749,7 +774,9 @@ private static class BinarySearchTreeIterator> implement protected BinarySearchTreeIterator(BinarySearchTree tree) { this.tree = tree; - if (tree.root!=null) toVisit.add(tree.root); + if (tree.root!=null) { + toVisit.add(tree.root); + } } /** diff --git a/src/com/jwetherell/algorithms/sorts/test/Sorts.java b/src/com/jwetherell/algorithms/sorts/test/Sorts.java index 11af4c2f..598d74d1 100644 --- a/src/com/jwetherell/algorithms/sorts/test/Sorts.java +++ b/src/com/jwetherell/algorithms/sorts/test/Sorts.java @@ -21,7 +21,7 @@ public class Sorts { private static final Random RANDOM = new Random(); - private static final int SIZE = 10000; + private static final int SIZE = 10; private static Integer[] unsorted = null; private static Integer[] sorted = null; From a997d4f1a81e1bf8ca6cf3634db6152c2873f6fe Mon Sep 17 00:00:00 2001 From: denghongshuai Date: Mon, 20 Jan 2020 11:57:35 +0800 Subject: [PATCH 54/61] TEST --- .gitignore | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 73977323..2e6c8bb4 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,8 @@ *.iml out gen -*.html +.html +bin/LICENSE +bin/README.md +bin/com/jwetherell/ +bin/lib/ From 795750ef2dc630adab6cc06b5ed90ff092272a56 Mon Sep 17 00:00:00 2001 From: hsdeng Date: Wed, 5 Feb 2020 00:18:17 +0800 Subject: [PATCH 55/61] DH --- JavaAlgorithmsImplementation.iml | 1 + lib/commons-lang3-3.9.jar | Bin 0 -> 503880 bytes src/com/gw/myalgo/sort/SortAlgo.java | 100 ++++++++++++++++++ .../data_structures/BinaryHeap.java | 15 ++- .../algorithms/data_structures/Graph.java | 12 ++- 5 files changed, 120 insertions(+), 8 deletions(-) create mode 100644 lib/commons-lang3-3.9.jar create mode 100644 src/com/gw/myalgo/sort/SortAlgo.java diff --git a/JavaAlgorithmsImplementation.iml b/JavaAlgorithmsImplementation.iml index 108a2c04..77779b49 100644 --- a/JavaAlgorithmsImplementation.iml +++ b/JavaAlgorithmsImplementation.iml @@ -49,5 +49,6 @@ + \ No newline at end of file diff --git a/lib/commons-lang3-3.9.jar b/lib/commons-lang3-3.9.jar new file mode 100644 index 0000000000000000000000000000000000000000..0d896939269b3bf1ce6208a872db1fcabe40e0df GIT binary patch literal 503880 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

    IK%*j;~$_n3KELzVog)j7s6 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

    hfg`&HNio{#m=!Ms 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 G$o>!b*j5h! literal 0 HcmV?d00001 diff --git a/src/com/gw/myalgo/sort/SortAlgo.java b/src/com/gw/myalgo/sort/SortAlgo.java new file mode 100644 index 00000000..dfbbb727 --- /dev/null +++ b/src/com/gw/myalgo/sort/SortAlgo.java @@ -0,0 +1,100 @@ +package com.gw.myalgo.sort; + + +import org.apache.commons.lang3.StringUtils; + +/** + * @author hsden + */ +public class SortAlgo { + + /** + * Bubble sort + * @param arr + */ + public static void bubbleSort(int[] arr) { + if(null == arr || 0 == arr.length){ + return ; + } + + int i, j, tmp; + for(i = 0; i < arr.length - 1; i++){ + for(j = 0; j < arr.length - i - 1; j++){ + if(arr[j] > arr[j+1]){ + tmp = arr[j]; + arr[j] = arr[j+1]; + arr[j+1] = tmp; + } + } + } + + } + + /** + * Select sort + * @param arr + */ + public static void selectSort(int[] arr) { + if(null == arr || 1 >= arr.length){ + return; + } + + + for(int i = 0; i < arr.length -1; i++){ + int smallestIdx = i; + for(int j = i + 1; j < arr.length; j++) { + if(arr[smallestIdx] > arr[j]) { + smallestIdx = j; + } + } + + int tmp = arr[i]; + arr[i] = arr[smallestIdx]; + arr[smallestIdx] = tmp; + } + } + + /** + * Insert sort + * @param arr + */ + public static void insertSort(int[] arr){ + if(null == arr || 1 >= arr.length){ + return; + } + + for(int i = 1; i < arr.length; i++){ + if(arr[i-1] > arr[i]) { + int moveEndIdx = -1; + for (int j = i; j >= 0; j--) { + if (arr[j] < arr[i]) { + moveEndIdx = j; + break; + } + } + + int tmp = arr[i], k; + for (k = i; k > moveEndIdx + 1; k--) { + arr[k] = arr[k - 1]; + } + arr[k] = tmp; + } + } + + + } + + + public static void main(String[] args) { + int[] sortedArr = new int[]{3,1,2,8,4,6,3}; + //bubbleSort(sortedArr); + //selectSort(sortedArr); + insertSort(sortedArr); + + StringBuilder sb = new StringBuilder(); + for(int value : sortedArr){ + sb.append(value + ","); + } + System.out.println(sb.substring(0, sb.length() - 1)); + } +} diff --git a/src/com/jwetherell/algorithms/data_structures/BinaryHeap.java b/src/com/jwetherell/algorithms/data_structures/BinaryHeap.java index 4ec2e0bd..7e4f60b3 100644 --- a/src/com/jwetherell/algorithms/data_structures/BinaryHeap.java +++ b/src/com/jwetherell/algorithms/data_structures/BinaryHeap.java @@ -61,8 +61,9 @@ public static class BinaryHeapArray> implements BinaryHe * @return index of parent node or Integer.MIN_VALUE if no parent. */ private static final int getParentIndex(int index) { - if (index > 0) + if (index > 0) { return (int) Math.floor((index - 1) / 2); + } return Integer.MIN_VALUE; } @@ -134,7 +135,9 @@ protected void heapUp(int nodeIndex) { T value = this.array[nodeIndex]; while (nodeIndex >= 0) { int parentIndex = getParentIndex(nodeIndex); - if (parentIndex < 0) break; + if (parentIndex < 0) { + break; + } T parent = this.array[parentIndex]; if ((type == Type.MIN && parent != null && value.compareTo(parent) < 0) @@ -192,10 +195,14 @@ public void clear() { */ @Override public boolean contains(T value) { - if (array.length == 0) return false; + if (array.length == 0) { + return false; + } for (int i = 0; i < size; i++) { T t = array[i]; - if (t.equals(value)) return true; + if (t.equals(value)) { + return true; + } } return false; } diff --git a/src/com/jwetherell/algorithms/data_structures/Graph.java b/src/com/jwetherell/algorithms/data_structures/Graph.java index 3d497f46..2d645301 100644 --- a/src/com/jwetherell/algorithms/data_structures/Graph.java +++ b/src/com/jwetherell/algorithms/data_structures/Graph.java @@ -127,8 +127,9 @@ public Vertex(T value, int weight) { public Vertex(Vertex vertex) { this(vertex.value, vertex.weight); this.edges = new ArrayList>(); - for (Edge e : vertex.edges) + for (Edge e : vertex.edges) { this.edges.add(new Edge(e)); + } } public T getValue() { @@ -174,18 +175,21 @@ public int hashCode() { @SuppressWarnings("unchecked") @Override public boolean equals(Object v1) { - if (!(v1 instanceof Vertex)) + if (!(v1 instanceof Vertex)) { return false; + } Vertex v = (Vertex) v1; boolean values = this.value.equals(v.value); - if (!values) + if (!values) { return false; + } boolean weight = this.weight == v.weight; - if (!weight) + if (!weight) { return false; + } return true; } From e2649ce1e7efbb79340e74974a8ba76be07d9520 Mon Sep 17 00:00:00 2001 From: hsdeng Date: Wed, 5 Feb 2020 10:33:49 +0800 Subject: [PATCH 56/61] DH --- src/com/gw/myalgo/sort/SortAlgo.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/com/gw/myalgo/sort/SortAlgo.java b/src/com/gw/myalgo/sort/SortAlgo.java index dfbbb727..484c560d 100644 --- a/src/com/gw/myalgo/sort/SortAlgo.java +++ b/src/com/gw/myalgo/sort/SortAlgo.java @@ -65,19 +65,17 @@ public static void insertSort(int[] arr){ for(int i = 1; i < arr.length; i++){ if(arr[i-1] > arr[i]) { - int moveEndIdx = -1; - for (int j = i; j >= 0; j--) { - if (arr[j] < arr[i]) { + int moveEndIdx = -1, tmp=arr[i]; + for (int j = i - 1; j >= 0; j--) { + if (arr[j] < tmp) { moveEndIdx = j; break; + } else { + arr[j + 1] = arr[j]; } } - int tmp = arr[i], k; - for (k = i; k > moveEndIdx + 1; k--) { - arr[k] = arr[k - 1]; - } - arr[k] = tmp; + arr[moveEndIdx + 1] = tmp; } } From 8176bc3cdd1f79decdb5f34e41b64c4df6392f46 Mon Sep 17 00:00:00 2001 From: hsdeng Date: Wed, 5 Feb 2020 10:46:04 +0800 Subject: [PATCH 57/61] DH --- src/com/gw/myalgo/sort/SortAlgo.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/com/gw/myalgo/sort/SortAlgo.java b/src/com/gw/myalgo/sort/SortAlgo.java index 484c560d..983e5ddd 100644 --- a/src/com/gw/myalgo/sort/SortAlgo.java +++ b/src/com/gw/myalgo/sort/SortAlgo.java @@ -65,17 +65,16 @@ public static void insertSort(int[] arr){ for(int i = 1; i < arr.length; i++){ if(arr[i-1] > arr[i]) { - int moveEndIdx = -1, tmp=arr[i]; - for (int j = i - 1; j >= 0; j--) { + int j, tmp=arr[i]; + for (j = i - 1; j >= 0; j--) { if (arr[j] < tmp) { - moveEndIdx = j; break; } else { arr[j + 1] = arr[j]; } } - arr[moveEndIdx + 1] = tmp; + arr[j + 1] = tmp; } } @@ -84,7 +83,7 @@ public static void insertSort(int[] arr){ public static void main(String[] args) { - int[] sortedArr = new int[]{3,1,2,8,4,6,3}; + int[] sortedArr = new int[]{1,3,1,2,8,4,6,2}; //bubbleSort(sortedArr); //selectSort(sortedArr); insertSort(sortedArr); From ad3e5b1c20dc5ef2bc08a73b6fdeffe16a186502 Mon Sep 17 00:00:00 2001 From: hsdeng Date: Wed, 5 Feb 2020 22:05:20 +0800 Subject: [PATCH 58/61] DH --- src/com/gw/myalgo/sort/SortAlgo.java | 96 ++++++++++++++++++++++++++-- 1 file changed, 90 insertions(+), 6 deletions(-) diff --git a/src/com/gw/myalgo/sort/SortAlgo.java b/src/com/gw/myalgo/sort/SortAlgo.java index 983e5ddd..4d5a62a3 100644 --- a/src/com/gw/myalgo/sort/SortAlgo.java +++ b/src/com/gw/myalgo/sort/SortAlgo.java @@ -54,6 +54,48 @@ public static void selectSort(int[] arr) { } } + /** + * 2-way select sort + * @param arr + */ + public static void selectSortUpdate(int[] arr) { + if(null == arr || 1 >= arr.length){ + return; + } + + for(int i = 0; i <= arr.length/2 ; i++){ + int minIdx = i, maxIdx = i; + for(int j = i + 1; j < arr.length - i; j++) { + if(arr[minIdx] >= arr[j]) { + minIdx = j; + } + + if(arr[maxIdx] <= arr[j]) { + maxIdx = j; + } + } + + if(minIdx != i) { + int tmp = arr[i]; + arr[i] = arr[minIdx]; + arr[minIdx] = tmp; + if(maxIdx == i){ + maxIdx = minIdx; + } + } + + int n = arr.length -i -1; + if(maxIdx != n) { + int tmp = arr[n]; + arr[n] = arr[maxIdx]; + arr[maxIdx] = tmp; + } + + printArr(arr); + } + } + + /** * Insert sort * @param arr @@ -78,20 +120,62 @@ public static void insertSort(int[] arr){ } } + } + + /** + * Shell sort + * @param arr + */ + public static void shellSortMain(int[] arr){ + + if(null == arr || 1 >= arr.length){ + return; + } + + int segment = arr.length/2; + while(segment >= 1){ + shellInsertSort(arr,segment); + segment = segment/2; + } } + public static void shellInsertSort(int[] arr, int dk){ + if(null == arr || 1 >= arr.length || 0 >= dk){ + return; + } - public static void main(String[] args) { - int[] sortedArr = new int[]{1,3,1,2,8,4,6,2}; - //bubbleSort(sortedArr); - //selectSort(sortedArr); - insertSort(sortedArr); + for(int i=dk; i < arr.length; ++i) { + if(arr[i] < arr[i -dk]) { + int j = i -dk, x=arr[i]; + arr[i]=arr[j]; + while(j >= 0 && x < arr[j]){ + arr[j+dk] = arr[j]; + j -= dk; + } + arr[j+dk] = x; + } + } + } + public static void printArr(int[] arr){ StringBuilder sb = new StringBuilder(); - for(int value : sortedArr){ + for(int value : arr){ sb.append(value + ","); } System.out.println(sb.substring(0, sb.length() - 1)); } + + public static void main(String[] args) { + //5,7,9,10,2,32,4,4,3 + int[] sortedArr = new int[]{5,7,9,10,2,32,4,4,3}; + printArr(sortedArr); + //bubbleSort(sortedArr); + //selectSort(sortedArr); + selectSortUpdate(sortedArr); + //insertSort(sortedArr); + //shellSortMain(sortedArr); + + printArr(sortedArr); + } } From 30121cb98498895dce3b4b31a3b3b026de620c9f Mon Sep 17 00:00:00 2001 From: hsdeng Date: Tue, 11 Feb 2020 20:47:23 +0800 Subject: [PATCH 59/61] DH --- .../datastructure/SingleLinkedList.java | 290 ++++++++++++++++++ 1 file changed, 290 insertions(+) create mode 100644 src/com/gw/myalgo/datastructure/SingleLinkedList.java diff --git a/src/com/gw/myalgo/datastructure/SingleLinkedList.java b/src/com/gw/myalgo/datastructure/SingleLinkedList.java new file mode 100644 index 00000000..cb728d08 --- /dev/null +++ b/src/com/gw/myalgo/datastructure/SingleLinkedList.java @@ -0,0 +1,290 @@ +package com.gw.myalgo.datastructure; + +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; + +/** + * Single Linked list + * @author hsden + */ +public class SingleLinkedList implements List { + + /** + * size of the linked list, the default size is 0 + */ + private transient int size = 0; + + /** + * head node of the linked list + */ + private Node headNode; + + /** + * tail node of the linked list + */ + private Node tailNode; + + public SingleLinkedList(){ + + } + + public SingleLinkedList(E firstItem) { + Node firstNode = new Node(firstItem,null); + this.headNode = firstNode; + this.tailNode = firstNode; + this.size += 1; + } + + + @Override + public int size() { + return size; + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public boolean contains(Object o) { + return false; + } + + @Override + public Iterator iterator() { + return null; + } + + @Override + public Object[] toArray() { + return new Object[0]; + } + + @Override + public T[] toArray(T[] a) { + return null; + } + + @Override + public boolean add(E e) { + boolean result = false; + if(null == e){ + return result; + } else { + Node newNode = new Node(e,null); + if(size == 0){ + this.headNode = newNode; + this.tailNode = newNode; + } else { + this.tailNode.next = newNode; + this.tailNode =newNode; + } + + this.size += 1; + } + + + return result; + } + + @Override + public boolean remove(Object o) { + return false; + } + + @Override + public boolean containsAll(Collection c) { + return false; + } + + @Override + public boolean addAll(Collection c) { + return false; + } + + @Override + public boolean addAll(int index, Collection c) { + return false; + } + + @Override + public boolean removeAll(Collection c) { + return false; + } + + @Override + public boolean retainAll(Collection c) { + return false; + } + + @Override + public void clear() { + + } + + @Override + public E get(int index) { + return null; + } + + @Override + public E set(int index, E element) { + return null; + } + + @Override + public void add(int index, E element) { + + } + + @Override + public E remove(int index) { + return null; + } + + @Override + public int indexOf(Object o) { + return 0; + } + + @Override + public int lastIndexOf(Object o) { + return 0; + } + + @Override + public ListIterator listIterator() { + return null; + } + + @Override + public ListIterator listIterator(int index) { + return null; + } + + @Override + public List subList(int fromIndex, int toIndex) { + return null; + } + + + public void printList() { + if(this.size > 0) { + Node tmpNode = this.headNode; + + while(null != tmpNode) { + System.out.print(tmpNode.item + " "); + tmpNode = tmpNode.next; + } + System.out.println(); + } + } + + /** + * reverse the list + * head->1->2->3->4->6->7,after reverse + * head->7->6->5->4->3->2->1 + */ + public void simpleReverseList() { + if(this.size <= 1) { + return; + } + + Node newTailNode = headNode, tempHeadNextNode, tempTailNextNode; + while(newTailNode.next != null){ + newTailNode = newTailNode.next; + } + + while(headNode != newTailNode) { + tempHeadNextNode = headNode.next; + + tempTailNextNode = newTailNode.next; + newTailNode.next = headNode; + newTailNode.next.next = tempTailNextNode; + headNode = tempHeadNextNode; + } + } + + /** + * reverse the list 就地逆序 + * head->1->2->3->4->6->7,after reverse + * head->7->6->5->4->3->2->1 + */ + public void localReverseList() { + if(size <= 1) { + return; + } + + Node cur = headNode.next, pre = headNode, next; + pre.next = null; + while(cur!= null) { + next = cur.next; + + headNode = cur; + cur.next = pre; + pre = cur; + cur = next; + } + + } + + /** + * reverse the list by recursion 递归逆序 + * head->1->2->3->4->6->7,after reverse + * head->7->6->5->4->3->2->1 + */ + public Node recurseReverse(Node head) { + Node newHead; + if(null != head && head.next != null) { + newHead = recurseReverse(head.next); + + head.next.next = head; + head.next = null; + + } else { + newHead = head; + } + + return newHead; + } + + + public void recurseReverseList() { + if(this.size <= 1) { + return; + } + + headNode =recurseReverse(headNode); + + } + + private static class Node { + E item; + Node next; + + Node(E element, Node next) { + this.item = element; + this.next = next; + } + } + + + public static void main(String[] args) { + SingleLinkedList list = new SingleLinkedList<>(2); + + list.add(3); + list.add(4); + list.add(5); + list.add(7); + + list.printList(); + list.recurseReverseList(); + list.printList(); + } + + +} + From 7dd763da8cff349ae9ed923c540c1ca422e051c1 Mon Sep 17 00:00:00 2001 From: hsdeng Date: Wed, 12 Feb 2020 18:24:24 +0800 Subject: [PATCH 60/61] DH --- .../datastructure/SingleLinkedList.java | 153 +++++++++++++++++- 1 file changed, 150 insertions(+), 3 deletions(-) diff --git a/src/com/gw/myalgo/datastructure/SingleLinkedList.java b/src/com/gw/myalgo/datastructure/SingleLinkedList.java index cb728d08..ca6222ea 100644 --- a/src/com/gw/myalgo/datastructure/SingleLinkedList.java +++ b/src/com/gw/myalgo/datastructure/SingleLinkedList.java @@ -1,5 +1,6 @@ package com.gw.myalgo.datastructure; +import java.security.Principal; import java.util.Collection; import java.util.Iterator; import java.util.List; @@ -171,6 +172,9 @@ public List subList(int fromIndex, int toIndex) { } + /** + * 正序打印List + */ public void printList() { if(this.size > 0) { Node tmpNode = this.headNode; @@ -183,6 +187,32 @@ public void printList() { } } + /** + * 倒序打印列表, 递归实现 + */ + public void printListByRecursion() { + if(this.size <= 0) { + return; + } + + printRecursion(this.headNode); + System.out.println(); + } + + public void printRecursion(Node head) { + if(null == head) { + return; + } + + if(head.next != null) { + printRecursion(head.next); + } + + System.out.print(head.item + " "); + + } + + /** * reverse the list * head->1->2->3->4->6->7,after reverse @@ -209,7 +239,7 @@ public void simpleReverseList() { } /** - * reverse the list 就地逆序 + * reverse the list 就地逆序,需要记忆pre * head->1->2->3->4->6->7,after reverse * head->7->6->5->4->3->2->1 */ @@ -258,9 +288,121 @@ public void recurseReverseList() { } headNode =recurseReverse(headNode); + } + + /** + * reverse the list 插入逆序,每次插入最前面 + * head->1->2->3->4->6->7,after reverse + * head->7->6->5->4->3->2->1 + */ + public void insertReverseList() { + if(this.size <= 1) { + return; + } + + Node cur = headNode.next, next; + headNode.next = null; + while(cur != null) { + next = cur.next; + + cur.next = headNode; + headNode = cur; + cur = next; + } } + /** + * 给定一个没有排序的链表,去掉其重复项 , 并保留原顺序, + * 例如链表 1->3->1->5->5->7, + * 去掉重复项后变为 1->3->5->7 + */ + public void removeRepeatItemFromUnorderedListM1(){ + if(this.size <= 1) { + return; + } + + Node cur = headNode.next, innerCur, pre = headNode; + while(null != cur) { + E curItem = cur.item; + + innerCur = headNode; + while(null != innerCur && cur != innerCur) { + if(innerCur.item.equals(curItem)) { + break; + } else { + innerCur = innerCur.next; + } + } + + if(innerCur != null && cur != innerCur && innerCur.item.equals(cur.item)) { + pre.next = cur.next; + cur = cur.next; + } else { + pre = cur; + cur = cur.next; + } + } + + } + + + /** + * 给定一个没有排序的链表,去掉其重复项 , 并保留原顺序, + * 例如链表 1->3->1->5->5->7, + * 去掉重复项后变为 1->3->5->7 + * + * 递归法 + */ + public void removeRepeatItemFromUnorderedListM2(){ + if(size <= 1) { + return; + } + + removeRepeatItemByRecursion(this.headNode); + } + + public void removeRepeatItemByRecursion(Node node) { + if(null == node || null == node.next ) { + return; + } else { + removeRepeatItemByRecursion(node.next); + + Node next = node.next, pre=node; + while(null != next) { + if(node.item.equals(next.item)) { + pre.next = next.next; + break; + } + + pre = next; + next = next.next; + } + } + } + + + /** + * 给定一个有序的链表,去掉其重复项 , 并保留原顺序, + * 例如链表 1->3->3->5->5->7, + * 去掉重复项后变为 1->3->5->7 + * + */ + public void removeRepeatItemFromOrderedListM1(){ + if(this.size <= 1) { + return; + } + + Node cur = headNode.next, pre= headNode; + while(cur != null) { + if(cur.item.equals(pre.item)) { + pre.next = cur.next; + } else { + pre = cur; + } + cur = cur.next; + } + } private static class Node { E item; Node next; @@ -275,13 +417,18 @@ private static class Node { public static void main(String[] args) { SingleLinkedList list = new SingleLinkedList<>(2); + list.add(2); + list.add(2); + list.add(3); + list.add(3); list.add(3); - list.add(4); list.add(5); + list.add(5); + list.add(7); list.add(7); list.printList(); - list.recurseReverseList(); + list.removeRepeatItemFromOrderedListM1(); list.printList(); } From b48a0da1619d5281be47ca8f4ba2103be35e95d6 Mon Sep 17 00:00:00 2001 From: denghongshuai Date: Fri, 8 May 2020 19:13:11 +0800 Subject: [PATCH 61/61] test --- src/com/gw/myalgo/gctest/FullGCTest.java | 15 +++++++++++ src/com/gw/myalgo/gctest/GCTest.java | 12 +++++++++ src/com/gw/myalgo/gctest/GCTest1.java | 14 ++++++++++ src/com/gw/myalgo/gctest/JstatTest.java | 18 +++++++++++++ src/com/gw/myalgo/gctest/JstatTest2.java | 30 ++++++++++++++++++++++ src/com/gw/myalgo/gctest/VolatileTest.java | 30 ++++++++++++++++++++++ src/com/gw/myalgo/juc/AbstractTest.java | 8 ++++++ 7 files changed, 127 insertions(+) create mode 100644 src/com/gw/myalgo/gctest/FullGCTest.java create mode 100644 src/com/gw/myalgo/gctest/GCTest.java create mode 100644 src/com/gw/myalgo/gctest/GCTest1.java create mode 100644 src/com/gw/myalgo/gctest/JstatTest.java create mode 100644 src/com/gw/myalgo/gctest/JstatTest2.java create mode 100644 src/com/gw/myalgo/gctest/VolatileTest.java create mode 100644 src/com/gw/myalgo/juc/AbstractTest.java diff --git a/src/com/gw/myalgo/gctest/FullGCTest.java b/src/com/gw/myalgo/gctest/FullGCTest.java new file mode 100644 index 00000000..ad4682e1 --- /dev/null +++ b/src/com/gw/myalgo/gctest/FullGCTest.java @@ -0,0 +1,15 @@ +package com.gw.myalgo.gctest; + +public class FullGCTest { + public static void main(String[] args) { + byte[] array1 = new byte[4 * 1024 * 1024]; + array1 = null; + + byte[] array2 = new byte[2 * 1024 * 1024]; + byte[] array3 = new byte[2 * 1024 * 1024]; + byte[] array4 = new byte[2 * 1024 * 1024]; + byte[] array5 = new byte[128 * 1024]; + + byte[] array6 = new byte[2 * 1024 * 1024]; + } +} diff --git a/src/com/gw/myalgo/gctest/GCTest.java b/src/com/gw/myalgo/gctest/GCTest.java new file mode 100644 index 00000000..ce0faeb8 --- /dev/null +++ b/src/com/gw/myalgo/gctest/GCTest.java @@ -0,0 +1,12 @@ +package com.gw.myalgo.gctest; + +public class GCTest { + public static void main(String[] args) { + byte[] array1 = new byte[1024 * 1024]; + array1 = new byte[1024 * 1024]; + array1 = new byte[1024 * 1024]; + array1 = null; + + byte[] array2 = new byte[2 * 1024 * 1024]; + } +} diff --git a/src/com/gw/myalgo/gctest/GCTest1.java b/src/com/gw/myalgo/gctest/GCTest1.java new file mode 100644 index 00000000..b0d8588f --- /dev/null +++ b/src/com/gw/myalgo/gctest/GCTest1.java @@ -0,0 +1,14 @@ +package com.gw.myalgo.gctest; + +public class GCTest1 { + public static void main(String[] args) { + byte[] array1 = new byte[2 * 1024 * 1024]; + array1 = new byte[2 * 1024 * 1024]; + array1 = new byte[2 * 1024 * 1024]; + + byte[] array2 = new byte[128 * 1024]; + array2 = null; + + byte[] array3 = new byte[2 * 1024 * 1024]; + } +} diff --git a/src/com/gw/myalgo/gctest/JstatTest.java b/src/com/gw/myalgo/gctest/JstatTest.java new file mode 100644 index 00000000..e5939c9d --- /dev/null +++ b/src/com/gw/myalgo/gctest/JstatTest.java @@ -0,0 +1,18 @@ +package com.gw.myalgo.gctest; + +public class JstatTest { + public static void main(String[] args) throws InterruptedException { + Thread.sleep(30000); // main线程休眠30s,以便jstat命令通过PID观察 + while (true) { + loadData(); + } + } + private static void loadData() throws InterruptedException { + byte[] data = null; + for (int i = 0; i < 50; i++) { + data = new byte[100 * 1024]; // 100KB + } + data = null; + Thread.sleep(1000); // 模拟上述操作全部发生在1s内 + } +} diff --git a/src/com/gw/myalgo/gctest/JstatTest2.java b/src/com/gw/myalgo/gctest/JstatTest2.java new file mode 100644 index 00000000..60d66e6c --- /dev/null +++ b/src/com/gw/myalgo/gctest/JstatTest2.java @@ -0,0 +1,30 @@ +package com.gw.myalgo.gctest; + +/** + * -XX:NewSize=209715200 -XX:MaxNewSize=209715200 -XX:InitialHeapSize=314572800 -XX:MaxHeapSize=314572800 -XX:SurvivorRatio=2 -XX:MaxTenuringThreshold=15 -XX:PretenureSizeThreshold=20971520 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:gc-jstat2.log + */ +public class JstatTest2 { + public static void main(String[] args) throws InterruptedException { + Thread.sleep(30000); // main线程休眠30s,以便jstat命令通过PID观察 + + while (true) { + loadData(); + } + } + + private static void loadData() throws InterruptedException { + byte[] data = null; + for (int i = 0; i < 4; i++) { + data = new byte[10 * 1024 * 1024]; // 10MB + } + data = null; + + byte[] data1 = new byte[10 * 1024 * 1024]; + byte[] data2 = new byte[10 * 1024 * 1024]; + + byte[] data3 = new byte[10 * 1024 * 1024]; + data3 = new byte[10 * 1024 * 1024]; + + Thread.sleep(1000); // 模拟上述操作全部发生在1s内 + } +} diff --git a/src/com/gw/myalgo/gctest/VolatileTest.java b/src/com/gw/myalgo/gctest/VolatileTest.java new file mode 100644 index 00000000..d0e556db --- /dev/null +++ b/src/com/gw/myalgo/gctest/VolatileTest.java @@ -0,0 +1,30 @@ +package com.gw.myalgo.gctest; + +import java.util.concurrent.atomic.AtomicInteger; + + +public class VolatileTest { + public static AtomicInteger t = new AtomicInteger(0); + + public static void main(String[] args) throws InterruptedException { + + int tnum = 10; + Thread[] threads = new Thread[tnum]; + for(int i = 0; i < tnum; i++){ + //每个线程对t进行1000次加1的操作 + threads[i] = new Thread(() -> { + for(int j = 0; j < 1000; j++){ + t.incrementAndGet(); + } + System.out.println(Thread.currentThread().getName() + " is over"); + }); + threads[i].start(); + } + + Thread.sleep(1000); + + //打印t的值 + System.out.println(t); + } +} + diff --git a/src/com/gw/myalgo/juc/AbstractTest.java b/src/com/gw/myalgo/juc/AbstractTest.java new file mode 100644 index 00000000..4d49030c --- /dev/null +++ b/src/com/gw/myalgo/juc/AbstractTest.java @@ -0,0 +1,8 @@ +package com.gw.myalgo.juc; + +public abstract class AbstractTest { + + public static void main(String[] args) { + System.out.println("Abstract class can still be executed"); + } +}