diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 9bba156..90053af 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -64,68 +64,3 @@ jobs:
- name: Run C++ UnionFind test
run: src/cpp/test/Tree/UnionFind/test_unionfind.sh
-
- java-static-analysis:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
-
- - uses: actions/setup-java@v4
- with:
- distribution: temurin
- java-version: '21'
-
- - name: Run Java static analysis
- run: src/java/test/static_analysis.sh
-
- java:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
-
- - uses: actions/setup-java@v4
- with:
- distribution: temurin
- java-version: '21'
-
- - name: Run Java BFS test
- run: src/java/test/Search/BFS/test_bfs.sh
-
- - name: Run Java DFS test
- run: src/java/test/Search/DFS/test_dfs.sh
-
- - name: Run Java BinarySearch test
- run: src/java/test/Search/test_binary_search.sh
-
- - name: Run Java Knapsack test
- run: src/java/test/DP/test_knapsack.sh
-
- - name: Run Java Dijkstra test
- run: src/java/test/Graph/test_dijkstra.sh
-
- - name: Run Java Floyd test
- run: src/java/test/Graph/Floyd/test_floyd.sh
-
- - name: Run Java Prim test
- run: src/java/test/Graph/test_prim.sh
-
- - name: Run Java GCD test
- run: src/java/test/Math/Calc/test_gcd.sh
-
- - name: Run Java LCM test
- run: src/java/test/Math/Calc/test_lcm.sh
-
- - name: Run Java Primes test
- run: src/java/test/Math/Calc/test_primes.sh
-
- - name: Run Java Combination test
- run: src/java/test/Math/Combination/test_combination.sh
-
- - name: Run Java ModPow test
- run: src/java/test/Math/ModPow/test_modpow.sh
-
- - name: Run Java SegmentTree test
- run: src/java/test/Tree/SegmentTree/test_segmenttree.sh
-
- - name: Run Java UnionFind test
- run: src/java/test/Tree/UnionFind/test_unionfind.sh
diff --git a/README.md b/README.md
index 2afd6b4..20c1d18 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
Implementation of algorithms
-C++ and Java implementations.
+C++ implementations.
#### Algorithms
@@ -26,7 +26,4 @@ C++ and Java implementations.
```
# C++
src/cpp/test//test_.sh
-
-# Java
-src/java/test//test_.sh
```
diff --git a/src/java/lib/DP/Knapsack.java b/src/java/lib/DP/Knapsack.java
deleted file mode 100644
index bd3bc52..0000000
--- a/src/java/lib/DP/Knapsack.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package DP;
-
-public class Knapsack {
-
- // 0-1 Knapsack problem
- // arr[i] = {value, weight}
- // dp[i][j] = max value using first i items with capacity j
- public int[][] knapsack(int[][] arr, int w) {
- int n = arr.length;
- int[][] dp = new int[n + 1][w + 1];
-
- for (int i = 1; i <= n; i++) {
- for (int j = 1; j <= w; j++) {
- dp[i][j] = dp[i - 1][j];
- if (arr[i - 1][1] <= j) {
- dp[i][j] = Math.max(dp[i - 1][j], arr[i - 1][0] + dp[i - 1][j - arr[i - 1][1]]);
- }
- }
- }
-
- return dp;
- }
-}
diff --git a/src/java/lib/Graph/Dijkstra.java b/src/java/lib/Graph/Dijkstra.java
deleted file mode 100644
index 4edf231..0000000
--- a/src/java/lib/Graph/Dijkstra.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// For graphs with non-negative edge costs
-
-package Graph;
-
-import java.util.*;
-
-public class Dijkstra {
-
- public int[] dijkstra(int start, List[] adj) {
- int n = adj.length;
- int[] d = new int[n];
- boolean[] visit = new boolean[n];
- Arrays.fill(d, Integer.MAX_VALUE);
-
- d[start] = 0;
- PriorityQueue pq = new PriorityQueue<>((a, b) -> a[1] - b[1]);
- pq.add(new int[]{start, 0});
-
- while (!pq.isEmpty()) {
- int[] nd = pq.poll();
- int v = nd[0];
-
- visit[v] = true;
-
- if (d[v] < nd[1]) continue;
-
- for (int[] node : adj[v]) {
- int t = node[0];
- if (visit[t]) continue;
- if (d[t] > d[v] + node[1]) {
- d[t] = d[v] + node[1];
- pq.add(new int[]{t, d[t]});
- }
- }
- }
-
- return d;
- }
-}
diff --git a/src/java/lib/Graph/Floyd/Floyd.java b/src/java/lib/Graph/Floyd/Floyd.java
deleted file mode 100644
index bdeb98f..0000000
--- a/src/java/lib/Graph/Floyd/Floyd.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package Graph.Floyd;
-
-public class Floyd {
-
- // Floyd-Warshall. O(|V|^3).
- // Returns true if a negative cycle is detected
- public boolean floyd(int[][] edge) {
- int n = edge.length;
- for (int k = 0; k < n; k++) { // k is the intermediate node from i to j
- for (int i = 0; i < n; i++) {
- if (edge[i][k] == Integer.MAX_VALUE) continue;
- for (int j = 0; j < n; j++) {
- if (edge[k][j] == Integer.MAX_VALUE) continue;
- edge[i][j] = Math.min(edge[i][j], edge[i][k] + edge[k][j]);
- }
- }
- }
- for (int i = 0; i < n; i++) {
- if (edge[i][i] < 0) return true; // negative cycle: self-loop cost becomes negative
- }
- return false;
- }
-}
diff --git a/src/java/lib/Graph/Prim.java b/src/java/lib/Graph/Prim.java
deleted file mode 100644
index ec71838..0000000
--- a/src/java/lib/Graph/Prim.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package Graph;
-
-public class Prim {
-
- // Minimum spanning tree weight using Prim's algorithm
- public int prim(int[][] edge) {
- int n = edge.length;
- int[] d = new int[n]; // distance from start when constructing MST
- int[] p = new int[n]; // parent node when constructing MST
- boolean[] visited = new boolean[n];
-
- for (int i = 0; i < n; i++) {
- d[i] = Integer.MAX_VALUE;
- p[i] = -1;
- }
- d[0] = 0;
- while (true) {
- int minV = Integer.MAX_VALUE;
- int u = -1;
- for (int i = 0; i < n; i++) {
- if (minV > d[i] && !visited[i]) {
- u = i;
- minV = d[i];
- }
- }
- if (u == -1) break;
- visited[u] = true;
- for (int v = 0; v < n; v++) {
- if (!visited[v] && edge[u][v] != Integer.MAX_VALUE) {
- if (d[v] > edge[u][v]) {
- d[v] = edge[u][v];
- p[v] = u;
- }
- }
- }
- }
- int sum = 0;
- for (int i = 0; i < n; i++) {
- if (p[i] != -1) {
- sum += edge[i][p[i]];
- }
- }
- return sum;
- }
-}
diff --git a/src/java/lib/Math/Calc/GCD.java b/src/java/lib/Math/Calc/GCD.java
deleted file mode 100644
index 64478f5..0000000
--- a/src/java/lib/Math/Calc/GCD.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package Math.Calc;
-
-public class GCD {
-
- public long gcd(long c, long d) {
- if (c < d) return gcd(d, c);
- if (d == 0) return c;
- return gcd(d, c % d);
- }
-}
diff --git a/src/java/lib/Math/Calc/LCM.java b/src/java/lib/Math/Calc/LCM.java
deleted file mode 100644
index 0ab08e4..0000000
--- a/src/java/lib/Math/Calc/LCM.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package Math.Calc;
-
-public class LCM {
-
- public long lcm(long c, long d) {
- return c * d / gcd(c, d);
- }
-
- private long gcd(long c, long d) {
- if (c < d) return gcd(d, c);
- if (d == 0) return c;
- return gcd(d, c % d);
- }
-}
diff --git a/src/java/lib/Math/Calc/Primes.java b/src/java/lib/Math/Calc/Primes.java
deleted file mode 100644
index ed9c095..0000000
--- a/src/java/lib/Math/Calc/Primes.java
+++ /dev/null
@@ -1,118 +0,0 @@
-package Math.Calc;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-class Primes {
-
- /**
- * Prime factorization
- * @param n
- * @return map key: prime, value: count
- */
- Map primes(int n) {
- List list = new ArrayList<>();
- Map map = new HashMap<>();
-
- while (n >= 4 && n % 2 == 0) {
- list.add(2);
- n /= 2;
- }
- int d = 3;
- int q = n / d;
- while (q >= d) {
- if (n % d == 0) {
- list.add(d);
- n = q;
- } else {
- d += 2;
- }
- q = n / d;
- }
- list.add(n);
-
- for (int t: list) {
- if (map.containsKey(t)) {
- map.put(t, map.get(t) + 1);
- } else {
- map.put(t, 1);
- }
- }
- return map;
- }
-
- /**
- * List primes up to n
- * O(NloglogN)
- * @param n
- * @return
- */
- List eratosthenes(int n) {
- boolean[] flag = new boolean[n+1];
- int sqrt = (int)Math.sqrt(n);
-
- for (int i=2; i<=sqrt; i++) {
- if (!flag[i]) {
- for (int j=i*2; j<=n; j+=i) {
- flag[j] = true;
- }
- }
- }
-
- List list = new ArrayList<>();
- for (int i=2; i<=n; i++) {
- if (!flag[i]) list.add(i);
- }
- return list;
-
- }
-
- /**
- * List primes up to n
- * @param n
- * @return
- */
- List atkin(int n) {
- boolean[] flag = new boolean[n+1];
- int sqrt = (int)Math.sqrt(n);
-
- flag[0] = flag[1] = false;
- flag[2] = flag[3] = true;
-
- for (int i=1; i<=sqrt; i++) {
- for (int j=1; j<=sqrt; j++) {
- int num = (4 * i * i) + (j * j);
- if (num <= n && (num % 12 == 1 || num % 12 == 5)) {
- flag[num] = !flag[num];
- }
- num = (3 * i * i) + (j * j);
- if (num <= n && (num % 12 == 7)) {
- flag[num] = !flag[num];
- }
- num = (3 * i * i) - (j * j);
- if (i > j && num <= n && (num % 12 == 11)) {
- flag[num] = !flag[num];
- }
- }
- }
-
- for (int i=5; i<=sqrt; i++) {
- if (flag[i]) {
- int x = i * i;
- for (int j=x; j<=n; j+=x) {
- flag[j] = false;
- }
- }
- }
-
- List list = new ArrayList<>();
- for (int i=0; i<=n; i++) {
- if (flag[i]) list.add(i);
- }
- return list;
-
- }
-
-}
diff --git a/src/java/lib/Math/Combination/Combination.java b/src/java/lib/Math/Combination/Combination.java
deleted file mode 100644
index f1c0b9c..0000000
--- a/src/java/lib/Math/Combination/Combination.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package Math.Combination;
-
-public class Combination {
- int n; // number of elements
- int MOD = (int)1e9+7;
- long[] facts;
-
- public Combination(int n, int MOD){
- this.n = n;
- this.MOD = MOD;
- facts = new long[n+1];
- facts[0] = 1;
- for (int i=1; i 0){
- if ((n & 1) == 1){
- sum *= x;
- sum %= MOD;
- }
- x *= x;
- x %= MOD;
- n >>= 1;
- }
- return sum % MOD;
- }
-}
diff --git a/src/java/lib/Search/BFS/BFS.java b/src/java/lib/Search/BFS/BFS.java
deleted file mode 100644
index f0edefc..0000000
--- a/src/java/lib/Search/BFS/BFS.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package Search.BFS;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.ArrayDeque;
-
-public class BFS {
-
- public int[] bfs(int s, List[] adj, int n) {
- int[] d = new int[n];
- for (int i = 0; i < n; i++) d[i] = Integer.MAX_VALUE;
- d[s] = 0;
- ArrayDeque queue = new ArrayDeque<>();
- queue.add(s);
- while (!queue.isEmpty()) {
- int t = queue.peekFirst();
- for (int edge : adj[t]) {
- d[edge] = Math.min(d[edge], d[t] + 1);
- queue.add(edge);
- }
- queue.poll();
- }
- return d;
- }
-}
diff --git a/src/java/lib/Search/BinarySearch.java b/src/java/lib/Search/BinarySearch.java
deleted file mode 100644
index c09b78e..0000000
--- a/src/java/lib/Search/BinarySearch.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package Search;
-
-public class BinarySearch {
-
- public int lowerBound(int[] arr, int value) {
- int left = -1;
- int right = arr.length;
- while (right-left > 1) {
- int mid = (right+left)/2;
- if (arr[mid]>=value) {
- right = mid;
- } else {
- left = mid;
- }
- }
- return right;
- }
-
- public int upperBound(int[] arr, int value) {
- int left = -1;
- int right = arr.length;
- while (right-left > 1) {
- int mid = (right+left)/2;
- if (arr[mid]>value) {
- right = mid;
- } else {
- left = mid;
- }
- }
- return right;
- }
-
-}
\ No newline at end of file
diff --git a/src/java/lib/Search/DFS/DFS.java b/src/java/lib/Search/DFS/DFS.java
deleted file mode 100644
index d515013..0000000
--- a/src/java/lib/Search/DFS/DFS.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package Search.DFS;
-
-import java.util.List;
-
-public class DFS {
-
- private int sec = 0;
-
- public void dfs(int v, List[] edge, boolean[] visit, int[] firstV, int[] endV) {
- firstV[v] = ++sec;
- for (int u : edge[v]) {
- if (!visit[u]) {
- dfs(u, edge, visit, firstV, endV);
- }
- }
- visit[v] = true;
- endV[v] = ++sec;
- }
-}
diff --git a/src/java/lib/Tree/SegmentTree/SegmentTree.java b/src/java/lib/Tree/SegmentTree/SegmentTree.java
deleted file mode 100644
index e926b66..0000000
--- a/src/java/lib/Tree/SegmentTree/SegmentTree.java
+++ /dev/null
@@ -1,46 +0,0 @@
-//RMQ (Range Minimum Query)
-package Tree.SegmentTree;
-
-public class SegmentTree {
-
- int n = 1;
- int[] val;
-
- public SegmentTree(int n) {
- while (this.n < n) this.n *= 2;
- val = new int[2*this.n-1];
- }
-
- void init(int n) {
- while (this.n < n) this.n *= 2;
- val = new int[2*this.n-1];
- for (int i=0; i<2*this.n-1; i++) {
- val[i] = Integer.MAX_VALUE;
- }
- }
-
-
- void update(int k, int a) {
- k += n - 1;
- val[k] = a;
- while (k > 0) {
- k = (k - 1) / 2;
- val[k] = Math.min(val[2*k+1], val[2*k+2]);
- }
- }
-
- // [a, b)
- int query(int a, int b) {
- return query(0, n, a, b, 0);
- }
-
- int query(int l, int r, int a, int b, int k) {
- if (r<=a || b<=l) return Integer.MAX_VALUE;
- if (a<=l && r<=b) return val[k];
- else {
- int vl = query(l, (l+r)/2, a, b, 2*k+1);
- int vr = query((l+r)/2, r, a, b, 2*k+2);
- return Math.min(vl, vr);
- }
- }
-}
diff --git a/src/java/lib/Tree/UnionFind/UnionFind.java b/src/java/lib/Tree/UnionFind/UnionFind.java
deleted file mode 100644
index 558d1bb..0000000
--- a/src/java/lib/Tree/UnionFind/UnionFind.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package Tree.UnionFind;
-
-class UnionFind {
-
- int[] parent, rank, size;
-
- void init(int n) {
- for (int i=0; i "$PKG_DIR/KnapsackTest.java" << 'DRIVER'
-package DP;
-import java.util.Scanner;
-
-public class KnapsackTest {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n = sc.nextInt();
- int w = sc.nextInt();
- int[][] arr = new int[n][2];
- for (int i = 0; i < n; i++) {
- arr[i][0] = sc.nextInt();
- arr[i][1] = sc.nextInt();
- }
- Knapsack ks = new Knapsack();
- int[][] dp = ks.knapsack(arr, w);
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i <= n; i++) {
- for (int j = 0; j < w; j++) {
- sb.append(dp[i][j] + " ");
- }
- sb.append(dp[i][w] + "\n");
- }
- System.out.print("DP table:\n" + sb);
- System.out.print("ans:\n" + dp[n][w]);
- }
-}
-DRIVER
-
-javac "$PKG_DIR/Knapsack.java" "$PKG_DIR/KnapsackTest.java" || { echo "COMPILE FAILED"; rm -rf "$TMPDIR"; exit 1; }
-
-pass=0
-fail=0
-
-run_test() {
- local name="$1" input="$2" expected="$3"
- actual=$(echo "$input" | java -cp "$TMPDIR" DP.KnapsackTest | sed 's/[[:space:]]*$//')
- expected=$(echo "$expected" | sed 's/[[:space:]]*$//')
- if [ "$actual" = "$expected" ]; then
- echo "PASS: $name"
- ((pass++))
- else
- echo "FAIL: $name"
- echo " expected: $expected"
- echo " actual: $actual"
- ((fail++))
- fi
-}
-
-# Test 1: 3 items, capacity 4
-run_test "basic" \
-"3 4
-2 1
-3 2
-4 3" \
-"DP table:
-0 0 0 0 0
-0 2 2 2 2
-0 2 3 5 5
-0 2 3 5 6
-ans:
-6"
-
-# Test 2: no items fit
-run_test "no fit" \
-"2 1
-5 2
-3 3" \
-"DP table:
-0 0
-0 0
-0 0
-ans:
-0"
-
-# Test 3: single item
-run_test "single item" \
-"1 3
-5 2" \
-"DP table:
-0 0 0 0
-0 0 5 5
-ans:
-5"
-
-rm -rf "$TMPDIR"
-echo ""
-echo "Result: $pass passed, $fail failed"
-[ "$fail" -eq 0 ] && exit 0 || exit 1
diff --git a/src/java/test/Graph/Floyd/test_floyd.sh b/src/java/test/Graph/Floyd/test_floyd.sh
deleted file mode 100755
index 1e53d22..0000000
--- a/src/java/test/Graph/Floyd/test_floyd.sh
+++ /dev/null
@@ -1,97 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-SRC="$SCRIPT_DIR/../../../lib/Graph/Floyd/Floyd.java"
-TMPDIR=$(mktemp -d)
-PKG_DIR="$TMPDIR/Graph/Floyd"
-
-mkdir -p "$PKG_DIR"
-cp "$SRC" "$PKG_DIR/Floyd.java"
-
-cat > "$PKG_DIR/FloydTest.java" << 'DRIVER'
-package Graph.Floyd;
-import java.util.Scanner;
-
-public class FloydTest {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n = sc.nextInt();
- int m = sc.nextInt();
- int[][] edge = new int[n][n];
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- edge[i][j] = (i == j) ? 0 : Integer.MAX_VALUE;
- }
- }
- for (int i = 0; i < m; i++) {
- int v = sc.nextInt();
- int u = sc.nextInt();
- int d = sc.nextInt();
- edge[v][u] = d;
- }
- Floyd f = new Floyd();
- boolean negative = f.floyd(edge);
- if (negative) {
- System.out.println("negative cycle");
- } else {
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n - 1; j++) {
- System.out.print(edge[i][j] + " ");
- }
- System.out.println(edge[i][n - 1]);
- }
- }
- }
-}
-DRIVER
-
-javac "$PKG_DIR/Floyd.java" "$PKG_DIR/FloydTest.java" || { echo "COMPILE FAILED"; rm -rf "$TMPDIR"; exit 1; }
-
-pass=0
-fail=0
-
-run_test() {
- local name="$1" input="$2" expected="$3"
- actual=$(echo "$input" | java -cp "$TMPDIR" Graph.Floyd.FloydTest | sed 's/[[:space:]]*$//')
- expected=$(echo "$expected" | sed 's/[[:space:]]*$//')
- if [ "$actual" = "$expected" ]; then
- echo "PASS: $name"
- ((pass++))
- else
- echo "FAIL: $name"
- echo " expected: $expected"
- echo " actual: $actual"
- ((fail++))
- fi
-}
-
-# Test 1: 3 nodes
-run_test "3 nodes" \
-"3 4
-0 1 2
-0 2 5
-1 2 1
-2 0 7" \
-"0 2 3
-8 0 1
-7 9 0"
-
-# Test 2: 2 nodes bidirectional
-run_test "2 nodes bidirectional" \
-"2 2
-0 1 3
-1 0 5" \
-"0 3
-5 0"
-
-# Test 3: negative cycle detection
-run_test "negative cycle" \
-"3 3
-0 1 1
-1 2 -3
-2 0 1" \
-"negative cycle"
-
-rm -rf "$TMPDIR"
-echo ""
-echo "Result: $pass passed, $fail failed"
-[ "$fail" -eq 0 ] && exit 0 || exit 1
diff --git a/src/java/test/Graph/test_dijkstra.sh b/src/java/test/Graph/test_dijkstra.sh
deleted file mode 100755
index 161b58e..0000000
--- a/src/java/test/Graph/test_dijkstra.sh
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-SRC="$SCRIPT_DIR/../../lib/Graph/Dijkstra.java"
-TMPDIR=$(mktemp -d)
-PKG_DIR="$TMPDIR/Graph"
-
-mkdir -p "$PKG_DIR"
-cp "$SRC" "$PKG_DIR/Dijkstra.java"
-
-cat > "$PKG_DIR/DijkstraTest.java" << 'DRIVER'
-package Graph;
-import java.util.*;
-
-public class DijkstraTest {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n = sc.nextInt();
- @SuppressWarnings("unchecked")
- List[] adj = new ArrayList[n];
- for (int i = 0; i < n; i++) adj[i] = new ArrayList<>();
- for (int i = 0; i < n; i++) {
- int v = sc.nextInt();
- int k = sc.nextInt();
- for (int j = 0; j < k; j++) {
- int u = sc.nextInt();
- int c = sc.nextInt();
- adj[v].add(new int[]{u, c});
- }
- }
- Dijkstra dij = new Dijkstra();
- int[] d = dij.dijkstra(0, adj);
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < n; i++) {
- sb.append(d[i] + " ");
- }
- System.out.print(sb.toString());
- }
-}
-DRIVER
-
-javac "$PKG_DIR/Dijkstra.java" "$PKG_DIR/DijkstraTest.java" || { echo "COMPILE FAILED"; rm -rf "$TMPDIR"; exit 1; }
-
-pass=0
-fail=0
-
-run_test() {
- local name="$1" input="$2" expected="$3"
- actual=$(echo "$input" | java -cp "$TMPDIR" Graph.DijkstraTest | sed 's/[[:space:]]*$//')
- expected=$(echo "$expected" | sed 's/[[:space:]]*$//')
- if [ "$actual" = "$expected" ]; then
- echo "PASS: $name"
- ((pass++))
- else
- echo "FAIL: $name"
- echo " expected: $expected"
- echo " actual: $actual"
- ((fail++))
- fi
-}
-
-# Test 1: 4 nodes 0->1(1), 0->2(4), 1->2(2), 2->3(1)
-run_test "basic graph" \
-"4
-0 2 1 1 2 4
-1 1 2 2
-2 1 3 1
-3 0" \
-"0 1 3 4"
-
-# Test 2: 3 nodes linear 0->1(5), 1->2(3)
-run_test "linear path" \
-"3
-0 1 1 5
-1 1 2 3
-2 0" \
-"0 5 8"
-
-# Test 3: single node
-run_test "single node" \
-"1
-0 0" \
-"0"
-
-rm -rf "$TMPDIR"
-echo ""
-echo "Result: $pass passed, $fail failed"
-[ "$fail" -eq 0 ] && exit 0 || exit 1
diff --git a/src/java/test/Graph/test_prim.sh b/src/java/test/Graph/test_prim.sh
deleted file mode 100755
index 53dfa99..0000000
--- a/src/java/test/Graph/test_prim.sh
+++ /dev/null
@@ -1,78 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-SRC="$SCRIPT_DIR/../../lib/Graph/Prim.java"
-TMPDIR=$(mktemp -d)
-PKG_DIR="$TMPDIR/Graph"
-
-mkdir -p "$PKG_DIR"
-cp "$SRC" "$PKG_DIR/Prim.java"
-
-cat > "$PKG_DIR/PrimTest.java" << 'DRIVER'
-package Graph;
-import java.util.Scanner;
-
-public class PrimTest {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n = sc.nextInt();
- int[][] edge = new int[n][n];
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- int t = sc.nextInt();
- edge[i][j] = t == -1 ? Integer.MAX_VALUE : t;
- }
- }
- Prim p = new Prim();
- System.out.println(p.prim(edge));
- }
-}
-DRIVER
-
-javac "$PKG_DIR/Prim.java" "$PKG_DIR/PrimTest.java" || { echo "COMPILE FAILED"; rm -rf "$TMPDIR"; exit 1; }
-
-pass=0
-fail=0
-
-run_test() {
- local name="$1" input="$2" expected="$3"
- actual=$(echo "$input" | java -cp "$TMPDIR" Graph.PrimTest | sed 's/[[:space:]]*$//')
- expected=$(echo "$expected" | sed 's/[[:space:]]*$//')
- if [ "$actual" = "$expected" ]; then
- echo "PASS: $name"
- ((pass++))
- else
- echo "FAIL: $name"
- echo " expected: $expected"
- echo " actual: $actual"
- ((fail++))
- fi
-}
-
-# Test 1: 3 nodes triangle
-run_test "triangle" \
-"3
--1 2 3
-2 -1 1
-3 1 -1" \
-"3"
-
-# Test 2: 4 nodes
-run_test "4 nodes" \
-"4
--1 2 -1 6
-2 -1 3 -1
--1 3 -1 1
-6 -1 1 -1" \
-"6"
-
-# Test 3: 2 nodes
-run_test "2 nodes" \
-"2
--1 5
-5 -1" \
-"5"
-
-rm -rf "$TMPDIR"
-echo ""
-echo "Result: $pass passed, $fail failed"
-[ "$fail" -eq 0 ] && exit 0 || exit 1
diff --git a/src/java/test/Math/Calc/test_gcd.sh b/src/java/test/Math/Calc/test_gcd.sh
deleted file mode 100755
index 20164ae..0000000
--- a/src/java/test/Math/Calc/test_gcd.sh
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-SRC="$SCRIPT_DIR/../../../lib/Math/Calc/GCD.java"
-TMPDIR=$(mktemp -d)
-PKG_DIR="$TMPDIR/Math/Calc"
-
-mkdir -p "$PKG_DIR"
-cp "$SRC" "$PKG_DIR/GCD.java"
-
-cat > "$PKG_DIR/GCDTest.java" << 'DRIVER'
-package Math.Calc;
-import java.util.Scanner;
-
-public class GCDTest {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int q = sc.nextInt();
- GCD g = new GCD();
- for (int i = 0; i < q; i++) {
- long c = sc.nextLong();
- long d = sc.nextLong();
- System.out.println(g.gcd(c, d));
- }
- }
-}
-DRIVER
-
-javac "$PKG_DIR/GCD.java" "$PKG_DIR/GCDTest.java" || { echo "COMPILE FAILED"; rm -rf "$TMPDIR"; exit 1; }
-
-pass=0
-fail=0
-
-run_test() {
- local name="$1" input="$2" expected="$3"
- actual=$(echo "$input" | java -cp "$TMPDIR" Math.Calc.GCDTest | sed 's/[[:space:]]*$//')
- expected=$(echo "$expected" | sed 's/[[:space:]]*$//')
- if [ "$actual" = "$expected" ]; then
- echo "PASS: $name"
- ((pass++))
- else
- echo "FAIL: $name"
- echo " expected: $expected"
- echo " actual: $actual"
- ((fail++))
- fi
-}
-
-# Test 1: gcd(12,8)=4, gcd(7,13)=1, gcd(6,6)=6
-run_test "basic" \
-"3
-12 8
-7 13
-6 6" \
-"4
-1
-6"
-
-# Test 2: gcd(1,100)=1
-run_test "one is 1" \
-"1
-1 100" \
-"1"
-
-# Test 3: gcd(1000000,500000)=500000
-run_test "large values" \
-"1
-1000000 500000" \
-"500000"
-
-rm -rf "$TMPDIR"
-echo ""
-echo "Result: $pass passed, $fail failed"
-[ "$fail" -eq 0 ] && exit 0 || exit 1
diff --git a/src/java/test/Math/Calc/test_lcm.sh b/src/java/test/Math/Calc/test_lcm.sh
deleted file mode 100755
index 51e998c..0000000
--- a/src/java/test/Math/Calc/test_lcm.sh
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-SRC="$SCRIPT_DIR/../../../lib/Math/Calc/LCM.java"
-TMPDIR=$(mktemp -d)
-PKG_DIR="$TMPDIR/Math/Calc"
-
-mkdir -p "$PKG_DIR"
-cp "$SRC" "$PKG_DIR/LCM.java"
-
-cat > "$PKG_DIR/LCMTest.java" << 'DRIVER'
-package Math.Calc;
-import java.util.Scanner;
-
-public class LCMTest {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int q = sc.nextInt();
- LCM l = new LCM();
- for (int i = 0; i < q; i++) {
- long c = sc.nextLong();
- long d = sc.nextLong();
- System.out.println(l.lcm(c, d));
- }
- }
-}
-DRIVER
-
-javac "$PKG_DIR/LCM.java" "$PKG_DIR/LCMTest.java" || { echo "COMPILE FAILED"; rm -rf "$TMPDIR"; exit 1; }
-
-pass=0
-fail=0
-
-run_test() {
- local name="$1" input="$2" expected="$3"
- actual=$(echo "$input" | java -cp "$TMPDIR" Math.Calc.LCMTest | sed 's/[[:space:]]*$//')
- expected=$(echo "$expected" | sed 's/[[:space:]]*$//')
- if [ "$actual" = "$expected" ]; then
- echo "PASS: $name"
- ((pass++))
- else
- echo "FAIL: $name"
- echo " expected: $expected"
- echo " actual: $actual"
- ((fail++))
- fi
-}
-
-# Test 1: lcm(12,8)=24, lcm(7,13)=91, lcm(6,6)=6
-run_test "basic" \
-"3
-12 8
-7 13
-6 6" \
-"24
-91
-6"
-
-# Test 2: lcm(1,100)=100
-run_test "one is 1" \
-"1
-1 100" \
-"100"
-
-# Test 3: lcm(1000000,500000)=1000000
-run_test "large values" \
-"1
-1000000 500000" \
-"1000000"
-
-rm -rf "$TMPDIR"
-echo ""
-echo "Result: $pass passed, $fail failed"
-[ "$fail" -eq 0 ] && exit 0 || exit 1
diff --git a/src/java/test/Math/Calc/test_primes.sh b/src/java/test/Math/Calc/test_primes.sh
deleted file mode 100755
index ee7fe87..0000000
--- a/src/java/test/Math/Calc/test_primes.sh
+++ /dev/null
@@ -1,97 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-SRC="$SCRIPT_DIR/../../../lib/Math/Calc/Primes.java"
-TMPDIR=$(mktemp -d)
-PKG_DIR="$TMPDIR/Math/Calc"
-
-mkdir -p "$PKG_DIR"
-cp "$SRC" "$PKG_DIR/Primes.java"
-
-cat > "$PKG_DIR/PrimesTest.java" << 'DRIVER'
-package Math.Calc;
-import java.util.*;
-
-public class PrimesTest {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- Primes p = new Primes();
- while (sc.hasNext()) {
- String cmd = sc.next();
- int n = sc.nextInt();
- if (cmd.equals("primes")) {
- Map mp = p.primes(n);
- TreeMap sorted = new TreeMap<>(mp);
- StringBuilder sb = new StringBuilder();
- boolean first = true;
- for (Map.Entry e : sorted.entrySet()) {
- if (!first) sb.append(" ");
- sb.append(e.getKey() + "^" + e.getValue());
- first = false;
- }
- System.out.println(sb.toString());
- } else if (cmd.equals("eratosthenes")) {
- List list = p.eratosthenes(n);
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < list.size(); i++) {
- if (i > 0) sb.append(" ");
- sb.append(list.get(i));
- }
- System.out.println(sb.toString());
- } else if (cmd.equals("atkin")) {
- List list = p.atkin(n);
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < list.size(); i++) {
- if (i > 0) sb.append(" ");
- sb.append(list.get(i));
- }
- System.out.println(sb.toString());
- }
- }
- }
-}
-DRIVER
-
-javac "$PKG_DIR/Primes.java" "$PKG_DIR/PrimesTest.java" || { echo "COMPILE FAILED"; rm -rf "$TMPDIR"; exit 1; }
-
-pass=0
-fail=0
-
-run_test() {
- local name="$1" input="$2" expected="$3"
- actual=$(echo "$input" | java -cp "$TMPDIR" Math.Calc.PrimesTest | sed 's/[[:space:]]*$//')
- expected=$(echo "$expected" | sed 's/[[:space:]]*$//')
- if [ "$actual" = "$expected" ]; then
- echo "PASS: $name"
- ((pass++))
- else
- echo "FAIL: $name"
- echo " expected: $expected"
- echo " actual: $actual"
- ((fail++))
- fi
-}
-
-# Test 1: prime factorization 12=2^2*3
-run_test "prime factorization 12" \
-"primes 12" \
-"2^2 3^1"
-
-# Test 2: prime factorization 30=2*3*5
-run_test "prime factorization 30" \
-"primes 30" \
-"2^1 3^1 5^1"
-
-# Test 3: Sieve of Eratosthenes, primes up to 20
-run_test "eratosthenes 20" \
-"eratosthenes 20" \
-"2 3 5 7 11 13 17 19"
-
-# Test 4: Sieve of Atkin, primes up to 20
-run_test "atkin 20" \
-"atkin 20" \
-"2 3 5 7 11 13 17 19"
-
-rm -rf "$TMPDIR"
-echo ""
-echo "Result: $pass passed, $fail failed"
-[ "$fail" -eq 0 ] && exit 0 || exit 1
diff --git a/src/java/test/Math/Combination/test_combination.sh b/src/java/test/Math/Combination/test_combination.sh
deleted file mode 100755
index a7e602a..0000000
--- a/src/java/test/Math/Combination/test_combination.sh
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-SRC="$SCRIPT_DIR/../../../lib/Math/Combination/Combination.java"
-TMPDIR=$(mktemp -d)
-PKG_DIR="$TMPDIR/Math/Combination"
-
-mkdir -p "$PKG_DIR"
-cp "$SRC" "$PKG_DIR/Combination.java"
-
-cat > "$PKG_DIR/CombinationTest.java" << 'DRIVER'
-package Math.Combination;
-import java.util.Scanner;
-
-public class CombinationTest {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n = sc.nextInt();
- int MOD = sc.nextInt();
- Combination comb = new Combination(n, MOD);
- int q = sc.nextInt();
- for (int i = 0; i < q; i++) {
- String cmd = sc.next();
- int a = sc.nextInt();
- int b = sc.nextInt();
- if (cmd.equals("nCk1")) {
- System.out.println(comb.nCk1(a, b));
- } else if (cmd.equals("nCk2")) {
- System.out.println(comb.nCk2(a, b));
- }
- }
- }
-}
-DRIVER
-
-javac "$PKG_DIR/Combination.java" "$PKG_DIR/CombinationTest.java" || { echo "COMPILE FAILED"; rm -rf "$TMPDIR"; exit 1; }
-
-pass=0
-fail=0
-
-run_test() {
- local name="$1" input="$2" expected="$3"
- actual=$(echo "$input" | java -cp "$TMPDIR" Math.Combination.CombinationTest | sed 's/[[:space:]]*$//')
- expected=$(echo "$expected" | sed 's/[[:space:]]*$//')
- if [ "$actual" = "$expected" ]; then
- echo "PASS: $name"
- ((pass++))
- else
- echo "FAIL: $name"
- echo " expected: $expected"
- echo " actual: $actual"
- ((fail++))
- fi
-}
-
-# Test 1: basic nCk1 and nCk2
-run_test "basic combinations" \
-"10 1000000007
-4
-nCk1 5 2
-nCk1 10 3
-nCk2 5 2
-nCk1 3 5" \
-"10
-120
-10
-0"
-
-# Test 2: nCk(n,0)=1, nCk(n,n)=1
-run_test "edge cases" \
-"5 1000000007
-2
-nCk1 5 0
-nCk1 5 5" \
-"1
-1"
-
-rm -rf "$TMPDIR"
-echo ""
-echo "Result: $pass passed, $fail failed"
-[ "$fail" -eq 0 ] && exit 0 || exit 1
diff --git a/src/java/test/Math/ModPow/test_modpow.sh b/src/java/test/Math/ModPow/test_modpow.sh
deleted file mode 100755
index 6cdf0cd..0000000
--- a/src/java/test/Math/ModPow/test_modpow.sh
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-SRC="$SCRIPT_DIR/../../../lib/Math/ModPow/ModPow.java"
-TMPDIR=$(mktemp -d)
-PKG_DIR="$TMPDIR/Math/ModPow"
-
-mkdir -p "$PKG_DIR"
-cp "$SRC" "$PKG_DIR/ModPow.java"
-
-cat > "$PKG_DIR/ModPowTest.java" << 'DRIVER'
-package Math.ModPow;
-import java.util.Scanner;
-
-public class ModPowTest {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int q = sc.nextInt();
- for (int i = 0; i < q; i++) {
- long x = sc.nextLong();
- long n = sc.nextLong();
- long m = sc.nextLong();
- ModPow mp = new ModPow();
- mp.MOD = m;
- System.out.println(mp.power(x, n));
- }
- }
-}
-DRIVER
-
-javac "$PKG_DIR/ModPow.java" "$PKG_DIR/ModPowTest.java" || { echo "COMPILE FAILED"; rm -rf "$TMPDIR"; exit 1; }
-
-pass=0
-fail=0
-
-run_test() {
- local name="$1" input="$2" expected="$3"
- actual=$(echo "$input" | java -cp "$TMPDIR" Math.ModPow.ModPowTest | sed 's/[[:space:]]*$//')
- expected=$(echo "$expected" | sed 's/[[:space:]]*$//')
- if [ "$actual" = "$expected" ]; then
- echo "PASS: $name"
- ((pass++))
- else
- echo "FAIL: $name"
- echo " expected: $expected"
- echo " actual: $actual"
- ((fail++))
- fi
-}
-
-# Test 1: basic
-run_test "basic powers" \
-"4
-2 10 1000000007
-3 5 1000000007
-2 29 1000000007
-10 9 7" \
-"1024
-243
-536870912
-6"
-
-# Test 2: exponent 0 and 1
-run_test "edge cases" \
-"2
-5 0 1000000007
-5 1 1000000007" \
-"1
-5"
-
-rm -rf "$TMPDIR"
-echo ""
-echo "Result: $pass passed, $fail failed"
-[ "$fail" -eq 0 ] && exit 0 || exit 1
diff --git a/src/java/test/Search/BFS/test_bfs.sh b/src/java/test/Search/BFS/test_bfs.sh
deleted file mode 100755
index 20522b7..0000000
--- a/src/java/test/Search/BFS/test_bfs.sh
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-SRC="$SCRIPT_DIR/../../../lib/Search/BFS/BFS.java"
-TMPDIR=$(mktemp -d)
-PKG_DIR="$TMPDIR/Search/BFS"
-
-mkdir -p "$PKG_DIR"
-cp "$SRC" "$PKG_DIR/BFS.java"
-
-# Create test driver in the same package
-cat > "$PKG_DIR/BFSTest.java" << 'DRIVER'
-package Search.BFS;
-import java.util.*;
-
-public class BFSTest {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n = sc.nextInt();
- @SuppressWarnings("unchecked")
- List[] adj = new ArrayList[n];
- for (int i = 0; i < n; i++) adj[i] = new ArrayList<>();
- for (int i = 0; i < n; i++) {
- int t = sc.nextInt() - 1;
- int k = sc.nextInt();
- for (int j = 0; j < k; j++) {
- int u = sc.nextInt() - 1;
- adj[t].add(u);
- }
- }
- BFS bfs = new BFS();
- int[] d = bfs.bfs(0, adj, n);
- for (int i = 0; i < n; i++) {
- System.out.println((i + 1) + " dist: " + d[i]);
- }
- }
-}
-DRIVER
-
-javac "$PKG_DIR/BFS.java" "$PKG_DIR/BFSTest.java" || { echo "COMPILE FAILED"; rm -rf "$TMPDIR"; exit 1; }
-
-pass=0
-fail=0
-
-run_test() {
- local name="$1" input="$2" expected="$3"
- actual=$(echo "$input" | java -cp "$TMPDIR" Search.BFS.BFSTest | sed 's/[[:space:]]*$//')
- expected=$(echo "$expected" | sed 's/[[:space:]]*$//')
- if [ "$actual" = "$expected" ]; then
- echo "PASS: $name"
- ((pass++))
- else
- echo "FAIL: $name"
- echo " expected: $expected"
- echo " actual: $actual"
- ((fail++))
- fi
-}
-
-# Test 1: linear graph 1->2->3->4
-run_test "linear graph" \
-"4
-1 1 2
-2 1 3
-3 1 4
-4 0" \
-"1 dist: 0
-2 dist: 1
-3 dist: 2
-4 dist: 3"
-
-# Test 2: star graph 1->2, 1->3, 1->4
-run_test "star graph" \
-"4
-1 3 2 3 4
-2 0
-3 0
-4 0" \
-"1 dist: 0
-2 dist: 1
-3 dist: 1
-4 dist: 1"
-
-# Test 3: diamond graph 1->2, 1->3, 2->4, 3->4
-run_test "diamond graph" \
-"4
-1 2 2 3
-2 1 4
-3 1 4
-4 0" \
-"1 dist: 0
-2 dist: 1
-3 dist: 1
-4 dist: 2"
-
-# Test 4: single node
-run_test "single node" \
-"1
-1 0" \
-"1 dist: 0"
-
-rm -rf "$TMPDIR"
-echo ""
-echo "Result: $pass passed, $fail failed"
-[ "$fail" -eq 0 ] && exit 0 || exit 1
diff --git a/src/java/test/Search/DFS/test_dfs.sh b/src/java/test/Search/DFS/test_dfs.sh
deleted file mode 100755
index 4e84f26..0000000
--- a/src/java/test/Search/DFS/test_dfs.sh
+++ /dev/null
@@ -1,107 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-SRC="$SCRIPT_DIR/../../../lib/Search/DFS/DFS.java"
-TMPDIR=$(mktemp -d)
-PKG_DIR="$TMPDIR/Search/DFS"
-
-mkdir -p "$PKG_DIR"
-cp "$SRC" "$PKG_DIR/DFS.java"
-
-# Create test driver in the same package
-cat > "$PKG_DIR/DFSTest.java" << 'DRIVER'
-package Search.DFS;
-import java.util.*;
-
-public class DFSTest {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n = sc.nextInt();
- @SuppressWarnings("unchecked")
- List[] edge = new ArrayList[n];
- for (int i = 0; i < n; i++) edge[i] = new ArrayList<>();
- for (int i = 0; i < n; i++) {
- int v = sc.nextInt() - 1;
- int k = sc.nextInt();
- for (int j = 0; j < k; j++) {
- int u = sc.nextInt() - 1;
- edge[v].add(u);
- }
- }
- boolean[] visit = new boolean[n];
- int[] firstV = new int[n];
- int[] endV = new int[n];
- DFS dfs = new DFS();
- dfs.dfs(0, edge, visit, firstV, endV);
- for (int i = 0; i < n; i++) {
- System.out.println((i + 1) + " " + firstV[i] + "sec " + endV[i] + "sec");
- }
- }
-}
-DRIVER
-
-javac "$PKG_DIR/DFS.java" "$PKG_DIR/DFSTest.java" || { echo "COMPILE FAILED"; rm -rf "$TMPDIR"; exit 1; }
-
-pass=0
-fail=0
-
-run_test() {
- local name="$1" input="$2" expected="$3"
- actual=$(echo "$input" | java -cp "$TMPDIR" Search.DFS.DFSTest | sed 's/[[:space:]]*$//')
- expected=$(echo "$expected" | sed 's/[[:space:]]*$//')
- if [ "$actual" = "$expected" ]; then
- echo "PASS: $name"
- ((pass++))
- else
- echo "FAIL: $name"
- echo " expected: $expected"
- echo " actual: $actual"
- ((fail++))
- fi
-}
-
-# Test 1: linear graph 1->2->3->4
-run_test "linear graph" \
-"4
-1 1 2
-2 1 3
-3 1 4
-4 0" \
-"1 1sec 8sec
-2 2sec 7sec
-3 3sec 6sec
-4 4sec 5sec"
-
-# Test 2: star graph 1->2, 1->3, 1->4
-run_test "star graph" \
-"4
-1 3 2 3 4
-2 0
-3 0
-4 0" \
-"1 1sec 8sec
-2 2sec 3sec
-3 4sec 5sec
-4 6sec 7sec"
-
-# Test 3: diamond graph 1->2, 1->3, 2->4, 3->4
-run_test "diamond graph" \
-"4
-1 2 2 3
-2 1 4
-3 1 4
-4 0" \
-"1 1sec 8sec
-2 2sec 5sec
-3 6sec 7sec
-4 3sec 4sec"
-
-# Test 4: single node
-run_test "single node" \
-"1
-1 0" \
-"1 1sec 2sec"
-
-rm -rf "$TMPDIR"
-echo ""
-echo "Result: $pass passed, $fail failed"
-[ "$fail" -eq 0 ] && exit 0 || exit 1
diff --git a/src/java/test/Search/test_binary_search.sh b/src/java/test/Search/test_binary_search.sh
deleted file mode 100755
index 7e3ecab..0000000
--- a/src/java/test/Search/test_binary_search.sh
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-SRC="$SCRIPT_DIR/../../lib/Search/BinarySearch.java"
-TMPDIR=$(mktemp -d)
-PKG_DIR="$TMPDIR/Search"
-
-mkdir -p "$PKG_DIR"
-cp "$SRC" "$PKG_DIR/BinarySearch.java"
-
-# Create test driver in the same package
-cat > "$PKG_DIR/BinarySearchTest.java" << 'DRIVER'
-package Search;
-import java.util.Scanner;
-
-public class BinarySearchTest {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n = sc.nextInt();
- int[] arr = new int[n];
- for (int i = 0; i < n; i++) arr[i] = sc.nextInt();
- int q = sc.nextInt();
- BinarySearch bs = new BinarySearch();
- for (int i = 0; i < q; i++) {
- int v = sc.nextInt();
- System.out.println("lower:" + bs.lowerBound(arr, v) + " upper:" + bs.upperBound(arr, v));
- }
- }
-}
-DRIVER
-
-javac "$PKG_DIR/BinarySearch.java" "$PKG_DIR/BinarySearchTest.java" || { echo "COMPILE FAILED"; rm -rf "$TMPDIR"; exit 1; }
-
-pass=0
-fail=0
-
-run_test() {
- local name="$1" input="$2" expected="$3"
- actual=$(echo "$input" | java -cp "$TMPDIR" Search.BinarySearchTest | sed 's/[[:space:]]*$//')
- expected=$(echo "$expected" | sed 's/[[:space:]]*$//')
- if [ "$actual" = "$expected" ]; then
- echo "PASS: $name"
- ((pass++))
- else
- echo "FAIL: $name"
- echo " expected: $expected"
- echo " actual: $actual"
- ((fail++))
- fi
-}
-
-# Test 1: basic [1,2,3,4,5] search for 3
-run_test "basic" \
-"5
-1 2 3 4 5
-1
-3" \
-"lower:2 upper:3"
-
-# Test 2: duplicates [1,2,2,2,3] search for 2
-run_test "duplicates" \
-"5
-1 2 2 2 3
-1
-2" \
-"lower:1 upper:4"
-
-# Test 3: out of range (too large) [1,2,3] search for 5
-run_test "value too large" \
-"3
-1 2 3
-1
-5" \
-"lower:3 upper:3"
-
-# Test 4: out of range (too small) [2,3,4] search for 1
-run_test "value too small" \
-"3
-2 3 4
-1
-1" \
-"lower:0 upper:0"
-
-# Test 5: single element [5] search for 5
-run_test "single element" \
-"1
-5
-1
-5" \
-"lower:0 upper:1"
-
-rm -rf "$TMPDIR"
-echo ""
-echo "Result: $pass passed, $fail failed"
-[ "$fail" -eq 0 ] && exit 0 || exit 1
diff --git a/src/java/test/Tree/SegmentTree/test_segmenttree.sh b/src/java/test/Tree/SegmentTree/test_segmenttree.sh
deleted file mode 100755
index a2577e5..0000000
--- a/src/java/test/Tree/SegmentTree/test_segmenttree.sh
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-SRC="$SCRIPT_DIR/../../../lib/Tree/SegmentTree/SegmentTree.java"
-TMPDIR=$(mktemp -d)
-PKG_DIR="$TMPDIR/Tree/SegmentTree"
-
-mkdir -p "$PKG_DIR"
-cp "$SRC" "$PKG_DIR/SegmentTree.java"
-
-cat > "$PKG_DIR/SegmentTreeTest.java" << 'DRIVER'
-package Tree.SegmentTree;
-import java.util.Scanner;
-
-public class SegmentTreeTest {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n = sc.nextInt();
- int q = sc.nextInt();
- SegmentTree st = new SegmentTree(n);
- st.init(n);
- for (int i = 0; i < q; i++) {
- String cmd = sc.next();
- if (cmd.equals("update")) {
- int k = sc.nextInt();
- int a = sc.nextInt();
- st.update(k, a);
- } else if (cmd.equals("query")) {
- int a = sc.nextInt();
- int b = sc.nextInt();
- System.out.println(st.query(a, b));
- }
- }
- }
-}
-DRIVER
-
-javac "$PKG_DIR/SegmentTree.java" "$PKG_DIR/SegmentTreeTest.java" || { echo "COMPILE FAILED"; rm -rf "$TMPDIR"; exit 1; }
-
-pass=0
-fail=0
-
-run_test() {
- local name="$1" input="$2" expected="$3"
- actual=$(echo "$input" | java -cp "$TMPDIR" Tree.SegmentTree.SegmentTreeTest | sed 's/[[:space:]]*$//')
- expected=$(echo "$expected" | sed 's/[[:space:]]*$//')
- if [ "$actual" = "$expected" ]; then
- echo "PASS: $name"
- ((pass++))
- else
- echo "FAIL: $name"
- echo " expected: $expected"
- echo " actual: $actual"
- ((fail++))
- fi
-}
-
-# Test 1: basic RMQ [5,3,7,1,4]
-run_test "basic RMQ" \
-"5 7
-update 0 5
-update 1 3
-update 2 7
-update 3 1
-update 4 4
-query 0 5
-query 1 3" \
-"1
-3"
-
-# Test 2: update and re-query
-run_test "update and re-query" \
-"3 6
-update 0 10
-update 1 20
-update 2 30
-query 0 3
-update 1 5
-query 0 3" \
-"10
-5"
-
-# Test 3: single element query
-run_test "single element query" \
-"3 4
-update 0 3
-update 1 7
-update 2 5
-query 1 2" \
-"7"
-
-rm -rf "$TMPDIR"
-echo ""
-echo "Result: $pass passed, $fail failed"
-[ "$fail" -eq 0 ] && exit 0 || exit 1
diff --git a/src/java/test/Tree/UnionFind/test_unionfind.sh b/src/java/test/Tree/UnionFind/test_unionfind.sh
deleted file mode 100755
index a31ae0c..0000000
--- a/src/java/test/Tree/UnionFind/test_unionfind.sh
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-SRC="$SCRIPT_DIR/../../../lib/Tree/UnionFind/UnionFind.java"
-TMPDIR=$(mktemp -d)
-PKG_DIR="$TMPDIR/Tree/UnionFind"
-
-mkdir -p "$PKG_DIR"
-cp "$SRC" "$PKG_DIR/UnionFind.java"
-
-cat > "$PKG_DIR/UnionFindTest.java" << 'DRIVER'
-package Tree.UnionFind;
-import java.util.Scanner;
-
-public class UnionFindTest {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n = sc.nextInt();
- int q = sc.nextInt();
- UnionFind uf = new UnionFind(n);
- for (int i = 0; i < q; i++) {
- String cmd = sc.next();
- if (cmd.equals("unite")) {
- int x = sc.nextInt();
- int y = sc.nextInt();
- uf.unite1(x, y);
- } else if (cmd.equals("same")) {
- int x = sc.nextInt();
- int y = sc.nextInt();
- System.out.println(uf.same(x, y) ? "yes" : "no");
- } else if (cmd.equals("size")) {
- int x = sc.nextInt();
- System.out.println(uf.size(x));
- }
- }
- }
-}
-DRIVER
-
-javac "$PKG_DIR/UnionFind.java" "$PKG_DIR/UnionFindTest.java" || { echo "COMPILE FAILED"; rm -rf "$TMPDIR"; exit 1; }
-
-pass=0
-fail=0
-
-run_test() {
- local name="$1" input="$2" expected="$3"
- actual=$(echo "$input" | java -cp "$TMPDIR" Tree.UnionFind.UnionFindTest | sed 's/[[:space:]]*$//')
- expected=$(echo "$expected" | sed 's/[[:space:]]*$//')
- if [ "$actual" = "$expected" ]; then
- echo "PASS: $name"
- ((pass++))
- else
- echo "FAIL: $name"
- echo " expected: $expected"
- echo " actual: $actual"
- ((fail++))
- fi
-}
-
-# Test 1: basic union and find
-run_test "basic union-find" \
-"5 9
-same 0 1
-unite 0 1
-same 0 1
-unite 2 3
-same 0 2
-unite 0 2
-same 0 3
-size 0
-size 4" \
-"no
-yes
-no
-yes
-4
-1"
-
-# Test 2: merge all nodes
-run_test "merge all" \
-"3 5
-unite 0 1
-unite 1 2
-same 0 2
-size 0
-size 2" \
-"yes
-3
-3"
-
-rm -rf "$TMPDIR"
-echo ""
-echo "Result: $pass passed, $fail failed"
-[ "$fail" -eq 0 ] && exit 0 || exit 1
diff --git a/src/java/test/static_analysis.sh b/src/java/test/static_analysis.sh
deleted file mode 100755
index e6fe6cf..0000000
--- a/src/java/test/static_analysis.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-LIB_DIR="$SCRIPT_DIR/../lib"
-TMPDIR=$(mktemp -d)
-
-files=$(find "$LIB_DIR" -name "*.java" | sort)
-output=$(javac -Xlint:all -Werror -sourcepath "$LIB_DIR" -d "$TMPDIR" $files 2>&1)
-status=$?
-
-if [ $status -ne 0 ]; then
- echo "FAIL: static analysis found issues"
- echo "$output"
-else
- count=$(echo "$files" | wc -l)
- echo "PASS: all $count files passed static analysis"
-fi
-
-rm -rf "$TMPDIR"
-exit $status