From: kmillikin@chromium.org Date: Thu, 5 Mar 2009 09:39:19 +0000 (+0000) Subject: Add a test for inserting a preexisting list element to a list, at the X-Git-Tag: upstream/4.7.83~24577 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=86254f6ad9f9e6ddef68948060c05ee3d61080ab;p=platform%2Fupstream%2Fv8.git Add a test for inserting a preexisting list element to a list, at the point where the backing buffer will have to grow. Review URL: http://codereview.chromium.org/39180 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1425 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/test/cctest/SConscript b/test/cctest/SConscript index c2b6748..091768f 100644 --- a/test/cctest/SConscript +++ b/test/cctest/SConscript @@ -34,15 +34,33 @@ Import('context object_files') SOURCES = { 'all': [ - 'test-hashmap.cc', 'test-debug.cc', 'test-api.cc', 'test-flags.cc', - 'test-ast.cc', 'test-heap.cc', 'test-utils.cc', 'test-compiler.cc', - 'test-spaces.cc', 'test-mark-compact.cc', 'test-lock.cc', - 'test-conversions.cc', 'test-strings.cc', 'test-serialize.cc', - 'test-decls.cc', 'test-alloc.cc', 'test-regexp.cc', 'test-threads.cc', - 'test-sockets.cc' + 'test-alloc.cc', + 'test-api.cc', + 'test-ast.cc', + 'test-compiler.cc', + 'test-conversions.cc', + 'test-debug.cc', + 'test-decls.cc', + 'test-flags.cc', + 'test-hashmap.cc', + 'test-heap.cc', + 'test-list.cc', + 'test-lock.cc', + 'test-mark-compact.cc', + 'test-regexp.cc', + 'test-serialize.cc', + 'test-sockets.cc', + 'test-spaces.cc', + 'test-strings.cc', + 'test-threads.cc', + 'test-utils.cc' ], 'arch:arm': ['test-assembler-arm.cc', 'test-disasm-arm.cc'], - 'arch:ia32': ['test-assembler-ia32.cc', 'test-disasm-ia32.cc', 'test-log-ia32.cc'], + 'arch:ia32': [ + 'test-assembler-ia32.cc', + 'test-disasm-ia32.cc', + 'test-log-ia32.cc' + ], 'os:linux': ['test-platform-linux.cc'], 'os:macos': ['test-platform-macos.cc'], 'os:nullos': ['test-platform-nullos.cc'], diff --git a/test/cctest/test-list.cc b/test/cctest/test-list.cc new file mode 100644 index 0000000..d10cdd7 --- /dev/null +++ b/test/cctest/test-list.cc @@ -0,0 +1,67 @@ +// Copyright 2009 the V8 project authors. All rights reserved. +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include +#include +#include "v8.h" +#include "cctest.h" + +using namespace v8::internal; + +// Use a testing allocator that clears memory before deletion. +class ZeroingAllocationPolicy { + public: + static void* New(size_t size) { + // Stash the size in the first word to use for Delete. + size_t true_size = size + sizeof(size_t); + size_t* result = reinterpret_cast(malloc(true_size)); + if (result == NULL) return result; + *result = true_size; + return result + 1; + } + + static void Delete(void* ptr) { + size_t* true_ptr = reinterpret_cast(ptr) - 1; + memset(true_ptr, 0, *true_ptr); + free(true_ptr); + } +}; + +// Check that we can add (a reference to) an element of the list +// itself. +TEST(ListAdd) { + // Add elements to the list to grow it to its capacity. + List list(4); + list.Add(1); + list.Add(2); + list.Add(3); + list.Add(4); + + // Add an existing element, the backing store should have to grow. + list.Add(list[0]); + ASSERT(list[4] == 1); +}