From 4cd2a27cddd3b3f83dfc6f03865d8cd96cf7c235 Mon Sep 17 00:00:00 2001 From: tknsgk Date: Mon, 23 Feb 2026 16:32:40 +0900 Subject: [PATCH] rm java --- .github/workflows/test.yml | 65 ---------- README.md | 5 +- src/java/lib/DP/Knapsack.java | 23 ---- src/java/lib/Graph/Dijkstra.java | 39 ------ src/java/lib/Graph/Floyd/Floyd.java | 23 ---- src/java/lib/Graph/Prim.java | 45 ------- src/java/lib/Math/Calc/GCD.java | 10 -- src/java/lib/Math/Calc/LCM.java | 14 --- src/java/lib/Math/Calc/Primes.java | 118 ------------------ .../lib/Math/Combination/Combination.java | 45 ------- src/java/lib/Math/ModPow/ModPow.java | 18 --- src/java/lib/Search/BFS/BFS.java | 25 ---- src/java/lib/Search/BinarySearch.java | 33 ----- src/java/lib/Search/DFS/DFS.java | 19 --- .../lib/Tree/SegmentTree/SegmentTree.java | 46 ------- src/java/lib/Tree/UnionFind/UnionFind.java | 64 ---------- src/java/test/DP/test_knapsack.sh | 98 --------------- src/java/test/Graph/Floyd/test_floyd.sh | 97 -------------- src/java/test/Graph/test_dijkstra.sh | 87 ------------- src/java/test/Graph/test_prim.sh | 78 ------------ src/java/test/Math/Calc/test_gcd.sh | 73 ----------- src/java/test/Math/Calc/test_lcm.sh | 73 ----------- src/java/test/Math/Calc/test_primes.sh | 97 -------------- .../test/Math/Combination/test_combination.sh | 80 ------------ src/java/test/Math/ModPow/test_modpow.sh | 73 ----------- src/java/test/Search/BFS/test_bfs.sh | 104 --------------- src/java/test/Search/DFS/test_dfs.sh | 107 ---------------- src/java/test/Search/test_binary_search.sh | 94 -------------- .../test/Tree/SegmentTree/test_segmenttree.sh | 94 -------------- .../test/Tree/UnionFind/test_unionfind.sh | 93 -------------- src/java/test/static_analysis.sh | 19 --- 31 files changed, 1 insertion(+), 1858 deletions(-) delete mode 100644 src/java/lib/DP/Knapsack.java delete mode 100644 src/java/lib/Graph/Dijkstra.java delete mode 100644 src/java/lib/Graph/Floyd/Floyd.java delete mode 100644 src/java/lib/Graph/Prim.java delete mode 100644 src/java/lib/Math/Calc/GCD.java delete mode 100644 src/java/lib/Math/Calc/LCM.java delete mode 100644 src/java/lib/Math/Calc/Primes.java delete mode 100644 src/java/lib/Math/Combination/Combination.java delete mode 100644 src/java/lib/Math/ModPow/ModPow.java delete mode 100644 src/java/lib/Search/BFS/BFS.java delete mode 100644 src/java/lib/Search/BinarySearch.java delete mode 100644 src/java/lib/Search/DFS/DFS.java delete mode 100644 src/java/lib/Tree/SegmentTree/SegmentTree.java delete mode 100644 src/java/lib/Tree/UnionFind/UnionFind.java delete mode 100755 src/java/test/DP/test_knapsack.sh delete mode 100755 src/java/test/Graph/Floyd/test_floyd.sh delete mode 100755 src/java/test/Graph/test_dijkstra.sh delete mode 100755 src/java/test/Graph/test_prim.sh delete mode 100755 src/java/test/Math/Calc/test_gcd.sh delete mode 100755 src/java/test/Math/Calc/test_lcm.sh delete mode 100755 src/java/test/Math/Calc/test_primes.sh delete mode 100755 src/java/test/Math/Combination/test_combination.sh delete mode 100755 src/java/test/Math/ModPow/test_modpow.sh delete mode 100755 src/java/test/Search/BFS/test_bfs.sh delete mode 100755 src/java/test/Search/DFS/test_dfs.sh delete mode 100755 src/java/test/Search/test_binary_search.sh delete mode 100755 src/java/test/Tree/SegmentTree/test_segmenttree.sh delete mode 100755 src/java/test/Tree/UnionFind/test_unionfind.sh delete mode 100755 src/java/test/static_analysis.sh 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