1" Inserts 2 million lines with consecutive integers starting from 1
2" (essentially, the output of GNU's seq 1 2000000), writes them to Xtest
3" and writes its cksum to test.out.
4"
5" We need 2 million lines to trigger a call to mf_hash_grow().  If it would mess
6" up the lines the checksum would differ.
7"
8" cksum is part of POSIX and so should be available on most Unixes.
9" If it isn't available then the test will be skipped.
10func Test_File_Size()
11  if !executable('cksum')
12      return
13  endif
14
15  new
16  set fileformat=unix undolevels=-1
17  for i in range(1, 2000000, 100)
18      call append(i, range(i, i + 99))
19  endfor
20
21  1delete
22  w! Xtest
23  let res = systemlist('cksum Xtest')[0]
24  let res = substitute(res, "\r", "", "")
25  call assert_equal('3678979763 14888896 Xtest', res)
26
27  enew!
28  call delete('Xtest')
29  set fileformat& undolevels&
30endfunc
31
32" Test for writing and reading a file of over 100 Kbyte
33func Test_File_Read_Write()
34  enew!
35
36  " Create a file with the following contents
37  " 1 line: "This is the start"
38  " 3001 lines: "This is the leader"
39  " 1 line: "This is the middle"
40  " 3001 lines: "This is the trailer"
41  " 1 line: "This is the end"
42  call append(0, "This is the start")
43  call append(1, repeat(["This is the leader"], 3001))
44  call append(3002, "This is the middle")
45  call append(3003, repeat(["This is the trailer"], 3001))
46  call append(6004, "This is the end")
47
48  write! Xtest
49  enew!
50  edit! Xtest
51
52  call assert_equal("This is the start", getline(1))
53  call assert_equal("This is the middle", getline(3003))
54  call assert_equal("This is the end", getline(6005))
55
56  enew!
57  call delete("Xtest")
58endfunc
59