]> granicus.if.org Git - vim/commitdiff
patch 7.4.1700 v7.4.1700
authorBram Moolenaar <Bram@vim.org>
Sun, 3 Apr 2016 12:02:02 +0000 (14:02 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 3 Apr 2016 12:02:02 +0000 (14:02 +0200)
Problem:    Equivalence classes are not properly tested.
Solution:   Add tests for multi-byte and latin1. Fix an error. (Owen Leibman)

src/regexp.c
src/testdir/Make_all.mak
src/testdir/test_alot_latin.vim [new file with mode: 0644]
src/testdir/test_alot_utf8.vim [new file with mode: 0644]
src/testdir/test_regexp_latin.vim [new file with mode: 0644]
src/testdir/test_regexp_utf8.vim [new file with mode: 0644]
src/version.c

index cd7dc3f2283461b255f2c2ad26a288a2e5d5eabb..b20e9c5ec564edd7e26fe1afc8f5b42d29007e71 100644 (file)
@@ -791,7 +791,7 @@ char *EQUIVAL_CLASS_C[16] = {
     "E\x71\x72\x73\x74",
     "I\x75\x76\x77\x78",
     "N\x69",
-    "O\xEB\xEC\xED\xEE\xEF",
+    "O\xEB\xEC\xED\xEE\xEF\x80",
     "U\xFB\xFC\xFD\xFE",
     "Y\xBA",
     "a\x42\x43\x44\x45\x46\x47",
@@ -799,7 +799,7 @@ char *EQUIVAL_CLASS_C[16] = {
     "e\x51\x52\x53\x54",
     "i\x55\x56\x57\x58",
     "n\x49",
-    "o\xCB\xCC\xCD\xCE\xCF",
+    "o\xCB\xCC\xCD\xCE\xCF\x70",
     "u\xDB\xDC\xDD\xDE",
     "y\x8D\xDF",
 };
index 98cf98562fda1725e52e32f0fed4cdd1c1b2e147..2540abfbf0a28ac1011fae9c121144eab44c8dbd 100644 (file)
@@ -183,6 +183,8 @@ NEW_TESTS = test_arglist.res \
            test_viml.res \
            test_visual.res \
            test_window_id.res \
+           test_alot_latin.res \
+           test_alot_utf8.res \
            test_alot.res
 
 
diff --git a/src/testdir/test_alot_latin.vim b/src/testdir/test_alot_latin.vim
new file mode 100644 (file)
index 0000000..23a404c
--- /dev/null
@@ -0,0 +1,7 @@
+" A series of tests that can run in one Vim invocation.
+" This makes testing go faster, since Vim doesn't need to restart.
+
+" These tests use latin1 'encoding'.  Setting 'encoding' is in the individual
+" files, so that they can be run by themselves.
+
+source test_regexp_latin.vim
diff --git a/src/testdir/test_alot_utf8.vim b/src/testdir/test_alot_utf8.vim
new file mode 100644 (file)
index 0000000..20d919c
--- /dev/null
@@ -0,0 +1,7 @@
+" A series of tests that can run in one Vim invocation.
+" This makes testing go faster, since Vim doesn't need to restart.
+
+" These tests use utf8 'encoding'.  Setting 'encoding' is in the individual
+" files, so that they can be run by themselves.
+
+source test_regexp_utf8.vim
diff --git a/src/testdir/test_regexp_latin.vim b/src/testdir/test_regexp_latin.vim
new file mode 100644 (file)
index 0000000..8528412
--- /dev/null
@@ -0,0 +1,32 @@
+" Tests for regexp in latin1 encoding
+set encoding=latin1
+scriptencoding latin1
+
+func s:equivalence_test()
+  let str = "AÀÁÂÃÄÅ B C D EÈÉÊË F G H IÌÍÎÏ J K L M NÑ OÒÓÔÕÖØ P Q R S T UÙÚÛÜ V W X YÝ Z aàáâãäå b c d eèéêë f g h iìíîï j k l m nñ oòóôõöø p q r s t uùúûü v w x yýÿ z"
+  let groups = split(str)
+  for group1 in groups
+      for c in split(group1, '\zs')
+       " next statement confirms that equivalence class matches every
+       " character in group
+        call assert_match('^[[=' . c . '=]]*$', group1)
+        for group2 in groups
+          if group2 != group1
+           " next statement converts that equivalence class doesn't match
+           " a character in any other group
+            call assert_equal(-1, match(group2, '[[=' . c . '=]]'))
+          endif
+        endfor
+      endfor
+  endfor
+endfunc
+
+func Test_equivalence_re1()
+  set re=1
+  call s:equivalence_test()
+endfunc
+
+func Test_equivalence_re2()
+  set re=2
+  call s:equivalence_test()
+endfunc
diff --git a/src/testdir/test_regexp_utf8.vim b/src/testdir/test_regexp_utf8.vim
new file mode 100644 (file)
index 0000000..f5d7ec9
--- /dev/null
@@ -0,0 +1,35 @@
+" Tests for regexp in utf8 encoding
+if !has('multi_byte')
+  finish
+endif
+set encoding=utf-8
+scriptencoding utf-8
+
+func s:equivalence_test()
+  let str = "AÀÁÂÃÄÅĀĂĄǍǞǠẢ BḂḆ CÇĆĈĊČ DĎĐḊḎḐ EÈÉÊËĒĔĖĘĚẺẼ FḞ GĜĞĠĢǤǦǴḠ HĤĦḢḦḨ IÌÍÎÏĨĪĬĮİǏỈ JĴ KĶǨḰḴ LĹĻĽĿŁḺ MḾṀ NÑŃŅŇṄṈ OÒÓÔÕÖØŌŎŐƠǑǪǬỎ PṔṖ Q RŔŖŘṘṞ SŚŜŞŠṠ TŢŤŦṪṮ UÙÚÛÜŨŪŬŮŰŲƯǓỦ VṼ WŴẀẂẄẆ XẊẌ YÝŶŸẎỲỶỸ ZŹŻŽƵẐẔ aàáâãäåāăąǎǟǡả bḃḇ cçćĉċč dďđḋḏḑ eèéêëēĕėęěẻẽ fḟ gĝğġģǥǧǵḡ hĥħḣḧḩẖ iìíîïĩīĭįǐỉ jĵǰ kķǩḱḵ lĺļľŀłḻ mḿṁ nñńņňʼnṅṉ oòóôõöøōŏőơǒǫǭỏ pṕṗ q rŕŗřṙṟ sśŝşšṡ tţťŧṫṯẗ uùúûüũūŭůűųưǔủ vṽ wŵẁẃẅẇẘ xẋẍ yýÿŷẏẙỳỷỹ zźżžƶẑẕ"
+  let groups = split(str)
+  for group1 in groups
+      for c in split(group1, '\zs')
+       " next statement confirms that equivalence class matches every
+       " character in group
+        call assert_match('^[[=' . c . '=]]*$', group1)
+        for group2 in groups
+          if group2 != group1
+           " next statement converts that equivalence class doesn't match
+           " character in any other group
+            call assert_equal(-1, match(group2, '[[=' . c . '=]]'))
+          endif
+        endfor
+      endfor
+  endfor
+endfunc
+
+func Test_equivalence_re1()
+  set re=1
+  call s:equivalence_test()
+endfunc
+
+func Test_equivalence_re2()
+  set re=2
+  call s:equivalence_test()
+endfunc
index 23d4acb833ec9a8f8ce653793892aba8a957b938..5ecf9e0841509f602e3a7029eab3bd536564aff8 100644 (file)
@@ -748,6 +748,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1700,
 /**/
     1699,
 /**/