| 2860 | } |
| 2861 | } |
| 2862 | void test_copy_tensor_slice_cpu() |
| 2863 | { |
| 2864 | using namespace dlib::tt; |
| 2865 | print_spinner(); |
| 2866 | resizable_tensor dest(10, 9, 7, 15); |
| 2867 | resizable_tensor src1(10, 3, 7, 15); |
| 2868 | resizable_tensor src2(10, 3, 6, 12); |
| 2869 | resizable_tensor src3(10, 9, 7, 15); |
| 2870 | tt::tensor_rand rnd; |
| 2871 | rnd.fill_gaussian(dest); |
| 2872 | rnd.fill_gaussian(src1); |
| 2873 | rnd.fill_gaussian(src2); |
| 2874 | rnd.fill_gaussian(src3); |
| 2875 | |
| 2876 | const resizable_tensor old_dest = dest; |
| 2877 | |
| 2878 | cpu::copy_tensor(false, dest, 0, 0, 0, src1, 0, 0, 0, src1.k(), src1.nr(), src1.nc()); //full copy src1->dest |
| 2879 | cpu::copy_tensor(false, dest, src1.k(), 0, 0, src2, 0, 0, 0, src2.k(), src2.nr(), src2.nc()); //full copy src2->dest with offset of src1 |
| 2880 | cpu::copy_tensor(false, dest, src1.k() + src2.k(), 1, 1, src3, 3, 1, 1, 3, src3.nr()-2, src3.nc()-2); //partial copy src3 into the rest place of dest |
| 2881 | |
| 2882 | |
| 2883 | for (long i = 0; i < dest.num_samples(); ++i) |
| 2884 | { |
| 2885 | for (long k = 0; k < dest.k(); ++k) |
| 2886 | { |
| 2887 | for (long r = 0; r < dest.nr(); ++r) |
| 2888 | { |
| 2889 | for (long c = 0; c < dest.nc(); ++c) |
| 2890 | { |
| 2891 | float old_dest_value = tensor_read_cpu(old_dest, i, k, r, c); |
| 2892 | float dest_value = tensor_read_cpu(dest, i, k, r, c); |
| 2893 | // first part is from src1 |
| 2894 | if (k < src1.k()) |
| 2895 | { |
| 2896 | float src_value = tensor_read_cpu(src1, i, k, r, c); |
| 2897 | DLIB_TEST(src_value == dest_value); |
| 2898 | } |
| 2899 | // second part is from src2 |
| 2900 | else if (k < src1.k() + src2.k()) |
| 2901 | { |
| 2902 | if (r < src2.nr() && c < src2.nc()) |
| 2903 | { |
| 2904 | float src_value = tensor_read_cpu(src2, i, k - src1.k(), r, c); |
| 2905 | DLIB_TEST(src_value == dest_value); |
| 2906 | } |
| 2907 | else |
| 2908 | { |
| 2909 | DLIB_TEST(old_dest_value == dest_value); |
| 2910 | } |
| 2911 | } |
| 2912 | // third part is from src3 |
| 2913 | else |
| 2914 | { |
| 2915 | if (r > 0 && c > 0 && r + 1 < src3.nr() && c + 1 < src3.nc()) |
| 2916 | { |
| 2917 | float src_value = tensor_read_cpu(src3, i, k - src1.k() - src2.k() + 3, r, c); |
| 2918 | DLIB_TEST(src_value == dest_value); |
| 2919 | } |
no test coverage detected