Skip to content

Commit 50e93ec

Browse files
committed
Add keymap, syntax/local, and misc-core strict edge tests
24 tests across three modules testing keymap operations, syntax/char utilities with buffer-local variables, and core misc functions like char-width, string-width, compare-strings, current-column.
1 parent 0c46b0b commit 50e93ec

4 files changed

Lines changed: 211 additions & 0 deletions

File tree

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
//! Oracle parity for keymap operations: `define-key`, `lookup-key`,
2+
//! `keymapp`, `make-sparse-keymap`, `make-keymap`, `keymap-parent`.
3+
//!
4+
//! GNU src/keymap.c.
5+
6+
use super::common::return_if_neovm_enable_oracle_proptest_not_set;
7+
use super::common::{assert_ok_eq, eval_oracle_and_neovm};
8+
9+
#[test]
10+
fn oracle_keymapp_on_keymap() {
11+
return_if_neovm_enable_oracle_proptest_not_set!();
12+
let (o, n) = eval_oracle_and_neovm(r#"(keymapp (make-sparse-keymap))"#);
13+
assert_ok_eq("t", &o, &n);
14+
}
15+
16+
#[test]
17+
fn oracle_keymapp_on_nil() {
18+
return_if_neovm_enable_oracle_proptest_not_set!();
19+
let (o, n) = eval_oracle_and_neovm(r#"(keymapp nil)"#);
20+
assert_ok_eq("nil", &o, &n);
21+
}
22+
23+
#[test]
24+
fn oracle_make_sparse_keymap_creates_keymap() {
25+
return_if_neovm_enable_oracle_proptest_not_set!();
26+
let (o, n) = eval_oracle_and_neovm(r#"(keymapp (make-sparse-keymap))"#);
27+
assert_ok_eq("t", &o, &n);
28+
}
29+
30+
#[test]
31+
fn oracle_make_keymap_creates_keymap() {
32+
return_if_neovm_enable_oracle_proptest_not_set!();
33+
let (o, n) = eval_oracle_and_neovm(r#"(keymapp (make-keymap))"#);
34+
assert_ok_eq("t", &o, &n);
35+
}
36+
37+
#[test]
38+
fn oracle_lookup_key_undefined() {
39+
return_if_neovm_enable_oracle_proptest_not_set!();
40+
let (o, n) = eval_oracle_and_neovm(r#"(lookup-key (make-sparse-keymap) "a")"#);
41+
assert_ok_eq("nil", &o, &n);
42+
}
43+
44+
#[test]
45+
fn oracle_define_key_and_lookup() {
46+
return_if_neovm_enable_oracle_proptest_not_set!();
47+
let (o, n) = eval_oracle_and_neovm(
48+
r#"(progn (let ((km (make-sparse-keymap))) (define-key km "a" 'forward-char) (commandp (lookup-key km "a"))))"#,
49+
);
50+
assert_ok_eq("t", &o, &n);
51+
}
52+
53+
#[test]
54+
fn oracle_keymap_parent_default_nil() {
55+
return_if_neovm_enable_oracle_proptest_not_set!();
56+
let (o, n) = eval_oracle_and_neovm(r#"(keymap-parent (make-sparse-keymap))"#);
57+
assert_ok_eq("nil", &o, &n);
58+
}
59+
60+
#[test]
61+
fn oracle_set_keymap_parent_returns_parent() {
62+
return_if_neovm_enable_oracle_proptest_not_set!();
63+
let (o, n) = eval_oracle_and_neovm(
64+
r#"(progn (let ((child (make-sparse-keymap)) (parent (make-sparse-keymap))) (set-keymap-parent child parent) (eq parent (keymap-parent child))))"#,
65+
);
66+
assert_ok_eq("t", &o, &n);
67+
}

neovm-oracle-tests/src/lib.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -928,6 +928,8 @@ mod keymap_comprehensive_patterns;
928928
mod keymap_operations_extended;
929929
#[path = "keymap-prompt-patterns.rs"]
930930
mod keymap_prompt_patterns;
931+
#[path = "keymap-strict-edge-semantics.rs"]
932+
mod keymap_strict_edge_semantics;
931933
#[path = "labeled-restriction.rs"]
932934
mod labeled_restriction;
933935
#[path = "lambda-anonymous.rs"]
@@ -1079,6 +1081,10 @@ mod merge_ordered_lists_semantics;
10791081
mod message_format_advanced;
10801082
mod min;
10811083
#[path = "missing-subrs-batch-semantics.rs"]
1084+
#[path = "misc-core-strict-edge-semantics.rs"]
1085+
#[path = "misc-core-strict-edge-semantics.rs"]
1086+
mod misc_core_strict_edge_semantics;
1087+
#[path = "missing-subrs-batch-semantics.rs"]
10821088
mod missing_subrs_batch_semantics;
10831089
#[path = "modify-syntax-entry.rs"]
10841090
mod modify_syntax_entry;
@@ -1558,6 +1564,8 @@ mod symbol_property_semantics;
15581564
mod symbol_value_edge_semantics;
15591565
#[path = "symbol-with-pos-semantics.rs"]
15601566
mod symbol_with_pos_semantics;
1567+
#[path = "syntax-local-strict-edge-semantics.rs"]
1568+
mod syntax_local_strict_edge_semantics;
15611569
#[path = "syntax-parse-state.rs"]
15621570
mod syntax_parse_state;
15631571
#[path = "syntax-table.rs"]
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
//! Oracle parity for misc core: `char-width`, `string-width`,
2+
//! `compare-strings`, `current-column`, `move-to-column`.
3+
//!
4+
//! GNU src/character.c, src/fns.c, src/indent.c.
5+
6+
use super::common::return_if_neovm_enable_oracle_proptest_not_set;
7+
use super::common::{assert_ok_eq, eval_oracle_and_neovm};
8+
9+
#[test]
10+
fn oracle_char_width_ascii() {
11+
return_if_neovm_enable_oracle_proptest_not_set!();
12+
let (o, n) = eval_oracle_and_neovm(r#"(char-width ?a)"#);
13+
assert_ok_eq("1", &o, &n);
14+
}
15+
16+
#[test]
17+
fn oracle_string_width_basic() {
18+
return_if_neovm_enable_oracle_proptest_not_set!();
19+
let (o, n) = eval_oracle_and_neovm(r#"(string-width "hello")"#);
20+
assert_ok_eq("5", &o, &n);
21+
}
22+
23+
#[test]
24+
fn oracle_compare_strings_equal() {
25+
return_if_neovm_enable_oracle_proptest_not_set!();
26+
let (o, n) = eval_oracle_and_neovm(r#"(compare-strings "abc" nil nil "abc" nil nil)"#);
27+
assert_ok_eq("t", &o, &n);
28+
}
29+
30+
#[test]
31+
fn oracle_compare_strings_different() {
32+
return_if_neovm_enable_oracle_proptest_not_set!();
33+
let (o, n) = eval_oracle_and_neovm(r#"(eq (compare-strings "abc" nil nil "abd" nil nil) t)"#);
34+
assert_ok_eq("nil", &o, &n);
35+
}
36+
37+
#[test]
38+
fn oracle_current_column_basic() {
39+
return_if_neovm_enable_oracle_proptest_not_set!();
40+
let (o, n) = eval_oracle_and_neovm(
41+
r#"(progn (switch-to-buffer (get-buffer-create "*cc*")) (erase-buffer) (insert "abc") (goto-char 1) (current-column))"#,
42+
);
43+
assert_ok_eq("0", &o, &n);
44+
}
45+
46+
#[test]
47+
fn oracle_move_to_column_sets_column() {
48+
return_if_neovm_enable_oracle_proptest_not_set!();
49+
let (o, n) = eval_oracle_and_neovm(
50+
r#"(progn (switch-to-buffer (get-buffer-create "*mc*")) (erase-buffer) (insert "xyz") (goto-char 1) (move-to-column 2))"#,
51+
);
52+
assert_ok_eq("2", &o, &n);
53+
}
54+
55+
#[test]
56+
fn oracle_accessible_keymaps_returns_list() {
57+
return_if_neovm_enable_oracle_proptest_not_set!();
58+
let (o, n) = eval_oracle_and_neovm(r#"(listp (accessible-keymaps))"#);
59+
assert_ok_eq("t", &o, &n);
60+
}
61+
62+
#[test]
63+
fn oracle_string_width_empty() {
64+
return_if_neovm_enable_oracle_proptest_not_set!();
65+
let (o, n) = eval_oracle_and_neovm(r#"(string-width "")"#);
66+
assert_ok_eq("0", &o, &n);
67+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
//! Oracle parity for char-syntax + buffer-local operations.
2+
//! GNU src/syntax.c, src/data.c.
3+
4+
use super::common::return_if_neovm_enable_oracle_proptest_not_set;
5+
use super::common::{assert_ok_eq, eval_oracle_and_neovm};
6+
7+
#[test]
8+
fn oracle_char_syntax_word() {
9+
return_if_neovm_enable_oracle_proptest_not_set!();
10+
let (o, n) = eval_oracle_and_neovm(r#"(char-syntax ?a)"#);
11+
assert_ok_eq("119", &o, &n);
12+
}
13+
14+
#[test]
15+
fn oracle_char_syntax_whitespace() {
16+
return_if_neovm_enable_oracle_proptest_not_set!();
17+
let (o, n) = eval_oracle_and_neovm(r#"(char-syntax ?\s)"#);
18+
assert_ok_eq("32", &o, &n);
19+
}
20+
21+
#[test]
22+
fn oracle_syntax_table_returns_current() {
23+
return_if_neovm_enable_oracle_proptest_not_set!();
24+
let (o, n) = eval_oracle_and_neovm(r#"(syntax-table-p (syntax-table))"#);
25+
assert_ok_eq("t", &o, &n);
26+
}
27+
28+
#[test]
29+
fn oracle_make_local_variable() {
30+
return_if_neovm_enable_oracle_proptest_not_set!();
31+
let (o, n) = eval_oracle_and_neovm(
32+
r#"(progn (set (make-local-variable 'neovm--test-mlv) 42) neovm--test-mlv)"#,
33+
);
34+
assert_ok_eq("42", &o, &n);
35+
}
36+
37+
#[test]
38+
fn oracle_kill_local_variable() {
39+
return_if_neovm_enable_oracle_proptest_not_set!();
40+
let (o, n) = eval_oracle_and_neovm(
41+
r#"(progn (set (make-local-variable 'neovm--test-klv) 77) (kill-local-variable 'neovm--test-klv) (not (boundp 'neovm--test-klv)))"#,
42+
);
43+
assert_ok_eq("t", &o, &n);
44+
}
45+
46+
#[test]
47+
fn oracle_set_syntax_table_roundtrip() {
48+
return_if_neovm_enable_oracle_proptest_not_set!();
49+
let (o, n) = eval_oracle_and_neovm(
50+
r#"(progn (let ((orig (syntax-table))) (unwind-protect (syntax-table-p (set-syntax-table orig)) (set-syntax-table orig))))"#,
51+
);
52+
assert_ok_eq("t", &o, &n);
53+
}
54+
55+
#[test]
56+
fn oracle_syntax_class_to_char() {
57+
return_if_neovm_enable_oracle_proptest_not_set!();
58+
let (o, n) = eval_oracle_and_neovm(r#"(characterp (syntax-class-to-char 2))"#);
59+
assert_ok_eq("t", &o, &n);
60+
}
61+
62+
#[test]
63+
fn oracle_string_to_syntax_roundtrip() {
64+
return_if_neovm_enable_oracle_proptest_not_set!();
65+
let (o, n) = eval_oracle_and_neovm(
66+
r#"(progn (modify-syntax-entry ?a (string-to-syntax "w")) (char-syntax ?a))"#,
67+
);
68+
assert_ok_eq("119", &o, &n);
69+
}

0 commit comments

Comments
 (0)