arctan.py 25.5 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
import taos
import sys
import datetime
import inspect
import math
from util.log import *
from util.sql import *
from util.cases import *


class TDTestCase:
C
cpwu 已提交
12 13 14
    # updatecfgDict = {'debugFlag': 143 ,"cDebugFlag":143,"uDebugFlag":143 ,"rpcDebugFlag":143 , "tmrDebugFlag":143 ,
    # "jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143,
    # "wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"udfDebugFlag":143}
15 16 17
    def init(self, conn, powSql):
        tdLog.debug(f"start to excute {__file__}")
        tdSql.init(conn.cursor())
G
Ganlin Zhao 已提交
18

C
cpwu 已提交
19
    def prepare_datas(self, dbname="db"):
20
        tdSql.execute(
C
cpwu 已提交
21
            f'''create table {dbname}.stb1
22 23 24 25
            (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
            tags (t1 int)
            '''
        )
G
Ganlin Zhao 已提交
26

27
        tdSql.execute(
C
cpwu 已提交
28 29
            f'''
            create table {dbname}.t1
30 31 32 33
            (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
            '''
        )
        for i in range(4):
C
cpwu 已提交
34
            tdSql.execute(f'create table {dbname}.ct{i+1} using {dbname}.stb1 tags ( {i+1} )')
35 36 37

        for i in range(9):
            tdSql.execute(
C
cpwu 已提交
38
                f"insert into {dbname}.ct1 values ( now()-{i*10}s, {1*i}, {11111*i}, {111*i}, {11*i}, {1.11*i}, {11.11*i}, {i%2}, 'binary{i}', 'nchar{i}', now()+{1*i}a )"
39 40
            )
            tdSql.execute(
C
cpwu 已提交
41
                f"insert into {dbname}.ct4 values ( now()-{i*90}d, {1*i}, {11111*i}, {111*i}, {11*i}, {1.11*i}, {11.11*i}, {i%2}, 'binary{i}', 'nchar{i}', now()+{1*i}a )"
42
            )
C
cpwu 已提交
43 44 45 46
        tdSql.execute(f"insert into {dbname}.ct1 values (now()-45s, 0, 0, 0, 0, 0, 0, 0, 'binary0', 'nchar0', now()+8a )")
        tdSql.execute(f"insert into {dbname}.ct1 values (now()+10s, 9, -99999, -999, -99, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )")
        tdSql.execute(f"insert into {dbname}.ct1 values (now()+15s, 9, -99999, -999, -99, -9.99, NULL, 1, 'binary9', 'nchar9', now()+9a )")
        tdSql.execute(f"insert into {dbname}.ct1 values (now()+20s, 9, -99999, -999, NULL, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )")
47

