|  | //===- 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 <cstdlib> | 
|  |  | 
|  | 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); | 
|  | } |