1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
#include <gtest/gtest.h>
#include <exception>
#include <torch/csrc/lazy/core/util.h>
namespace torch {
namespace lazy {
TEST(UtilTest, ExceptionCleanup) {
std::exception_ptr exception;
EXPECT_EQ(exception, nullptr);
{
ExceptionCleanup cleanup(
[&](std::exception_ptr&& e) { exception = std::move(e); });
cleanup.SetStatus(std::make_exception_ptr(std::runtime_error("Oops!")));
}
EXPECT_NE(exception, nullptr);
try {
std::rethrow_exception(exception);
} catch (const std::exception& e) {
EXPECT_STREQ(e.what(), "Oops!");
}
exception = nullptr;
{
ExceptionCleanup cleanup(
[&](std::exception_ptr&& e) { exception = std::move(e); });
cleanup.SetStatus(std::make_exception_ptr(std::runtime_error("")));
cleanup.Release();
}
EXPECT_EQ(exception, nullptr);
}
TEST(UtilTest, MaybeRef) {
std::string storage("String storage");
MaybeRef<std::string> refStorage(storage);
EXPECT_FALSE(refStorage.IsStored());
EXPECT_EQ(*refStorage, storage);
MaybeRef<std::string> effStorage(std::string("Vanishing"));
EXPECT_TRUE(effStorage.IsStored());
EXPECT_EQ(*effStorage, "Vanishing");
}
TEST(UtilTest, Iota) {
auto result = Iota<int>(0);
EXPECT_TRUE(result.empty());
result = Iota<int>(1);
EXPECT_EQ(result.size(), 1);
EXPECT_EQ(result[0], 0);
result = Iota<int>(2);
EXPECT_EQ(result.size(), 2);
EXPECT_EQ(result[0], 0);
EXPECT_EQ(result[1], 1);
result = Iota<int>(3, 1, 3);
EXPECT_EQ(result.size(), 3);
EXPECT_EQ(result[0], 1);
EXPECT_EQ(result[1], 4);
EXPECT_EQ(result[2], 7);
}
} // namespace lazy
} // namespace torch
|