рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдХрд╛рд╕: рдХреМрд╢рд▓ рдореЗрдВ рд╕реБрдзрд╛рд░

рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдкрд╣рд▓реБрдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХреАред рдпрд╣ рдЕрднреНрдпрд╛рд╕ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред

рдЫрд╡рд┐

рдЖрдЗрдП рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕реНрдЯреИрдХ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░реЗрдВред

рд╕реНрдЯреИрдХ - рдПрд▓рдЖрдИрдПрдлрдУ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЖрдпреЛрдЬрд┐рдд рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛: рд▓рд╛рд╕реНрдЯ рдЗрди, рдлрд░реНрд╕реНрдЯ рдЖрдЙрдЯред рд╕реНрдЯреИрдХ рдкрд░ рддреАрди рдореБрдЦреНрдп рдСрдкрд░реЗрд╢рди рд╣реИрдВ:

рдзрдХреНрдХрд╛ : рдЖрдЗрдЯрдо рдЬреЛрдбрд╝реЗрдВ
рдкреЙрдк : рдПрдХ рдЖрдЗрдЯрдо рдХреЛ рд╣рдЯрд╛ рджреЗрдВ
рдЭрд╛рдВрдХрдирд╛ : рд╕рд┐рд░ рддрддреНрд╡ рдЬреЛрдбрд╝рдирд╛

рдПрдХ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрдЯреИрдХ рдХрд╣реЗрдВред рдХрд╛рд░реНрдп рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╕реНрдЯреИрдХ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХреНрд╖рдорддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рд╕реНрдЯреИрдХ рдХреЗ рдЧреБрдг рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рд░реНрдп рд╣реИрдВ:

рдЖрдЗрдЯрдо : рд╕реНрдЯреИрдХ рдкрд░ рдЖрдЗрдЯрдоред рд╣рдо рд╕реНрдЯреИрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдХреНрд╖рдорддрд╛ : рд╕реНрдЯреИрдХ рдХреНрд╖рдорддрд╛ред
isEmpty () : рдпрджрд┐ рд╕реНрдЯреИрдХ рдЦрд╛рд▓реА рд╣реИ, рддреЛ рд╕рд╣реА рд╣реИ, рдЕрдиреНрдпрдерд╛ рд╕рд╣реА рд╣реИред
isFull () : рдпрд╣ рд╕рдЪ рд╣реИ рдЕрдЧрд░ рд╕реНрдЯреИрдХ рдЕрдзрд┐рдХрддрдо рдХреНрд╖рдорддрд╛ рддрдХ рдкрд╣реБрдБрдЪрддрд╛ рд╣реИ, рдпрд╛рдиреА рдЬрдм рдЖрдк рдПрдХ рдФрд░ рддрддреНрд╡ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗред рдирд╣реАрдВ рддреЛ рдЭреВрдард╛ рд▓реМрдЯ рдЖрддрд╛ рд╣реИред
рдзрдХреНрдХрд╛ (рддрддреНрд╡) : рдПрдХ рддрддреНрд╡ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрджрд┐ рд╕реНрдЯреИрдХ рднрд░рд╛ рд╣реБрдЖ рд╣реИ рддреЛ рдкреВрд░реНрдг рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИред
рдкреЙрдк : рдЖрдЗрдЯрдо рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╕реНрдЯреИрдХ рдЦрд╛рд▓реА рд╣реИ, рддреЛ рдЦрд╛рд▓реА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдЭрд╛рдВрдХрдирд╛ () : рдПрдХ рдкреНрд░рдореБрдЦ рддрддреНрд╡ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рд╣рдо рджреЛ рдлрд╛рдЗрд▓реЗрдВ stack.js рдФрд░ stack.spec.js рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдореИрдВрдиреЗ .spec.js рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЖрдк .test.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдирд╛рдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ __tests__ рдкрд░ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред

рдЪреВрдВрдХрд┐ рд╣рдо рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рдЕрд╕рдлрд▓ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦреЗрдВрдЧреЗред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрдЯреИрдХ рдлрд╝рд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