C
cpwu 已提交
48 49 50
        tdSql.execute(f"insert into {dbname}.ct4 values (now()-810d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
        tdSql.execute(f"insert into {dbname}.ct4 values (now()-400d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
        tdSql.execute(f"insert into {dbname}.ct4 values (now()+90d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL  ) ")
51 52

        tdSql.execute(
C
cpwu 已提交
53
            f'''insert into {dbname}.t1 values
54 55 56 57 58 59 60 61 62 63 64 65 66 67
            ( '2020-04-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
            ( '2020-10-21 01:01:01.000', 1, 11111, 111, 11, 1.11, 11.11, 1, "binary1", "nchar1", now()+1a )
            ( '2020-12-31 01:01:01.000', 2, 22222, 222, 22, 2.22, 22.22, 0, "binary2", "nchar2", now()+2a )
            ( '2021-01-01 01:01:06.000', 3, 33333, 333, 33, 3.33, 33.33, 0, "binary3", "nchar3", now()+3a )
            ( '2021-05-07 01:01:10.000', 4, 44444, 444, 44, 4.44, 44.44, 1, "binary4", "nchar4", now()+4a )
            ( '2021-07-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
            ( '2021-09-30 01:01:16.000', 5, 55555, 555, 55, 5.55, 55.55, 0, "binary5", "nchar5", now()+5a )
            ( '2022-02-01 01:01:20.000', 6, 66666, 666, 66, 6.66, 66.66, 1, "binary6", "nchar6", now()+6a )
            ( '2022-10-28 01:01:26.000', 7, 00000, 000, 00, 0.00, 00.00, 1, "binary7", "nchar7", "1970-01-01 08:00:00.000" )
            ( '2022-12-01 01:01:30.000', 8, -88888, -888, -88, -8.88, -88.88, 0, "binary8", "nchar8", "1969-01-01 01:00:00.000" )
            ( '2022-12-31 01:01:36.000', 9, -99999999999999999, -999, -99, -9.99, -999999999999999999999.99, 1, "binary9", "nchar9", "1900-01-01 00:00:00.000" )
            ( '2023-02-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
            '''
        )
G
Ganlin Zhao 已提交
68

69 70 71 72 73 74
    def check_result_auto_atan(self ,origin_query , pow_query):

        pow_result = tdSql.getResult(pow_query)
        origin_result = tdSql.getResult(origin_query)

        auto_result =[]
G
Ganlin Zhao 已提交
75

76 77 78 79 80 81 82 83 84 85 86 87 88 89
        for row in origin_result:
            row_check = []
            for elem in row:
                if elem == None:
                    elem = None
                else:
                    elem = math.atan(elem)
                row_check.append(elem)
            auto_result.append(row_check)

        check_status = True

        for row_index , row in enumerate(pow_result):
            for col_index , elem in enumerate(row):
C
cpwu 已提交
90
                if auto_result[row_index][col_index] == None  and elem:
91 92
                    check_status = False
                elif auto_result[row_index][col_index] != None  and (auto_result[row_index][col_index] - elem > 0.00000001):
G
Ganlin Zhao 已提交
93
                    check_status = False
94 95 96 97 98 99 100
                else:
                    pass
        if not check_status:
            tdLog.notice("atan function value has not as expected , sql is \"%s\" "%pow_query )
            sys.exit(1)
        else:
            tdLog.info("atan value check pass , it work as expected ,sql is \"%s\"   "%pow_query )
G
Ganlin Zhao 已提交
101

C
cpwu 已提交
102
    def test_errors(self, dbname="db"):
103
        error_sql_lists = [
C
cpwu 已提交
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
            f"select atan from {dbname}.t1",
            # f"select atan(-+--+c1 ) from {dbname}.t1",
            # f"select +-atan(c1) from {dbname}.t1",
            # f"select ++-atan(c1) from {dbname}.t1",
            # f"select ++--atan(c1) from {dbname}.t1",
            # f"select - -atan(c1)*0 from {dbname}.t1",
            # f"select atan(tbname+1) from {dbname}.t1 ",
            f"select atan(123--123)==1 from {dbname}.t1",
            f"select atan(c1) as 'd1' from {dbname}.t1",
            f"select atan(c1 ,c2) from {dbname}.t1",
            f"select atan(c1 ,NULL ) from {dbname}.t1",
            f"select atan(,) from {dbname}.t1;",
            f"select atan(atan(c1) ab from {dbname}.t1)",
            f"select atan(c1 ) as int from {dbname}.t1",
            f"select atan from {dbname}.stb1",
            # f"select atan(-+--+c1) from {dbname}.stb1",
            # f"select +-atan(c1) from {dbname}.stb1",
            # f"select ++-atan(c1) from {dbname}.stb1",
            # f"select ++--atan(c1) from {dbname}.stb1",
            # f"select - -atan(c1)*0 from {dbname}.stb1",
            # f"select atan(tbname+1) from {dbname}.stb1 ",
            f"select atan(123--123)==1 from {dbname}.stb1",
            f"select atan(c1) as 'd1' from {dbname}.stb1",
            f"select atan(c1 ,c2 ) from {dbname}.stb1",
            f"select atan(c1 ,NULL) from {dbname}.stb1",
            f"select atan(,) from {dbname}.stb1;",
            f"select atan(atan(c1) ab from {dbname}.stb1)",
            f"select atan(c1) as int from {dbname}.stb1"
132 133 134
        ]
        for error_sql in error_sql_lists:
            tdSql.error(error_sql)
G
Ganlin Zhao 已提交
135

C
cpwu 已提交
136
    def support_types(self, dbname="db"):
137
        type_error_sql_lists = [
C
cpwu 已提交
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
            f"select atan(ts) from {dbname}.t1" ,
            f"select atan(c7) from {dbname}.t1",
            f"select atan(c8) from {dbname}.t1",
            f"select atan(c9) from {dbname}.t1",
            f"select atan(ts) from {dbname}.ct1" ,
            f"select atan(c7) from {dbname}.ct1",
            f"select atan(c8) from {dbname}.ct1",
            f"select atan(c9) from {dbname}.ct1",
            f"select atan(ts) from {dbname}.ct3" ,
            f"select atan(c7) from {dbname}.ct3",
            f"select atan(c8) from {dbname}.ct3",
            f"select atan(c9) from {dbname}.ct3",
            f"select atan(ts) from {dbname}.ct4" ,
            f"select atan(c7) from {dbname}.ct4",
            f"select atan(c8) from {dbname}.ct4",
            f"select atan(c9) from {dbname}.ct4",
            f"select atan(ts) from {dbname}.stb1" ,
            f"select atan(c7) from {dbname}.stb1",
            f"select atan(c8) from {dbname}.stb1",
            f"select atan(c9) from {dbname}.stb1" ,

            f"select atan(ts) from {dbname}.stbbb1" ,
            f"select atan(c7) from {dbname}.stbbb1",

            f"select atan(ts) from {dbname}.tbname",
            f"select atan(c9) from {dbname}.tbname"
164 165

        ]
G
Ganlin Zhao 已提交
166

167 168
        for type_sql in type_error_sql_lists:
            tdSql.error(type_sql)
G
Ganlin Zhao 已提交
169 170


171
        type_sql_lists = [
C
cpwu 已提交
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201
            f"select atan(c1) from {dbname}.t1",
            f"select atan(c2) from {dbname}.t1",
            f"select atan(c3) from {dbname}.t1",
            f"select atan(c4) from {dbname}.t1",
            f"select atan(c5) from {dbname}.t1",
            f"select atan(c6) from {dbname}.t1",

            f"select atan(c1) from {dbname}.ct1",
            f"select atan(c2) from {dbname}.ct1",
            f"select atan(c3) from {dbname}.ct1",
            f"select atan(c4) from {dbname}.ct1",
            f"select atan(c5) from {dbname}.ct1",
            f"select atan(c6) from {dbname}.ct1",

            f"select atan(c1) from {dbname}.ct3",
            f"select atan(c2) from {dbname}.ct3",
            f"select atan(c3) from {dbname}.ct3",
            f"select atan(c4) from {dbname}.ct3",
            f"select atan(c5) from {dbname}.ct3",
            f"select atan(c6) from {dbname}.ct3",

            f"select atan(c1) from {dbname}.stb1",
            f"select atan(c2) from {dbname}.stb1",
            f"select atan(c3) from {dbname}.stb1",
            f"select atan(c4) from {dbname}.stb1",
            f"select atan(c5) from {dbname}.stb1",
            f"select atan(c6) from {dbname}.stb1",

            f"select atan(c6) as alisb from {dbname}.stb1",
            f"select atan(c6) alisb from {dbname}.stb1",
202 203 204 205
        ]

        for type_sql in type_sql_lists:
            tdSql.query(type_sql)
G
Ganlin Zhao 已提交
206

C
cpwu 已提交
207
    def basic_atan_function(self, dbname="db"):
208

G
Ganlin Zhao 已提交
209
        # basic query
C
cpwu 已提交
210
        tdSql.query(f"select c1 from {dbname}.ct3")
211
        tdSql.checkRows(0)
C
cpwu 已提交
212
        tdSql.query(f"select c1 from {dbname}.t1")
213
        tdSql.checkRows(12)
C
cpwu 已提交
214
        tdSql.query(f"select c1 from {dbname}.stb1")
215 216 217
        tdSql.checkRows(25)

        # used for empty table  , ct3 is empty
C
cpwu 已提交
218
        tdSql.query(f"select atan(c1) from {dbname}.ct3")
219
        tdSql.checkRows(0)
C
cpwu 已提交
220
        tdSql.query(f"select atan(c2) from {dbname}.ct3")
221
        tdSql.checkRows(0)
C
cpwu 已提交
222
        tdSql.query(f"select atan(c3) from {dbname}.ct3")
223
        tdSql.checkRows(0)
C
cpwu 已提交
224
        tdSql.query(f"select atan(c4) from {dbname}.ct3")
225
        tdSql.checkRows(0)
C
cpwu 已提交
226
        tdSql.query(f"select atan(c5) from {dbname}.ct3")
227
        tdSql.checkRows(0)
C
cpwu 已提交
228
        tdSql.query(f"select atan(c6) from {dbname}.ct3")
229 230 231 232
        tdSql.checkRows(0)


        # # used for regular table
C
cpwu 已提交
233
        tdSql.query(f"select atan(c1) from {dbname}.t1")
234 235 236 237 238
        tdSql.checkData(0, 0, None)
        tdSql.checkData(1 , 0, 0.785398163)
        tdSql.checkData(3 , 0, 1.249045772)
        tdSql.checkData(5 , 0, None)

C
cpwu 已提交
239
        tdSql.query(f"select c1, c2, c3 , c4, c5 from {dbname}.t1")
240 241 242 243
        tdSql.checkData(1, 4, 1.11000)
        tdSql.checkData(3, 3, 33)
        tdSql.checkData(5, 4, None)

C
cpwu 已提交
244
        tdSql.query(f"select ts,c1, c2, c3 , c4, c5 from {dbname}.t1")
245 246 247 248
        tdSql.checkData(1, 5, 1.11000)
        tdSql.checkData(3, 4, 33)
        tdSql.checkData(5, 5, None)

C
cpwu 已提交
249
        self.check_result_auto_atan( f"select abs(c1), abs(c2), abs(c3) , abs(c4), abs(c5) from {dbname}.t1", f"select atan(abs(c1)), atan(abs(c2)) ,atan(abs(c3)), atan(abs(c4)), atan(abs(c5)) from {dbname}.t1")
G
Ganlin Zhao 已提交
250

251
        # used for sub table
C
cpwu 已提交
252
        tdSql.query(f"select c2 ,atan(c2) from {dbname}.ct1")
253 254 255
        tdSql.checkData(0, 1, 1.570785077)
        tdSql.checkData(1 , 1, 1.570783470)
        tdSql.checkData(3 , 1, 1.570778327)
C
cpwu 已提交
256
        tdSql.checkData(4 , 1, 0)
257

C
cpwu 已提交
258
        tdSql.query(f"select c1, c5 ,atan(c5) from {dbname}.ct4")
259 260 261 262 263 264
        tdSql.checkData(0 , 2, None)
        tdSql.checkData(1 , 2, 1.458656162)
        tdSql.checkData(2 , 2, 1.442799803)
        tdSql.checkData(3 , 2, 1.421759533)
        tdSql.checkData(5 , 2, None)

C
cpwu 已提交
265
        self.check_result_auto_atan( f"select c1, c2, c3 , c4, c5 from {dbname}.ct1", f"select atan(c1), atan(c2) ,atan(c3), atan(c4), atan(c5) from {dbname}.ct1")
G
Ganlin Zhao 已提交
266

267
        # nest query for atan functions
C
cpwu 已提交
268
        tdSql.query(f"select c4  , atan(c4) ,atan(atan(c4)) , atan(atan(atan(c4))) from {dbname}.ct1;")
269 270 271 272 273 274 275 276 277 278 279 280 281 282 283
        tdSql.checkData(0 , 0 , 88)
        tdSql.checkData(0 , 1 , 1.559433180)
        tdSql.checkData(0 , 2 , 1.000590740)
        tdSql.checkData(0 , 3 , 0.785693446)

        tdSql.checkData(1 , 0 , 77)
        tdSql.checkData(1 , 1 , 1.557810044)
        tdSql.checkData(1 , 2 , 1.000117426)
        tdSql.checkData(1 , 3 , 0.785456873)

        tdSql.checkData(11 , 0 , -99)
        tdSql.checkData(11 , 1 , -1.560695660)
        tdSql.checkData(11 , 2 , -1.000958403)
        tdSql.checkData(11 , 3 , -0.785877135)

G
Ganlin Zhao 已提交
284 285
        # used for stable table

C
cpwu 已提交
286
        tdSql.query(f"select atan(c1) from {dbname}.stb1")
287
        tdSql.checkRows(25)
G
Ganlin Zhao 已提交
288

289 290

        # used for not exists table
C
cpwu 已提交
291 292 293
        tdSql.error(f"select atan(c1) from {dbname}.stbbb1")
        tdSql.error(f"select atan(c1) from {dbname}.tbname")
        tdSql.error(f"select atan(c1) from {dbname}.ct5")
294

G
Ganlin Zhao 已提交
295
        # mix with common col
C
cpwu 已提交
296 297
        tdSql.query(f"select c1, atan(c1) from {dbname}.ct1")
        tdSql.query(f"select c2, atan(c2) from {dbname}.ct4")
G
Ganlin Zhao 已提交
298

299 300

        # mix with common functions
C
cpwu 已提交
301
        tdSql.query(f"select c1, atan(c1),atan(c1), atan(atan(c1)) from {dbname}.ct4 ")
302 303 304 305
        tdSql.checkData(0 , 0 ,None)
        tdSql.checkData(0 , 1 ,None)
        tdSql.checkData(0 , 2 ,None)
        tdSql.checkData(0 , 3 ,None)
G
Ganlin Zhao 已提交
306

307 308 309 310 311
        tdSql.checkData(3 , 0 , 6)
        tdSql.checkData(3 , 1 ,1.405647649)
        tdSql.checkData(3 , 2 ,1.405647649)
        tdSql.checkData(3 , 3 ,0.952449745)

C
cpwu 已提交
312
        tdSql.query(f"select c1, atan(c1),c5, floor(c5) from {dbname}.stb1 ")
313 314

        # # mix with agg functions , not support
C
cpwu 已提交
315 316 317 318 319 320
        tdSql.error(f"select c1, atan(c1),c5, count(c5) from {dbname}.stb1 ")
        tdSql.error(f"select c1, atan(c1),c5, count(c5) from {dbname}.ct1 ")
        tdSql.error(f"select atan(c1), count(c5) from {dbname}.stb1 ")
        tdSql.error(f"select atan(c1), count(c5) from {dbname}.ct1 ")
        tdSql.error(f"select c1, count(c5) from {dbname}.ct1 ")
        tdSql.error(f"select c1, count(c5) from {dbname}.stb1 ")
321 322 323

        # agg functions mix with agg functions

C
cpwu 已提交
324 325
        tdSql.query(f"select max(c5), count(c5) from {dbname}.stb1")
        tdSql.query(f"select max(c5), count(c5) from {dbname}.ct1")
326

G
Ganlin Zhao 已提交
327 328

        # # bug fix for compute
C
cpwu 已提交
329
        tdSql.query(f"select c1, atan(c1) -0 ,atan(c1-4)-0 from {dbname}.ct4 ")
330 331 332 333 334 335 336
        tdSql.checkData(0, 0, None)
        tdSql.checkData(0, 1, None)
        tdSql.checkData(0, 2, None)
        tdSql.checkData(1, 0, 8)
        tdSql.checkData(1, 1, 1.446441332)
        tdSql.checkData(1, 2, 1.325817664)

C
cpwu 已提交
337
        tdSql.query(f" select c1, atan(c1) -0 ,atan(c1-0.1)-0.1 from {dbname}.ct4")
338 339 340 341 342 343 344
        tdSql.checkData(0, 0, None)
        tdSql.checkData(0, 1, None)
        tdSql.checkData(0, 2, None)
        tdSql.checkData(1, 0, 8)
        tdSql.checkData(1, 1, 1.446441332)
        tdSql.checkData(1, 2, 1.344883701)

C
cpwu 已提交
345
        tdSql.query(f"select c1, atan(c1), c2, atan(c2), c3, atan(c3) from {dbname}.ct1")
346

C
cpwu 已提交
347
    def test_big_number(self, dbname="db"):
348

C
cpwu 已提交
349
        tdSql.query(f"select c1, atan(100000000) from {dbname}.ct1")  # bigint to double data overflow
350 351 352
        tdSql.checkData(4, 1, math.atan(100000000))


C
cpwu 已提交
353
        tdSql.query(f"select c1, atan(10000000000000) from {dbname}.ct1")  # bigint to double data overflow
354 355
        tdSql.checkData(4, 1, math.atan(10000000000000))

C
cpwu 已提交
356 357
        tdSql.query(f"select c1, atan(10000000000000000000000000) from {dbname}.ct1")  # bigint to double data overflow
        tdSql.query(f"select c1, atan(10000000000000000000000000.0) from {dbname}.ct1") # 10000000000000000000000000.0 is a double value
358 359
        tdSql.checkData(1, 1, math.atan(10000000000000000000000000.0))

C
cpwu 已提交
360 361
        tdSql.query(f"select c1, atan(10000000000000000000000000000000000) from {dbname}.ct1")  # bigint to double data overflow
        tdSql.query(f"select c1, atan(10000000000000000000000000000000000.0) from {dbname}.ct1") # 10000000000000000000000000.0 is a double value
362 363
        tdSql.checkData(4, 1, math.atan(10000000000000000000000000000000000.0))

C
cpwu 已提交
364 365
        tdSql.query(f"select c1, atan(10000000000000000000000000000000000000000) from {dbname}.ct1")  # bigint to double data overflow
        tdSql.query(f"select c1, atan(10000000000000000000000000000000000000000.0) from {dbname}.ct1") # 10000000000000000000000000.0 is a double value
366 367 368

        tdSql.checkData(4, 1, math.atan(10000000000000000000000000000000000000000.0))

C
cpwu 已提交
369
        tdSql.query(f"select c1, atan(10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) from {dbname}.ct1")  # bigint to double data overflow
370

C
cpwu 已提交
371 372 373
    def abs_func_filter(self, dbname="db"):
        tdSql.execute(f"use {dbname}")
        tdSql.query(f"select c1, abs(c1) -0 ,ceil(c1-0.1)-0 ,floor(c1+0.1)-0.1 ,ceil(atan(c1)-0.5) from {dbname}.ct4 where c1>5 ")
374 375 376 377 378 379 380
        tdSql.checkRows(3)
        tdSql.checkData(0,0,8)
        tdSql.checkData(0,1,8.000000000)
        tdSql.checkData(0,2,8.000000000)
        tdSql.checkData(0,3,7.900000000)
        tdSql.checkData(0,4,1.000000000)

C
cpwu 已提交
381
        tdSql.query(f"select c1, abs(c1) -0 ,ceil(c1-0.1)-0 ,floor(c1+0.1)-0.1 ,ceil(atan(c1)-0.5) from {dbname}.ct4 where c1=5 ")
382 383 384 385 386 387 388
        tdSql.checkRows(1)
        tdSql.checkData(0,0,5)
        tdSql.checkData(0,1,5.000000000)
        tdSql.checkData(0,2,5.000000000)
        tdSql.checkData(0,3,4.900000000)
        tdSql.checkData(0,4,1.000000000)

C
cpwu 已提交
389
        tdSql.query(f"select c1,c2 , abs(c1) -0 ,ceil(c1-0.1)-0 ,floor(c1+0.1)-0.1 ,ceil(atan(c1)-0.5) from {dbname}.ct4 where c1=atan(c1) limit 1 ")
390 391 392 393 394 395 396
        tdSql.checkRows(1)
        tdSql.checkData(0,0,0)
        tdSql.checkData(0,1,0)
        tdSql.checkData(0,2,0.000000000)
        tdSql.checkData(0,3,0.000000000)
        tdSql.checkData(0,4,-0.100000000)
        tdSql.checkData(0,5,0.000000000)
G
Ganlin Zhao 已提交
397

398 399
    def pow_Arithmetic(self):
        pass
G
Ganlin Zhao 已提交
400

C
cpwu 已提交
401
    def check_boundary_values(self, dbname="bound_test"):
402 403 404

        PI=3.1415926

C
cpwu 已提交
405 406
        tdSql.execute(f"drop database if exists {dbname}")
        tdSql.execute(f"create database if not exists {dbname}")
407
        time.sleep(3)
C
cpwu 已提交
408
        tdSql.execute(f"use {dbname}")
409
        tdSql.execute(
C
cpwu 已提交
410
            f"create table {dbname}.stb_bound (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(32),c9 nchar(32), c10 timestamp) tags (t1 int);"
411
        )
C
cpwu 已提交
412
        tdSql.execute(f'create table {dbname}.sub1_bound using {dbname}.stb_bound tags ( 1 )')
413
        tdSql.execute(
C
cpwu 已提交
414
                f"insert into {dbname}.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
415 416
            )
        tdSql.execute(
C
cpwu 已提交
417
                f"insert into {dbname}.sub1_bound values ( now()-1s, -2147483647, -9223372036854775807, -32767, -127, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
418 419
            )
        tdSql.execute(
C
cpwu 已提交
420
                f"insert into {dbname}.sub1_bound values ( now(), 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
421 422
            )
        tdSql.execute(
C
cpwu 已提交
423
                f"insert into {dbname}.sub1_bound values ( now(), -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
424 425
            )
        tdSql.error(
C
cpwu 已提交
426
                f"insert into {dbname}.sub1_bound values ( now()+1s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
427
            )
C
cpwu 已提交
428
        self.check_result_auto_atan( f"select abs(c1), abs(c2), abs(c3) , abs(c4), abs(c5) from {dbname}.sub1_bound ", f"select atan(abs(c1)), atan(abs(c2)) ,atan(abs(c3)), atan(abs(c4)), atan(abs(c5)) from {dbname}.sub1_bound")
G
Ganlin Zhao 已提交
429

C
cpwu 已提交
430
        self.check_result_auto_atan( f"select c1, c2, c3 , c3, c2 ,c1 from {dbname}.sub1_bound ", f"select atan(c1), atan(c2) ,atan(c3), atan(c3), atan(c2) ,atan(c1) from {dbname}.sub1_bound")
431

C
cpwu 已提交
432
        self.check_result_auto_atan(f"select abs(abs(abs(abs(abs(abs(abs(abs(abs(c1)))))))))  nest_col_func from {dbname}.sub1_bound" , f"select atan(abs(c1)) from {dbname}.sub1_bound" )
G
Ganlin Zhao 已提交
433

434
        # check basic elem for table per row
C
cpwu 已提交
435
        tdSql.query(f"select atan(abs(c1)) ,atan(abs(c2)) , atan(abs(c3)) , atan(abs(c4)), atan(abs(c5)), atan(abs(c6)) from {dbname}.sub1_bound ")
436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452
        tdSql.checkData(0,0,math.atan(2147483647))
        tdSql.checkData(0,1,math.atan(9223372036854775807))
        tdSql.checkData(0,2,math.atan(32767))
        tdSql.checkData(0,3,math.atan(127))
        tdSql.checkData(0,4,math.atan(339999995214436424907732413799364296704.00000))
        tdSql.checkData(1,0,math.atan(2147483647))
        tdSql.checkData(1,1,math.atan(9223372036854775807))
        tdSql.checkData(1,2,math.atan(32767))
        tdSql.checkData(1,3,math.atan(127))
        tdSql.checkData(1,4,math.atan(339999995214436424907732413799364296704.00000))
        tdSql.checkData(3,0,math.atan(2147483646))
        tdSql.checkData(3,1,math.atan(9223372036854775806))
        tdSql.checkData(3,2,math.atan(32766))
        tdSql.checkData(3,3,math.atan(126))
        tdSql.checkData(3,4,math.atan(339999995214436424907732413799364296704.00000))

        # check  + - * / in functions
C
cpwu 已提交
453
        tdSql.query(f"select atan(abs(c1+1)) ,atan(abs(c2)) , atan(abs(c3*1)) , atan(abs(c4/2)), atan(abs(c5))/2, atan(abs(c6)) from {dbname}.sub1_bound ")
454 455 456 457 458
        tdSql.checkData(0,0,math.atan(2147483648.000000000))
        tdSql.checkData(0,1,math.atan(9223372036854775807))
        tdSql.checkData(0,2,math.atan(32767.000000000))
        tdSql.checkData(0,3,math.atan(63.500000000))

C
cpwu 已提交
459 460 461 462 463 464 465 466 467 468 469 470 471 472 473
        tdSql.execute(f"create stable {dbname}.st (ts timestamp,  num1 float, num2 double) tags (t1 int);")
        tdSql.execute(f'create table {dbname}.tb1 using {dbname}.st tags (1)')
        tdSql.execute(f'create table {dbname}.tb2 using {dbname}.st tags (2)')
        tdSql.execute(f'create table {dbname}.tb3 using {dbname}.st tags (3)')
        tdSql.execute(f'insert into {dbname}.tb1 values (now()-40s, {PI/2}, {PI/2})')
        tdSql.execute(f'insert into {dbname}.tb1 values (now()-30s, {PI}, {PI})')
        tdSql.execute(f'insert into {dbname}.tb1 values (now()-20s, {PI*1.5}, {PI*1.5})')
        tdSql.execute(f'insert into {dbname}.tb1 values (now()-10s, {PI*2}, {PI*2})')
        tdSql.execute(f'insert into {dbname}.tb1 values (now(), {PI*2.5}, {PI*2.5})')

        tdSql.execute(f'insert into {dbname}.tb2 values (now()-40s, {PI/2}, {PI/2})')
        tdSql.execute(f'insert into {dbname}.tb2 values (now()-30s, {PI}, {PI})')
        tdSql.execute(f'insert into {dbname}.tb2 values (now()-20s, {PI*1.5}, {PI*1.5})')
        tdSql.execute(f'insert into {dbname}.tb2 values (now()-10s, {PI*2}, {PI*2})')
        tdSql.execute(f'insert into {dbname}.tb2 values (now(), {PI*2.5}, {PI*2.5})')
474 475

        for i in range(100):
C
cpwu 已提交
476
            tdSql.execute(f'insert into {dbname}.tb3 values (now()+{i}s, {PI*(5+i)/2}, {PI*(5+i)/2})')
477

C
cpwu 已提交
478
        self.check_result_auto_atan(f"select num1,num2 from {dbname}.tb3;" , f"select atan(num1),atan(num2) from {dbname}.tb3")
479

C
cpwu 已提交
480 481 482 483 484 485
    def support_super_table_test(self, dbname="db"):
        tdSql.execute(f" use {dbname} ")
        self.check_result_auto_atan( f" select c5 from {dbname}.stb1 order by ts " , f"select atan(c5) from {dbname}.stb1 order by ts" )
        self.check_result_auto_atan( f" select c5 from {dbname}.stb1 order by tbname " , f"select atan(c5) from {dbname}.stb1 order by tbname" )
        self.check_result_auto_atan( f" select c5 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select atan(c5) from {dbname}.stb1 where c1 > 0 order by tbname" )
        self.check_result_auto_atan( f" select c5 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select atan(c5) from {dbname}.stb1 where c1 > 0 order by tbname" )
486

C
cpwu 已提交
487 488 489 490
        self.check_result_auto_atan( f" select t1,c5 from {dbname}.stb1 order by ts " , f"select atan(t1), atan(c5) from {dbname}.stb1 order by ts" )
        self.check_result_auto_atan( f" select t1,c5 from {dbname}.stb1 order by tbname " , f"select atan(t1) ,atan(c5) from {dbname}.stb1 order by tbname" )
        self.check_result_auto_atan( f" select t1,c5 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select atan(t1) ,atan(c5) from {dbname}.stb1 where c1 > 0 order by tbname" )
        self.check_result_auto_atan( f" select t1,c5 from {dbname}.stb1 where c1 > 0 order by tbname  " , f"select atan(t1) , atan(c5) from {dbname}.stb1 where c1 > 0 order by tbname" )
491
        pass
G
Ganlin Zhao 已提交
492

C
cpwu 已提交
493

494 495 496 497
    def run(self):  # sourcery skip: extract-duplicate-method, remove-redundant-fstring
        tdSql.prepare()

        tdLog.printNoPrefix("==========step1:create table ==============")
G
Ganlin Zhao 已提交
498

499 500
        self.prepare_datas()

G
Ganlin Zhao 已提交
501
        tdLog.printNoPrefix("==========step2:test errors ==============")
502 503

        self.test_errors()
G
Ganlin Zhao 已提交
504 505

        tdLog.printNoPrefix("==========step3:support types ============")
506 507 508

        self.support_types()

G
Ganlin Zhao 已提交
509
        tdLog.printNoPrefix("==========step4: atan basic query ============")
510 511 512

        self.basic_atan_function()

G
Ganlin Zhao 已提交
513
        tdLog.printNoPrefix("==========step5: big number atan query ============")
514 515 516 517

        self.test_big_number()


G
Ganlin Zhao 已提交
518
        tdLog.printNoPrefix("==========step6: atan boundary query ============")
519 520 521

        self.check_boundary_values()

G
Ganlin Zhao 已提交
522
        tdLog.printNoPrefix("==========step7: atan filter query ============")
523 524 525

        self.abs_func_filter()

C
cpwu 已提交
526
        tdLog.printNoPrefix("==========step8: check atan result of  stable query ============")
527 528 529

        self.support_super_table_test()

G
Ganlin Zhao 已提交
530

531 532 533 534 535 536
    def stop(self):
        tdSql.close()
        tdLog.success(f"{__file__} successfully executed")

tdCases.addLinux(__file__, TDTestCase())
tdCases.addWindows(__file__, TDTestCase())