From 11343d4b26c67f78d2773f686beede395d9b4542 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20J=C3=A4ckel?= Date: Fri, 19 Jun 2026 21:30:54 +0200 Subject: [PATCH 1/2] Adding failing test cases for exact matches --- libixx/src/test/search.rs | 54 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/libixx/src/test/search.rs b/libixx/src/test/search.rs index 7351145..32e277c 100644 --- a/libixx/src/test/search.rs +++ b/libixx/src/test/search.rs @@ -89,6 +89,10 @@ fn test_exact_search() { index.search(Some(0), "programs.neovim", 10).unwrap(), vec![(0, 0, "programs.neovim.enable".to_string())] ); + assert_eq!( + index.search(Some(0), "programs.neovim.en", 10).unwrap(), + vec![(0, 0, "programs.neovim.enable".to_string())] + ); assert_eq!( index.search(Some(0), "programs.neovim.enable", 10).unwrap(), vec![(0, 0, "programs.neovim.enable".to_string())] @@ -98,11 +102,46 @@ fn test_exact_search() { index.search(Some(0), "programs.nixvim", 10).unwrap(), vec![(1, 0, "programs.nixvim.enable".to_string())] ); + assert_eq!( + index.search(Some(0), "programs.nixvim.ena", 10).unwrap(), + vec![(1, 0, "programs.nixvim.enable".to_string())] + ); assert_eq!( index.search(Some(0), "programs.nixvim.enable", 10).unwrap(), vec![(1, 0, "programs.nixvim.enable".to_string())] ); + assert_eq!( + index.search(Some(0), "programs.vim", 10).unwrap(), + vec![(2, 0, "programs.vim.enable".to_string())] + ); + assert_eq!( + index.search(Some(0), "programs.vim.enab", 10).unwrap(), + vec![(2, 0, "programs.vim.enable".to_string())] + ); + assert_eq!( + index.search(Some(0), "programs.vim.enable", 10).unwrap(), + vec![(2, 0, "programs.vim.enable".to_string())] + ); + + // regression tests that wildcard matching also works as expected + assert_eq!( + index.search(Some(0), "programs.vim*", 10).unwrap(), + vec![(2, 0, "programs.vim.enable".to_string())] + ); + assert_eq!( + index.search(Some(0), "programs.*vim.enable", 10).unwrap(), + vec![(2, 0, "programs.vim.enable".to_string())] + ); + assert_eq!( + index.search(Some(0), "programs.neovim*", 10).unwrap(), + vec![(0, 0, "programs.neovim.enable".to_string())] + ); + assert_eq!( + index.search(Some(0), "programs.nixvim*", 10).unwrap(), + vec![(1, 0, "programs.nixvim.enable".to_string())] + ); + assert_eq!( index.search(Some(0), "programs.vim", 10).unwrap(), vec![(2, 0, "programs.vim.enable".to_string())] @@ -139,4 +178,19 @@ fn test_exact_search() { index.search(Some(0), "programs*vim.enable.extra", 10).unwrap(), vec![] ); + + assert_eq!( + index.search(Some(0), "enab", 10).unwrap(), + vec![(2, 0, "programs.vim.enable".to_string()), (0, 0, "programs.neovim.enable".to_string()), (1, 0, "programs.nixvim.enable".to_string())] + ); + // we don't do backtracking for search terms, so this returns nothing... + assert_eq!( + index.search(Some(0), "vim.enable", 10).unwrap(), + vec![] + ); + // ... but this should return everything + assert_eq!( + index.search(Some(0), "*im.enable", 10).unwrap(), + vec![(2, 0, "programs.vim.enable".to_string()), (0, 0, "programs.neovim.enable".to_string()), (1, 0, "programs.nixvim.enable".to_string())] + ); } From 81501e55638e6c231df753b7c234bc700601c76d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20J=C3=A4ckel?= Date: Mon, 29 Jun 2026 00:21:26 +0200 Subject: [PATCH 2/2] Add some more failing tests --- libixx/src/test/search.rs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/libixx/src/test/search.rs b/libixx/src/test/search.rs index 32e277c..e041b07 100644 --- a/libixx/src/test/search.rs +++ b/libixx/src/test/search.rs @@ -194,3 +194,32 @@ fn test_exact_search() { vec![(2, 0, "programs.vim.enable".to_string()), (0, 0, "programs.neovim.enable".to_string()), (1, 0, "programs.nixvim.enable".to_string())] ); } + +#[test] +fn test_edge_case_ssh() { + let index = Index::build( + vec![ + ("services.openssh.settings", 0), + ("home-manager.users..programs.ssh.settings", 0), + ] + .as_slice(), + ); + + assert_eq!( + index.search(Some(0), "services.openssh.settings", 10).unwrap(), + vec![(0, 0, "services.openssh.settings".to_string())] + ); + assert_eq!( + index.search(Some(0), "services*penssh.settings", 10).unwrap(), + vec![(0, 0, "services.openssh.settings".to_string())] + ); + + assert_eq!( + index.search(Some(0), "programs.ssh.settings", 10).unwrap(), + vec![(0, 0, "home-manager.users..programs.ssh.settings".to_string())] + ); + assert_eq!( + index.search(Some(0), "programs*ssh.settings", 10).unwrap(), + vec![(0, 0, "home-manager.users..programs.ssh.settings".to_string())] + ); +}