Home | History | Annotate | Download | only in cctest
      1 // Copyright 2012 the V8 project authors. All rights reserved.
      2 // Redistribution and use in source and binary forms, with or without
      3 // modification, are permitted provided that the following conditions are
      4 // met:
      5 //
      6 //     * Redistributions of source code must retain the above copyright
      7 //       notice, this list of conditions and the following disclaimer.
      8 //     * Redistributions in binary form must reproduce the above
      9 //       copyright notice, this list of conditions and the following
     10 //       disclaimer in the documentation and/or other materials provided
     11 //       with the distribution.
     12 //     * Neither the name of Google Inc. nor the names of its
     13 //       contributors may be used to endorse or promote products derived
     14 //       from this software without specific prior written permission.
     15 //
     16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27 
     28 #include <stdlib.h>
     29 
     30 #include "v8.h"
     31 
     32 #include "data-flow.h"
     33 #include "cctest.h"
     34 
     35 using namespace v8::internal;
     36 
     37 TEST(BitVector) {
     38   v8::internal::V8::Initialize(NULL);
     39   ZoneScope zone_scope(Isolate::Current(), DELETE_ON_EXIT);
     40   Zone* zone = ZONE;
     41   {
     42     BitVector v(15, zone);
     43     v.Add(1);
     44     CHECK(v.Contains(1));
     45     v.Remove(0);
     46     CHECK(!v.Contains(0));
     47     v.Add(0);
     48     v.Add(1);
     49     BitVector w(15, zone);
     50     w.Add(1);
     51     v.Intersect(w);
     52     CHECK(!v.Contains(0));
     53     CHECK(v.Contains(1));
     54   }
     55 
     56   {
     57     BitVector v(64, zone);
     58     v.Add(27);
     59     v.Add(30);
     60     v.Add(31);
     61     v.Add(33);
     62     BitVector::Iterator iter(&v);
     63     CHECK_EQ(27, iter.Current());
     64     iter.Advance();
     65     CHECK_EQ(30, iter.Current());
     66     iter.Advance();
     67     CHECK_EQ(31, iter.Current());
     68     iter.Advance();
     69     CHECK_EQ(33, iter.Current());
     70     iter.Advance();
     71     CHECK(iter.Done());
     72   }
     73 
     74   {
     75     BitVector v(15, zone);
     76     v.Add(0);
     77     BitVector w(15, zone);
     78     w.Add(1);
     79     v.Union(w);
     80     CHECK(v.Contains(0));
     81     CHECK(v.Contains(1));
     82   }
     83 
     84   {
     85     BitVector v(15, zone);
     86     v.Add(0);
     87     BitVector w(15, zone);
     88     w = v;
     89     CHECK(w.Contains(0));
     90     w.Add(1);
     91     BitVector u(w, zone);
     92     CHECK(u.Contains(0));
     93     CHECK(u.Contains(1));
     94     v.Union(w);
     95     CHECK(v.Contains(0));
     96     CHECK(v.Contains(1));
     97   }
     98 
     99   {
    100     BitVector v(35, zone);
    101     v.Add(0);
    102     BitVector w(35, zone);
    103     w.Add(33);
    104     v.Union(w);
    105     CHECK(v.Contains(0));
    106     CHECK(v.Contains(33));
    107   }
    108 
    109   {
    110     BitVector v(35, zone);
    111     v.Add(32);
    112     v.Add(33);
    113     BitVector w(35, zone);
    114     w.Add(33);
    115     v.Intersect(w);
    116     CHECK(!v.Contains(32));
    117     CHECK(v.Contains(33));
    118     BitVector r(35, zone);
    119     r.CopyFrom(v);
    120     CHECK(!r.Contains(32));
    121     CHECK(r.Contains(33));
    122   }
    123 }
    124