1
0
Fork 0
mirror of https://github.com/rubyjs/therubyracer synced 2023-03-27 23:21:42 -04:00
therubyracer/ext/v8/upstream/2.0.6/test/cctest/test-platform-linux.cc
Charles Lowell 205c52c5bf import v8 source
move v8 src to google dir

moving v8 source into main extension

move google upstream source dir into v8 ext dir

include v8 library in generated bundle

prep for 0.4.7

roll the upstream build into the main extension build

Documentation was confusing the gem packager.

simplify build instructions with bundled v8.

Only install scons and build v8 if it has not been built already.

Missing CVS.py from the scons library due to ignore patterns.

Don't need libv8 anymore, only python 2.5 which is required to build it.
2010-02-04 13:41:54 -06:00

80 lines
1.9 KiB
C++

// Copyright 2006-2008 the V8 project authors. All rights reserved.
//
// Tests of the TokenLock class from lock.h
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h> // for usleep()
#include "v8.h"
#include "platform.h"
#include "cctest.h"
using namespace ::v8::internal;
static void yield() {
usleep(1);
}
static const int kLockCounterLimit = 50;
static int busy_lock_counter = 0;
static void LoopIncrement(Mutex* mutex, int rem) {
while (true) {
int count = 0;
int last_count = -1;
do {
CHECK_EQ(0, mutex->Lock());
count = busy_lock_counter;
CHECK_EQ(0, mutex->Unlock());
yield();
} while (count % 2 == rem && count < kLockCounterLimit);
if (count >= kLockCounterLimit) break;
CHECK_EQ(0, mutex->Lock());
CHECK_EQ(count, busy_lock_counter);
CHECK(last_count == -1 || count == last_count + 1);
busy_lock_counter++;
last_count = count;
CHECK_EQ(0, mutex->Unlock());
yield();
}
}
static void* RunTestBusyLock(void* arg) {
LoopIncrement(static_cast<Mutex*>(arg), 0);
return 0;
}
// Runs two threads that repeatedly acquire the lock and conditionally
// increment a variable.
TEST(BusyLock) {
pthread_t other;
Mutex* mutex = OS::CreateMutex();
int thread_created = pthread_create(&other,
NULL,
&RunTestBusyLock,
mutex);
CHECK_EQ(0, thread_created);
LoopIncrement(mutex, 1);
pthread_join(other, NULL);
delete mutex;
}
TEST(VirtualMemory) {
VirtualMemory* vm = new VirtualMemory(1 * MB);
CHECK(vm->IsReserved());
void* block_addr = vm->address();
size_t block_size = 4 * KB;
CHECK(vm->Commit(block_addr, block_size, false));
// Check whether we can write to memory.
int* addr = static_cast<int*>(block_addr);
addr[KB-1] = 2;
CHECK(vm->Uncommit(block_addr, block_size));
delete vm;
}