// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -*- mode: C++ -*- // // Copyright 2023 Google LLC // // Licensed under the Apache License v2.0 with LLVM Exceptions (the // "License"); you may not use this file except in compliance with the // License. You may obtain a copy of the License at // // https://llvm.org/LICENSE.txt // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // Author: Siddharth Nayyar #include "reporting.h" #include #include #include #include #include #include "fidelity.h" namespace stg { namespace { std::string filename_to_path(const std::string& f) { return std::filesystem::path("testdata") / f; } TEST_CASE("fidelity diff") { const stg::FidelityDiff diff = { .symbol_transitions = { {{SymbolFidelity::TYPED, SymbolFidelity::UNTYPED}, {"symbol1", "symbol2"}}, {{SymbolFidelity::UNTYPED, SymbolFidelity::TYPED}, {"symbol3"}}, {{SymbolFidelity::ABSENT, SymbolFidelity::UNTYPED}, {"symbol4", "symbol5"}}, {{SymbolFidelity::ABSENT, SymbolFidelity::TYPED}, {"symbol6"}}, {{SymbolFidelity::TYPED, SymbolFidelity::ABSENT}, {"symbol7", "symbol8"}}, {{SymbolFidelity::UNTYPED, SymbolFidelity::ABSENT}, {"symbol9"}}, }, .type_transitions = {{{TypeFidelity::FULLY_DEFINED, TypeFidelity::ABSENT}, {"struct s1", "union u1"}}, {{TypeFidelity::DECLARATION_ONLY, TypeFidelity::ABSENT}, {"struct s2"}}, {{TypeFidelity::FULLY_DEFINED, TypeFidelity::DECLARATION_ONLY}, {"enum e1"}}, {{TypeFidelity::ABSENT, TypeFidelity::DECLARATION_ONLY}, {"union u2"}}, {{TypeFidelity::DECLARATION_ONLY, TypeFidelity::FULLY_DEFINED}, {"enum e2", "union u3"}}, {{TypeFidelity::ABSENT, TypeFidelity::FULLY_DEFINED}, {"struct s3"}}}, }; std::ostringstream report; CHECK(reporting::FidelityDiff(diff, report)); const std::ifstream expected_report_file( filename_to_path("fidelity_diff_report")); std::ostringstream expected_report; expected_report << expected_report_file.rdbuf(); CHECK(report.str() == expected_report.str()); } } // namespace } // namespace stg