mirror of
https://github.com/dart-lang/sdk
synced 2024-09-18 21:51:18 +00:00
25966d228d
This makes the test code independent of the way we call Dart code and makes it easier to change the calling convention. The code for calling test code is now encapsulated in unit_test.h instead of being spread over many different files. I only changed the tests that need a constant pool set up, but the same strategy could be used for all other assembler tests to avoid unnecessary duplicated boilerplate code. BUG= R=zra@google.com Review URL: https://codereview.chromium.org//1283733003 .
65 lines
2.5 KiB
C++
65 lines
2.5 KiB
C++
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
#include "vm/assembler.h"
|
|
#include "vm/globals.h"
|
|
#include "vm/os.h"
|
|
#include "vm/simulator.h"
|
|
#include "vm/unit_test.h"
|
|
#include "vm/virtual_memory.h"
|
|
|
|
namespace dart {
|
|
|
|
ASSEMBLER_TEST_EXTERN(StoreIntoObject);
|
|
|
|
ASSEMBLER_TEST_RUN(StoreIntoObject, test) {
|
|
#define TEST_CODE(value, growable_array, thread) \
|
|
test->Invoke<void, RawObject*, RawObject*, Thread*>( \
|
|
value, growable_array, thread)
|
|
|
|
const Array& old_array = Array::Handle(Array::New(3, Heap::kOld));
|
|
const Array& new_array = Array::Handle(Array::New(3, Heap::kNew));
|
|
const GrowableObjectArray& grow_old_array = GrowableObjectArray::Handle(
|
|
GrowableObjectArray::New(old_array, Heap::kOld));
|
|
const GrowableObjectArray& grow_new_array = GrowableObjectArray::Handle(
|
|
GrowableObjectArray::New(old_array, Heap::kNew));
|
|
Smi& smi = Smi::Handle();
|
|
Thread* thread = Thread::Current();
|
|
|
|
EXPECT(old_array.raw() == grow_old_array.data());
|
|
EXPECT(!thread->StoreBufferContains(grow_old_array.raw()));
|
|
EXPECT(old_array.raw() == grow_new_array.data());
|
|
EXPECT(!thread->StoreBufferContains(grow_new_array.raw()));
|
|
|
|
// Store Smis into the old object.
|
|
for (int i = -128; i < 128; i++) {
|
|
smi = Smi::New(i);
|
|
TEST_CODE(smi.raw(), grow_old_array.raw(), thread);
|
|
EXPECT(reinterpret_cast<RawArray*>(smi.raw()) == grow_old_array.data());
|
|
EXPECT(!thread->StoreBufferContains(grow_old_array.raw()));
|
|
}
|
|
|
|
// Store an old object into the old object.
|
|
TEST_CODE(old_array.raw(), grow_old_array.raw(), thread);
|
|
EXPECT(old_array.raw() == grow_old_array.data());
|
|
EXPECT(!thread->StoreBufferContains(grow_old_array.raw()));
|
|
|
|
// Store a new object into the old object.
|
|
TEST_CODE(new_array.raw(), grow_old_array.raw(), thread);
|
|
EXPECT(new_array.raw() == grow_old_array.data());
|
|
EXPECT(thread->StoreBufferContains(grow_old_array.raw()));
|
|
|
|
// Store a new object into the new object.
|
|
TEST_CODE(new_array.raw(), grow_new_array.raw(), thread);
|
|
EXPECT(new_array.raw() == grow_new_array.data());
|
|
EXPECT(!thread->StoreBufferContains(grow_new_array.raw()));
|
|
|
|
// Store an old object into the new object.
|
|
TEST_CODE(old_array.raw(), grow_new_array.raw(), thread);
|
|
EXPECT(old_array.raw() == grow_new_array.data());
|
|
EXPECT(!thread->StoreBufferContains(grow_new_array.raw()));
|
|
}
|
|
|
|
} // namespace dart
|