const Stack = require('./stack') 

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдореИрдВ рдпрд╣рд╛рдВ рдЖрдпрд╛рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ Node.js рдХрд╛ рдирд╡реАрдирддрдо рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рдЖрдЬ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдмреИрдмрд┐рд▓ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрдХреЛ рдЕрдзрд┐рднрд╛рд░ рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ред

рдЬрдм рдЖрдк рдПрдХ рдХреНрд▓рд╛рд╕ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рддреЛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ рдФрд░ рдмрддрд╛рдПрдВ рдХрд┐ рдЖрдк рдХрд┐рд╕ рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдХреНрд▓рд╛рд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рд╕реНрдЯреИрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ:

 describe('Stack', () => { }) 

рдлрд┐рд░ рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рд╕реНрдЯреИрдХ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдФрд░ рд╣рдо рд╕рд╣реА рдХреНрд╖рдорддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рддреЛ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

 it('Should constructs the stack with a given capacity', () => { let stack = new Stack(3) expect(stack.items).toEqual([]) expect(stack.capacity).toBe(3) }) 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо toququal рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ stack.items рдХреЗ рд▓рд┐рдП toe рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдХ рд╣реА рд╕рд░рдгреА рдХрд╛ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред

рдЕрдм рдпрд╛рд░реНрди рдЯреЗрд╕реНрдЯ рд╕реНрдЯреИрдХ st.spec.js рдЪрд▓рд╛рдПрдВ ред рд╣рдо рдЬреЗрд╕реНрдЯ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдХрд┐ рдЕрдиреНрдп рдкрд░реАрдХреНрд╖рдг рджреВрд╖рд┐рдд рд╣реЛрдВред рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдо рд╣реИ:

рдЫрд╡рд┐

рд╕реНрдЯреИрдХ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдирд╣реАрдВ рд╣реИ ред рдмреЗрд╢рдХред рд╣рдордиреЗ рдЕрднреА рднреА рдЕрдкрдирд╛ рд╕реНрдЯреИрдХ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рд╣реИ рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рд╣реИред

Stack.js рдореЗрдВ рдЕрдкрдиреА рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВ, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд░реЗрдВ рдФрд░ рдХреНрд▓рд╛рд╕ рдХреЛ рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдХрд░реЗрдВ:

 class Stack { constructor() { } } module.exports = Stack 

рдкрд░реАрдХреНрд╖рдг рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдБ:

рдЫрд╡рд┐

рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рдЬреЗрд╕реНрдЯ рдиреЗ рд╕рд░рдгреА рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ [] рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХреА рдереА, рд▓реЗрдХрд┐рди рд╡реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдереЗред рдлрд┐рд░ рдЖрдкрдХреЛ рддрддреНрд╡реЛрдВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

 constructor() { this.items = [] } 

рдпрджрд┐ рдЖрдк рдлрд┐рд░ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреА, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХреНрд╖рдорддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

 constructor(capacity) { this.items = [] this.capacity = capacity } 

рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдБ:

рдЫрд╡рд┐

рд╣рд╛рдБ! рдЯреЗрд╕реНрдЯ рдкрд╛рд╕ рдХрд░ рд▓рд┐рдпрд╛ ред рдпрд╣рд╛рдВ рдЯреАрдбреАрдбреА рдХреНрдпрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдм рдкрд░реАрдХреНрд╖рдг рдЖрдкрдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрдПрдЧрд╛! рд╣рдо рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛?

isEmpty


рдЯреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЦрд╛рд▓реА рд╣реИ, рд╣рдо рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреИрдХ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЯреЗрд╕реНрдЯ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдИрдордореА рд╕рд╣реА рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдПрдХ рддрддреНрд╡ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рдЬрд╛рдБрдЪ рдХрд░реЗрдВред

 it('Should have an isEmpty function that returns true if the stack is empty and false otherwise', () => { let stack = new Stack(3) expect(stack.isEmpty()).toBe(true) stack.items.push(2) expect(stack.isEmpty()).toBe(false) }) 

рдЬрдм рдЖрдк рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдП:

 TypeError: stack.isEmpty is not a function 

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ Stack рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ isEmpty рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 isEmpty () { } 

