import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Test Ċ import Ġkotlin . math . pow Ċ Ċ class ĠPer mut er Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Combin ations Small () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġa 1 Ġ= Ġarray ListOf ( 1 , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġa 2 Ġ= Ġarray ListOf ( 4 , Ġ 5 , Ġ 6 ) ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġarray ListOf ( a 1 , Ġa 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Size Ġ= Ġa 1 . size . toDouble (). pow ( input . size ). toInt () ĊĊĠĠĠĠĠĠĠ Ġval Ġcombinations Ġ= ĠPer mut er . perm ute ( input ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Size , Ġcombinations . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( timeout Ġ= Ġ 1 0 0 0 ) ĊĠĠĠ Ġfun Ġtest Combin ations Large () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġ 7 ĊĠĠĠĠĠĠĠ Ġval Ġa 1 Ġ= ĠInt Array ( size ) Ġ{ Ġit Ġ}. to Mutable List () ĊĠĠĠĠĠĠĠ Ġval Ġa 2 Ġ= ĠInt Array ( size ) Ġ{ Ġit Ġ+ Ġsize Ġ* Ġ 1 Ġ}. to Mutable List () ĊĠĠĠĠĠĠĠ Ġval Ġa 3 Ġ= ĠInt Array ( size ) Ġ{ Ġit Ġ+ Ġsize Ġ* Ġ 2 Ġ}. to Mutable List () ĊĠĠĠĠĠĠĠ Ġval Ġa 4 Ġ= ĠInt Array ( size ) Ġ{ Ġit Ġ+ Ġsize Ġ* Ġ 3 Ġ}. to Mutable List () ĊĠĠĠĠĠĠĠ Ġval Ġa 5 Ġ= ĠInt Array ( size ) Ġ{ Ġit Ġ+ Ġsize Ġ* Ġ 4 Ġ}. to Mutable List () ĊĠĠĠĠĠĠĠ Ġval Ġa 6 Ġ= ĠInt Array ( size ) Ġ{ Ġit Ġ+ Ġsize Ġ* Ġ 5 Ġ}. to Mutable List () ĊĠĠĠĠĠĠĠ Ġval Ġa 7 Ġ= ĠInt Array ( size ) Ġ{ Ġit Ġ+ Ġsize Ġ* Ġ 6 Ġ}. to Mutable List () ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġarray ListOf ( a 1 , Ġa 2 , Ġa 3 , Ġa 4 , Ġa 5 , Ġa 6 , Ġa 7 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Size Ġ= Ġa 1 . size . toDouble (). pow ( input . size ). toInt () ĊĊĠĠĠĠĠĠĠ Ġval Ġcombinations Ġ= ĠPer mut er . perm ute ( input ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Size , Ġcombinations . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Combin ations Ir regular Array Size () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġa 1 Ġ= Ġarray ListOf ( 1 , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġa 2 Ġ= Ġarray ListOf ( 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġa 3 Ġ= Ġarray ListOf ( 7 , Ġ 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġarray ListOf ( a 1 , Ġa 2 , Ġa 3 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcombinations Ġ= ĠPer mut er . perm ute ( input ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 6 , Ġcombinations . size ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( array ListOf ( 1 , Ġ 4 , Ġ 7 ), Ġcombinations [ 0 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals ( array ListOf ( 1 , Ġ 4 , Ġ 8 ), Ġcombinations [ 1 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals ( array ListOf ( 2 , Ġ 4 , Ġ 7 ), Ġcombinations [ 2 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals ( array ListOf ( 2 , Ġ 4 , Ġ 8 ), Ġcombinations [ 3 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals ( array ListOf ( 3 , Ġ 4 , Ġ 7 ), Ġcombinations [ 4 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals ( array ListOf ( 3 , Ġ 4 , Ġ 8 ), Ġcombinations [ 5 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Empty Input () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġarray ListOf < List < Int >>() ĊĠĠĠĠĠĠĠ Ġval Ġcombinations Ġ= ĠPer mut er . perm ute ( input ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġcombinations . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( input , Ġcombinations ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Single Array () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġa 1 Ġ= Ġarray ListOf ( 1 , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġarray ListOf ( a 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcombinations Ġ= ĠPer mut er . perm ute ( input ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġcombinations . size ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( a 1 , Ġcombinations [ 0 ]) ĊĠĠĠ Ġ} Ċ }