1/**
2 * @constructor
3 */
4Base = function() {}
5
6/**
7 * @constructor
8 * @extends {Base}
9 */
10DerivedNoProto = function() {}
11
12/**
13 * @constructor
14 * @extends {Base}
15 */
16DerivedBadProto = function() {}
17
18DerivedBadProto.prototype = {
19    __proto__: Base
20}
21
22/**
23 * @interface
24 */
25InterfaceWithProto = function() {}
26
27InterfaceWithProto.prototype = {
28    __proto__: Base.prototype
29}
30
31/**
32 * @constructor
33 */
34ProtoNoExtends = function() {}
35
36ProtoNoExtends.prototype = {
37    __proto__: Base.prototype
38}
39
40/**
41 * @constructor
42 * @extends {Base}
43 */
44ProtoNotSameAsExtends = function() {}
45
46ProtoNotSameAsExtends.prototype = {
47    __proto__: Object.prototype
48}
49
50/**
51 * @constructor
52 * @extends {Base}
53 */
54ProtoNotObjectLiteral = function() {}
55
56ProtoNotObjectLiteral.prototype = Object;
57
58/**
59 * @constructor
60 * @extends {Base}
61 */
62DerivedNoSuperCall = function() {
63}
64
65DerivedNoSuperCall.prototype = {
66    __proto__: Base.prototype
67}
68
69/**
70 * @constructor
71 * @extends {Base}
72 */
73DerivedBadSuperCall = function() {
74    Base.call(1);
75}
76
77DerivedBadSuperCall.prototype = {
78    __proto__: Base.prototype
79}
80
81/**
82 * @extends {Base}
83 */
84GoodDerived = function() {
85    Base.call(this);
86}
87
88GoodDerived.prototype = {
89    __proto__: Base.prototype
90}
91
92/**
93 * @constructor
94 * @template T
95 */
96var Set = function() {}
97
98Set.prototype = {
99    add: function(item) {},
100    remove: function(item) {},
101    /** @return {boolean} */
102    contains: function(item) { return true; }
103}
104
105/**
106 * @constructor
107 * @extends {Set.<T>}
108 * @template T
109 */
110var GoodSetSubclass = function()
111{
112    Set.call(this);
113}
114
115GoodSetSubclass.prototype = {
116    __proto__: Set.prototype
117}
118
119/**
120 * @constructor
121 * @extends {Set.<T>}
122 * @template T
123 */
124var BadSetSubclass = function()
125{
126}
127
128BadSetSubclass.prototype = {
129}
130
131var NS = {};
132
133/**
134 * @constructor
135 * @extends {Base}
136 */
137NS.BadSubClass = function() {}
138