рдпрджрд┐ рдЖрдк рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдФрд░ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдП:

 Expected: true Received: undefined 

IsEmpty рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдХреЛрдИ рддрддреНрд╡ рди рд╣реЛрдиреЗ рдкрд░ рд╕реНрдЯреИрдХ рдЦрд╛рд▓реА рд╣реИ:

 isEmpty () { return this.items.length === 0 } 

isFull


рдпрд╣ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЦрд╛рд▓реА рд╣реИ , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрднреНрдпрд╛рд╕ рдЯреАрдбреАрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИред рдЖрдк рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдкрд╛рдПрдВрдЧреЗред

рдзрдХреНрдХрд╛


рдпрд╣рд╛рдВ рд╣рдореЗрдВ рддреАрди рдЪреАрдЬреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  • рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдирдпрд╛ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
  • рд╕реНрдЯреИрдХ рднрд░ рдЬрд╛рдиреЗ рдкрд░ рд░рд┐рдЯрд░реНрди "рдлреБрд▓" рд▓реМрдЯрд╛рдПрдБ;
  • рдПрдХ рдЖрдЗрдЯрдо рдЬреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ рдЙрд╕реЗ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкреБрд╢ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдгрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдФрд░ рдмреНрд▓реЙрдХ рдмрдирд╛рдПрдВред рд╣рдордиреЗ рдЗрд╕ рдмреНрд▓реЙрдХ рдХреЛ рдореБрдЦреНрдп рдХреЗ рдЕрдВрджрд░ рд░рдЦрд╛ред

 describe('Stack.push', () => { }) 

рдЖрдЗрдЯрдо рдЬреЛрдбрд╝реЗрдВ


рдПрдХ рдирдпрд╛ рд╕реНрдЯреИрдХ рдмрдирд╛рдПрдВ рдФрд░ рдПрдХ рддрддреНрд╡ рдЬреЛрдбрд╝реЗрдВред рдЖрдЗрдЯрдо рд╕рд░рдгреА рдореЗрдВ рдЕрдВрддрд┐рдо рдЖрдЗрдЯрдо рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝реЗ рдЧрдП рдЖрдЗрдЯрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

 describe('Stack.push', () => { it('Should add a new element on top of the stack', () => { let stack = new Stack(3) stack.push(2) expect(stack.items[stack.items.length - 1]).toBe(2) }) }) 

рдпрджрд┐ рдЖрдк рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдзрдХреНрдХрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рд╕реНрдЯреИрдХ рдореЗрдВ рдХреБрдЫ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╢ рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

 push (element) { this.items.push(element) } 

рдЯреЗрд╕реНрдЯ рдлрд┐рд░ рдкрд╛рд╕ рд╣реБрдЖред рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХреБрдЫ рдиреЛрдЯрд┐рд╕ рдХрд┐рдпрд╛? рд╣рдо рдЗрд╕ рдкрдВрдХреНрддрд┐ рдХреА рдПрдХ рдкреНрд░рддрд┐ рд░рдЦрддреЗ рд╣реИрдВ:

 let stack = new Stack(3) 

рдпрд╣ рдмрд╣реБрдд рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреВрд░реНрд╡ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЗрд╕рдХрд╛ рдлрд╛рдпрджрд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЙрдард╛рдпрд╛ рдЧрдпрд╛?

 let stack beforeEach(() => { stack = new Stack(3) }) 

рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ:



рд╕реНрдЯреИрдХ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдкрд╣рд▓реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдЯреИрдХ рдЪрд░ рдХреЛ рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд╣реА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдирд╣реАрдВ рд╣реИред

рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реЗ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг: рд╣рдореЗрдВ рдПрдХ afterEach рд╡рд┐рдзрд┐ рднреА рдмрдирд╛рдиреА рд╣реЛрдЧреАред рд╕реНрдЯреИрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдм рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдХреБрдЫ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж:

 afterEach(() => { stack.items = [] }) 

