| 2755 | return *p; |
| 2756 | } |
| 2757 | void test_copy_tensor_cpu() |
| 2758 | { |
| 2759 | using namespace dlib::tt; |
| 2760 | print_spinner(); |
| 2761 | resizable_tensor dest(10, 9, 7, 15); |
| 2762 | resizable_tensor src1(10, 3, 7, 15); |
| 2763 | resizable_tensor src2(10, 3, 7, 15); |
| 2764 | resizable_tensor src3(10, 9, 7, 15); |
| 2765 | tt::tensor_rand rnd; |
| 2766 | rnd.fill_gaussian(dest); |
| 2767 | rnd.fill_gaussian(src1); |
| 2768 | rnd.fill_gaussian(src2); |
| 2769 | rnd.fill_gaussian(src3); |
| 2770 | |
| 2771 | cpu::copy_tensor(false, dest, 0, src1, 0, src1.k()); //full copy src1->dest |
| 2772 | cpu::copy_tensor(false, dest, src1.k(), src2, 0, src2.k()); //full copy src2->dest with offset of src1 |
| 2773 | cpu::copy_tensor(false, dest, src1.k() + src2.k(), src3, 3, 3); //partial copy src3 into the rest place of dest |
| 2774 | |
| 2775 | |
| 2776 | for (long i = 0; i < dest.num_samples(); ++i) |
| 2777 | { |
| 2778 | for (long k = 0; k < dest.k(); ++k) |
| 2779 | { |
| 2780 | for (long r = 0; r < dest.nr(); ++r) |
| 2781 | { |
| 2782 | for (long c = 0; c < dest.nc(); ++c) |
| 2783 | { |
| 2784 | float dest_value = tensor_read_cpu(dest, i, k, r, c); |
| 2785 | // first part is from src1 |
| 2786 | if (k < src1.k()) |
| 2787 | { |
| 2788 | float src_value = tensor_read_cpu(src1, i, k, r, c); |
| 2789 | DLIB_TEST(src_value == dest_value); |
| 2790 | } |
| 2791 | // second part is from src2 |
| 2792 | else if (k < src1.k() + src2.k()) |
| 2793 | { |
| 2794 | float src_value = tensor_read_cpu(src2, i, k - src1.k(), r, c); |
| 2795 | DLIB_TEST(src_value == dest_value); |
| 2796 | } |
| 2797 | // third part is from src3 |
| 2798 | else |
| 2799 | { |
| 2800 | float src_value = tensor_read_cpu(src3, i, k - src1.k() - src2.k() + 3, r, c); |
| 2801 | DLIB_TEST(src_value == dest_value); |
| 2802 | } |
| 2803 | } |
| 2804 | } |
| 2805 | } |
| 2806 | } |
| 2807 | } |
| 2808 | void test_copy_tensor_add_to_cpu() |
| 2809 | { |
| 2810 | using namespace dlib::tt; |
no test coverage detected