File: mmap_v2.test.h

package info (click to toggle)
libwibble 1.1-1
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd, stretch
  • size: 1,040 kB
  • ctags: 2,721
  • sloc: cpp: 14,542; makefile: 196; perl: 87; sh: 26
file content (53 lines) | stat: -rw-r--r-- 1,492 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// -*- C++ -*- (c) 2013 Vladimír Štill <xstill@fi.muni.cz>
#if __cplusplus >= 201103L
#include <wibble/sys/mmap_v2.h>
using namespace wibble::sys;
#endif

#include <wibble/test.h>
#include <string.h>

using namespace std;
using namespace wibble;

struct TestMMapV2 {
    Test read() {
#if defined POSIX && __cplusplus >= 201103L
        MMap map;
        assert_eq( map.size(), 0U );
        assert( !map );
        assert( !map.valid() );
        assert( !map.mode() );

        map.map( "/bin/sh" );
        assert_neq( map.size(), 0U );
        assert_eq( map.mode(), MMap::ProtectMode::Read | MMap::ProtectMode::Shared );
        assert( map.valid() );
        assert_eq( map[ 1 ], 'E' );
        assert_eq( map[ 2 ], 'L' );
        assert_eq( map[ 3 ], 'F' );

        MMap map1 = map; // shared_ptr semantics
        assert_eq( map.size(), map.size() );
        assert_eq( map.asArrayOf< char >(), map1.asArrayOf< char >() );
        assert_eq( map.mode(), map1.mode() );

        assert_eq( map1.get< char >( 1 ), 'E' );
        assert_eq( map1.get< char >( 2 ), 'L' );
        assert_eq( map1.get< char >( 3 ), 'F' );

        map1.unmap();
        assert_eq( map1.size(), 0U );
        assert( !map1 );
        assert_eq( map.cget< char >( 1 ), 'E' );
        assert_eq( map.cget< char >( 2 ), 'L' );
        assert_eq( map.cget< char >( 3 ), 'F' );

        assert( map.valid() );

        map.unmap();
        assert_eq( map.size(), 0U );
        assert( !map );
#endif
    }
};