package Ġcom . github . pro log db . io . binary pro log Ċ Ċ import Ġcom . github . pro log db . runtime . query . And Query Ċ import Ġcom . github . pro log db . runtime . query . Or Query Ċ import Ġcom . github . pro log db . runtime . query . Predicate Query Ċ import Ġcom . github . pro log db . runtime . term .* Ċ import Ġio . kot lint est . shouldBe Ċ import Ġio . kot lint est . specs . Free Spec Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . Data OutputStream Ċ Ċ class ĠBinary Pro log Writer Test Ġ: ĠFree Spec ({ ĊĠĠĠ Ġ" integer Ġencoding " Ġ- Ġ{ ĊĠĠĠĠĠĠĠ Ġ" one Ġbyte " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠData OutputStream ( buffer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . writeInt Encoded ( 6 7 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Data Ġ= Ġbuffer . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data . size ĠshouldBe Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data [ 0 ]. toInt () Ġand Ġ 0 xFF ĠshouldBe Ġ 0 xC 3 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" two Ġbytes " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠData OutputStream ( buffer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . writeInt Encoded ( 0 x 2 3 AF ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Data Ġ= Ġbuffer . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data . size ĠshouldBe Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data [ 0 ]. toInt () Ġand Ġ 0 xFF ĠshouldBe Ġ 0 x 4 7 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data [ 1 ]. toInt () Ġand Ġ 0 xFF ĠshouldBe Ġ 0 x AF ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" three Ġbytes " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠData OutputStream ( buffer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . writeInt Encoded ( 0 x 1 A _ 0 0 7 C ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Data Ġ= Ġbuffer . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data . size ĠshouldBe Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data [ 0 ]. toInt () Ġand Ġ 0 xFF ĠshouldBe Ġ 0 x 6 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data [ 1 ]. toInt () Ġand Ġ 0 xFF ĠshouldBe Ġ 0 x 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data [ 2 ]. toInt () Ġand Ġ 0 xFF ĠshouldBe Ġ 0 xFC ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" four Ġbytes " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠData OutputStream ( buffer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . writeInt Encoded ( 0 xF 2 0 _ BB 3 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 1 1 1 1 0 0 1 Ġ 0 0 0 0 0 1 0 Ġ 1 1 1 0 1 1 0 Ġ 0 1 1 1 0 0 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Data Ġ= Ġbuffer . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data . size ĠshouldBe Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data [ 0 ]. toInt () Ġand Ġ 0 xFF ĠshouldBe Ġ 0 x 7 9 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data [ 1 ]. toInt () Ġand Ġ 0 xFF ĠshouldBe Ġ 0 x 0 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data [ 2 ]. toInt () Ġand Ġ 0 xFF ĠshouldBe Ġ 0 x 7 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data [ 3 ]. toInt () Ġand Ġ 0 xFF ĠshouldBe Ġ 0 xB 9 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" example ĠA Ġfrom Ġspec " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠData OutputStream ( buffer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . writeInt Encoded ( 5 9 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Data Ġ= Ġbuffer . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data . size ĠshouldBe Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data [ 0 ]. toInt () Ġand Ġ 0 xFF ĠshouldBe Ġ 0 xBB ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" example ĠB Ġfrom Ġspec " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠData OutputStream ( buffer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . writeInt Encoded ( 2 8 7 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Data Ġ= Ġbuffer . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data . size ĠshouldBe Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data [ 0 ]. toInt () Ġand Ġ 0 xFF ĠshouldBe Ġ 0 x 0 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data [ 1 ]. toInt () Ġand Ġ 0 xFF ĠshouldBe Ġ 0 x 9 F ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" integer " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠData OutputStream ( buffer ) ĊĊĠĠĠĠĠĠĠ ĠBinary Pro log Writer . getDefaultInstance (). write Term To ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPro log Integer ( 4 6 8 7 7 9 2 L ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbuffer Data Ġ= Ġbuffer . toByteArray () ĊĠĠĠĠĠĠĠ Ġbuffer Data ĠshouldBe Ġbyte ArrayOf ( 0 x 1 0 , Ġ 0 x 8 8 . to Byte (), Ġ 0 x 0 0 , Ġ 0 x 0 0 , Ġ 0 x 0 0 , Ġ 0 x 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 0 , Ġ 0 x 4 7 , Ġ 0 x 8 7 . to Byte (), Ġ 0 xB 0 . to Byte ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" decimal " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠData OutputStream ( buffer ) ĊĊĠĠĠĠĠĠĠ ĠBinary Pro log Writer . getDefaultInstance (). write Term To ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPro log Decimal ( 1 . 6 e - 1 6 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbuffer Data Ġ= Ġbuffer . toByteArray () ĊĠĠĠĠĠĠĠ Ġbuffer Data ĠshouldBe Ġbyte ArrayOf ( 0 x 1 1 , Ġ 0 xC 0 . to Byte (), Ġ 0 x 3 C , Ġ 0 xA 7 . to Byte (), Ġ 0 x 0 E , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xF 5 . to Byte (), Ġ 0 x 4 6 , Ġ 0 x 4 6 , Ġ 0 xD 4 . to Byte (), Ġ 0 x 9 7 . to Byte ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" string " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠData OutputStream ( buffer ) ĊĊĠĠĠĠĠĠĠ ĠBinary Pro log Writer . getDefaultInstance (). write Term To ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPro log String (" String â ŀ © \ uD 8 3 D \ u DE 4 A "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbuffer Data Ġ= Ġbuffer . toByteArray () ĊĠĠĠĠĠĠĠ Ġbuffer Data ĠshouldBe Ġbyte ArrayOf ( 0 x 2 4 , Ġ 0 x 8 D . to Byte (), Ġ 0 x 5 3 , Ġ 0 x 7 4 , Ġ 0 x 7 2 , Ġ 0 x 6 9 , Ġ 0 x 6 E , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 7 , Ġ 0 xE 2 . to Byte (), Ġ 0 x 9 E . to Byte (), Ġ 0 xA 9 . to Byte (), Ġ 0 xF 0 . to Byte (), Ġ 0 x 9 F . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 9 9 . to Byte (), Ġ 0 x 8 A . to Byte ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" atom " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠData OutputStream ( buffer ) ĊĊĠĠĠĠĠĠĠ ĠBinary Pro log Writer . getDefaultInstance (). write Term To ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAtom (" String â ŀ © \ uD 8 3 D \ u DE 4 A "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbuffer Data Ġ= Ġbuffer . toByteArray () ĊĠĠĠĠĠĠĠ Ġbuffer Data ĠshouldBe Ġbyte ArrayOf ( 0 x 2 2 , Ġ 0 x 8 D . to Byte (), Ġ 0 x 5 3 , Ġ 0 x 7 4 , Ġ 0 x 7 2 , Ġ 0 x 6 9 , Ġ 0 x 6 E , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 7 , Ġ 0 xE 2 . to Byte (), Ġ 0 x 9 E . to Byte (), Ġ 0 xA 9 . to Byte (), Ġ 0 xF 0 . to Byte (), Ġ 0 x 9 F . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 9 9 . to Byte (), Ġ 0 x 8 A . to Byte ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" variable " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠData OutputStream ( buffer ) ĊĊĠĠĠĠĠĠĠ ĠBinary Pro log Writer . getDefaultInstance (). write Term To ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVariable (" String â ŀ © \ uD 8 3 D \ u DE 4 A "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbuffer Data Ġ= Ġbuffer . toByteArray () ĊĠĠĠĠĠĠĠ Ġbuffer Data ĠshouldBe Ġbyte ArrayOf ( 0 x 2 0 , Ġ 0 x 8 D . to Byte (), Ġ 0 x 5 3 , Ġ 0 x 7 4 , Ġ 0 x 7 2 , Ġ 0 x 6 9 , Ġ 0 x 6 E , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 7 , Ġ 0 xE 2 . to Byte (), Ġ 0 x 9 E . to Byte (), Ġ 0 xA 9 . to Byte (), Ġ 0 xF 0 . to Byte (), Ġ 0 x 9 F . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 9 9 . to Byte (), Ġ 0 x 8 A . to Byte ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" predicate " Ġ- Ġ{ ĊĠĠĠĠĠĠĠ Ġ" simple " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠData OutputStream ( buffer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinary Pro log Writer . getDefaultInstance (). write Term To ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPredicate (" a ", ĠarrayOf ( Atom (" x ")) ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Data Ġ= Ġbuffer . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data ĠshouldBe Ġbyte ArrayOf ( 0 x 3 0 , Ġ 0 x 8 1 . to Byte (), Ġ 0 x 8 1 . to Byte (), Ġ 0 x 6 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 2 , Ġ 0 x 8 1 . to Byte (), Ġ 0 x 7 8 . to Byte ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" advanced " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠData OutputStream ( buffer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinary Pro log Writer . getDefaultInstance (). write Term To ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPredicate (" foo ", ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPro log Integer ( 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPro log String (" bar "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAtom (" z ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Data Ġ= Ġbuffer . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data ĠshouldBe Ġbyte ArrayOf ( 0 x 3 0 , Ġ 0 x 8 3 . to Byte (), Ġ 0 x 8 3 . to Byte (), Ġ 0 x 6 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 F , Ġ 0 x 6 F , Ġ 0 x 1 0 , Ġ 0 x 8 8 . to Byte (), Ġ 0 x 0 0 , Ġ 0 x 0 0 , Ġ 0 x 0 0 , Ġ 0 x 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 0 , Ġ 0 x 0 0 , Ġ 0 x 0 0 , Ġ 0 x 0 1 , Ġ 0 x 2 4 , Ġ 0 x 8 3 . to Byte (), Ġ 0 x 6 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 1 , Ġ 0 x 7 2 , Ġ 0 x 2 2 , Ġ 0 x 8 1 . to Byte (), Ġ 0 x 7 A ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" list " Ġ- Ġ{ ĊĠĠĠĠĠĠĠ Ġ" with Ġtail " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠData OutputStream ( buffer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinary Pro log Writer . getDefaultInstance (). write Term To ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPro log List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAtom (" a "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPro log Integer ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVariable (" T ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Data Ġ= Ġbuffer . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data ĠshouldBe Ġbyte ArrayOf ( 0 x 3 1 , Ġ 0 x 8 1 . to Byte (), Ġ 0 x 5 4 , Ġ 0 x 8 2 . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 2 , Ġ 0 x 8 1 . to Byte (), Ġ 0 x 6 1 , Ġ 0 x 1 0 , Ġ 0 x 8 8 . to Byte (), Ġ 0 x 0 0 , Ġ 0 x 0 0 , Ġ 0 x 0 0 , Ġ 0 x 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 0 , Ġ 0 x 0 0 , Ġ 0 x 0 0 , Ġ 0 x 0 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" without Ġtail " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠData OutputStream ( buffer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinary Pro log Writer . getDefaultInstance (). write Term To ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPro log List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAtom (" a "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPro log Integer ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Data Ġ= Ġbuffer . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data ĠshouldBe Ġbyte ArrayOf ( 0 x 3 2 , Ġ 0 x 8 2 . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 2 , Ġ 0 x 8 1 . to Byte (), Ġ 0 x 6 1 , Ġ 0 x 1 0 , Ġ 0 x 8 8 . to Byte (), Ġ 0 x 0 0 , Ġ 0 x 0 0 , Ġ 0 x 0 0 , Ġ 0 x 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 0 , Ġ 0 x 0 0 , Ġ 0 x 0 0 , Ġ 0 x 0 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" dictionary " Ġ- Ġ{ ĊĠĠĠĠĠĠĠ Ġ" with Ġtail " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠData OutputStream ( buffer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinary Pro log Writer . getDefaultInstance (). write Term To ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPro log Dictionary ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAtom (" a ") Ġto ĠAtom (" b ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVariable (" X ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Data Ġ= Ġbuffer . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data ĠshouldBe Ġbyte ArrayOf ( 0 x 4 0 , Ġ 0 x 8 1 . to Byte (), Ġ 0 x 5 8 , Ġ 0 x 8 1 . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 8 1 . to Byte (), Ġ 0 x 6 1 , Ġ 0 x 2 2 , Ġ 0 x 8 1 . to Byte (), Ġ 0 x 6 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" without Ġtail " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠData OutputStream ( buffer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinary Pro log Writer . getDefaultInstance (). write Term To ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPro log Dictionary ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAtom (" f ") Ġto ĠPro log String (" b "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAtom (" x ") Ġto ĠPro log Integer ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Data Ġ= Ġbuffer . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data ĠshouldBe Ġbyte ArrayOf ( 0 x 4 1 , Ġ 0 x 8 2 . to Byte (), Ġ 0 x 8 1 . to Byte (), Ġ 0 x 6 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 4 , Ġ 0 x 8 1 . to Byte (), Ġ 0 x 6 2 , Ġ 0 x 8 1 . to Byte (), Ġ 0 x 7 8 , Ġ 0 x 1 0 , Ġ 0 x 8 8 . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 0 , Ġ 0 x 0 0 , Ġ 0 x 0 0 , Ġ 0 x 0 0 , Ġ 0 x 0 0 , Ġ 0 x 0 0 , Ġ 0 x 0 0 , Ġ 0 x 0 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" query " Ġ- Ġ{ ĊĠĠĠĠĠĠĠ Ġ" A " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠData OutputStream ( buffer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinary Pro log Writer . getDefaultInstance (). write Query To ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPredicate Query ( Predicate (" foo ", ĠarrayOf ( Pro log Integer ( 5 )))), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Data Ġ= Ġbuffer . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data ĠshouldBe Ġbyte ArrayOf ( 0 x 6 0 , Ġ 0 x 8 1 . to Byte (), Ġ 0 x 8 3 . to Byte (), Ġ 0 x 6 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 F , Ġ 0 x 6 F , Ġ 0 x 1 0 , Ġ 0 x 8 8 . to Byte (), Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 x 0 5 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" B " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠData OutputStream ( buffer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinary Pro log Writer . getDefaultInstance (). write Query To ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnd Query ( array Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOr Query ( array Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPredicate Query ( Predicate (" foo ", ĠarrayOf ( Variable (" X ")) )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPredicate Query ( Predicate (" bar ", ĠarrayOf ( Variable (" X ")) )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPredicate Query ( Predicate (" fuzz ", ĠarrayOf ( Variable (" Y ")) )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Data Ġ= Ġbuffer . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Data ĠshouldBe Ġbyte ArrayOf ( 0 x 6 1 , Ġ 0 x 0 0 , Ġ 0 x 8 2 . to Byte (), Ġ 0 x 6 1 , Ġ 0 x 0 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 8 2 . to Byte (), Ġ 0 x 6 0 , Ġ 0 x 8 1 . to Byte (), Ġ 0 x 8 3 . to Byte (), Ġ 0 x 6 6 , Ġ 0 x 6 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 F , Ġ 0 x 2 0 , Ġ 0 x 8 1 . to Byte (), Ġ 0 x 5 8 , Ġ 0 x 6 0 , Ġ 0 x 8 1 . to Byte (), Ġ 0 x 8 3 . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 6 2 , Ġ 0 x 6 1 , Ġ 0 x 7 2 , Ġ 0 x 2 0 , Ġ 0 x 8 1 . to Byte (), Ġ 0 x 5 8 , Ġ 0 x 6 0 , Ġ 0 x 8 1 . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 8 4 . to Byte (), Ġ 0 x 6 6 , Ġ 0 x 7 5 , Ġ 0 x 7 A , Ġ 0 x 7 A , Ġ 0 x 2 0 , Ġ 0 x 8 1 . to Byte (), Ġ 0 x 5 9 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ })