diff options
author | liboyue <me@boyue.li> | 2016-03-29 10:46:15 +0300 |
---|---|---|
committer | liboyue <me@boyue.li> | 2016-03-29 10:46:15 +0300 |
commit | 7584a91f64d8ac4570365f66761a33a880780126 (patch) | |
tree | 20448fb3014543121a1fe105bc75dcb376f90339 /test | |
parent | 93b479bb93390564f8b24773a14702fc5ea43288 (diff) |
Add fmod(), cfmod()
Diffstat (limited to 'test')
-rw-r--r-- | test/test.lua | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/test/test.lua b/test/test.lua index ba3149a..4dbd33f 100644 --- a/test/test.lua +++ b/test/test.lua @@ -701,6 +701,23 @@ function torchtest.div() mytester:assertlt(err, precision, 'error in torch.div - scalar, non contiguous') end +function torchtest.fmod() + local m1 = torch.Tensor(10,10):uniform(-10, 10) + local res1 = m1:clone() + + local q = 2.1 + res1[{ {},3 }]:fmod(q) + + local res2 = m1:clone() + for i = 1,m1:size(1) do + res2[{ i,3 }] = math.fmod(res2[{ i,3 }], q) + end + + local err = (res1-res2):abs():max() + + mytester:assertlt(err, precision, 'error in torch.fmod - scalar, non contiguous') +end + function torchtest.mod() local m1 = torch.Tensor(10,10):uniform(10) local res1 = m1:clone() @@ -1034,6 +1051,70 @@ function torchtest.cdiv() -- [res] torch.cdiv([res,] tensor1, tensor2) mytester:assertlt(maxerr, precision, 'error in torch.cdiv - non-contiguous') end +function torchtest.cfmod() + -- contiguous + local m1 = torch.Tensor(10, 10, 10):uniform(-10, 10) + local m2 = torch.Tensor(10, 10 * 10):uniform(-3, 3) + local sm1 = m1[{4, {}, {}}] + local sm2 = m2[{4, {}}] + local res1 = torch.cfmod(sm1, sm2) + local res2 = res1:clone():zero() + for i = 1,sm1:size(1) do + for j = 1, sm1:size(2) do + local idx1d = (((i-1)*sm1:size(1)))+j + res2[i][j] = math.fmod(sm1[i][j], sm2[idx1d]) + end + end + local err = res1:clone():zero() + -- find absolute error + for i = 1, res1:size(1) do + for j = 1, res1:size(2) do + err[i][j] = math.abs(res1[i][j] - res2[i][j]) + end + end + -- find maximum element of error + local maxerr = 0 + for i = 1, err:size(1) do + for j = 1, err:size(2) do + if err[i][j] > maxerr then + maxerr = err[i][j] + end + end + end + mytester:assertlt(maxerr, precision, 'error in torch.cfmod - contiguous') + + -- non-contiguous + local m1 = torch.Tensor(10, 10, 10):uniform(-10, 10) + local m2 = torch.Tensor(10 * 10, 10 * 10):uniform(-3, 3) + local sm1 = m1[{{}, 4, {}}] + local sm2 = m2[{{}, 4}] + local res1 = torch.cfmod(sm1, sm2) + local res2 = res1:clone():zero() + for i = 1,sm1:size(1) do + for j = 1, sm1:size(2) do + local idx1d = (((i-1)*sm1:size(1)))+j + res2[i][j] = math.fmod(sm1[i][j], sm2[idx1d]) + end + end + local err = res1:clone():zero() + -- find absolute error + for i = 1, res1:size(1) do + for j = 1, res1:size(2) do + err[i][j] = math.abs(res1[i][j] - res2[i][j]) + end + end + -- find maximum element of error + local maxerr = 0 + for i = 1, err:size(1) do + for j = 1, err:size(2) do + if err[i][j] > maxerr then + maxerr = err[i][j] + end + end + end + mytester:assertlt(maxerr, precision, 'error in torch.cfmod - non-contiguous') +end + function torchtest.cmod() -- [res] torch.cmod([res,] tensor1, tensor2) -- contiguous local m1 = torch.Tensor(10, 10, 10):uniform(10) |