рдЕрдм рдЖрдк рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╕реНрдЯреИрдХ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдкреВрд░реА рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рд╣реИ:

 const Stack = require('./stack') describe('Stack', () => { let stack beforeEach(() => { stack = new Stack(3) }) afterEach(() => { stack.items = [] }) it('Should constructs the stack with a given capacity', () => { expect(stack.items).toEqual([]) expect(stack.capacity).toBe(3) }) it('Should have an isEmpty function that returns true if the stack is empty and false otherwise', () => { stack.items.push(2) expect(stack.isEmpty()).toBe(false) }) describe('Stack.push', () => { it('Should add a new element on top of the stack', () => { stack.push(2) expect(stack.items[stack.items.length - 1]).toBe(2) }) }) }) 

рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдкрд░реАрдХреНрд╖рдг


рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╣реИ:

 it('Should return the new element pushed at the top of the stack', () => { let elementPushed = stack.push(2) expect(elementPushed).toBe(2) }) 

рдЬрдм рдЖрдк рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдорд┐рд▓реЗрдЧрд╛:

 Expected: 2 Received: undefined 

рдХреБрдЫ рднреА рдирд╣реАрдВ рдЕрдВрджрд░ рдзрдХреНрдХрд╛ ! рд╣рдореЗрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

 push (element) { this.items.push(element) return element } 

рд╕реНрдЯреИрдХ рдкреВрд░рд╛ рднрд░ рдЬрд╛рдиреЗ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВ


рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рд╣рдореЗрдВ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдЯреИрдХ рдХреЛ рднрд░рдирд╛ рд╣реЛрдЧрд╛, рдПрдХ рддрддреНрд╡ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕реНрдЯреИрдХ рдореЗрдВ рдХреБрдЫ рднреА рдЕрдзрд┐рдХ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд░рд┐рдЯрд░реНрди рдорд╛рди рдкреВрд░реНрдг рд╣реИ ред

 it('Should return full if one tries to push at the top of the stack while it is full', () => { stack.items = [1, 2, 3] let element = stack.push(4) expect(stack.items[stack.items.length - 1]).toBe(3) expect(element).toBe('Full') }) 

рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдпрд╣ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:

 Expected: 3 Received: 4 

рддреЛ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рдереЗред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреБрдЫ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдЯреИрдХ рднрд░рд╛ рд╣реБрдЖ рд╣реИ рдпрд╛ рдирд╣реАрдВ:

 push (element) { if (this.isFull()) { return 'Full' } this.items.push(element) return element } 

рдЯреЗрд╕реНрдЯ рдкрд╛рд╕ рдХрд░ рд▓рд┐рдпрд╛ред

рд╡реНрдпрд╛рдпрд╛рдо: рдкреЙрдк рдФрд░ рдЭрд╛рдВрдХрдирд╛

рдпрд╣ рдЕрднреНрдпрд╛рд╕ рдХрд╛ рд╕рдордп рд╣реИред рдкреЙрдк рдФрд░ рдЭрд╛рдВрдХрдирд╛ рдкрд░реАрдХреНрд╖рдг рдФрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВред

рдЯрд┐рдкреНрд╕:

  • рдкреЙрдк рдкреБрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИ
  • рдЭрд╛рдВрдХрдирд╛ рднреА рдзрдХреНрдХрд╛ рдХреА рддрд░рд╣ рд╣реИ
  • рдЕрдм рддрдХ, рд╣рдордиреЗ рдХреЛрдб рдХреЛ рд░реАрдХреНрд░рд┐рдПрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рдерд╛ред рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, рдХреЛрдб рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд┐рдП рдмрд┐рдирд╛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдХреЛ рди рджреЗрдЦреЗрдВред рдкреНрд░рдЧрддрд┐ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдкреНрд░рдпрд╛рд╕, рдкреНрд░рдпреЛрдЧ рдФрд░ рдЕрднреНрдпрд╛рд╕ рд╣реИред

рдирд┐рд░реНрдгрдп


