13ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Copyright 2012 the V8 project authors. All rights reserved. 2402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// Redistribution and use in source and binary forms, with or without 3402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// modification, are permitted provided that the following conditions are 4402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// met: 5402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// 6402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// * Redistributions of source code must retain the above copyright 7402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// notice, this list of conditions and the following disclaimer. 8402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// * Redistributions in binary form must reproduce the above 9402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// copyright notice, this list of conditions and the following 10402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// disclaimer in the documentation and/or other materials provided 11402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// with the distribution. 12402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// * Neither the name of Google Inc. nor the names of its 13402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// contributors may be used to endorse or promote products derived 14402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// from this software without specific prior written permission. 15402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// 16402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu 286ded16be15dd865a9b21ea304d5273c8be299c87Steve Block#include <stdlib.h> 29402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu 306ded16be15dd865a9b21ea304d5273c8be299c87Steve Block#include "v8.h" 31402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu 326ded16be15dd865a9b21ea304d5273c8be299c87Steve Block#include "data-flow.h" 336ded16be15dd865a9b21ea304d5273c8be299c87Steve Block#include "cctest.h" 34402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu 356ded16be15dd865a9b21ea304d5273c8be299c87Steve Blockusing namespace v8::internal; 366ded16be15dd865a9b21ea304d5273c8be299c87Steve Block 376ded16be15dd865a9b21ea304d5273c8be299c87Steve BlockTEST(BitVector) { 3844f0eee88ff00398ff7f715fab053374d808c90dSteve Block v8::internal::V8::Initialize(NULL); 393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ZoneScope zone_scope(Isolate::Current(), DELETE_ON_EXIT); 403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch Zone* zone = ZONE; 416ded16be15dd865a9b21ea304d5273c8be299c87Steve Block { 423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch BitVector v(15, zone); 436ded16be15dd865a9b21ea304d5273c8be299c87Steve Block v.Add(1); 446ded16be15dd865a9b21ea304d5273c8be299c87Steve Block CHECK(v.Contains(1)); 456ded16be15dd865a9b21ea304d5273c8be299c87Steve Block v.Remove(0); 466ded16be15dd865a9b21ea304d5273c8be299c87Steve Block CHECK(!v.Contains(0)); 476ded16be15dd865a9b21ea304d5273c8be299c87Steve Block v.Add(0); 486ded16be15dd865a9b21ea304d5273c8be299c87Steve Block v.Add(1); 493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch BitVector w(15, zone); 506ded16be15dd865a9b21ea304d5273c8be299c87Steve Block w.Add(1); 516ded16be15dd865a9b21ea304d5273c8be299c87Steve Block v.Intersect(w); 526ded16be15dd865a9b21ea304d5273c8be299c87Steve Block CHECK(!v.Contains(0)); 536ded16be15dd865a9b21ea304d5273c8be299c87Steve Block CHECK(v.Contains(1)); 54402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu } 55402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu 566ded16be15dd865a9b21ea304d5273c8be299c87Steve Block { 573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch BitVector v(64, zone); 58b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch v.Add(27); 59b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch v.Add(30); 60b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch v.Add(31); 61b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch v.Add(33); 62b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch BitVector::Iterator iter(&v); 63b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch CHECK_EQ(27, iter.Current()); 64b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch iter.Advance(); 65b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch CHECK_EQ(30, iter.Current()); 66b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch iter.Advance(); 67b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch CHECK_EQ(31, iter.Current()); 68b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch iter.Advance(); 69b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch CHECK_EQ(33, iter.Current()); 70b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch iter.Advance(); 71b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch CHECK(iter.Done()); 72b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch } 73b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch 74b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch { 753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch BitVector v(15, zone); 766ded16be15dd865a9b21ea304d5273c8be299c87Steve Block v.Add(0); 773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch BitVector w(15, zone); 786ded16be15dd865a9b21ea304d5273c8be299c87Steve Block w.Add(1); 796ded16be15dd865a9b21ea304d5273c8be299c87Steve Block v.Union(w); 806ded16be15dd865a9b21ea304d5273c8be299c87Steve Block CHECK(v.Contains(0)); 816ded16be15dd865a9b21ea304d5273c8be299c87Steve Block CHECK(v.Contains(1)); 82402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu } 83402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu 846ded16be15dd865a9b21ea304d5273c8be299c87Steve Block { 853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch BitVector v(15, zone); 866ded16be15dd865a9b21ea304d5273c8be299c87Steve Block v.Add(0); 873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch BitVector w(15, zone); 886ded16be15dd865a9b21ea304d5273c8be299c87Steve Block w = v; 896ded16be15dd865a9b21ea304d5273c8be299c87Steve Block CHECK(w.Contains(0)); 906ded16be15dd865a9b21ea304d5273c8be299c87Steve Block w.Add(1); 913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch BitVector u(w, zone); 926ded16be15dd865a9b21ea304d5273c8be299c87Steve Block CHECK(u.Contains(0)); 936ded16be15dd865a9b21ea304d5273c8be299c87Steve Block CHECK(u.Contains(1)); 946ded16be15dd865a9b21ea304d5273c8be299c87Steve Block v.Union(w); 956ded16be15dd865a9b21ea304d5273c8be299c87Steve Block CHECK(v.Contains(0)); 966ded16be15dd865a9b21ea304d5273c8be299c87Steve Block CHECK(v.Contains(1)); 97402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu } 98402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu 996ded16be15dd865a9b21ea304d5273c8be299c87Steve Block { 1003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch BitVector v(35, zone); 1016ded16be15dd865a9b21ea304d5273c8be299c87Steve Block v.Add(0); 1023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch BitVector w(35, zone); 1036ded16be15dd865a9b21ea304d5273c8be299c87Steve Block w.Add(33); 1046ded16be15dd865a9b21ea304d5273c8be299c87Steve Block v.Union(w); 1056ded16be15dd865a9b21ea304d5273c8be299c87Steve Block CHECK(v.Contains(0)); 1066ded16be15dd865a9b21ea304d5273c8be299c87Steve Block CHECK(v.Contains(33)); 1076ded16be15dd865a9b21ea304d5273c8be299c87Steve Block } 108402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu 1096ded16be15dd865a9b21ea304d5273c8be299c87Steve Block { 1103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch BitVector v(35, zone); 1116ded16be15dd865a9b21ea304d5273c8be299c87Steve Block v.Add(32); 1126ded16be15dd865a9b21ea304d5273c8be299c87Steve Block v.Add(33); 1133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch BitVector w(35, zone); 1146ded16be15dd865a9b21ea304d5273c8be299c87Steve Block w.Add(33); 1156ded16be15dd865a9b21ea304d5273c8be299c87Steve Block v.Intersect(w); 1166ded16be15dd865a9b21ea304d5273c8be299c87Steve Block CHECK(!v.Contains(32)); 1176ded16be15dd865a9b21ea304d5273c8be299c87Steve Block CHECK(v.Contains(33)); 1183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch BitVector r(35, zone); 1196ded16be15dd865a9b21ea304d5273c8be299c87Steve Block r.CopyFrom(v); 1206ded16be15dd865a9b21ea304d5273c8be299c87Steve Block CHECK(!r.Contains(32)); 1216ded16be15dd865a9b21ea304d5273c8be299c87Steve Block CHECK(r.Contains(33)); 1226ded16be15dd865a9b21ea304d5273c8be299c87Steve Block } 1236ded16be15dd865a9b21ea304d5273c8be299c87Steve Block} 124