//===- llvm/unittest/Support/EditDistanceTest.cpp - Edit distance tests ---===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/ADT/StringRef.h" #include "llvm/ADT/edit_distance.h" #include "gtest/gtest.h" #include using namespace llvm; namespace { struct Result { unsigned NumMaps; unsigned EditDist; }; } // namespace static Result editDistanceAndMaps(StringRef A, StringRef B, unsigned MaxEditDistance = 0) { unsigned NumMaps = 0; auto TrackMaps = [&](const char X) { ++NumMaps; return X; }; unsigned EditDist = llvm::ComputeMappedEditDistance( ArrayRef(A.data(), A.size()), ArrayRef(B.data(), B.size()), TrackMaps, true, MaxEditDistance); return {NumMaps, EditDist}; } TEST(EditDistance, VerifyShortCircuit) { StringRef Hello = "Hello"; StringRef HelloWorld = "HelloWorld"; Result R = editDistanceAndMaps(Hello, HelloWorld, 5); EXPECT_EQ(R.EditDist, 5U); EXPECT_GT(R.NumMaps, 0U); R = editDistanceAndMaps(Hello, HelloWorld); EXPECT_EQ(R.EditDist, 5U); EXPECT_GT(R.NumMaps, 0U); R = editDistanceAndMaps(Hello, HelloWorld, 4); EXPECT_EQ(R.EditDist, 5U); EXPECT_EQ(R.NumMaps, 0U); R = editDistanceAndMaps(HelloWorld, Hello, 4); EXPECT_EQ(R.EditDist, 5U); EXPECT_EQ(R.NumMaps, 0U); R = editDistanceAndMaps(Hello, HelloWorld, 1); EXPECT_EQ(R.EditDist, 2U); EXPECT_EQ(R.NumMaps, 0U); R = editDistanceAndMaps(HelloWorld, Hello, 1); EXPECT_EQ(R.EditDist, 2U); EXPECT_EQ(R.NumMaps, 0U); }