# TODO: various gojq fq fork regression tests, should probably be move to fork code instead # 0xf_ffff_ffff_fffff_fffff-1 | toradix(2,8,16) $ fq -n '0b1111111111111111111111111111111111111111111111111111111111111111111111111110, 0o17777777777777777777777776, 0xffffffffffffffffffe' 75557863725914323419134 75557863725914323419134 75557863725914323419134 $ fq -n '[true] | all' true $ fq -n '{a:1, b: 2} | tostream' [ [ "a" ], 1 ] [ [ "b" ], 2 ] [ [ "b" ] ] $ fq -d mp3 '{(.headers[0].magic): 123}' test.mp3 { "ID3": 123 } $ fq -d mp3 '{(.headers[0].magic): 123}' test.mp3 { "ID3": 123 } $ fq -d mp3 '.frames | group_by(.side_info | {b: .main_data_end}) | map(length)' test.mp3 [ 3 ] $ fq -d mp3 '.frames | map(.header) | group_by(.bitrate)' test.mp3 [ [ { "bitrate": 56000, "channel_mode": "none", "channels": "mono", "copyright": 0, "emphasis": "none", "layer": 3, "mpeg_version": "1", "original": 0, "padding": "not_padded", "private": 0, "protection_absent": true, "sample_count": 1152, "sample_rate": 44100, "sync": 2047 } ], [ { "bitrate": 64000, "channel_mode": "none", "channels": "mono", "copyright": 0, "emphasis": "none", "layer": 3, "mpeg_version": "1", "original": 1, "padding": "not_padded", "private": 0, "protection_absent": true, "sample_count": 1152, "sample_rate": 44100, "sync": 2047 }, { "bitrate": 64000, "channel_mode": "none", "channels": "mono", "copyright": 0, "emphasis": "none", "layer": 3, "mpeg_version": "1", "original": 1, "padding": "padded", "private": 0, "protection_absent": true, "sample_count": 1152, "sample_rate": 44100, "sync": 2047 } ] ] $ fq -d mp3 '.frames | map(.header) | sort_by(.bitrate)' test.mp3 [ { "bitrate": 56000, "channel_mode": "none", "channels": "mono", "copyright": 0, "emphasis": "none", "layer": 3, "mpeg_version": "1", "original": 0, "padding": "not_padded", "private": 0, "protection_absent": true, "sample_count": 1152, "sample_rate": 44100, "sync": 2047 }, { "bitrate": 64000, "channel_mode": "none", "channels": "mono", "copyright": 0, "emphasis": "none", "layer": 3, "mpeg_version": "1", "original": 1, "padding": "not_padded", "private": 0, "protection_absent": true, "sample_count": 1152, "sample_rate": 44100, "sync": 2047 }, { "bitrate": 64000, "channel_mode": "none", "channels": "mono", "copyright": 0, "emphasis": "none", "layer": 3, "mpeg_version": "1", "original": 1, "padding": "padded", "private": 0, "protection_absent": true, "sample_count": 1152, "sample_rate": 44100, "sync": 2047 } ] $ fq -d mp3 '.frames | map(.header) | sort_by(.bitrate)[0]' test.mp3 |00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef|.frames[0].header{}: 0x20| ff fb | .. | sync: 0b11111111111 (valid) 0x20| fb | . | mpeg_version: "1" (3) (MPEG Version 1) 0x20| fb | . | layer: 3 (1) (MPEG Layer 3) | | | sample_count: 1152 0x20| fb | . | protection_absent: true (No CRC) 0x20| 40| @| bitrate: 56000 (4) 0x20| 40| @| sample_rate: 44100 (0) 0x20| 40| @| padding: "not_padded" (0b0) 0x20| 40| @| private: 0 0x30|c0 |. | channels: "mono" (0b11) 0x30|c0 |. | channel_mode: "none" (0b0) 0x30|c0 |. | copyright: 0 0x30|c0 |. | original: 0 0x30|c0 |. | emphasis: "none" (0b0) $ fq -d mp3 '.frames | map(.header) | min_by(.bitrate)' test.mp3 |00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef|.frames[0].header{}: 0x20| ff fb | .. | sync: 0b11111111111 (valid) 0x20| fb | . | mpeg_version: "1" (3) (MPEG Version 1) 0x20| fb | . | layer: 3 (1) (MPEG Layer 3) | | | sample_count: 1152 0x20| fb | . | protection_absent: true (No CRC) 0x20| 40| @| bitrate: 56000 (4) 0x20| 40| @| sample_rate: 44100 (0) 0x20| 40| @| padding: "not_padded" (0b0) 0x20| 40| @| private: 0 0x30|c0 |. | channels: "mono" (0b11) 0x30|c0 |. | channel_mode: "none" (0b0) 0x30|c0 |. | copyright: 0 0x30|c0 |. | original: 0 0x30|c0 |. | emphasis: "none" (0b0) $ fq -d mp3 '.frames | map(.header) | max_by(.bitrate)' test.mp3 |00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef|.frames[2].header{}: 0x1b0| ff fb | .. | sync: 0b11111111111 (valid) 0x1b0| fb | . | mpeg_version: "1" (3) (MPEG Version 1) 0x1b0| fb | . | layer: 3 (1) (MPEG Layer 3) | | | sample_count: 1152 0x1b0| fb | . | protection_absent: true (No CRC) 0x1b0| 52 | R | bitrate: 64000 (5) 0x1b0| 52 | R | sample_rate: 44100 (0) 0x1b0| 52 | R | padding: "padded" (0b1) 0x1b0| 52 | R | private: 0 0x1b0| c4 | . | channels: "mono" (0b11) 0x1b0| c4 | . | channel_mode: "none" (0b0) 0x1b0| c4 | . | copyright: 0 0x1b0| c4 | . | original: 1 0x1b0| c4 | . | emphasis: "none" (0b0) $ fq -d mp3 '.frames[0] | . + .header | keys, .bitrate' test.mp3 [ "audio_data", "bitrate", "channel_mode", "channels", "copyright", "crc_calculated", "emphasis", "header", "layer", "mpeg_version", "original", "padding", "private", "protection_absent", "sample_count", "sample_rate", "side_info", "sync", "xing" ] |00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef| 0x20| 40| @|.frames[0].header.bitrate: 56000 (4) $ fq -d mp3 '[.frames[0] | ., .header] | add | keys, .bitrate' test.mp3 [ "audio_data", "bitrate", "channel_mode", "channels", "copyright", "crc_calculated", "emphasis", "header", "layer", "mpeg_version", "original", "padding", "private", "protection_absent", "sample_count", "sample_rate", "side_info", "sync", "xing" ] |00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef| 0x20| 40| @|.frames[0].header.bitrate: 56000 (4) # make sure to_entries preserve struct order $ fq -d mp3 '.frames[0] | keys' test.mp3 [ "header", "side_info", "xing", "audio_data", "crc_calculated" ] $ fq -d mp3 '.frames[0] | to_entries[].key' test.mp3 "header" "side_info" "xing" "audio_data" "crc_calculated" # xml, csv does string normalization, make sure it works with nested JQValue:s # TODO: move this test as it depends on xml $ fq -r '.headers[0] | toxml({indent: 2})' test.mp3 false false false 0 false false false false false false false false 0 0 0 TSSE 15 Lavf58.45.100 utf8 ID3 ���������� 0 35 4 $ fq -i null> 0b0_1 1 null> 0b1_0000_0000_0000_0000_0000_0000_0000_0000 4294967296 null> 0b0_1x ^ unexpected token "x" null> 0o012_34567 342391 null> 0o7_0000_0000_0000_0000_0000_0000_0000_0000 554597137599850363154807652352 null> 0o012_34567x ^ unexpected token "x" null> 0x012_3456789abcdef 81985529216486895 null> 0xf_0000_0000_0000_0000_0000_0000_0000_0000 5104235503814076951950619111476523171840 null> 0x012_3456789abcdefx ^ unexpected token "x" null> ^D