package Ġorg . lex em . ang mar . analyzer . memory Ċ Ċ import Ġorg . junit . jupiter . api .* Ċ import Ġorg . lex em . ang mar .* Ċ import Ġorg . lex em . ang mar . analyzer . data .* Ċ import Ġorg . lex em . ang mar . analyzer . data . primitives .* Ċ import Ġorg . lex em . ang mar . analyzer . data . referenced .* Ċ import Ġorg . lex em . ang mar . errors .* Ċ import Ġorg . lex em . ang mar . utils .* Ċ Ċ internal Ġclass ĠBig Node Cell Test Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠA UX ĠMETHO DS Ġ-------------------------------------------------------- ĊĊĠĠĠĠĠĠĠ Ġ// ĠChecks Ġthe Ġstatus Ġof Ġa ĠCell . ĊĠĠĠĠĠĠĠ Ġfun Ġcheck Cell ( cell : ĠBig Node Cell , Ġposition : ĠInt , Ġvalue : ĠLex em Referenced , Ġreference Count : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis F reed : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( position , Ġcell . position , Ġ" The Ġposition Ġproperty Ġis Ġincorrect ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( value , Ġcell . value , Ġ" The Ġvalue Ġproperty Ġis Ġincorrect ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( reference Count , Ġcell . reference Count , Ġ" The Ġreference Count Ġproperty Ġis Ġincorrect ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( is F reed , Ġcell . is F reed , Ġ" The Ġis F reed Ġproperty Ġis Ġincorrect ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertFalse ( cell . isNot G arbage , Ġ" The Ġis Not G arbage Ġproperty Ġis Ġincorrect ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTEST S Ġ---------------------------------------------------------------- -- ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġnew `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmemory Ġ= ĠLex em Memory () ĊĠĠĠĠĠĠĠ Ġval Ġbig Node Ġ= Ġmemory . last Node ĊĠĠĠĠĠĠĠ Ġval Ġcell Ġ= ĠBig Node Cell . new ( 0 , ĠL xm Object . Empty ) ĊĊĠĠĠĠĠĠĠ Ġcheck Cell ( cell , Ġ 0 , ĠL xm Object . Empty ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDest ro ys Ġthe Ġcell ĊĠĠĠĠĠĠĠ Ġcell . destroy () ĊĠĠĠĠĠĠĠ Ġcheck Cell ( cell , Ġ- 1 , ĠBig Node Cell . Empty Cell , Ġis F reed Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġwhether Ġthe Ġnew Ġcell Ġis Ġthe Ġsame Ġas Ġbefore Ġto Ġcheck Ġthe Ġreuse Ġof Ġthem . ĊĠĠĠĠĠĠĠ Ġval Ġnew Cell Ġ= ĠBig Node Cell . new ( 5 6 , ĠL xm List . Empty ) ĊĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( cell , Ġnew Cell , Ġ" The Ġcells Ġare Ġnot Ġequals ") ĊĠĠĠĠĠĠĠ Ġcheck Cell ( new Cell , Ġ 5 6 , ĠL xm List . Empty ) ĊĠĠĠĠĠĠĠ Ġcheck Cell ( cell , Ġ 5 6 , ĠL xm List . Empty ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġget `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmemory Ġ= ĠLex em Memory () ĊĠĠĠĠĠĠĠ Ġval Ġbig Node Ġ= Ġmemory . last Node ĊĠĠĠĠĠĠĠ Ġval Ġcell Ġ= ĠBig Node Cell . new ( 0 , ĠL xm List . Empty ) ĊĊĠĠĠĠĠĠĠ Ġcheck Cell ( cell , Ġ 0 , ĠL xm List . Empty ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġset Ġsimple `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmemory Ġ= ĠLex em Memory () ĊĠĠĠĠĠĠĠ Ġval Ġbig Node Ġ= Ġmemory . last Node ĊĠĠĠĠĠĠĠ Ġval Ġcell 0 Ġ= Ġbig Node . alloc ( memory , ĠL xm Object . Empty ) ĊĊĠĠĠĠĠĠĠ Ġcheck Cell ( cell 0 , Ġ 0 , ĠL xm Object . Empty ) ĊĊĠĠĠĠĠĠĠ Ġcell 0 . setValue ( L xm List . Empty ) ĊĊĠĠĠĠĠĠĠ Ġcheck Cell ( cell 0 , Ġ 0 , ĠL xm List . Empty ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġset Ġand Ġfree Ġby Ġreference Ġcount `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmemory Ġ= ĠLex em Memory () ĊĠĠĠĠĠĠĠ Ġval Ġbig Node Ġ= Ġmemory . last Node ĊĠĠĠĠĠĠĠ Ġval Ġcell 0 Ġ= Ġbig Node . alloc ( memory , ĠL xm List . Empty ) ĊĊĠĠĠĠĠĠĠ Ġcheck Cell ( cell 0 , Ġ 0 , ĠL xm List . Empty ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠReduce Ġthe Ġreference Ġcount . ĊĠĠĠĠĠĠĠ Ġcell 0 . increase References () ĊĠĠĠĠĠĠĠ Ġcell 0 . decrease References ( memory ) ĊĠĠĠĠĠĠĠ Ġcheck Cell ( cell 0 , Ġ 0 , ĠBig Node Cell . Empty Cell , Ġreference Count Ġ= Ġ 1 , Ġis F reed Ġ= Ġtrue ) Ġ// Ġ 1 Ġ= Ġlast Free Cell ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġshift `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmemory Ġ= ĠLex em Memory () ĊĠĠĠĠĠĠĠ Ġval Ġbig Node Ġ= Ġmemory . last Node ĊĊĠĠĠĠĠĠĠ Ġval Ġcell 0 Value Ġ= ĠL xm List () ĊĠĠĠĠĠĠĠ Ġval Ġcell 0 Ġ= Ġbig Node . alloc ( memory , Ġcell 0 Value ) ĊĠĠĠĠĠĠĠ Ġcell 0 . increase References () ĊĊĠĠĠĠĠĠĠ Ġcheck Cell ( cell 0 , Ġ 0 , Ġcell 0 Value , Ġreference Count Ġ= Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġshifted Cell Ġ= Ġcell 0 . shift Cell () ĊĊĠĠĠĠĠĠĠ Ġcheck Cell ( cell 0 , Ġ 0 , Ġcell 0 Value , Ġreference Count Ġ= Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġcheck Cell ( shift ed Cell , Ġ 0 , Ġshifted Cell . value , Ġreference Count Ġ= Ġ 1 ) ĊĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( cell 0 Value , Ġ( shift ed Cell . value Ġas ĠL xm List ). old List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġobject Ġhas Ġbeen Ġincorrectly Ġcloned ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġrealloc `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmemory Ġ= ĠLex em Memory () ĊĠĠĠĠĠĠĠ Ġval Ġbig Node Ġ= Ġmemory . last Node ĊĊĠĠĠĠĠĠĠ Ġval Ġcell 0 Ġ= Ġbig Node . alloc ( memory , ĠL xm Object . Empty ) ĊĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠL xm Object () ĊĠĠĠĠĠĠĠ Ġobj . setProperty ( memory , Ġ" test ", ĠL xm Reference ( cell 0 . position )) ĊĊĠĠĠĠĠĠĠ Ġval Ġcell 1 Ġ= Ġbig Node . alloc ( memory , Ġobj ) ĊĠĠĠĠĠĠĠ Ġcell 1 . increase References () ĊĊĠĠĠĠĠĠĠ Ġcheck Cell ( cell 0 , Ġ 0 , ĠL xm Object . Empty , Ġreference Count Ġ= Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġcheck Cell ( cell 1 , Ġ 1 , Ġobj , Ġreference Count Ġ= Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRe alloc ĊĠĠĠĠĠĠĠ Ġcell 1 . realloc Cell ( memory , ĠL xm List . Empty ) ĊĊĠĠĠĠĠĠĠ Ġcheck Cell ( cell 0 , Ġ 0 , ĠBig Node Cell . Empty Cell , Ġreference Count Ġ= Ġ 2 , Ġis F reed Ġ= Ġtrue ) Ġ// Ġ 2 Ġ= Ġlast Free Cell ĊĠĠĠĠĠĠĠ Ġcheck Cell ( cell 1 , Ġ 1 , ĠL xm List . Empty ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġfree Ġwith Ġvalue `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmemory Ġ= ĠLex em Memory () ĊĠĠĠĠĠĠĠ Ġval Ġbig Node Ġ= Ġmemory . last Node ĊĠĠĠĠĠĠĠ Ġbig Node . alloc ( memory , ĠL xm Object . Empty ) ĊĠĠĠĠĠĠĠ Ġval Ġcell 1 Ġ= Ġbig Node . alloc ( memory , ĠL xm List . Empty ) ĊĊĠĠĠĠĠĠĠ Ġcheck Cell ( cell 1 , Ġ 1 , ĠL xm List . Empty ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠFree ĊĠĠĠĠĠĠĠ Ġcell 1 . free Cell ( memory , Ġ 5 ) ĊĊĠĠĠĠĠĠĠ Ġcheck Cell ( cell 1 , Ġ 1 , ĠBig Node Cell . Empty Cell , Ġreference Count Ġ= Ġ 5 , Ġis F reed Ġ= Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġdestroy `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmemory Ġ= ĠLex em Memory () ĊĠĠĠĠĠĠĠ Ġval Ġbig Node Ġ= Ġmemory . last Node ĊĠĠĠĠĠĠĠ Ġval Ġcell Ġ= Ġbig Node . alloc ( memory , ĠL xm Object . Empty ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġreference Ġto Ġincrease Ġthe Ġcount . ĊĠĠĠĠĠĠĠ Ġcell . increase References () ĊĊĠĠĠĠĠĠĠ Ġcheck Cell ( cell , Ġ 0 , ĠL xm Object . Empty , Ġreference Count Ġ= Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDest ro ys Ġthe Ġcell ĊĠĠĠĠĠĠĠ Ġcell . destroy () ĊĠĠĠĠĠĠĠ Ġcheck Cell ( cell , Ġ- 1 , ĠBig Node Cell . Empty Cell , Ġis F reed Ġ= Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Incorrect ĊĠĠĠ Ġfun Ġ` test Ġset Ġa Ġfreed Ġcell `() Ġ{ ĊĠĠĠĠĠĠĠ ĠTestUtils . assert Analyzer Exception ( Ang mar Analyzer Exception Type . Heap Segmentation Fault ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmemory Ġ= ĠLex em Memory () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbig Node Ġ= Ġmemory . last Node ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell 0 Ġ= Ġbig Node . alloc ( memory , ĠL xm Object . Empty ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell 0 . increase References () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFree ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell 0 . decrease References ( memory ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell 0 . setValue ( L xm Object . Empty ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Incorrect ĊĠĠĠ Ġfun Ġ` test Ġfree Ġa Ġfreed Ġcell `() Ġ{ ĊĠĠĠĠĠĠĠ ĠTestUtils . assert Analyzer Exception ( Ang mar Analyzer Exception Type . Heap Segmentation Fault ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmemory Ġ= ĠLex em Memory () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbig Node Ġ= Ġmemory . last Node ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell 0 Ġ= Ġbig Node . alloc ( memory , ĠL xm Object . Empty ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell 0 . increase References () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFree ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell 0 . decrease References ( memory ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell 0 . free Cell ( memory , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Incorrect ĊĠĠĠ Ġfun Ġ` test Ġincrease Ġreferences Ġof Ġa Ġfreed Ġcell `() Ġ{ ĊĠĠĠĠĠĠĠ ĠTestUtils . assert Analyzer Exception ( Ang mar Analyzer Exception Type . Heap Segmentation Fault ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmemory Ġ= ĠLex em Memory () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbig Node Ġ= Ġmemory . last Node ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell 0 Ġ= Ġbig Node . alloc ( memory , ĠL xm Object . Empty ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell 0 . increase References () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFree ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell 0 . decrease References ( memory ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell 0 . increase References () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Incorrect ĊĠĠĠ Ġfun Ġ` test Ġdecrease Ġreferences Ġof Ġa Ġfreed Ġcell `() Ġ{ ĊĠĠĠĠĠĠĠ ĠTestUtils . assert Analyzer Exception ( Ang mar Analyzer Exception Type . Heap Segmentation Fault ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmemory Ġ= ĠLex em Memory () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbig Node Ġ= Ġmemory . last Node ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell 0 Ġ= Ġbig Node . alloc ( memory , ĠL xm Object . Empty ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell 0 . increase References () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFree ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell 0 . decrease References ( memory ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell 0 . decrease References ( memory ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Incorrect ĊĠĠĠ Ġfun Ġ` test Ġfree Ġa Ġreferenced Ġcell `() Ġ{ ĊĠĠĠĠĠĠĠ ĠTestUtils . assert Analyzer Exception ( Ang mar Analyzer Exception Type . Referenced Heap Cell F reed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmemory Ġ= ĠLex em Memory () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbig Node Ġ= Ġmemory . last Node ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell 0 Ġ= Ġbig Node . alloc ( memory , ĠL xm Object . Empty ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell 0 . increase References () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFree ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell 0 . free Cell ( memory , Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Incorrect ĊĠĠĠ Ġfun Ġ` test Ġdecrease Ġa Ġzero - reference Ġcell `() Ġ{ ĊĠĠĠĠĠĠĠ ĠTestUtils . assert Analyzer Exception ( Ang mar Analyzer Exception Type . Reference Count Under flow ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmemory Ġ= ĠLex em Memory () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbig Node Ġ= Ġmemory . last Node ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell 0 Ġ= Ġbig Node . alloc ( memory , ĠL xm Object . Empty ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell 0 . decrease References ( memory ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