/* Ċ Ġ* ĠCopyright ĠThe ĠOpen Telemetry ĠAuthors Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ*/ Ċ package Ġio . op entelemetry . kotlin . sdk . metrics . internal . state Ċ Ċ import Ġio . kot est . assertions . assert Soft ly Ċ import Ġio . kot est . matchers . maps . should Contain Ċ import Ġio . kot est . matchers . maps . should Have Size Ċ import Ġio . op entelemetry . kotlin . api . common . Attributes Ċ import Ġio . op entelemetry . kotlin . context . Context Ċ import Ġio . op entelemetry . kotlin . sdk . metrics . common . Instrument Type Ċ import Ġio . op entelemetry . kotlin . sdk . metrics . common . Instrument ValueType Ċ import Ġio . op entelemetry . kotlin . sdk . metrics . ex emp lar . Ex emp lar Filter Ċ import Ġio . op entelemetry . kotlin . sdk . metrics . internal . ag gregator . Double Accum ulation Ċ import Ġio . op entelemetry . kotlin . sdk . metrics . internal . descriptor . Instrument Descriptor Ċ import Ġio . op entelemetry . kotlin . sdk . metrics . internal . export . Collection Handle Ċ import Ġio . op entelemetry . kotlin . sdk . metrics . view . Aggregation Ċ import Ġkotlin . test . Test Ċ Ċ internal Ġclass ĠDelta Metric Storage Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcollector 1 : ĠCollection Handle ĊĠĠĠ Ġprivate Ġval Ġcollector 2 : ĠCollection Handle ĊĠĠĠ Ġprivate Ġval Ġall Collectors : ĠSet < Collection Handle > ĊĠĠĠ Ġprivate Ġval Ġstorage : ĠDelta Metric Storage < Double Accum ulation > ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsupplier Ġ= ĠCollection Handle . create Supplier () ĊĠĠĠĠĠĠĠ Ġcollector 1 Ġ= Ġsupplier . get () ĊĠĠĠĠĠĠĠ Ġcollector 2 Ġ= Ġsupplier . get () ĊĠĠĠĠĠĠĠ Ġall Collectors Ġ= Ġset Of ( collector 1 , Ġcollector 2 ) ĊĠĠĠĠĠĠĠ Ġstorage Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDelta Metric Storage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAg gregation . sum (). create Aggregator ( DESCRIPTOR , ĠEx emp lar Filter . never Sample ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDESCRIP TOR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcollection Delta For Multi Reader () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbound Ġ= Ġstorage . bind ( Attributes . empty ()) ĊĠĠĠĠĠĠĠ Ġbound . record Double ( 1 . 0 , ĠAttributes . empty (), ĠContext . root ()) ĊĠĠĠĠĠĠĠ Ġ// ĠFirst Ġcollector Ġonly Ġsees Ġfirst Ġrecording . ĊĠĠĠĠĠĠĠ Ġassert Soft ly ( storage . collect For ( collector 1 , Ġall Collectors , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould Have Size ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Soft ly ( entries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Contain ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAttributes . empty (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDouble Accum ulation . Companion . create ( 1 . 0 , ĠlistOf ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbound . record Double ( 2 . 0 , ĠAttributes . empty (), ĠContext . root ()) ĊĠĠĠĠĠĠĠ Ġ// ĠFirst Ġcollector Ġonly Ġsees Ġsecond Ġrecording . ĊĠĠĠĠĠĠĠ Ġassert Soft ly ( storage . collect For ( collector 1 , Ġall Collectors , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould Have Size ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Soft ly ( entries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Contain ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAttributes . empty (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDouble Accum ulation . Companion . create ( 2 . 0 , ĠlistOf ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠFirst Ġcollector Ġno Ġlonger Ġsees Ġa Ġrecording . ĊĠĠĠĠĠĠĠ Ġstorage . collect For ( collector 1 , Ġall Collectors , Ġfalse ). should Have Size ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġassert Soft ly ( storage . collect For ( collector 2 , Ġall Collectors , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould Have Size ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Soft ly ( entries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Contain ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAttributes . empty (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDouble Accum ulation . Companion . create ( 3 . 0 , ĠlistOf ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSecond Ġcollector Ġno Ġlonger Ġsees Ġa Ġrecording . ĊĠĠĠĠĠĠĠ Ġstorage . collect For ( collector 2 , Ġall Collectors , Ġfalse ). should Have Size ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġavoid Collection In R apid Success ion () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbound Ġ= Ġstorage . bind ( Attributes . empty ()) ĊĠĠĠĠĠĠĠ Ġbound . record Double ( 1 . 0 , ĠAttributes . empty (), ĠContext . root ()) ĊĠĠĠĠĠĠĠ Ġ// ĠFirst Ġcollector Ġonly Ġsees Ġfirst Ġrecording . ĊĠĠĠĠĠĠĠ Ġassert Soft ly ( storage . collect For ( collector 1 , Ġall Collectors , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould Have Size ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Soft ly ( entries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Contain ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAttributes . empty (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDouble Accum ulation . Companion . create ( 1 . 0 , ĠlistOf ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġsome Ġdata Ġimmediately Ġafter Ġread , Ġbut Ġpret ent Ġit Ġhasn 't Ġbeen Ġlong . ĊĠĠĠĠĠĠĠ Ġbound . record Double ( 2 . 0 , ĠAttributes . empty (), ĠContext . root ()) ĊĠĠĠĠĠĠĠ Ġ// ĠCollector 1 Ġdoesn 't Ġsee Ġnew Ġdata , Ġbecause Ġwe Ġdon 't Ġre collect , Ġbut Ġcollector 2 Ġsees Ġold ĊĠĠĠĠĠĠĠ Ġ// Ġdelta . ĊĠĠĠĠĠĠĠ Ġstorage . collect For ( collector 1 , Ġall Collectors , Ġtrue ). should Have Size ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġassert Soft ly ( storage . collect For ( collector 2 , Ġall Collectors , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould Have Size ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Soft ly ( entries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Contain ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAttributes . empty (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDouble Accum ulation . Companion . create ( 1 . 0 , ĠlistOf ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠAfter Ġenough Ġtime Ġpasses , Ġcollector 1 Ġsees Ġnew Ġdata ĊĠĠĠĠĠĠĠ Ġassert Soft ly ( storage . collect For ( collector 1 , Ġall Collectors , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould Have Size ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Soft ly ( entries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Contain ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAttributes . empty (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDouble Accum ulation . Companion . create ( 2 . 0 , ĠlistOf ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDESCRIP TOR Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInstrument Descriptor . create ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" unit ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstrument Type . COUNTER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstrument ValueType . DOUBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