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

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

mercurial