Skip to content

Commit

Permalink
Add more branchless functions
Browse files Browse the repository at this point in the history
  • Loading branch information
daedalus committed Feb 1, 2024
1 parent 396d536 commit 2211735
Showing 1 changed file with 19 additions and 1 deletion.
20 changes: 19 additions & 1 deletion branchless.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
Sgn = lambda a: 1 * (a > 0) + (-1) * (a <= 0)
IsEven = lambda a: (a & 1) ^ 1
IsOdd = lambda a: a & 1

MinZeroAnd = lambda a: a * (a <= 0) + 0 * (a > 0)
MaxZeroAnd = lambda a: a * (a >= 0) + 0 * (a < 0)

Sgn = lambda a: (a > 0) - (a < 0)
Abs = lambda a: a * (a > 0) + (-a) * (a <= 0)

Min = lambda a,b: a * (a < b) + b * (b <= a)
Expand All @@ -10,8 +16,20 @@
Upper2 = lambda s: "".join(chr(ord(s[i]) - 32 * (s[i] >= 'a' and s[i] <= 'z' )) for i in range(0,len(s)))
Lower2 = lambda s: "".join(chr(ord(s[i]) + 32 * (s[i] >= 'A' and s[i] <= 'Z' )) for i in range(0,len(s)))

clamp = lambda x, min_,max_: min(max(x, min_), max_)


def test():
assert(IsOdd(3) == True)
assert(IsOdd(2) == False)
assert(IsEven(3) == False)
assert(IsEven(2) == True)

assert(MinZeroAnd(-3) == -3)
assert(MinZeroAnd(3) == 0)
assert(MaxZeroAnd(-3) == 0)
assert(MaxZeroAnd(3) == 3)

assert(Sgn(-3) == -1)
assert(Sgn(3) == 1)
assert(Abs(-3) == 3)
Expand Down

0 comments on commit 2211735

Please sign in to comment.