﻿:: { n:i8, s:i8*, b:b, i1:i1, u1:u1, i2:i2, u2:u2, i4:i4, u4:u4, u8:u8 }

Take(s, n)
Drop(s, n)
Take(s, b)
Drop(s, b)
Take(s, i1)
Drop(s, i1)
Take(s, u1)
Drop(s, u1)
Take(s, i2)
Drop(s, i2)
Take(s, u2)
Drop(s, u2)
Take(s, i4)
Drop(s, i4)
Take(s, u4)
Drop(s, u4)
Take(s, u8)
Drop(s, u8)
Take(s, 5)
Drop(s, 5)

Take(Range(20), n)
Drop(Range(20), n)
Take(Range(20), b)
Drop(Range(20), b)
Take(Range(20), i1)
Drop(Range(20), i1)
Take(Range(20), 5)
Drop(Range(20), 5)
Take(Range(20), 30)
Drop(Range(20), 30)
Take(s, n, it > 3)
Drop(s, n, it > 3)
Take(s, 5, it > 3)
Drop(s, 5, it > 3)
Take(Range(20), n, it > 3)
Drop(Range(20), n, it > 3)
Take(Range(20), 5, it > 3)
Drop(Range(20), 5, it > 3)
Take(Range(20), 30, it > 3)
Drop(Range(20), 30, it > 3)
Take(s, n, true)
Drop(s, n, true)
Take(s, 5, true)
Drop(s, 5, true)
Take(Range(20), n, true)
Drop(Range(20), n, true)
Take(Range(20), 5, true)
Drop(Range(20), 5, true)
Take(Range(20), 30, true)
Drop(Range(20), 30, true)
Take(s, [if] true)
Drop(s, [if] true)
Take(s, [if] false)
Drop(s, [if] false)
Take(s, [while] true)
Drop(s, [while] true)
Take(s, [while] false)
Drop(s, [while] false)
Take(s, n, false)
Drop(s, n, false)
Take(s, 5, false)
Drop(s, 5, false)
Take(Range(20), n, false)
Drop(Range(20), n, false)
Take(Range(20), 5, false)
Drop(Range(20), 5, false)
Take(Range(20), 30, false)
Drop(Range(20), 30, false)

Take(Range(0), n)
Drop(Range(0), n)
Take(Range(0), n, b)
Drop(Range(0), n, b)

Take(s, 0 * 3)
Drop(s, 0 * 3)
Take(s, 0 * 3, b)
Drop(s, 0 * 3, b)

Take([1,2,3,4,5], 1+1)
Drop([1,2,3,4,5], 1+1)

Take(Range(20), -1)
Take(Range(20), -1, b)
Drop(Range(20), -1)
Drop(Range(20), -1, b)
Take(s, -1)
Take(s, -1, b)
Drop(s, -1)
Drop(s, -1, b)

TakeIf(s, b)
DropIf(s, b)
TakeIf(s, true)
DropIf(s, true)
TakeIf(s, false)
DropIf(s, false)
TakeIf(Range(10), b)
DropIf(Range(10), b)
TakeIf(Range(10), true)
DropIf(Range(10), true)
TakeIf(Range(10), false)
DropIf(Range(10), false)

TakeWhile(s, b)
DropWhile(s, b)
TakeWhile(s, true)
DropWhile(s, true)
TakeWhile(s, false)
DropWhile(s, false)
TakeWhile(Range(10), b)
DropWhile(Range(10), b)
TakeWhile(Range(10), true)
DropWhile(Range(10), true)
TakeWhile(Range(10), false)
DropWhile(Range(10), false)
