diff options
author | Andrew M. Kuchling <amk@amk.ca> | 2000-03-30 21:15:29 (GMT) |
---|---|---|
committer | Andrew M. Kuchling <amk@amk.ca> | 2000-03-30 21:15:29 (GMT) |
commit | e81b9cfcfe7f73b0b6f5fc4e52442357a53fb58f (patch) | |
tree | acd2cbd18311ee2517e760d41244ec3481ae8ab2 /Lib | |
parent | 1ed7d2d2b824b8a7ef80a284efa6eef75f4fd885 (diff) | |
download | cpython-e81b9cfcfe7f73b0b6f5fc4e52442357a53fb58f.zip cpython-e81b9cfcfe7f73b0b6f5fc4e52442357a53fb58f.tar.gz cpython-e81b9cfcfe7f73b0b6f5fc4e52442357a53fb58f.tar.bz2 |
Added simple test case for mmap on Unix; someone needs to write a
Win32 test case
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_mmap.py | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/Lib/test/test_mmap.py b/Lib/test/test_mmap.py new file mode 100644 index 0000000..d6c7c89 --- /dev/null +++ b/Lib/test/test_mmap.py @@ -0,0 +1,69 @@ + +import mmap +import string, os, re, sys + +PAGESIZE = mmap.PAGESIZE + +def test_unix(): + "Test mmap module on Unix systems" + + # Create an mmap'ed file + f = open('foo', 'w+') + + # Write 2 pages worth of data to the file + f.write('\0'* PAGESIZE) + f.write('foo') + f.write('\0'* (PAGESIZE-3) ) + + m = mmap.mmap(f.fileno(), 2 * PAGESIZE) + f.close() + + # Simple sanity checks + print ' Position of foo:', string.find(m, 'foo') / float(PAGESIZE), 'pages' + assert string.find(m, 'foo') == PAGESIZE + + print ' Length of file:', len(m) / float(PAGESIZE), 'pages' + assert len(m) == 2*PAGESIZE + + print ' Contents of byte 0:', repr(m[0]) + assert m[0] == '\0' + print ' Contents of first 3 bytes:', repr(m[0:3]) + assert m[0:3] == '\0\0\0' + + # Modify the file's content + print "\n Modifying file's content..." + m[0] = '3' + m[PAGESIZE +3: PAGESIZE +3+3]='bar' + + # Check that the modification worked + print ' Contents of byte 0:', repr(m[0]) + assert m[0] == '3' + print ' Contents of first 3 bytes:', repr(m[0:3]) + assert m[0:3] == '3\0\0' + print ' Contents of second page:', m[PAGESIZE-1 : PAGESIZE + 7] + assert m[PAGESIZE-1 : PAGESIZE + 7] == '\0foobar\0' + + m.flush() + + # Test doing a regular expression match in an mmap'ed file + match=re.search('[A-Za-z]+', m) + if match == None: + print ' ERROR: regex match on mmap failed!' + else: + start, end = match.span(0) + length = end - start + + print ' Regex match on mmap (page start, length of match):', + print start / float(PAGESIZE), length + + assert start == PAGESIZE + assert end == PAGESIZE + 6 + + print ' Test passed' + +# XXX need to write a test suite for Windows +if sys.platform == 'win32': + pass +else: + test_unix() + |