import java.util.*; /** * CWE-407 unit tests for Zed editor defects. * * zed-0001: lsp_store LSP edit dedup Vec::contains O(E²) * zed-0002: extension_builder manifest entry dedup Vec::contains O(N²) */ public class ZedTest { // --------------------------------------------------------------- // zed-0001: LSP edit dedup Vec::contains O(E²) // --------------------------------------------------------------- /** BEFORE: Vec::contains for each new edit — O(E²) */ static int lspEditDedupBefore(List edits) { int ops = 0; List lspEdits = new ArrayList<>(); for (String edit : edits) { // !lsp_edits.contains(&edit) boolean found = false; for (String existing : lspEdits) { ops++; if (existing.equals(edit)) { found = true; break; } } if (!found) lspEdits.add(edit); } return ops; } /** AFTER: HashSet seen-set for O(1) dedup — O(E) */ static int lspEditDedupAfter(List edits) { int ops = 0; Set seen = new HashSet<>(); List lspEdits = new ArrayList<>(); for (String edit : edits) { ops++; // set lookup if (seen.add(edit)) { lspEdits.add(edit); } } return ops; } // --------------------------------------------------------------- // zed-0002: extension manifest dedup Vec::contains O(N²) // --------------------------------------------------------------- /** BEFORE: manifest.languages.contains for each dir — O(N²) */ static int manifestDedupBefore(List entries) { int ops = 0; List manifest = new ArrayList<>(); for (String entry : entries) { boolean found = false; for (String existing : manifest) { ops++; if (existing.equals(entry)) { found = true; break; } } if (!found) manifest.add(entry); } return ops; } /** AFTER: HashSet seen-set — O(N) */ static int manifestDedupAfter(List entries) { int ops = 0; Set existing = new HashSet<>(); List manifest = new ArrayList<>(); for (String entry : entries) { ops++; if (existing.add(entry)) { manifest.add(entry); } } return ops; } // --------------------------------------------------------------- // Main: run all tests // --------------------------------------------------------------- public static void main(String[] args) { int pass = 0, fail = 0; // --- zed-0001: LSP edit dedup --- { int E = 100; // edits from large refactor List edits = new ArrayList<>(); for (int i = 0; i < E; i++) edits.add("edit-" + i); // all unique = worst case int before = lspEditDedupBefore(edits); int after = lspEditDedupAfter(edits); double ratio = (double) before / after; boolean ok = ratio > 10; System.out.printf("zed-0001 lsp-edit-dedup E=%d before=%d after=%d ratio=%.1fx %s%n", E, before, after, ratio, ok ? "PASS" : "FAIL"); if (ok) pass++; else fail++; } // --- zed-0002: manifest dedup --- { int N = 50; // language dirs in a large extension List entries = new ArrayList<>(); for (int i = 0; i < N; i++) entries.add("languages/lang-" + i); int before = manifestDedupBefore(entries); int after = manifestDedupAfter(entries); double ratio = (double) before / after; boolean ok = ratio > 10; System.out.printf("zed-0002 manifest-dedup N=%d before=%d after=%d ratio=%.1fx %s%n", N, before, after, ratio, ok ? "PASS" : "FAIL"); if (ok) pass++; else fail++; } System.out.printf("%n%d/%d PASS%n", pass, pass + fail); if (fail > 0) System.exit(1); } }