mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Add is_even and is_odd to math module
This commit is contained in:
committed by
Christoffer Lerno
parent
5aae9f3204
commit
49ea950f78
@@ -845,6 +845,46 @@ macro int128 int128.sat_sub(int128 x, int128 y) => $$sat_sub(x, y);
|
||||
macro int128 int128.sat_mul(int128 x, int128 y) => $$sat_mul(x, y);
|
||||
macro int128 int128.sat_shl(int128 x, int128 y) => $$sat_shl(x, y);
|
||||
|
||||
/**
|
||||
* @require values::@is_int(x) `The input must be an integer`
|
||||
**/
|
||||
macro bool is_odd(x) => (bool)(x & 1);
|
||||
|
||||
/**
|
||||
* @require values::@is_int(x) `The input must be an integer`
|
||||
**/
|
||||
macro bool is_even(x) => !is_odd(x);
|
||||
|
||||
macro bool char.is_even(char x) => is_even(x);
|
||||
macro bool char.is_odd(char x) => is_odd(x);
|
||||
|
||||
macro bool ichar.is_even(ichar x) => is_even(x);
|
||||
macro bool ichar.is_odd(ichar x) => is_odd(x);
|
||||
|
||||
macro bool ushort.is_even(ushort x) => is_even(x);
|
||||
macro bool ushort.is_odd(ushort x) => is_odd(x);
|
||||
|
||||
macro bool short.is_even(short x) => is_even(x);
|
||||
macro bool short.is_odd(short x) => is_odd(x);
|
||||
|
||||
macro bool uint.is_even(uint x) => is_even(x);
|
||||
macro bool uint.is_odd(uint x) => is_odd(x);
|
||||
|
||||
macro bool int.is_even(int x) => is_even(x);
|
||||
macro bool int.is_odd(int x) => is_odd(x);
|
||||
|
||||
macro bool ulong.is_even(ulong x) => is_even(x);
|
||||
macro bool ulong.is_odd(ulong x) => is_odd(x);
|
||||
|
||||
macro bool long.is_even(long x) => is_even(x);
|
||||
macro bool long.is_odd(long x) => is_odd(x);
|
||||
|
||||
macro bool uint128.is_even(uint128 x) => is_even(x);
|
||||
macro bool uint128.is_odd(uint128 x) => is_odd(x);
|
||||
|
||||
macro bool int128.is_even(int128 x) => is_even(x);
|
||||
macro bool int128.is_odd(int128 x) => is_odd(x);
|
||||
|
||||
/**
|
||||
* @checked x & 1
|
||||
*/
|
||||
|
||||
23
test/unit/stdlib/math/math_is_even_odd.c3
Normal file
23
test/unit/stdlib/math/math_is_even_odd.c3
Normal file
@@ -0,0 +1,23 @@
|
||||
module math_is_even_odd_tests;
|
||||
import std::math;
|
||||
import std::io;
|
||||
|
||||
macro test(start, ...)
|
||||
{
|
||||
$for (var $i = 0; $i < $vacount; $i++)
|
||||
for ($vatype($i) i = ($vatype($i))start; i < 5; i+=2)
|
||||
{
|
||||
assert(math::is_even(i));
|
||||
assert(i.is_even());
|
||||
|
||||
assert(!math::is_odd(i));
|
||||
assert(!i.is_odd());
|
||||
}
|
||||
$endfor;
|
||||
}
|
||||
|
||||
fn void! tests() @test
|
||||
{
|
||||
test(0, char, ushort, uint, ulong, uptr, usz, uint128);
|
||||
test(-4, ichar, short, int, long, iptr, isz, int128);
|
||||
}
|
||||
Reference in New Issue
Block a user