/* eslint id-length: 0  */

"use strict";

var d = require("d");

module.exports = function (t, a) {
	var value = [], obj = {};
	Object.defineProperties(
		obj,
		t({
			someFn: d(
				function (x, y) {
					a(this, obj);
					return x + y;
				},
				{
					refCounter: true,
					dispose: function (val) {
						value.push(val);
					}
				}
			)
		})
	);

	obj = Object.create(obj);
	obj.someFn(3, 7);
	obj.someFn(5, 8);
	obj.someFn(12, 4);
	a.deep(value, [], "Pre");
	obj.someFn(5, 8);
	obj.someFn.deleteRef(5, 8);
	a.deep(value, [], "Pre");
	obj.someFn.deleteRef(5, 8);
	a.deep(value, [13], "#1");
	value = [];
	obj.someFn.deleteRef(12, 4);
	a.deep(value, [16], "#2");

	value = [];
	obj.someFn(77, 11);
	obj.someFn.clear();
	a.deep(value, [10, 88], "Clear all");
};
