summaryrefslogtreecommitdiff
path: root/util/util.cpp
blob: 2307e64ef8483821878d47e1ee47a081ff4cc5a8 (plain)
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
// util.cpp

/**
*    Copyright (C) 2008 10gen Inc.
*
*    This program is free software: you can redistribute it and/or  modify
*    it under the terms of the GNU Affero General Public License, version 3,
*    as published by the Free Software Foundation.
*
*    This program is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*    GNU Affero General Public License for more details.
*
*    You should have received a copy of the GNU Affero General Public License
*    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#include "stdafx.h"
#include "goodies.h"
#include "unittest.h"

vector<UnitTest*> *UnitTest::tests = 0;

Nullstream nullstream;
Logstream logstream;
boost::mutex Logstream::mutex;

unsigned occasion = 0;
unsigned once = 0;
bool goingAway = false;

bool isPrime(int n) {
    int z = 2;
    while ( 1 ) {
        if ( z*z > n )
            break;
        if ( n % z == 0 )
            return false;
        z++;
    }
    return true;
}

int nextPrime(int n) {
    n |= 1; // 2 goes to 3...don't care...
    while ( !isPrime(n) )
        n += 2;
    return n;
}

struct UtilTest : public UnitTest {
    void run() {
        assert( WrappingInt(0) <= WrappingInt(0) );
        assert( WrappingInt(0) <= WrappingInt(1) );
        assert( !(WrappingInt(1) <= WrappingInt(0)) );
        assert( (WrappingInt(0xf0000000) <= WrappingInt(0)) );
        assert( (WrappingInt(0xf0000000) <= WrappingInt(9000)) );
        assert( !(WrappingInt(300) <= WrappingInt(0xe0000000)) );

        assert( tdiff(3, 4) == 1 );
        assert( tdiff(4, 3) == -1 );
        assert( tdiff(0xffffffff, 0) == 1 );

        assert( isPrime(3) );
        assert( isPrime(2) );
        assert( isPrime(13) );
        assert( isPrime(17) );
        assert( !isPrime(9) );
        assert( !isPrime(6) );
        assert( nextPrime(4) == 5 );
        assert( nextPrime(8) == 11 );

        assert( endsWith("abcde", "de") );
        assert( !endsWith("abcde", "dasdfasdfashkfde") );

        assert( swapEndian(0x01020304) == 0x04030201 );

    }
} utilTest;