рдЦреИрд░, рд╡реНрдпрд╛рдпрд╛рдо рдХреИрд╕реЗ? рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХрд┐рдпрд╛? рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдирд┐рд░рд╛рд╢ рдордд рд╣реЛрдЗрдПред рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд╕рдордп рдФрд░ рдореЗрд╣рдирдд рд▓рдЧрддреА рд╣реИред

 class Stack { constructor (capacity) { this.items = [] this.capacity = capacity } isEmpty () { return this.items.length === 0 } isFull () { return this.items.length === this.capacity } push (element) { if (this.isFull()) { return 'Full' } this.items.push(element) return element } pop () { return this.isEmpty() ? 'Empty' : this.items.pop() } peek () { return this.isEmpty() ? 'Empty' : this.items[this.items.length - 1] } } module.exports = Stack const Stack = require('./stack') describe('Stack', () => { let stack beforeEach(() => { stack = new Stack(3) }) afterEach(() => { stack.items = [] }) it('Should construct the stack with a given capacity', () => { expect(stack.items).toEqual([]) expect(stack.capacity).toBe(3) }) it('Should have an isEmpty function that returns true if the stack is empty and false otherwise', () => { expect(stack.isEmpty()).toBe(true) stack.items.push(2) expect(stack.isEmpty()).toBe(false) }) it('Should have an isFull function that returns true if the stack is full and false otherwise', () => { expect(stack.isFull()).toBe(false) stack.items = [4, 5, 6] expect(stack.isFull()).toBe(true) }) describe('Push', () => { it('Should add a new element on top of the stack', () => { stack.push(2) expect(stack.items[stack.items.length - 1]).toBe(2) }) it('Should return the new element pushed at the top of the stack', () => { let elementPushed = stack.push(2) expect(elementPushed).toBe(2) }) it('Should return full if one tries to push at the top of the stack while it is full', () => { stack.items = [1, 2, 3] let element = stack.push(4) expect(stack.items[stack.items.length - 1]).toBe(3) expect(element).toBe('Full') }) }) describe('Pop', () => { it('Should removes the last element at the top of a stack', () => { stack.items = [1, 2, 3] stack.pop() expect(stack.items).toEqual([1, 2]) }) it('Should returns the element that have been just removed', () => { stack.items = [1, 2, 3] let element = stack.pop() expect(element).toBe(3) }) it('Should return Empty if one tries to pop an empty stack', () => { // By default, the stack is empty expect(stack.pop()).toBe('Empty') }) }) describe('Peek', () => { it('Should returns the element at the top of the stack', () => { stack.items = [1, 2, 3] let element = stack.peek() expect(element).toBe(3) }) it('Should return Empty if one tries to peek an empty stack', () => { // By default, the stack is empty expect(stack.peek()).toBe('Empty') }) }) }) 

рдпрджрд┐ рдЖрдк рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдореИрдВрдиреЗ рдкреЙрдк рдФрд░ рдЭрд╛рдВрдХрдиреЗ рдореЗрдВ рдЯреНрд░рд┐рдкрд▓ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рд░рд┐рдлреИрдХреНрдЯ рдХрд┐рдпрд╛ рдерд╛ред рдкреБрд░рд╛рдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рддрд░рд╣ рджреЗрдЦрд╛:

 if (this.isEmpty()) { return 'Empty' } return this.items.pop() 

рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдХрд╛рд╕ рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рднрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдореБрдЭреЗ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдЫреЛрдЯрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд┐рд▓рд╛ред

рдкрд░реАрдХреНрд╖рдг рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдБ:


рдЫрд╡рд┐

рдЯреЗрд╕реНрдЯ рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдм рдЖрдк рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкреВрд░реНрдг рд▓рд╛рднреЛрдВ рдХреЛ рд╕рдордЭреЗрдВрдЧреЗ рдФрд░ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЯреАрдбреАрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рдХреНрдпрд╛ рд╣рдордиреЗ рдЖрдкрдХреЛ рд╕рдордЭрд╛ рджрд┐рдпрд╛ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдФрд░ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИ? рдмрд▓реНрдХрд┐, рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ рдХреЗ рднрд╛рдЧ 2 рдХреЛ рдкрдврд╝реЗрдВред рдФрд░ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реЗ рдирд╣реАрдВ рдкрдврд╝рд╛ рдерд╛, рд▓рд┐рдВрдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ ред

Source: https://habr.com/ru/post/hi430876/


All Articles