| // Copyright 2019 the V8 project authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | // Flags: --allow-natives-syntax | 
 |  | 
 | import * as mod from "keyed-has-ic-module-export.mjs"; | 
 |  | 
 | function testIn(obj, key) { | 
 |   return key in obj; | 
 | } | 
 |  | 
 | function expectTrue(obj, key) { | 
 |   assertTrue(testIn(obj, key)); | 
 | } | 
 |  | 
 | function expectFalse(obj, key) { | 
 |   assertFalse(testIn(obj, key)); | 
 | } | 
 |  | 
 | var tests = { | 
 |   monomporphicTrue: function() { | 
 |     expectTrue(mod, "a"); | 
 |     expectTrue(mod, "a"); | 
 |     expectTrue(mod, "a"); | 
 |   }, | 
 |  | 
 |   polymprohicKeyTrue: function() { | 
 |     expectTrue(mod, "a"); | 
 |     expectTrue(mod, "b"); | 
 |     expectTrue(mod, "c"); | 
 |   }, | 
 |  | 
 |   monomorphicFalse: function() { | 
 |     expectFalse(mod, "d"); | 
 |     expectFalse(mod, "d"); | 
 |     expectFalse(mod, "d"); | 
 |   }, | 
 |  | 
 |   polymorphicKeyFalse: function() { | 
 |     expectFalse(mod, "d"); | 
 |     expectFalse(mod, "e"); | 
 |     expectFalse(mod, "f"); | 
 |   }, | 
 |  | 
 |   polymorphicTrue: function() { | 
 |     var o = {a: "A"}; | 
 |     expectTrue(mod, "a"); | 
 |     expectTrue(o, "a"); | 
 |     expectTrue(mod, "a"); | 
 |     expectTrue(o, "a"); | 
 |   }, | 
 |  | 
 |   polymorphicFalse: function() { | 
 |     var o = {a: "A"}; | 
 |     expectFalse(mod, "d"); | 
 |     expectFalse(o, "d"); | 
 |     expectFalse(mod, "d"); | 
 |     expectFalse(o, "d"); | 
 |   } | 
 | }; | 
 |  | 
 | for (let test in tests) { | 
 |   %DeoptimizeFunction(testIn); | 
 |   %ClearFunctionFeedback(testIn); | 
 |   %PrepareFunctionForOptimization(testIn); | 
 |   tests[test](); | 
 |   %OptimizeFunctionOnNextCall(testIn); | 
 |   tests[test](); | 
 | } |