mirror of
https://github.com/tinygrad/tinygrad.git
synced 2026-04-29 03:00:14 -04:00
more UOp sum div with gcd tests (#5936)
* more UOp sum div with gcd tests * one more
This commit is contained in:
@@ -148,6 +148,7 @@ class TestSymbolic(unittest.TestCase):
|
||||
def test_sum_div_some_partial_factor(self):
|
||||
self.helper_test_variable(Node.sum([Variable("a", 0, 7)*6, Variable("b", 0, 7)*6]) // 16, 0, 5, "(((a*3)+(b*3))//8)")
|
||||
self.helper_test_variable(Node.sum([NumNode(16), Variable("a", 0, 7)*6, Variable("b", 0, 7)*6]) // 16, 1, 6, "((((a*3)+(b*3))//8)+1)")
|
||||
self.helper_test_variable((Variable("a", 0, 7)*30+20)//20, 1, 11, "(((a*3)//2)+1)")
|
||||
|
||||
def test_sum_div_no_factor(self):
|
||||
self.helper_test_variable(Node.sum([Variable("a", 0, 7)*5, Variable("b", 0, 3)*5]) // 2, 0, 25, "(((a*5)+(b*5))//2)")
|
||||
@@ -272,6 +273,22 @@ class TestSymbolic(unittest.TestCase):
|
||||
self.helper_test_variable((-Variable("idx", 0, 100)+200)//-4 + 50, 0, 25, "(idx//4)")
|
||||
self.helper_test_variable((-Variable("idx", 0, 100)+201)//-4 + 50, -1, 24, "(((3+idx)//4)+-1)")
|
||||
|
||||
def test_sum_div_big_const(self):
|
||||
gidx0 = Variable("gidx0", 0, 24)
|
||||
self.helper_test_variable((gidx0+19)//20, 0, 2, "((19+gidx0)//20)")
|
||||
self.helper_test_variable((gidx0+20)//20, 1, 2, "((gidx0//20)+1)")
|
||||
self.helper_test_variable((gidx0+21)//20, 1, 2, "(((1+gidx0)//20)+1)")
|
||||
|
||||
def test_sum_div_complex1(self):
|
||||
gidx0 = Variable("gidx0", 0, 24)
|
||||
gidx1 = Variable("gidx1", 0, 1)
|
||||
gidx2 = Variable("gidx2", 0, 255)
|
||||
lidx0 = Variable("lidx0", 0, 1)
|
||||
lidx1 = Variable("lidx1", 0, 15)
|
||||
lidx2 = Variable("lidx2", 0, 3)
|
||||
alu0 = gidx2*640+gidx1*160+(gidx0//5)*2+lidx0*320+lidx1*10
|
||||
self.helper_test_variable((alu0+lidx2*2+1)//20, 0, 8192, "((((((gidx0//5)+lidx2)//5)+lidx1)//2)+(gidx1*8)+(gidx2*32)+(lidx0*16))")
|
||||
|
||||
class TestSymbolicNumeric(unittest.TestCase):
|
||||
def helper_test_numeric(self, f):
|
||||
# TODO: why are the negative tests broken? (even if we did support negative variables)
|
||||
|
||||
@@ -207,6 +207,7 @@ class TestSymbolic(unittest.TestCase):
|
||||
def test_sum_div_some_partial_factor(self):
|
||||
self.helper_test_variable(Node.sum([Variable("a", 0, 7)*6, Variable("b", 0, 7)*6]) // 16, 0, 5, "(((a*3)+(b*3))//8)")
|
||||
self.helper_test_variable(Node.sum([NumNode(16), Variable("a", 0, 7)*6, Variable("b", 0, 7)*6]) // 16, 1, 6, "((((a*3)+(b*3))//8)+1)")
|
||||
self.helper_test_variable((Variable("a", 0, 7)*30+20)//20, 1, 11, "(((a*3)//2)+1)")
|
||||
|
||||
def test_sum_div_no_factor(self):
|
||||
self.helper_test_variable(Node.sum([Variable("a", 0, 7)*5, Variable("b", 0, 3)*5]) // 2, 0, 25, "(((a*5)+(b*5))//2)")
|
||||
@@ -336,6 +337,26 @@ class TestSymbolic(unittest.TestCase):
|
||||
self.helper_test_variable((-Variable("idx", 0, 100)+200)//-4 + 50, 0, 25, "((((-idx)+200)//(-4))+50)")
|
||||
self.helper_test_variable((-Variable("idx", 0, 100)+201)//-4 + 50, 0, 25, "((((-idx)+201)//(-4))+50)")
|
||||
|
||||
@unittest.expectedFailure
|
||||
def test_sum_div_big_const(self):
|
||||
gidx0 = Variable("gidx0", 0, 24)
|
||||
self.helper_test_variable((gidx0+19)//20, 0, 2, "((19+gidx0)//20)")
|
||||
self.helper_test_variable((gidx0+20)//20, 1, 2, "((gidx0//20)+1)")
|
||||
self.helper_test_variable((gidx0+21)//20, 1, 2, "(((1+gidx0)//20)+1)")
|
||||
|
||||
@unittest.expectedFailure
|
||||
def test_sum_div_complex1(self):
|
||||
gidx0 = Variable("gidx0", 0, 24)
|
||||
gidx1 = Variable("gidx1", 0, 1)
|
||||
gidx2 = Variable("gidx2", 0, 255)
|
||||
lidx0 = Variable("lidx0", 0, 1)
|
||||
lidx1 = Variable("lidx1", 0, 15)
|
||||
lidx2 = Variable("lidx2", 0, 3)
|
||||
alu0 = gidx2*640+gidx1*160+(gidx0//5)*2+lidx0*320+lidx1*10
|
||||
self.helper_test_variable((alu0+lidx2*2+1)//20, 0, 8192, "((((((gidx0//5)+lidx2)//5)+lidx1)//2)+(gidx1*8)+(gidx2*32)+(lidx0*16))")
|
||||
|
||||
# *** below are uop_symbolic only
|
||||
|
||||
# NOTE: tests are not correct in symbolic
|
||||
# TODO: simplify the expression
|
||||
def test_div_neg_all_range(self):
|
||||
|
||||
Reference in New Issue
Block a user