enable style:usages for stdlib tests [backport: 1.6] (#19715)

* enable style:usages for stdlib tests

* freeAddrInfo

* more tests

* importc

* bufSize

* fix more

* => parseSql and renderSql

(cherry picked from commit 98cebad7de)
This commit is contained in:
flywind
2022-04-13 17:53:02 +08:00
committed by narimiran
parent 02d94966c9
commit 0b44840299
42 changed files with 149 additions and 146 deletions

2
tests/stdlib/config.nims Normal file
View File

@@ -0,0 +1,2 @@
switch("styleCheck", "usages")
switch("styleCheck", "error")

View File

@@ -6,8 +6,8 @@ block: # Misc tests
check("перевірка".replace(re"(*U)\w", "") == "")
block: # empty or non-empty match
check("abc".findall(re"|.").join(":") == ":a::b::c:")
check("abc".findall(re".|").join(":") == "a:b:c:")
check("abc".findAll(re"|.").join(":") == ":a::b::c:")
check("abc".findAll(re".|").join(":") == "a:b:c:")
check("abc".replace(re"|.", "x") == "xxxxxxx")
check("abc".replace(re".|", "x") == "xxxx")

View File

@@ -101,10 +101,10 @@ block:
doAssert binarySearch(noData, 7) == -1
let oneData = @[1]
doAssert binarySearch(oneData, 1) == 0
doAssert binarySearch(onedata, 7) == -1
doAssert binarySearch(oneData, 7) == -1
let someData = @[1, 3, 4, 7]
doAssert binarySearch(someData, 1) == 0
doAssert binarySearch(somedata, 7) == 3
doAssert binarySearch(someData, 7) == 3
doAssert binarySearch(someData, -1) == -1
doAssert binarySearch(someData, 5) == -1
doAssert binarySearch(someData, 13) == -1

View File

@@ -111,9 +111,9 @@ proc testCustomContentLength() {.async.} =
runTest(handler, request, test)
waitfor(test200())
waitfor(test404())
waitfor(testCustomEmptyHeaders())
waitfor(testCustomContentLength())
waitFor(test200())
waitFor(test404())
waitFor(testCustomEmptyHeaders())
waitFor(testCustomContentLength())
echo "OK"

View File

@@ -27,13 +27,13 @@ template main() =
const tests = ["", "abc", "xyz", "man", "leasure.", "sure.", "easure.",
"asure.", longText, testInputExpandsTo76, testInputExpands]
doAssert encodeMIME("foobarbaz", lineLen=4) == "Zm9v\r\nYmFy\r\nYmF6"
doAssert encodeMime("foobarbaz", lineLen=4) == "Zm9v\r\nYmFy\r\nYmF6"
doAssert decode("Zm9v\r\nYmFy\r\nYmF6") == "foobarbaz"
for t in items(tests):
doAssert decode(encode(t)) == t
doAssert decode(encodeMIME(t, lineLen=40)) == t
doAssert decode(encodeMIME(t, lineLen=76)) == t
doAssert decode(encodeMime(t, lineLen=40)) == t
doAssert decode(encodeMime(t, lineLen=76)) == t
doAssertRaises(ValueError): discard decode("SGVsbG\x008gV29ybGQ=")

View File

@@ -263,8 +263,8 @@ proc main() =
doAssert v == 0b1000_0010
v.flipBit(1)
doAssert v == 0b1000_0000
doAssert v.testbit(7)
doAssert not v.testbit(6)
doAssert v.testBit(7)
doAssert not v.testBit(6)
block:
# multi bit operations
var v: uint8

View File

@@ -21,7 +21,7 @@ proc makeIPv6HttpServer(hostname: string, port: Port,
let fd = createNativeSocket(AF_INET6)
setSockOptInt(fd, SOL_SOCKET, SO_REUSEADDR, 1)
var aiList = getAddrInfo(hostname, port, AF_INET6)
if bindAddr(fd, aiList.ai_addr, aiList.ai_addrlen.Socklen) < 0'i32:
if bindAddr(fd, aiList.ai_addr, aiList.ai_addrlen.SockLen) < 0'i32:
freeAddrInfo(aiList)
raiseOSError(osLastError())
freeAddrInfo(aiList)

View File

@@ -259,7 +259,7 @@ proc testJson() =
colors: array[2, BirdColor]
var red = BirdColor(name: "red", rgb: [1.0, 0.0, 0.0])
var blue = Birdcolor(name: "blue", rgb: [0.0, 0.0, 1.0])
var blue = BirdColor(name: "blue", rgb: [0.0, 0.0, 1.0])
var b = Bird(age: 3, height: 1.734, name: "bardo", colors: [red, blue])
let jnode = %b
let data = jnode.to(Bird)
@@ -497,7 +497,7 @@ proc testJson() =
doAssert array[3, float](t.arr) == [1.0,2.0,7.0]
doAssert MyRef(t.person).name == "boney"
doAssert MyObj(t.distFruit).color == 11
doAssert MyObj(t.distfruit).color == 11
doAssert t.dog.name == "honey"
doAssert t.fruit.color == 10
doAssert seq[string](t.emails) == @["abc", "123"]

View File

@@ -320,7 +320,7 @@ template fn() =
b: int
var a = A()
fromJson(a, """{"is_a": true, "a":1, "extra_key": 1}""".parse_json, Joptions(allowExtraKeys: true))
fromJson(a, """{"is_a": true, "a":1, "extra_key": 1}""".parseJson, Joptions(allowExtraKeys: true))
doAssert $a[] == "(is_a: true, a: 1)"
block testAllowMissingKeys:

View File

@@ -93,7 +93,7 @@ block: # "IpAddress/Sockaddr conversion"
doAssert($ipaddrstr == $ipaddr_1)
var sockaddr: Sockaddr_storage
var socklen: Socklen
var socklen: SockLen
var ipaddr_2: IpAddress
var port_2: Port

View File

@@ -14,7 +14,7 @@ proc initIPv6Server(hostname: string, port: Port): AsyncFD =
let fd = createNativeSocket(AF_INET6)
setSockOptInt(fd, SOL_SOCKET, SO_REUSEADDR, 1)
var aiList = getAddrInfo(hostname, port, AF_INET6)
if bindAddr(fd, aiList.ai_addr, aiList.ai_addrlen.Socklen) < 0'i32:
if bindAddr(fd, aiList.ai_addr, aiList.ai_addrlen.SockLen) < 0'i32:
freeAddrInfo(aiList)
raiseOSError(osLastError())
freeAddrInfo(aiList)

View File

@@ -12,7 +12,7 @@ see also: tests/osproc/*.nim; consider merging those into a single test here
when defined(case_testfile): # compiled test file for child process
from posix import exitnow
proc c_exit2(code: c_int): void {.importc: "_exit", header: "<unistd.h>".}
proc c_exit2(code: cint): void {.importc: "_exit", header: "<unistd.h>".}
import os
var a = 0
proc fun(b = 0) =

View File

@@ -14,8 +14,8 @@ nkStmtList
nkIntegerLit 10
nkNumericLit 5.5"""
doAssert $parseSQL("SELECT foo FROM table;") == "select foo from table;"
doAssert $parseSQL("""
doAssert $parseSql("SELECT foo FROM table;") == "select foo from table;"
doAssert $parseSql("""
SELECT
CustomerName,
ContactName,
@@ -31,26 +31,26 @@ SELECT
Country
FROM table;""") == "select CustomerName, ContactName, Address, City, PostalCode, Country, CustomerName, ContactName, Address, City, PostalCode, Country from table;"
doAssert $parseSQL("SELECT foo FROM table limit 10") == "select foo from table limit 10;"
doAssert $parseSQL("SELECT foo, bar, baz FROM table limit 10") == "select foo, bar, baz from table limit 10;"
doAssert $parseSQL("SELECT foo AS bar FROM table") == "select foo as bar from table;"
doAssert $parseSQL("SELECT foo AS foo_prime, bar AS bar_prime, baz AS baz_prime FROM table") == "select foo as foo_prime, bar as bar_prime, baz as baz_prime from table;"
doAssert $parseSQL("SELECT * FROM table") == "select * from table;"
doAssert $parseSQL("SELECT count(*) FROM table") == "select count(*) from table;"
doAssert $parseSQL("SELECT count(*) as 'Total' FROM table") == "select count(*) as 'Total' from table;"
doAssert $parseSQL("SELECT count(*) as 'Total', sum(a) as 'Aggr' FROM table") == "select count(*) as 'Total', sum(a) as 'Aggr' from table;"
doAssert $parseSql("SELECT foo FROM table limit 10") == "select foo from table limit 10;"
doAssert $parseSql("SELECT foo, bar, baz FROM table limit 10") == "select foo, bar, baz from table limit 10;"
doAssert $parseSql("SELECT foo AS bar FROM table") == "select foo as bar from table;"
doAssert $parseSql("SELECT foo AS foo_prime, bar AS bar_prime, baz AS baz_prime FROM table") == "select foo as foo_prime, bar as bar_prime, baz as baz_prime from table;"
doAssert $parseSql("SELECT * FROM table") == "select * from table;"
doAssert $parseSql("SELECT count(*) FROM table") == "select count(*) from table;"
doAssert $parseSql("SELECT count(*) as 'Total' FROM table") == "select count(*) as 'Total' from table;"
doAssert $parseSql("SELECT count(*) as 'Total', sum(a) as 'Aggr' FROM table") == "select count(*) as 'Total', sum(a) as 'Aggr' from table;"
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT * FROM table
WHERE a = b and c = d
""") == "select * from table where a = b and c = d;"
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT * FROM table
WHERE not b
""") == "select * from table where not b;"
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT
*
FROM
@@ -59,63 +59,63 @@ WHERE
a and not b
""") == "select * from table where a and not b;"
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT * FROM table
ORDER BY 1
""") == "select * from table order by 1;"
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT * FROM table
GROUP BY 1
ORDER BY 1
""") == "select * from table group by 1 order by 1;"
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT * FROM table
ORDER BY 1
LIMIT 100
""") == "select * from table order by 1 limit 100;"
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT * FROM table
WHERE a = b and c = d or n is null and not b + 1 = 3
""") == "select * from table where a = b and c = d or n is null and not b + 1 = 3;"
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT * FROM table
WHERE (a = b and c = d) or (n is null and not b + 1 = 3)
""") == "select * from table where(a = b and c = d) or (n is null and not b + 1 = 3);"
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT * FROM table
HAVING a = b and c = d
""") == "select * from table having a = b and c = d;"
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT a, b FROM table
GROUP BY a
""") == "select a, b from table group by a;"
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT a, b FROM table
GROUP BY 1, 2
""") == "select a, b from table group by 1, 2;"
doAssert $parseSQL("SELECT t.a FROM t as t") == "select t.a from t as t;"
doAssert $parseSql("SELECT t.a FROM t as t") == "select t.a from t as t;"
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT a, b FROM (
SELECT * FROM t
)
""") == "select a, b from(select * from t);"
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT a, b FROM (
SELECT * FROM t
) as foo
""") == "select a, b from(select * from t) as foo;"
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT a, b FROM (
SELECT * FROM (
SELECT * FROM (
@@ -127,49 +127,49 @@ SELECT a, b FROM (
) as inner5
""") == "select a, b from(select * from(select * from(select * from(select * from innerTable as inner1) as inner2) as inner3) as inner4) as inner5;"
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT a, b FROM
(SELECT * FROM a),
(SELECT * FROM b),
(SELECT * FROM c)
""") == "select a, b from(select * from a),(select * from b),(select * from c);"
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;
""") == "select * from Products where Price between 10 and 20;"
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT id FROM a
JOIN b
ON a.id == b.id
""") == "select id from a join b on a.id == b.id;"
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT id FROM a
JOIN (SELECT id from c) as b
ON a.id == b.id
""") == "select id from a join(select id from c) as b on a.id == b.id;"
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT id FROM a
INNER JOIN b
ON a.id == b.id
""") == "select id from a inner join b on a.id == b.id;"
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT id FROM a
OUTER JOIN b
ON a.id == b.id
""") == "select id from a outer join b on a.id == b.id;"
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT id FROM a
CROSS JOIN b
ON a.id == b.id
""") == "select id from a cross join b on a.id == b.id;"
doAssert $parseSQL("""
doAssert $parseSql("""
CREATE TYPE happiness AS ENUM ('happy', 'very happy', 'ecstatic');
CREATE TABLE holidays (
num_weeks int,
@@ -179,16 +179,16 @@ CREATE INDEX table1_attr1 ON table1(attr1);
SELECT * FROM myTab WHERE col1 = 'happy';
""") == "create type happiness as enum ('happy' , 'very happy' , 'ecstatic' ); create table holidays(num_weeks int , happiness happiness );; create index table1_attr1 on table1(attr1 );; select * from myTab where col1 = 'happy';"
doAssert $parseSQL("""
doAssert $parseSql("""
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');
""") == "insert into Customers (CustomerName , ContactName , Address , City , PostalCode , Country ) values ('Cardinal' , 'Tom B. Erichsen' , 'Skagen 21' , 'Stavanger' , '4006' , 'Norway' );"
doAssert $parseSQL("""
doAssert $parseSql("""
INSERT INTO TableName DEFAULT VALUES
""") == "insert into TableName default values;"
doAssert $parseSQL("""
doAssert $parseSql("""
UPDATE Customers
SET ContactName = 'Alfred Schmidt', City= 'Frankfurt'
WHERE CustomerID = 1;
@@ -209,9 +209,9 @@ nkStmtList
nkStringLit Frankfurt
nkNone"""
doAssert $parseSQL("DELETE FROM table_name;") == "delete from table_name;"
doAssert $parseSql("DELETE FROM table_name;") == "delete from table_name;"
doAssert treeRepr(parseSQL("DELETE FROM table_name;")
doAssert treeRepr(parseSql("DELETE FROM table_name;")
) == """
nkStmtList
@@ -219,14 +219,14 @@ nkStmtList
nkIdent table_name
nkNone"""
doAssert $parseSQL("DELETE * FROM table_name;") == "delete from table_name;"
doAssert $parseSql("DELETE * FROM table_name;") == "delete from table_name;"
doAssert $parseSQL("""
doAssert $parseSql("""
--Select all:
SELECT * FROM Customers;
""") == "select * from Customers;"
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT * FROM Customers WHERE (CustomerName LIKE 'L%'
OR CustomerName LIKE 'R%' /*OR CustomerName LIKE 'S%'
OR CustomerName LIKE 'T%'*/ OR CustomerName LIKE 'W%')
@@ -235,9 +235,9 @@ ORDER BY CustomerName;
""") == "select * from Customers where(CustomerName like 'L%' or CustomerName like 'R%' or CustomerName like 'W%') and Country = 'USA' order by CustomerName;"
# parse quoted keywords as identifires
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT `SELECT`, `FROM` as `GROUP` FROM `WHERE`;
""") == """select "SELECT", "FROM" as "GROUP" from "WHERE";"""
doAssert $parseSQL("""
doAssert $parseSql("""
SELECT "SELECT", "FROM" as "GROUP" FROM "WHERE";
""") == """select "SELECT", "FROM" as "GROUP" from "WHERE";"""

View File

@@ -408,7 +408,7 @@ suite "RST include directive":
test "Include whole":
"other.rst".writeFile("**test1**")
let input = ".. include:: other.rst"
doAssert "<strong>test1</strong>" == rstTohtml(input, {roSandboxDisabled}, defaultConfig())
doAssert "<strong>test1</strong>" == rstToHtml(input, {roSandboxDisabled}, defaultConfig())
removeFile("other.rst")
test "Include starting from":
@@ -422,7 +422,7 @@ OtherStart
.. include:: other.rst
:start-after: OtherStart
"""
check "<em>Visible</em>" == rstTohtml(input, {roSandboxDisabled}, defaultConfig())
check "<em>Visible</em>" == rstToHtml(input, {roSandboxDisabled}, defaultConfig())
removeFile("other.rst")
test "Include everything before":
@@ -436,7 +436,7 @@ And this should **NOT** be visible in `docs.html`
.. include:: other.rst
:end-before: OtherEnd
"""
doAssert "<em>Visible</em>" == rstTohtml(input, {roSandboxDisabled}, defaultConfig())
doAssert "<em>Visible</em>" == rstToHtml(input, {roSandboxDisabled}, defaultConfig())
removeFile("other.rst")
@@ -454,7 +454,7 @@ And this should **NOT** be visible in `docs.html`
:start-after: OtherStart
:end-before: OtherEnd
"""
check "<em>Visible</em>" == rstTohtml(input, {roSandboxDisabled}, defaultConfig())
check "<em>Visible</em>" == rstToHtml(input, {roSandboxDisabled}, defaultConfig())
removeFile("other.rst")
@@ -474,7 +474,7 @@ And this should **NOT** be visible in `docs.html`
:start-after: OtherStart
:end-before: OtherEnd
"""
doAssert "<em>Visible</em>" == rstTohtml(input, {roSandboxDisabled}, defaultConfig())
doAssert "<em>Visible</em>" == rstToHtml(input, {roSandboxDisabled}, defaultConfig())
removeFile("other.rst")
suite "RST escaping":

View File

@@ -417,7 +417,7 @@ Some chapter
"""
var error9Bad = new string
let output9Bad = input9bad.toHtml(error=error9Bad)
let output9Bad = input9Bad.toHtml(error=error9Bad)
check(error9Bad[] == "input(15, 1) Error: new section expected (section " &
"level inconsistent: underline ~~~~~ unexpectedly found, while " &
"the following intermediate section level(s) are missing on " &
@@ -464,7 +464,7 @@ Some chapter
rstGenera.initRstGenerator(outHtml, defaultConfig(), "input", filenames = files)
rstGenera.renderRstToOut(rst, output)
doAssert rstGenera.meta[metaTitle] == "Title0"
doAssert rstGenera.meta[metaSubTitle] == "SubTitle0"
doAssert rstGenera.meta[metaSubtitle] == "SubTitle0"
doAssert "<h1 id=\"level1\"><center>Level1</center></h1>" in output
doAssert "<h2 id=\"level2\">Level2</h2>" in output
doAssert "<h3 id=\"level3\"><center>Level3</center></h3>" in output
@@ -491,7 +491,7 @@ Some chapter
rstGenera.initRstGenerator(outHtml, defaultConfig(), "input", filenames=files)
rstGenera.renderRstToOut(rst, output)
doAssert rstGenera.meta[metaTitle] == ""
doAssert rstGenera.meta[metaSubTitle] == ""
doAssert rstGenera.meta[metaSubtitle] == ""
doAssert "<h1 id=\"title0\"><center>Title0</center></h1>" in output
doAssert "<h2 id=\"subtitle0\"><center>SubTitle0</center></h2>" in output
@@ -521,7 +521,7 @@ Some chapter
rstGenera.initRstGenerator(outHtml, defaultConfig(), "input", filenames=files)
rstGenera.renderRstToOut(rst, output)
doAssert rstGenera.meta[metaTitle] == "Title0"
doAssert rstGenera.meta[metaSubTitle] == ""
doAssert rstGenera.meta[metaSubtitle] == ""
doAssert output ==
"\n<h1 id=\"mysection1a\">MySection1a</h1>" & # RST
"\n<h1 id=\"mysection1b\">MySection1b</h1>" & # Markdown

View File

@@ -15,7 +15,7 @@ checkVector("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
proc testIsValidSha1Hash =
doAssert not isValidSha1Hash("")
doAssert not isValidSha1Hash("042D4BE2B90ED0672E717D71850ABDB0A2D19CD11")
doAssert not isValidSha1hash("042G4BE2B90ED0672E717D71850ABDB0A2D19CD1")
doAssert not isValidSha1Hash("042G4BE2B90ED0672E717D71850ABDB0A2D19CD1")
doAssert isValidSha1Hash("042D4BE2B90ED0672E717D71850ABDB0A2D19CD1")
doAssert isValidSha1Hash("042d4be2b90ed0672e717d71850abdb0a2d19cd1")
doAssert isValidSha1Hash("042d4be2b90ed0672e717D71850ABDB0A2D19CD1")

View File

@@ -37,8 +37,8 @@ proc notifiedShutdown(port: Port) {.thread.} =
proc main() =
when defined(posix):
var
ignoreAction = SigAction(sa_handler: SIG_IGN)
oldSigPipeHandler: SigAction
ignoreAction = Sigaction(sa_handler: SIG_IGN)
oldSigPipeHandler: Sigaction
if sigemptyset(ignoreAction.sa_mask) == -1:
raiseOSError(osLastError(), "Couldn't create an empty signal set")
if sigaction(SIGPIPE, ignoreAction, oldSigPipeHandler) == -1:

View File

@@ -73,7 +73,7 @@ proc main() =
block: # setSlice
var a = "Hello, Nim!"
doassert a.dup(setSlice(7 .. 9)) == "Nim"
doAssert a.dup(setSlice(7 .. 9)) == "Nim"
doAssert a.dup(setSlice(0 .. 0)) == "H"
doAssert a.dup(setSlice(0 .. 1)) == "He"
doAssert a.dup(setSlice(0 .. 10)) == a

View File

@@ -41,7 +41,7 @@ block tstreams2:
block tstreams3:
try:
var fs = openFileStream("shouldneverexist.txt")
except IoError:
except IOError:
echo "threw exception"
static:

View File

@@ -50,7 +50,7 @@ proc search(r: PRadixNode, s: string): PRadixNode =
proc contains*(r: PRadixNode, s: string): bool =
return search(r, s) != nil
proc testOrincl*(r: var PRadixNode, s: string): bool =
proc testOrIncl*(r: var PRadixNode, s: string): bool =
nil
proc incl*(r: var PRadixNode, s: string) = discard testOrIncl(r, s)

View File

@@ -20,7 +20,7 @@ proc staticTz(hours, minutes, seconds: int = 0): Timezone {.noSideEffect.} =
result.utcOffset = offset
result.time = time
newTimezone("", zonedTimeFromTime, zonedTImeFromAdjTime)
newTimezone("", zonedTimeFromTime, zonedTimeFromAdjTime)
template parseTest(s, f, sExpected: string, ydExpected: int) =
let

View File

@@ -50,7 +50,7 @@ doAssert($x4[].kind() == "akString")
block:
# gimme a new scope dammit
var myarr: array[0..4, array[0..4, string]] = [
var myArr: array[0..4, array[0..4, string]] = [
["test", "1", "2", "3", "4"], ["test", "1", "2", "3", "4"],
["test", "1", "2", "3", "4"], ["test", "1", "2", "3", "4"],
["test", "1", "2", "3", "4"]]

View File

@@ -0,0 +1 @@
--styleCheck:off

View File

@@ -218,5 +218,5 @@ block: # bug #17768
let s1 = "abcdef"
let s2 = "abcdéf"
doAssert s1.runeSubstr(0, -1) == "abcde"
doAssert s2.runeSubstr(0, -1) == "abcdé"
doAssert s1.runeSubStr(0, -1) == "abcde"
doAssert s2.runeSubStr(0, -1) == "abcdé"

View File

@@ -48,7 +48,7 @@ block:
chk 0.1
chk Inf
chk NegInf
chk Nan
chk NaN
chk 3.1415926535897932384626433
block: