From 67e94eff8a00157cb09d05a56f99766bfbb7258f Mon Sep 17 00:00:00 2001
From: Adithya <adithyaofficial99@gmai.com>
Date: Fri, 19 Nov 2021 17:30:50 +0530
Subject: [PATCH 1/4] Radix sort in javascript

---
 src/algorithms/sorting/radix-sort.js | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
 create mode 100644 src/algorithms/sorting/radix-sort.js

diff --git a/src/algorithms/sorting/radix-sort.js b/src/algorithms/sorting/radix-sort.js
new file mode 100644
index 00000000..169376b1
--- /dev/null
+++ b/src/algorithms/sorting/radix-sort.js
@@ -0,0 +1,19 @@
+function radixSort(arr) {
+    // Find the max number and multiply it by 10 to get a number
+    // with no. of digits of max + 1
+    const maxNum = Math.max(...arr) * 10;
+    let divisor = 10;
+    while (divisor < maxNum) {
+       // Create bucket arrays for each of 0-9
+       let buckets = [...Array(10)].map(() => []);
+       // For each number, get the current significant digit and put it in the respective bucket
+       for (let num of arr) {
+          buckets[Math.floor((num % divisor) / (divisor / 10))].push(num);
+       }
+       // Reconstruct the array by concatinating all sub arrays
+       arr = [].concat.apply([], buckets);
+       // Move to the next significant digit
+       divisor *= 10;
+    }
+    return arr;
+ }
\ No newline at end of file

From 9d48a1890e8a1a2510d2ec0a129f013453b6948b Mon Sep 17 00:00:00 2001
From: Adithya <adithyaofficial99@gmai.com>
Date: Fri, 19 Nov 2021 20:12:16 +0530
Subject: [PATCH 2/4] added unit test

---
 src/algorithms/sorting/radix-sort.js | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/algorithms/sorting/radix-sort.js b/src/algorithms/sorting/radix-sort.js
index 169376b1..6072b87e 100644
--- a/src/algorithms/sorting/radix-sort.js
+++ b/src/algorithms/sorting/radix-sort.js
@@ -16,4 +16,6 @@ function radixSort(arr) {
        divisor *= 10;
     }
     return arr;
- }
\ No newline at end of file
+ }
+//  unit test
+console.log(radixSort([5,3,88,235,65,23,4632,234]))
\ No newline at end of file

From 6488de0bdd1e34a3ef6f7da7e39a583a56b350aa Mon Sep 17 00:00:00 2001
From: Adithya <adithyaofficial99@gmai.com>
Date: Fri, 19 Nov 2021 20:15:29 +0530
Subject: [PATCH 3/4] added 2 more unit tests

---
 src/algorithms/sorting/radix-sort.js | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/algorithms/sorting/radix-sort.js b/src/algorithms/sorting/radix-sort.js
index 6072b87e..5e6bd356 100644
--- a/src/algorithms/sorting/radix-sort.js
+++ b/src/algorithms/sorting/radix-sort.js
@@ -18,4 +18,8 @@ function radixSort(arr) {
     return arr;
  }
 //  unit test
-console.log(radixSort([5,3,88,235,65,23,4632,234]))
\ No newline at end of file
+console.log(radixSort([5,3,88,235,65,23,4632,234]))
+// unit test 2
+console.log(radixSort([802, 630, 20, 745, 52, 300, 612, 932, 78, 187]))
+// unit test 3
+console.log(radixSort([45, 2, 56, 2, 5, 6, 34, 1, 56, 89, 33]))
\ No newline at end of file

From c573063b8d1cc8812593cc6cbf8e3c792c955e5f Mon Sep 17 00:00:00 2001
From: Adithya <adithyaofficial99@gmai.com>
Date: Sat, 20 Nov 2021 11:43:19 +0530
Subject: [PATCH 4/4] added separate unit test file

---
 src/algorithms/sorting/radix-sort.test.js | 35 +++++++++++++++++++++++
 1 file changed, 35 insertions(+)
 create mode 100644 src/algorithms/sorting/radix-sort.test.js

diff --git a/src/algorithms/sorting/radix-sort.test.js b/src/algorithms/sorting/radix-sort.test.js
new file mode 100644
index 00000000..1de06da3
--- /dev/null
+++ b/src/algorithms/sorting/radix-sort.test.js
@@ -0,0 +1,35 @@
+const radixSort = require('./radix-sort');
+
+describe('Testing Radix Sort Algorithm', () => {
+    it('should sort with multiple digit elements #1', () => {
+        expect(radixSort([5,3,88,235,65,23,4632,234])).toEqual([3,5,23,65,88,234,235,4632]);
+    });
+
+    it('should sort with multiple digit elements #2', () => {
+        expect(radixSort([802,630,20,745,52,300,612,932,78,187])).toEqual([20,52,78,187,300,612,630,802,932]);
+    });
+
+    it('should sort with duplicated values', () => {
+        expect(radixSort([45,2,56,2,5,6,34,1,56,89,33])).toEqual([1,2,2,5,6,33,34,45,56,56,89]);
+    });
+
+    it('should work with zero numbers', () => {
+        expect(radixSort([])).toEqual([]);
+    });
+
+    it('should work with one number', () => {
+        expect(radixSort([3])).toEqual([3]);
+    });
+
+    it('should sort numbers', () => {
+        expect(radixSort([3, 5, 0])).toEqual([0, 3, 5]);
+    });
+
+    it('should sort with inverse array', () => {
+        expect(radixSort([3, 2, 1])).toEqual([1, 2, 3]);
+    });
+
+    it('should sort with already sorted array', () => {
+        expect(radixSort([1, 2, 3])).toEqual([1, 2, 3]);
+    });
+});
\ No newline at end of file