#!/bin/bash
set -e
tmpdir=$(mktemp -d)
trap "rm -rf $tmpdir" EXIT
cd "$tmpdir"

cat > "CMakeLists.txt" << EOF
cmake_minimum_required(VERSION 3.10)
project(open3d_test)
find_package(Open3D REQUIRED)
add_executable(\${PROJECT_NAME} open3d_test.cpp)
target_link_libraries(\${PROJECT_NAME} PRIVATE Open3D::Open3D)
EOF
cat > "open3d_test.cpp" << EOF
#include <Open3D/Open3D.h>
#include <iostream>
#include <memory>

int main (int argc, char** argv)
{
	auto cloud_ptr = std::make_shared<open3d::geometry::PointCloud>();
	if (!open3d::io::ReadPointCloud(argv[1], *cloud_ptr))
		return 1;
	if (cloud_ptr->points_.size() != 4) return 1;
	if ((cloud_ptr->points_[0] - Eigen::Vector3d(0, 1, 2)).norm() > 1e-4) return 1;
	if ((cloud_ptr->points_[1] - Eigen::Vector3d(3, 4, 5)).norm() > 1e-4) return 1;
	if ((cloud_ptr->points_[2] - Eigen::Vector3d(6, 7, 8)).norm() > 1e-4) return 1;
	if ((cloud_ptr->points_[3] - Eigen::Vector3d(9, 0, 1)).norm() > 1e-4) return 1;
	std::cout << "OK\n";
	return 0;
}
EOF
cat > "cloud.xyz" << EOF
0 1 2
3 4 5
6 7 8
9 0 1
EOF

echo '$' cmake .
cmake .
echo '$' make VERBOSE=ON
make VERBOSE=ON
echo '$' ./open3d_test cloud.xyz
./open3d_test cloud.xyz

