blob: 3d4335f7c46af7c710eea0d40e080915dd2b8f34 [file] [log] [blame]
#include "ATen/ATen.h"
#include "test_assert.h"
#include "test_seed.h"
#include<iostream>
using namespace std;
using namespace at;
void check(bool c) {
if(!c)
throw std::runtime_error("check failed.");
}
void trace() {
Tensor foo = rand(CPU(kFloat), {12,12});
// ASSERT foo is 2-dimensional and holds floats.
auto foo_a = foo.accessor<float,2>();
float trace = 0;
for(int i = 0; i < foo_a.size(0); i++) {
trace += foo_a[i][i];
}
cout << trace << "\n" << foo << "\n";
}
int main() {
manual_seed(123);
auto foo = rand(CPU(kFloat), {12,6});
ASSERT(foo.data<float>() == foo.toFloatData());
cout << foo << "\n" << foo.size(0) << " " << foo.size(1) << endl;
foo = foo+foo*3;
foo -= 4;
{
Tensor no;
ASSERT_THROWS(add_out(no,foo,foo));
}
Scalar a = 4;
float b = a.to<float>();
check(b == 4);
foo = (foo*foo) == (foo.pow(3));
foo = 2 + (foo+1);
//foo = foo[3];
auto foo_v = foo.accessor<uint8_t,2>();
cout << foo_v.size(0) << " " << foo_v.size(1) << endl;
for(int i = 0; i < foo_v.size(0); i++) {
for(int j = 0; j < foo_v.size(1); j++) {
//cout << foo_v[i][j] << " ";
foo_v[i][j]++;
}
//cout << "\n";
}
cout << foo << "\n";
trace();
float data[] = { 1, 2, 3,
4, 5, 6};
auto f = CPU(kFloat).tensorFromBlob(data, {1,2,3});
cout << f << endl;
cout << f.strides() << " " << f.sizes() << endl;
ASSERT_THROWS(f.resize_({3,4,5}));
{
int isgone = 0;
{
auto f2 = CPU(kFloat).tensorFromBlob(data, {1,2,3}, [&](void*) {
isgone++;
});
cout << f2 << endl;
}
check(isgone == 1);
}
{
int isgone = 0;
Tensor a_view;
{
auto f2 = CPU(kFloat).tensorFromBlob(data, {1,2,3}, [&](void*) {
isgone++;
});
a_view = f2.view({3,2,1});
}
check(isgone == 0);
a_view.reset();
check(isgone == 1);
}
if(at::hasCUDA()) {
int isgone = 0;
{
auto f2 = CUDA(kFloat).tensorFromBlob(nullptr, {1,2,3}, [&](void*) {
isgone++;
});
}
check(isgone==1);
}
return 0;
}