package Ġnet . app tr onic . core . base . collections Ċ Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġkotlinx . coroutines . with Timeout Ċ import Ġorg . junit . Test Ċ Ċ class ĠLinked Queue Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġverify Take () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġqueue Ġ= ĠLinked Queue < Int >() ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġqueue . add ( 1 ) ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () !!. value Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġqueue . add ( 2 ) ĊĠĠĠĠĠĠĠ Ġqueue . add ( 3 ) ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () !!. value Ġ== Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () !!. value Ġ== Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġqueue . add ( 4 ) ĊĠĠĠĠĠĠĠ Ġqueue . add ( 5 ) ĊĠĠĠĠĠĠĠ Ġqueue . add ( 6 ) ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () !!. value Ġ== Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () !!. value Ġ== Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () !!. value Ġ== Ġ 6 ) ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġqueue . add ( 7 ) ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () !!. value Ġ== Ġ 7 ) ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġqueue . add ( 8 ) ĊĠĠĠĠĠĠĠ Ġqueue . add ( 9 ) ĊĠĠĠĠĠĠĠ Ġqueue . add ( 1 0 ) ĊĠĠĠĠĠĠĠ Ġqueue . add ( 1 1 ) ĊĠĠĠĠĠĠĠ Ġqueue . add ( 1 2 ) ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () !!. value Ġ== Ġ 8 ) ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () !!. value Ġ== Ġ 9 ) ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () !!. value Ġ== Ġ 1 0 ) ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () !!. value Ġ== Ġ 1 1 ) ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () !!. value Ġ== Ġ 1 2 ) ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġassert ( queue . take () Ġ== Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġverify Take Await () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġqueue Ġ= ĠLinked Queue < Int >() ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Timeout ( 1 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( queue . take () Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . add ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( queue . take Await () Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . add ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . add ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . add ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( queue . take Await () Ġ== Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( queue . take Await () Ġ== Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( queue . take Await () Ġ== Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . add ( 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( queue . take () Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( queue . take Await () Ġ== Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }