text: function shouldBe(actual, expected) {
      if (actual !== expected)
          throw new Error('bad value: ' + actual);
  }
  
  function testAttribute(object, name, type) {
      shouldBe(Reflect.has(object, name), true);
      let desc = Reflect.getOwnPropertyDescriptor(object, name);
      shouldBe(desc.configurable, true);
      shouldBe(desc.enumerable, true);
      if (type === 'get') {
          shouldBe(typeof desc.get, 'function');
          shouldBe(typeof desc.set, 'undefined');
      } else if (type === 'set') {
          shouldBe(typeof desc.get, 'undefined');
          shouldBe(typeof desc.set, 'function');
      } else {
          shouldBe(typeof desc.get, 'function');
          shouldBe(typeof desc.set, 'function');
      }
  }
  noInline(testAttribute);
  
  function setter(name)
  {
      var object = {
          ok: 0,
          set [name](value) {
              this.ok = value;
          }
      };
  
      testAttribute(object, 'hello', 'set');
      object.hello = 42;
      return object.ok;
  
  }
  noInline(setter);
  
  for (var i = 0; i < 10000; ++i)
      shouldBe(setter('hello'), 42);
  