package Ġdev . f rit z 2 . core Ċ Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ Ċ class ĠL enses Tests Ġ{ ĊĊĠĠĠ Ġdata Ġclass ĠSize ( val Ġheight : ĠDouble ) ĊĊĠĠĠ Ġprivate Ġval Ġheight Lens Ġ= Ġlens ( Size :: height . name , ĠSize :: height ) Ġ{ Ġp , Ġv Ġ-> Ġp . copy ( height Ġ= Ġv ) Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠTree ( val Ġname : ĠString , Ġval Ġage : ĠInt , Ġval Ġsize : ĠSize ) ĊĊĠĠĠ Ġprivate Ġval Ġage Lens Ġ= Ġlens ( Tree :: age . name , ĠTree :: age ) Ġ{ Ġp , Ġv Ġ-> Ġp . copy ( age Ġ= Ġv ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġsize Lens Ġ= Ġlens ( Tree :: size . name , ĠTree :: size ) Ġ{ Ġp , Ġv Ġ-> Ġp . copy ( size Ġ= Ġv ) Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Format () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠTree (" M am mut ĠTree ", Ġ 3 0 0 0 , ĠSize ( 8 4 . 3 )) ĊĊĠĠĠĠĠĠĠ Ġval Ġint Format Lens Ġ= Ġformat ( String :: toInt , ĠInt :: toString ) ĊĠĠĠĠĠĠĠ Ġval Ġdouble Format Lens Ġ= Ġformat ( String :: toDouble , ĠDouble :: toString ) ĊĊĠĠĠĠĠĠĠ Ġval Ġformatted Age Lens Ġ= Ġage Lens Ġ+ Ġint Format Lens ĊĠĠĠĠĠĠĠ ĠassertEquals ( p . age . toString (), Ġformatted Age Lens . get ( p ), Ġ" get Ġon Ġformatted Age Lens Ġdid Ġnot Ġwork ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( Tree :: age . name , Ġformatted Age Lens . id , Ġ" id Ġon Ġformatted Age Lens Ġdid Ġnot Ġwork ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( formatted Age Lens . set ( p , Ġ" 2 0 0 0 "). age , Ġ 2 0 0 0 , Ġ" set Ġon Ġformatted Age Lens Ġdid Ġnot Ġwork ") ĊĊĠĠĠĠĠĠĠ Ġval Ġformatted Size Lens Ġ= Ġsize Lens Ġ+ Ġheight Lens Ġ+ Ġdouble Format Lens ĊĠĠĠĠĠĠĠ ĠassertEquals ( p . size . height . toString (), Ġformatted Size Lens . get ( p ), Ġ" get Ġon Ġformatted Size Lens Ġdid Ġnot Ġwork ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Tree :: size . name }.${ Size :: height . name }", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformatted Size Lens . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" id Ġon Ġformatted Size Lens Ġdid Ġnot Ġwork " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( formatted Size Lens . set ( p , Ġ" 5 5 . 1 2 "). size . height , Ġ 5 5 . 1 2 , Ġ" set Ġon Ġformatted Size Lens Ġdid Ġnot Ġwork ") ĊĠĠĠ Ġ} Ċ Ċ }