// Copyright (C) 2022 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "stduniqueptrtestbench.h" #include "smart_integer.h" #include std::ostream &operator<<(std::ostream &str, const std::unique_ptr &p) { str << "unique_ptr("; if (p.get()) str << p->value(); else str << "nullptr"; str << ')'; return str; } std::ostream &operator<<(std::ostream &str, const std::unique_ptr &p) { str << "unique_ptr("; if (p.get()) str << p->value(); else str << "nullptr"; str << ')'; return str; } std::ostream &operator<<(std::ostream &str, const std::unique_ptr &p) { str << "unique_ptr("; if (p.get()) str << *p; else str << "nullptr"; str << ')'; return str; } StdUniquePtrTestBench::StdUniquePtrTestBench() = default; StdUniquePtrTestBench::~StdUniquePtrTestBench() = default; std::unique_ptr StdUniquePtrTestBench::createInteger(int v) { auto result = std::make_unique(); result->setValue(v); return result; } std::unique_ptr StdUniquePtrTestBench::createNullInteger() { return {}; } void StdUniquePtrTestBench::printInteger(const std::unique_ptr &p) { std::cerr << __FUNCTION__ << ' ' << p << '\n'; } void StdUniquePtrTestBench::takeInteger(std::unique_ptr p) { std::cerr << __FUNCTION__ << ' ' << p << '\n'; } std::unique_ptr StdUniquePtrTestBench::createInt(int v) { return std::make_unique(v); } std::unique_ptr StdUniquePtrTestBench::createNullInt() { return {}; } void StdUniquePtrTestBench::printInt(const std::unique_ptr &p) { std::cerr << __FUNCTION__ << ' ' << p << '\n'; } void StdUniquePtrTestBench::takeInt(std::unique_ptr p) { std::cerr << __FUNCTION__ << ' ' << p << '\n'; } StdUniquePtrVirtualMethodTester::StdUniquePtrVirtualMethodTester() = default; StdUniquePtrVirtualMethodTester::~StdUniquePtrVirtualMethodTester() = default; bool StdUniquePtrVirtualMethodTester::testModifyIntegerByRef(int value, int expectedValue) { auto p = std::make_unique(); p->setValue(value); const int actualValue = doModifyIntegerByRef(p); return p.get() != nullptr && actualValue == expectedValue; } bool StdUniquePtrVirtualMethodTester::testModifyIntegerValue(int value, int expectedValue) { auto p = std::make_unique(); p->setValue(value); const int actualValue = doModifyIntegerByValue(std::move(p)); return p.get() == nullptr && actualValue == expectedValue; } bool StdUniquePtrVirtualMethodTester::testCreateInteger(int value, int expectedValue) { auto p = doCreateInteger(value); return p.get() != nullptr && p->value() == expectedValue; } std::unique_ptr StdUniquePtrVirtualMethodTester::doCreateInteger(int v) { auto result = std::make_unique(); result->setValue(v); return result; } int StdUniquePtrVirtualMethodTester::doModifyIntegerByRef(const std::unique_ptr &p) { return p->value() + 1; } int StdUniquePtrVirtualMethodTester::doModifyIntegerByValue(std::unique_ptr p) { return p->value() + 1; } void StdUniquePtrTestBench::printInteger2(const std::unique_ptr &p) { std::cerr << __FUNCTION__ << ' ' << p << '\n'; }