mfbt/tests/TestBinarySearch.cpp

Wed, 31 Dec 2014 06:55:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:55:50 +0100
changeset 2
7e26c7da4463
permissions
-rw-r--r--

Added tag UPSTREAM_283F7C6 for changeset ca08bd8f51b2

     1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
     4  * You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 #include "mozilla/Assertions.h"
     7 #include "mozilla/BinarySearch.h"
     8 #include "mozilla/Vector.h"
    10 using mozilla::Vector;
    11 using mozilla::BinarySearch;
    13 struct Person
    14 {
    15   int age;
    16   int id;
    17   Person(int age, int id) : age(age), id(id) {}
    18 };
    20 struct GetAge
    21 {
    22   Vector<Person> &v;
    23   GetAge(Vector<Person> &v) : v(v) {}
    24   int operator[](size_t index) const { return v[index].age; }
    25 };
    27 int main()
    28 {
    29   size_t m;
    31   Vector<int> v1;
    32   v1.append(2);
    33   v1.append(4);
    34   v1.append(6);
    35   v1.append(8);
    37   MOZ_ASSERT(!BinarySearch(v1, 0, v1.length(), 1, &m) && m == 0);
    38   MOZ_ASSERT( BinarySearch(v1, 0, v1.length(), 2, &m) && m == 0);
    39   MOZ_ASSERT(!BinarySearch(v1, 0, v1.length(), 3, &m) && m == 1);
    40   MOZ_ASSERT( BinarySearch(v1, 0, v1.length(), 4, &m) && m == 1);
    41   MOZ_ASSERT(!BinarySearch(v1, 0, v1.length(), 5, &m) && m == 2);
    42   MOZ_ASSERT( BinarySearch(v1, 0, v1.length(), 6, &m) && m == 2);
    43   MOZ_ASSERT(!BinarySearch(v1, 0, v1.length(), 7, &m) && m == 3);
    44   MOZ_ASSERT( BinarySearch(v1, 0, v1.length(), 8, &m) && m == 3);
    45   MOZ_ASSERT(!BinarySearch(v1, 0, v1.length(), 9, &m) && m == 4);
    47   MOZ_ASSERT(!BinarySearch(v1, 1, 3, 1, &m) && m == 1);
    48   MOZ_ASSERT(!BinarySearch(v1, 1, 3, 2, &m) && m == 1);
    49   MOZ_ASSERT(!BinarySearch(v1, 1, 3, 3, &m) && m == 1);
    50   MOZ_ASSERT( BinarySearch(v1, 1, 3, 4, &m) && m == 1);
    51   MOZ_ASSERT(!BinarySearch(v1, 1, 3, 5, &m) && m == 2);
    52   MOZ_ASSERT( BinarySearch(v1, 1, 3, 6, &m) && m == 2);
    53   MOZ_ASSERT(!BinarySearch(v1, 1, 3, 7, &m) && m == 3);
    54   MOZ_ASSERT(!BinarySearch(v1, 1, 3, 8, &m) && m == 3);
    55   MOZ_ASSERT(!BinarySearch(v1, 1, 3, 9, &m) && m == 3);
    57   MOZ_ASSERT(!BinarySearch(v1, 0, 0, 0, &m) && m == 0);
    58   MOZ_ASSERT(!BinarySearch(v1, 0, 0, 9, &m) && m == 0);
    60   Vector<int> v2;
    61   MOZ_ASSERT(!BinarySearch(v2, 0, 0, 0, &m) && m == 0);
    62   MOZ_ASSERT(!BinarySearch(v2, 0, 0, 9, &m) && m == 0);
    64   Vector<Person> v3;
    65   v3.append(Person(2, 42));
    66   v3.append(Person(4, 13));
    67   v3.append(Person(6, 360));
    68   MOZ_ASSERT(!BinarySearch(GetAge(v3), 0, v3.length(), 1, &m) && m == 0);
    69   MOZ_ASSERT( BinarySearch(GetAge(v3), 0, v3.length(), 2, &m) && m == 0);
    70   MOZ_ASSERT(!BinarySearch(GetAge(v3), 0, v3.length(), 3, &m) && m == 1);
    71   MOZ_ASSERT( BinarySearch(GetAge(v3), 0, v3.length(), 4, &m) && m == 1);
    72   MOZ_ASSERT(!BinarySearch(GetAge(v3), 0, v3.length(), 5, &m) && m == 2);
    73   MOZ_ASSERT( BinarySearch(GetAge(v3), 0, v3.length(), 6, &m) && m == 2);
    74   MOZ_ASSERT(!BinarySearch(GetAge(v3), 0, v3.length(), 7, &m) && m == 3);
    75 }

mercurial