Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/torch/torch7.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorSoumith Chintala <soumith@gmail.com>2016-04-17 02:54:34 +0300
committerSoumith Chintala <soumith@gmail.com>2016-04-17 02:54:34 +0300
commit2243cbd0b8de8ad457b0dae1d7b8b926dcb0cb84 (patch)
tree57393c9352a25aac605b02993ff49999b63fab3e /test
parent28a415cd86b99b7235670f68a2e49b6597c88992 (diff)
parentdf137f9b417723f6369d6bccb1933257be69ba79 (diff)
Merge pull request #620 from liboyue/Add_fmod_remainder_and_remove_mod
Add fmod(), remainder(), remove mod() and fix tensor operator % behavior
Diffstat (limited to 'test')
-rw-r--r--test/test.lua107
1 files changed, 94 insertions, 13 deletions
diff --git a/test/test.lua b/test/test.lua
index 87f46b2..fe197c0 100644
--- a/test/test.lua
+++ b/test/test.lua
@@ -701,12 +701,29 @@ function torchtest.div()
mytester:assertlt(err, precision, 'error in torch.div - scalar, non contiguous')
end
-function torchtest.mod()
- local m1 = torch.Tensor(10,10):uniform(10)
+function torchtest.fmod()
+ local m1 = torch.Tensor(10,10):uniform(-10, 10)
local res1 = m1:clone()
local q = 2.1
- res1[{ {},3 }]:mod(q)
+ 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.remainder()
+ local m1 = torch.Tensor(10, 10):uniform(-10, 10)
+ local res1 = m1:clone()
+
+ local q = 2.1
+ res1[{ {},3 }]:remainder(q)
local res2 = m1:clone()
for i = 1,m1:size(1) do
@@ -715,7 +732,7 @@ function torchtest.mod()
local err = (res1-res2):abs():max()
- mytester:assertlt(err, precision, 'error in torch.mod - scalar, non contiguous')
+ mytester:assertlt(err, precision, 'error in torch.remainder - scalar, non contiguous')
end
function torchtest.mm()
@@ -1034,13 +1051,77 @@ function torchtest.cdiv() -- [res] torch.cdiv([res,] tensor1, tensor2)
mytester:assertlt(maxerr, precision, 'error in torch.cdiv - non-contiguous')
end
-function torchtest.cmod() -- [res] torch.cmod([res,] tensor1, tensor2)
+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.cremainder()
-- contiguous
- local m1 = torch.Tensor(10, 10, 10):uniform(10)
- local m2 = torch.Tensor(10, 10 * 10):uniform(3)
+ 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.cmod(sm1, sm2)
+ local res1 = torch.cremainder(sm1, sm2)
local res2 = res1:clone():zero()
for i = 1,sm1:size(1) do
for j = 1, sm1:size(2) do
@@ -1064,14 +1145,14 @@ function torchtest.cmod() -- [res] torch.cmod([res,] tensor1, tensor2)
end
end
end
- mytester:assertlt(maxerr, precision, 'error in torch.cmod - contiguous')
+ mytester:assertlt(maxerr, precision, 'error in torch.cremainder - contiguous')
-- non-contiguous
- local m1 = torch.Tensor(10, 10, 10):uniform(10)
- local m2 = torch.Tensor(10 * 10, 10 * 10):uniform(3)
+ 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.cmod(sm1, sm2)
+ local res1 = torch.cremainder(sm1, sm2)
local res2 = res1:clone():zero()
for i = 1,sm1:size(1) do
for j = 1, sm1:size(2) do
@@ -1095,7 +1176,7 @@ function torchtest.cmod() -- [res] torch.cmod([res,] tensor1, tensor2)
end
end
end
- mytester:assertlt(maxerr, precision, 'error in torch.cmod - non-contiguous')
+ mytester:assertlt(maxerr, precision, 'error in torch.cremainder - non-contiguous')
end
function torchtest.cmul() -- [res] torch.cmul([res,] tensor1, tensor2)