1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/mfbt/tests/TestBinarySearch.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,75 @@ 1.4 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 1.5 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this file, 1.7 + * You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.8 + 1.9 +#include "mozilla/Assertions.h" 1.10 +#include "mozilla/BinarySearch.h" 1.11 +#include "mozilla/Vector.h" 1.12 + 1.13 +using mozilla::Vector; 1.14 +using mozilla::BinarySearch; 1.15 + 1.16 +struct Person 1.17 +{ 1.18 + int age; 1.19 + int id; 1.20 + Person(int age, int id) : age(age), id(id) {} 1.21 +}; 1.22 + 1.23 +struct GetAge 1.24 +{ 1.25 + Vector<Person> &v; 1.26 + GetAge(Vector<Person> &v) : v(v) {} 1.27 + int operator[](size_t index) const { return v[index].age; } 1.28 +}; 1.29 + 1.30 +int main() 1.31 +{ 1.32 + size_t m; 1.33 + 1.34 + Vector<int> v1; 1.35 + v1.append(2); 1.36 + v1.append(4); 1.37 + v1.append(6); 1.38 + v1.append(8); 1.39 + 1.40 + MOZ_ASSERT(!BinarySearch(v1, 0, v1.length(), 1, &m) && m == 0); 1.41 + MOZ_ASSERT( BinarySearch(v1, 0, v1.length(), 2, &m) && m == 0); 1.42 + MOZ_ASSERT(!BinarySearch(v1, 0, v1.length(), 3, &m) && m == 1); 1.43 + MOZ_ASSERT( BinarySearch(v1, 0, v1.length(), 4, &m) && m == 1); 1.44 + MOZ_ASSERT(!BinarySearch(v1, 0, v1.length(), 5, &m) && m == 2); 1.45 + MOZ_ASSERT( BinarySearch(v1, 0, v1.length(), 6, &m) && m == 2); 1.46 + MOZ_ASSERT(!BinarySearch(v1, 0, v1.length(), 7, &m) && m == 3); 1.47 + MOZ_ASSERT( BinarySearch(v1, 0, v1.length(), 8, &m) && m == 3); 1.48 + MOZ_ASSERT(!BinarySearch(v1, 0, v1.length(), 9, &m) && m == 4); 1.49 + 1.50 + MOZ_ASSERT(!BinarySearch(v1, 1, 3, 1, &m) && m == 1); 1.51 + MOZ_ASSERT(!BinarySearch(v1, 1, 3, 2, &m) && m == 1); 1.52 + MOZ_ASSERT(!BinarySearch(v1, 1, 3, 3, &m) && m == 1); 1.53 + MOZ_ASSERT( BinarySearch(v1, 1, 3, 4, &m) && m == 1); 1.54 + MOZ_ASSERT(!BinarySearch(v1, 1, 3, 5, &m) && m == 2); 1.55 + MOZ_ASSERT( BinarySearch(v1, 1, 3, 6, &m) && m == 2); 1.56 + MOZ_ASSERT(!BinarySearch(v1, 1, 3, 7, &m) && m == 3); 1.57 + MOZ_ASSERT(!BinarySearch(v1, 1, 3, 8, &m) && m == 3); 1.58 + MOZ_ASSERT(!BinarySearch(v1, 1, 3, 9, &m) && m == 3); 1.59 + 1.60 + MOZ_ASSERT(!BinarySearch(v1, 0, 0, 0, &m) && m == 0); 1.61 + MOZ_ASSERT(!BinarySearch(v1, 0, 0, 9, &m) && m == 0); 1.62 + 1.63 + Vector<int> v2; 1.64 + MOZ_ASSERT(!BinarySearch(v2, 0, 0, 0, &m) && m == 0); 1.65 + MOZ_ASSERT(!BinarySearch(v2, 0, 0, 9, &m) && m == 0); 1.66 + 1.67 + Vector<Person> v3; 1.68 + v3.append(Person(2, 42)); 1.69 + v3.append(Person(4, 13)); 1.70 + v3.append(Person(6, 360)); 1.71 + MOZ_ASSERT(!BinarySearch(GetAge(v3), 0, v3.length(), 1, &m) && m == 0); 1.72 + MOZ_ASSERT( BinarySearch(GetAge(v3), 0, v3.length(), 2, &m) && m == 0); 1.73 + MOZ_ASSERT(!BinarySearch(GetAge(v3), 0, v3.length(), 3, &m) && m == 1); 1.74 + MOZ_ASSERT( BinarySearch(GetAge(v3), 0, v3.length(), 4, &m) && m == 1); 1.75 + MOZ_ASSERT(!BinarySearch(GetAge(v3), 0, v3.length(), 5, &m) && m == 2); 1.76 + MOZ_ASSERT( BinarySearch(GetAge(v3), 0, v3.length(), 6, &m) && m == 2); 1.77 + MOZ_ASSERT(!BinarySearch(GetAge(v3), 0, v3.length(), 7, &m) && m == 3); 1.78 +}