blob: 53c8fffe8b89f2594f5ad932ba05b067c2fa3ba3 [file] [log] [blame]
Roman Khassraf91448612015-08-21 11:14:51 +02001#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3# @file
Piotr Krysika6268a52017-08-23 16:02:19 +02004# @author (C) 2015 by Roman Khassraf <rkhassraf@gmail.com>
Roman Khassraf91448612015-08-21 11:14:51 +02005# @section LICENSE
6#
7# Gr-gsm is free software; you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
9# the Free Software Foundation; either version 3, or (at your option)
10# any later version.
11#
12# Gr-gsm is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License
18# along with gr-gsm; see the file COPYING. If not, write to
19# the Free Software Foundation, Inc., 51 Franklin Street,
20# Boston, MA 02110-1301, USA.
21#
22#
23
24from gnuradio import gr, gr_unittest, blocks
Piotr Krysik5c7b3742016-06-21 07:12:32 +020025import grgsm_swig as grgsm
Vasil Velichkovc7134ff2019-09-09 04:03:26 +030026from misc_utils import arfcn
Roman Khassraf91448612015-08-21 11:14:51 +020027import os
28import sys
29
Roman Khassraffb772f82016-09-23 07:23:05 +020030class qa_arfcn(gr_unittest.TestCase):
Roman Khassraf91448612015-08-21 11:14:51 +020031 def test_001_is_valid_arfcn(self):
Piotr Krysik3dfa11b2017-09-06 17:48:38 +020032 self.assertTrue(arfcn.is_valid_arfcn(259))
33 self.assertTrue(arfcn.is_valid_arfcn(277))
34 self.assertTrue(arfcn.is_valid_arfcn(293))
35 self.assertFalse(arfcn.is_valid_arfcn(258))
36 self.assertFalse(arfcn.is_valid_arfcn(294))
Roman Khassraffb772f82016-09-23 07:23:05 +020037
Piotr Krysik3dfa11b2017-09-06 17:48:38 +020038 self.assertTrue(arfcn.is_valid_arfcn(306))
39 self.assertTrue(arfcn.is_valid_arfcn(323))
40 self.assertTrue(arfcn.is_valid_arfcn(340))
41 self.assertFalse(arfcn.is_valid_arfcn(305))
42 self.assertFalse(arfcn.is_valid_arfcn(341))
Roman Khassraffb772f82016-09-23 07:23:05 +020043
Piotr Krysik3dfa11b2017-09-06 17:48:38 +020044 self.assertTrue(arfcn.is_valid_arfcn(128))
45 self.assertTrue(arfcn.is_valid_arfcn(199))
46 self.assertTrue(arfcn.is_valid_arfcn(251))
47 self.assertFalse(arfcn.is_valid_arfcn(127))
48 self.assertFalse(arfcn.is_valid_arfcn(252))
Roman Khassraffb772f82016-09-23 07:23:05 +020049
Roman Khassraffb772f82016-09-23 07:23:05 +020050
Piotr Krysik3dfa11b2017-09-06 17:48:38 +020051 self.assertTrue(arfcn.is_valid_arfcn(0))
52 self.assertTrue(arfcn.is_valid_arfcn(1))
53 self.assertTrue(arfcn.is_valid_arfcn(124))
54 self.assertFalse(arfcn.is_valid_arfcn(125))
Roman Khassraffb772f82016-09-23 07:23:05 +020055
Piotr Krysik3dfa11b2017-09-06 17:48:38 +020056 self.assertTrue(arfcn.is_valid_arfcn(0))
57 self.assertTrue(arfcn.is_valid_arfcn(1))
58 self.assertTrue(arfcn.is_valid_arfcn(124))
59 self.assertFalse(arfcn.is_valid_arfcn(125))
Roman Khassraffb772f82016-09-23 07:23:05 +020060
Piotr Krysik3dfa11b2017-09-06 17:48:38 +020061 self.assertTrue(arfcn.is_valid_arfcn(955))
62 self.assertTrue(arfcn.is_valid_arfcn(989))
63 self.assertTrue(arfcn.is_valid_arfcn(1023))
64 self.assertFalse(arfcn.is_valid_arfcn(954))
65 self.assertFalse(arfcn.is_valid_arfcn(1024))
Roman Khassraffb772f82016-09-23 07:23:05 +020066
Piotr Krysik3dfa11b2017-09-06 17:48:38 +020067 self.assertTrue(arfcn.is_valid_arfcn(512))
68 self.assertTrue(arfcn.is_valid_arfcn(732))
69 self.assertTrue(arfcn.is_valid_arfcn(885))
70 self.assertFalse(arfcn.is_valid_arfcn(511))
71 self.assertFalse(arfcn.is_valid_arfcn(886))
72
73 self.assertTrue(arfcn.is_valid_arfcn(512+2**15))
74 self.assertTrue(arfcn.is_valid_arfcn(691+2**15))
75 self.assertTrue(arfcn.is_valid_arfcn(810+2**15))
76 self.assertFalse(arfcn.is_valid_arfcn(511+2**15))
77 self.assertFalse(arfcn.is_valid_arfcn(811+2**15))
Roman Khassraf91448612015-08-21 11:14:51 +020078
Roman Khassraf91448612015-08-21 11:14:51 +020079 def test_002_is_valid_uplink(self):
Piotr Krysik3dfa11b2017-09-06 17:48:38 +020080 self.assertTrue(arfcn.is_valid_uplink(450.6e6))
81 self.assertTrue(arfcn.is_valid_uplink(457.4e6))
82 self.assertFalse(arfcn.is_valid_uplink(450.4e6))
83 self.assertFalse(arfcn.is_valid_uplink(457.6e6))
Roman Khassraffb772f82016-09-23 07:23:05 +020084
Piotr Krysik3dfa11b2017-09-06 17:48:38 +020085 self.assertTrue(arfcn.is_valid_uplink(479e6))
86 self.assertTrue(arfcn.is_valid_uplink(485.8e6))
87 self.assertFalse(arfcn.is_valid_uplink(478.8e6))
88 self.assertFalse(arfcn.is_valid_uplink(486e6))
Roman Khassraffb772f82016-09-23 07:23:05 +020089
Piotr Krysik3dfa11b2017-09-06 17:48:38 +020090 self.assertTrue(arfcn.is_valid_uplink(824.2e6))
91 self.assertTrue(arfcn.is_valid_uplink(848.8e6))
92 self.assertFalse(arfcn.is_valid_uplink(824e6))
93 self.assertFalse(arfcn.is_valid_uplink(849e6))
Roman Khassraffb772f82016-09-23 07:23:05 +020094
Piotr Krysik3dfa11b2017-09-06 17:48:38 +020095 self.assertTrue(arfcn.is_valid_uplink(876.2e6))
96 self.assertTrue(arfcn.is_valid_uplink(889.8e6))
97 self.assertTrue(arfcn.is_valid_uplink(890.0e6))
98 self.assertTrue(arfcn.is_valid_uplink(914.8e6))
99 self.assertFalse(arfcn.is_valid_uplink(876e6))
100 self.assertFalse(arfcn.is_valid_uplink(915e6))
Roman Khassraffb772f82016-09-23 07:23:05 +0200101
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200102 self.assertTrue(arfcn.is_valid_uplink(1710.2e6))
103 self.assertTrue(arfcn.is_valid_uplink(1784.8e6))
104 self.assertFalse(arfcn.is_valid_uplink(1710e6))
105 self.assertFalse(arfcn.is_valid_uplink(1785e6))
Roman Khassraffb772f82016-09-23 07:23:05 +0200106
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200107 self.assertTrue(arfcn.is_valid_uplink(1850.2e6))
108 self.assertTrue(arfcn.is_valid_uplink(1909.8e6))
109 self.assertFalse(arfcn.is_valid_uplink(1850e6))
110 self.assertFalse(arfcn.is_valid_uplink(1910e6))
Roman Khassraf91448612015-08-21 11:14:51 +0200111
Roman Khassraf91448612015-08-21 11:14:51 +0200112 def test_003_is_valid_downlink(self):
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200113 self.assertTrue(arfcn.is_valid_downlink(460.6e6))
114 self.assertTrue(arfcn.is_valid_downlink(467.4e6))
115 self.assertFalse(arfcn.is_valid_downlink(460.4e6))
116 self.assertFalse(arfcn.is_valid_downlink(467.6e6))
Roman Khassraffb772f82016-09-23 07:23:05 +0200117
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200118 self.assertTrue(arfcn.is_valid_downlink(489e6))
119 self.assertTrue(arfcn.is_valid_downlink(495.8e6))
120 self.assertFalse(arfcn.is_valid_downlink(488.8e6))
121 self.assertFalse(arfcn.is_valid_downlink(496e6))
Roman Khassraffb772f82016-09-23 07:23:05 +0200122
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200123 self.assertTrue(arfcn.is_valid_downlink(869.2e6))
124 self.assertTrue(arfcn.is_valid_downlink(893.8e6))
125 self.assertFalse(arfcn.is_valid_downlink(869e6))
126 self.assertFalse(arfcn.is_valid_downlink(894e6))
Roman Khassraffb772f82016-09-23 07:23:05 +0200127
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200128 self.assertTrue(arfcn.is_valid_downlink(921.2e6))
129 self.assertTrue(arfcn.is_valid_downlink(934.8e6))
130 self.assertTrue(arfcn.is_valid_downlink(935.0e6))
131 self.assertTrue(arfcn.is_valid_downlink(959.8e6))
132 self.assertFalse(arfcn.is_valid_downlink(921e6))
133 self.assertFalse(arfcn.is_valid_downlink(960e6))
Roman Khassraffb772f82016-09-23 07:23:05 +0200134
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200135 self.assertTrue(arfcn.is_valid_downlink(1805.2e6))
136 self.assertTrue(arfcn.is_valid_downlink(1879.8e6))
137 self.assertFalse(arfcn.is_valid_downlink(1805e6))
138 self.assertFalse(arfcn.is_valid_downlink(1880e6))
Roman Khassraffb772f82016-09-23 07:23:05 +0200139
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200140 self.assertTrue(arfcn.is_valid_downlink(1930.2e6))
141 self.assertTrue(arfcn.is_valid_downlink(1989.8e6))
142 self.assertFalse(arfcn.is_valid_downlink(1930e6))
143 self.assertFalse(arfcn.is_valid_downlink(1990e6))
Roman Khassraffb772f82016-09-23 07:23:05 +0200144
Roman Khassraf91448612015-08-21 11:14:51 +0200145 def test_004_arfcn2uplink(self):
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200146 self.assertEqual(450.6e6, arfcn.arfcn2uplink(259))
147 self.assertEqual(457.4e6, arfcn.arfcn2uplink(293))
Roman Khassraffb772f82016-09-23 07:23:05 +0200148
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200149 self.assertEqual(479e6, arfcn.arfcn2uplink(306))
150 self.assertEqual(485.8e6, arfcn.arfcn2uplink(340))
Roman Khassraffb772f82016-09-23 07:23:05 +0200151
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200152 self.assertEqual(824.2e6, arfcn.arfcn2uplink(128))
153 self.assertEqual(848.8e6, arfcn.arfcn2uplink(251))
Roman Khassraffb772f82016-09-23 07:23:05 +0200154
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200155 self.assertEqual(890.2e6, arfcn.arfcn2uplink(1))
156 self.assertEqual(914.8e6, arfcn.arfcn2uplink(124))
Roman Khassraffb772f82016-09-23 07:23:05 +0200157
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200158 self.assertEqual(890.0e6, arfcn.arfcn2uplink(0))
159 self.assertEqual(914.8e6, arfcn.arfcn2uplink(124))
160 self.assertEqual(880.2e6, arfcn.arfcn2uplink(975))
161 self.assertEqual(889.8e6, arfcn.arfcn2uplink(1023))
Roman Khassraffb772f82016-09-23 07:23:05 +0200162
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200163 self.assertEqual(890.0e6, arfcn.arfcn2uplink(0))
164 self.assertEqual(914.8e6, arfcn.arfcn2uplink(124))
165 self.assertEqual(876.2e6, arfcn.arfcn2uplink(955))
166 self.assertEqual(889.8e6, arfcn.arfcn2uplink(1023))
Roman Khassraffb772f82016-09-23 07:23:05 +0200167
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200168 self.assertEqual(1710.2e6, arfcn.arfcn2uplink(512))
169 self.assertEqual(1784.8e6, arfcn.arfcn2uplink(885))
Roman Khassraffb772f82016-09-23 07:23:05 +0200170
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200171 self.assertEqual(1850.2e6, arfcn.arfcn2uplink(512+2**15))
172 self.assertEqual(1909.8e6, arfcn.arfcn2uplink(810+2**15))
Roman Khassraffb772f82016-09-23 07:23:05 +0200173
Roman Khassraf91448612015-08-21 11:14:51 +0200174 def test_005_arfcn2downlink(self):
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200175 self.assertEqual(460.6e6, arfcn.arfcn2downlink(259))
176 self.assertEqual(467.4e6, arfcn.arfcn2downlink(293))
Roman Khassraffb772f82016-09-23 07:23:05 +0200177
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200178 self.assertEqual(489e6, arfcn.arfcn2downlink(306))
179 self.assertEqual(495.8e6, arfcn.arfcn2downlink(340))
Roman Khassraffb772f82016-09-23 07:23:05 +0200180
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200181 self.assertEqual(869.2e6, arfcn.arfcn2downlink(128))
182 self.assertEqual(893.8e6, arfcn.arfcn2downlink(251))
Roman Khassraffb772f82016-09-23 07:23:05 +0200183
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200184 self.assertEqual(935.2e6, arfcn.arfcn2downlink(1))
185 self.assertEqual(959.8e6, arfcn.arfcn2downlink(124))
Roman Khassraffb772f82016-09-23 07:23:05 +0200186
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200187 self.assertEqual(935.0e6, arfcn.arfcn2downlink(0))
188 self.assertEqual(959.8e6, arfcn.arfcn2downlink(124))
189 self.assertEqual(925.2e6, arfcn.arfcn2downlink(975))
190 self.assertEqual(934.8e6, arfcn.arfcn2downlink(1023))
Roman Khassraffb772f82016-09-23 07:23:05 +0200191
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200192 self.assertEqual(935.0e6, arfcn.arfcn2downlink(0))
193 self.assertEqual(959.8e6, arfcn.arfcn2downlink(124))
194 self.assertEqual(921.2e6, arfcn.arfcn2downlink(955))
195 self.assertEqual(934.8e6, arfcn.arfcn2downlink(1023))
Roman Khassraffb772f82016-09-23 07:23:05 +0200196
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200197 self.assertEqual(1805.2e6, arfcn.arfcn2downlink(512))
198 self.assertEqual(1879.8e6, arfcn.arfcn2downlink(885))
Roman Khassraffb772f82016-09-23 07:23:05 +0200199
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200200 self.assertEqual(1930.2e6, arfcn.arfcn2downlink(512+2**15))
201 self.assertEqual(1989.8e6, arfcn.arfcn2downlink(810+2**15))
Roman Khassraf91448612015-08-21 11:14:51 +0200202 def test_006_uplink2arfcn(self):
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200203 self.assertEqual(259, arfcn.uplink2arfcn(450.6e6))
204 self.assertEqual(293, arfcn.uplink2arfcn(457.4e6))
Roman Khassraffb772f82016-09-23 07:23:05 +0200205
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200206 self.assertEqual(306, arfcn.uplink2arfcn(479e6))
207 self.assertEqual(340, arfcn.uplink2arfcn(485.8e6))
Roman Khassraffb772f82016-09-23 07:23:05 +0200208
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200209 self.assertEqual(128, arfcn.uplink2arfcn(824.2e6))
210 self.assertEqual(251, arfcn.uplink2arfcn(848.8e6))
Roman Khassraffb772f82016-09-23 07:23:05 +0200211
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200212 self.assertEqual(1, arfcn.uplink2arfcn(890.2e6))
213 self.assertEqual(124, arfcn.uplink2arfcn(914.8e6))
Roman Khassraffb772f82016-09-23 07:23:05 +0200214
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200215 self.assertEqual(0, arfcn.uplink2arfcn(890.0e6))
216 self.assertEqual(124, arfcn.uplink2arfcn(914.8e6))
217 self.assertEqual(975, arfcn.uplink2arfcn(880.2e6))
218 self.assertEqual(1023, arfcn.uplink2arfcn(889.8e6))
Roman Khassraffb772f82016-09-23 07:23:05 +0200219
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200220 self.assertEqual(0, arfcn.uplink2arfcn(890.0e6))
221 self.assertEqual(124, arfcn.uplink2arfcn(914.8e6))
222 self.assertEqual(955, arfcn.uplink2arfcn(876.2e6))
223 self.assertEqual(1023, arfcn.uplink2arfcn(889.8e6))
Roman Khassraffb772f82016-09-23 07:23:05 +0200224
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200225 self.assertEqual(512, arfcn.uplink2arfcn(1710.2e6))
226 self.assertEqual(885, arfcn.uplink2arfcn(1784.8e6))
Roman Khassraffb772f82016-09-23 07:23:05 +0200227
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200228 self.assertEqual(512+2**15, arfcn.uplink2arfcn(1850.2e6))
229 self.assertEqual(810+2**15, arfcn.uplink2arfcn(1909.8e6))
Roman Khassraffb772f82016-09-23 07:23:05 +0200230
Roman Khassraf91448612015-08-21 11:14:51 +0200231 def test_007_downlink2arfcn(self):
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200232 self.assertEqual(259, arfcn.downlink2arfcn(460.6e6))
233 self.assertEqual(293, arfcn.downlink2arfcn(467.4e6))
Roman Khassraffb772f82016-09-23 07:23:05 +0200234
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200235 self.assertEqual(306, arfcn.downlink2arfcn(489e6,))
236 self.assertEqual(340, arfcn.downlink2arfcn(495.8e6))
Roman Khassraffb772f82016-09-23 07:23:05 +0200237
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200238 self.assertEqual(128, arfcn.downlink2arfcn(869.2e6))
239 self.assertEqual(251, arfcn.downlink2arfcn(893.8e6))
Roman Khassraffb772f82016-09-23 07:23:05 +0200240
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200241 self.assertEqual(1, arfcn.downlink2arfcn(935.2e6))
242 self.assertEqual(124, arfcn.downlink2arfcn(959.8e6))
Roman Khassraffb772f82016-09-23 07:23:05 +0200243
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200244 self.assertEqual(0, arfcn.downlink2arfcn(935.0e6))
245 self.assertEqual(124, arfcn.downlink2arfcn(959.8e6))
246 self.assertEqual(975, arfcn.downlink2arfcn(925.2e6))
247 self.assertEqual(1023, arfcn.downlink2arfcn(934.8e6))
Roman Khassraffb772f82016-09-23 07:23:05 +0200248
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200249 self.assertEqual(0, arfcn.downlink2arfcn(935.0e6))
250 self.assertEqual(124, arfcn.downlink2arfcn(959.8e6))
251 self.assertEqual(955, arfcn.downlink2arfcn(921.2e6))
252 self.assertEqual(1023, arfcn.downlink2arfcn(934.8e6))
Roman Khassraffb772f82016-09-23 07:23:05 +0200253
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200254 self.assertEqual(512, arfcn.downlink2arfcn(1805.2e6))
255 self.assertEqual(885, arfcn.downlink2arfcn(1879.8e6))
Roman Khassraffb772f82016-09-23 07:23:05 +0200256
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200257 self.assertEqual(512+2**15, arfcn.downlink2arfcn(1930.2e6))
258 self.assertEqual(810+2**15, arfcn.downlink2arfcn(1989.8e6))
Roman Khassraf5ec79872015-09-26 08:29:13 +0200259
Roman Khassraffb772f82016-09-23 07:23:05 +0200260 def test_008_get_arfcn_ranges(self):
261 self.assertEqual(1, len(arfcn.get_arfcn_ranges('GSM450')))
262 self.assertEqual(1, len(arfcn.get_arfcn_ranges('GSM480')))
263 self.assertEqual(1, len(arfcn.get_arfcn_ranges('GSM850')))
Piotr Krysik3dfa11b2017-09-06 17:48:38 +0200264 self.assertEqual(2, len(arfcn.get_arfcn_ranges('GSM900')))
Roman Khassraffb772f82016-09-23 07:23:05 +0200265 self.assertEqual(1, len(arfcn.get_arfcn_ranges('DCS1800')))
266 self.assertEqual(1, len(arfcn.get_arfcn_ranges('PCS1900')))
267
268
Roman Khassraf91448612015-08-21 11:14:51 +0200269if __name__ == '__main__':
270 gr_unittest.run(qa_arfcn, "qa_arfcn.xml")