libcxx initial import
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@103490 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <algorithm>
|
||||
|
||||
// template<BidirectionalIterator Iter>
|
||||
// requires ShuffleIterator<Iter>
|
||||
// && LessThanComparable<Iter::value_type>
|
||||
// bool
|
||||
// next_permutation(Iter first, Iter last);
|
||||
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../iterators.h"
|
||||
|
||||
#include <cstdio>
|
||||
|
||||
int factorial(int x)
|
||||
{
|
||||
int r = 1;
|
||||
for (; x; --x)
|
||||
r *= x;
|
||||
return r;
|
||||
}
|
||||
|
||||
template <class Iter>
|
||||
void
|
||||
test()
|
||||
{
|
||||
int ia[] = {1, 2, 3, 4, 5, 6};
|
||||
const int sa = sizeof(ia)/sizeof(ia[0]);
|
||||
int prev[sa];
|
||||
for (int e = 0; e <= sa; ++e)
|
||||
{
|
||||
int count = 0;
|
||||
bool x;
|
||||
do
|
||||
{
|
||||
std::copy(ia, ia+e, prev);
|
||||
x = std::next_permutation(Iter(ia), Iter(ia+e));
|
||||
if (e > 1)
|
||||
{
|
||||
if (x)
|
||||
assert(std::lexicographical_compare(prev, prev+e, ia, ia+e));
|
||||
else
|
||||
assert(std::lexicographical_compare(ia, ia+e, prev, prev+e));
|
||||
}
|
||||
++count;
|
||||
} while (x);
|
||||
assert(count == factorial(e));
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test<bidirectional_iterator<int*> >();
|
||||
test<random_access_iterator<int*> >();
|
||||
test<int*>();
|
||||
}
|
@@ -0,0 +1,68 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <algorithm>
|
||||
|
||||
// template<BidirectionalIterator Iter, StrictWeakOrder<auto, Iter::value_type> Compare>
|
||||
// requires ShuffleIterator<Iter>
|
||||
// && CopyConstructible<Compare>
|
||||
// bool
|
||||
// next_permutation(Iter first, Iter last, Compare comp);
|
||||
|
||||
#include <algorithm>
|
||||
#include <functional>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../iterators.h"
|
||||
|
||||
#include <cstdio>
|
||||
|
||||
int factorial(int x)
|
||||
{
|
||||
int r = 1;
|
||||
for (; x; --x)
|
||||
r *= x;
|
||||
return r;
|
||||
}
|
||||
|
||||
template <class Iter>
|
||||
void
|
||||
test()
|
||||
{
|
||||
typedef std::greater<int> C;
|
||||
int ia[] = {6, 5, 4, 3, 2, 1};
|
||||
const int sa = sizeof(ia)/sizeof(ia[0]);
|
||||
int prev[sa];
|
||||
for (int e = 0; e <= sa; ++e)
|
||||
{
|
||||
int count = 0;
|
||||
bool x;
|
||||
do
|
||||
{
|
||||
std::copy(ia, ia+e, prev);
|
||||
x = std::next_permutation(Iter(ia), Iter(ia+e), C());
|
||||
if (e > 1)
|
||||
{
|
||||
if (x)
|
||||
assert(std::lexicographical_compare(prev, prev+e, ia, ia+e, C()));
|
||||
else
|
||||
assert(std::lexicographical_compare(ia, ia+e, prev, prev+e, C()));
|
||||
}
|
||||
++count;
|
||||
} while (x);
|
||||
assert(count == factorial(e));
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test<bidirectional_iterator<int*> >();
|
||||
test<random_access_iterator<int*> >();
|
||||
test<int*>();
|
||||
}
|
@@ -0,0 +1,66 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <algorithm>
|
||||
|
||||
// template<BidirectionalIterator Iter>
|
||||
// requires ShuffleIterator<Iter>
|
||||
// && LessThanComparable<Iter::value_type>
|
||||
// bool
|
||||
// prev_permutation(Iter first, Iter last);
|
||||
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../iterators.h"
|
||||
|
||||
#include <cstdio>
|
||||
|
||||
int factorial(int x)
|
||||
{
|
||||
int r = 1;
|
||||
for (; x; --x)
|
||||
r *= x;
|
||||
return r;
|
||||
}
|
||||
|
||||
template <class Iter>
|
||||
void
|
||||
test()
|
||||
{
|
||||
int ia[] = {6, 5, 4, 3, 2, 1};
|
||||
const int sa = sizeof(ia)/sizeof(ia[0]);
|
||||
int prev[sa];
|
||||
for (int e = 0; e <= sa; ++e)
|
||||
{
|
||||
int count = 0;
|
||||
bool x;
|
||||
do
|
||||
{
|
||||
std::copy(ia, ia+e, prev);
|
||||
x = std::prev_permutation(Iter(ia), Iter(ia+e));
|
||||
if (e > 1)
|
||||
{
|
||||
if (x)
|
||||
assert(std::lexicographical_compare(ia, ia+e, prev, prev+e));
|
||||
else
|
||||
assert(std::lexicographical_compare(prev, prev+e, ia, ia+e));
|
||||
}
|
||||
++count;
|
||||
} while (x);
|
||||
assert(count == factorial(e));
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test<bidirectional_iterator<int*> >();
|
||||
test<random_access_iterator<int*> >();
|
||||
test<int*>();
|
||||
}
|
@@ -0,0 +1,68 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <algorithm>
|
||||
|
||||
// template<BidirectionalIterator Iter, StrictWeakOrder<auto, Iter::value_type> Compare>
|
||||
// requires ShuffleIterator<Iter>
|
||||
// && CopyConstructible<Compare>
|
||||
// bool
|
||||
// prev_permutation(Iter first, Iter last, Compare comp);
|
||||
|
||||
#include <algorithm>
|
||||
#include <functional>
|
||||
#include <cassert>
|
||||
|
||||
#include "../../iterators.h"
|
||||
|
||||
#include <cstdio>
|
||||
|
||||
int factorial(int x)
|
||||
{
|
||||
int r = 1;
|
||||
for (; x; --x)
|
||||
r *= x;
|
||||
return r;
|
||||
}
|
||||
|
||||
template <class Iter>
|
||||
void
|
||||
test()
|
||||
{
|
||||
typedef std::greater<int> C;
|
||||
int ia[] = {1, 2, 3, 4, 5, 6};
|
||||
const int sa = sizeof(ia)/sizeof(ia[0]);
|
||||
int prev[sa];
|
||||
for (int e = 0; e <= sa; ++e)
|
||||
{
|
||||
int count = 0;
|
||||
bool x;
|
||||
do
|
||||
{
|
||||
std::copy(ia, ia+e, prev);
|
||||
x = std::prev_permutation(Iter(ia), Iter(ia+e), C());
|
||||
if (e > 1)
|
||||
{
|
||||
if (x)
|
||||
assert(std::lexicographical_compare(ia, ia+e, prev, prev+e, C()));
|
||||
else
|
||||
assert(std::lexicographical_compare(prev, prev+e, ia, ia+e, C()));
|
||||
}
|
||||
++count;
|
||||
} while (x);
|
||||
assert(count == factorial(e));
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test<bidirectional_iterator<int*> >();
|
||||
test<random_access_iterator<int*> >();
|
||||
test<int*>();
|
||||
}
|
Reference in New Issue
Block a user