Advertisement
VladNitu

vlad_fp_teste

Mar 28th, 2024
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.15 KB | None | 0 0
  1. # Tests are groups of three lines: program, input, expected output
  2. # Blank lines and lines starting with # are ignored
  3.  
  4. #
  5. # Simple value tests to check parser. Input is irrelevant
  6. #
  7. .
  8. null
  9. null
  10.  
  11. #
  12. # Double number test
  13. #
  14. .
  15. 12.014
  16. 12.014
  17.  
  18. #
  19. # Integer number test
  20. #
  21. .
  22. 123
  23. 123
  24.  
  25. #
  26. # String test basic
  27. #
  28. .
  29. "test string"
  30. "test string"
  31.  
  32. #
  33. # String test escape chars
  34. #
  35. .
  36. "\"Hello World\""
  37. "\"Hello World\""
  38.  
  39. #
  40. # String test number
  41. #
  42. .
  43. "123"
  44. "123"
  45.  
  46. #
  47. # Test floats
  48. #
  49. .
  50. 0.5
  51. 0.5
  52.  
  53. #
  54. # Tests w/ negative floats
  55. #
  56. .
  57. -1.5
  58. -1.5
  59.  
  60. # Test w/ arrays (basic)
  61. #
  62. .
  63. [1,2,3]
  64. [1,2,3]
  65.  
  66.  
  67. # Test w/ empty array
  68. #
  69. .
  70. []
  71. []
  72.  
  73. # Test w/ arrays + spaces
  74. #
  75. .
  76. [1, 2 ,3]
  77. [1,2,3]
  78.  
  79. # Test w/ arrays w/ multiple types of elements
  80. #
  81. .
  82. [1, -1.5 ,"abc"]
  83. [1,-1.5,"abc"]
  84.  
  85. # Test w/ spaces before arrays
  86. #
  87. .
  88. [1, -1.5 ,"abc"]
  89. [1,-1.5,"abc"]
  90.  
  91. # Test JObject basic (1 el)
  92. #
  93. #
  94. .
  95. {"a":1}
  96. {"a":1}
  97.  
  98. # Test JObject basic (>1 diff elements) + spaces
  99. #
  100. #
  101. .
  102. {"a":1, "b": 2, "c": "abc"}
  103. {"a":1,"b":2,"c":"abc"}
  104.  
  105. # Test JObject basic empty arr
  106. #
  107. #
  108. .
  109. {}
  110. {}
  111.  
  112. # Test JObject with Object with JArray
  113. #
  114. #
  115. .
  116. {"a":1, "b": 2, "c": [1, 2, 3]}
  117. {"a":1,"b":2,"c":[1,2,3]}
  118.  
  119.  
  120. #
  121. # String test control char
  122. #
  123. .
  124. "\u2600"
  125. "\u2600"
  126.  
  127. #
  128. # Test weird string
  129. #
  130. .
  131. "Aa\r\n\t\b\f"
  132. "Aa\r\n\t\b\f"
  133.  
  134. #
  135. # True test
  136. #
  137. .
  138. true
  139. true
  140.  
  141. #
  142. # False test
  143. #
  144. .
  145. false
  146. false
  147.  
  148.  
  149. ### FILTERS
  150.  
  151. #
  152. # Filter paranthesis basic case (identity) + spaces (to check token)
  153. #
  154. ( . )
  155. "abc"
  156. "abc"
  157.  
  158. #
  159. # Field access (ObjIndex) which exists
  160. #
  161. .foo
  162. {"foo": 42, "bar": 43}
  163. 42
  164.  
  165.  
  166. #
  167. # Field access (ObjIndex) which exists AND is a string ."foo", but not generic
  168. #
  169. ."foo"
  170. {"foo": 42, "bar": 43}
  171. 42
  172.  
  173. #
  174. # Field access (ObjIndex) which DOES NOT exist
  175. #
  176. .mama
  177. {"foo": 42, "bar": 43}
  178. null
  179.  
  180. #
  181. # ObjIndex generic (ObjValueIt w/ 1 element) -> .["foo"]
  182. #
  183. .["foo"]
  184. {"bar": 43, "foo": 42}
  185. 42
  186.  
  187.  
  188. #
  189. # ObjIndex generic with spaces (ObjValueIt w/ 1 element) -> .["foo bar"]
  190. #
  191. .["foo bar"]
  192. {"foo bar": 43, "foo": 42}
  193. 43
  194.  
  195.  
  196. #
  197. # Field access generic (ObjValueIt) which DOES NOT exist
  198. #
  199. .["mama"]
  200. {"foo": 42, "bar": 43}
  201. null
  202.  
  203. #
  204. # Object Value Iterator w/ multiple elements, some exist, some don't
  205. #
  206. .["abc", "f1", "no"]
  207. {"f1" : "hi", "yes" : null, "abc" : [1,2, 3]}
  208. [1,2,3]
  209. "hi"
  210. null
  211.  
  212. #
  213. # ArrIt through all elements in Array
  214. #
  215. .[]
  216. [0, 1,2,3,4]
  217. 0
  218. 1
  219. 2
  220. 3
  221. 4
  222.  
  223. #
  224. # ObjValueIt through all elements in JObject
  225. #
  226. .[-2, -3]
  227. [0, 1,2,3,4]
  228. 3
  229. 2
  230.  
  231.  
  232. #
  233. # ArrIt negative values
  234. #
  235. .[-3, -2]
  236. [1, 2, 3]
  237. 1
  238. 2
  239.  
  240. #
  241. # ArrIt negative len < 0; -len > length xs should not wrap around -> null
  242. #
  243. .[-100]
  244. [1, 2, 3]
  245. null
  246.  
  247. #
  248. # ArrIt negative len > 0; len > length xs should not wrap around -> null
  249. #
  250. .[100]
  251. [1, 2, 3]
  252. null
  253.  
  254.  
  255. #Tests taken from week4 impl by me and retested here
  256.  
  257. #
  258. # ObjIndex on JNull input
  259. #
  260. .["a"]
  261. null
  262. null
  263.  
  264. #
  265. # ObjIndex all missing
  266. #
  267. .["a", "b"]
  268. {"c":1, "d":2}
  269. null
  270. null
  271.  
  272. #
  273. # ObjIndex one exists
  274. #
  275. .["a", "c"]
  276. {"a": 1, "b": "f"}
  277. 1
  278. null
  279.  
  280. #
  281. # ObjIndex one exists other order
  282. #
  283. .["c", "a"]
  284. {"a": 1, "b": "f"}
  285. null
  286. 1
  287.  
  288.  
  289. #
  290. # ArrIndex test (in bounds)
  291. #
  292. .[2]
  293. [0, 1, "abc",3]
  294. "abc"
  295.  
  296.  
  297. #
  298. # ArrIt w/ multiple indexes, some in bounds, some out of boundsj
  299. #
  300. .[1, 2, 4 ]
  301. [0, 1, 2,3]
  302. 1
  303. 2
  304. null
  305.  
  306.  
  307. #
  308. # ArrIndexSlice both there in bounds
  309. #
  310. .[0:2]
  311. [1,2,3,4]
  312. [1,2]
  313.  
  314. #
  315. # ArrIndexSlice emtpy range
  316. #
  317. .[2:2]
  318. [1,2,3,4]
  319. []
  320.  
  321. #
  322. # ArrIndexSlice only left given
  323. #
  324. .[2:]
  325. [1,2,3,4]
  326. [3,4]
  327.  
  328. #
  329. # ArrIndexSlice only right given
  330. #
  331. .[:3]
  332. [1,2,3,4]
  333. [1,2,3]
  334.  
  335. #
  336. # ArrIndexSlice left >= right
  337. #
  338. .[4:2]
  339. [1,2,3,4,5,6]
  340. []
  341.  
  342. #
  343. # ArrIndex negative (last but not least el : -2)
  344. #
  345. .[-2]
  346. [1,2,3,4,5,6]
  347. 5
  348.  
  349. .foo | .bar
  350. {"foo": {"bar": 42}, "bar": "badvalue"}
  351. 42
  352.  
  353. .foo.bar
  354. {"foo": {"bar": 42}, "bar": "badvalue"}
  355. 42
  356.  
  357. .foo_bar
  358. {"foo_bar": 2}
  359. 2
  360.  
  361. .["foo"].bar
  362. {"foo": {"bar": 42}, "bar": "badvalue"}
  363. 42
  364.  
  365. ."foo"."bar"
  366. {"foo": {"bar": 20}}
  367. 20
  368.  
  369.  
  370. #
  371. # ObjIndex & ArrIndex combined -> Value Constructor, TODO
  372. #
  373. .foo[2]
  374. {"foo" : [1, 2, 3]}
  375. 3
  376.  
  377. #
  378. # Comma and Pipe ambiguous, Comma should have priority
  379. #
  380. .a, .b, .c | .foo
  381. {"a" : {"foo" : 1}, "b" : {"foo" : 2}, "c" : {"foo" : 3}}
  382. 1
  383. 2
  384. 3
  385.  
  386. #
  387. # Comma and Pipe + parnthesis, Comma should have priority
  388. #
  389. .a,.b,(.c|.bar)|.foo
  390. {"a" : {"foo" : 1}, "b" : {"foo" : 2}, "c" : {"foo" : 3, "bar" : {"foo" : 100}}}
  391. 1
  392. 2
  393. 100
  394.  
  395. #
  396. # Paranthesis nested test
  397. #
  398. ((.))
  399. false
  400. false
  401.  
  402. #
  403. # Paranthesis nested - Pipe and Comma inversion of priority
  404. #
  405. .a , (.b | .foo )
  406. {"a" : true, "b" : {"foo" : "lol" } }
  407. true
  408. "lol"
  409.  
  410. #
  411. # Test parenthesis a -> b pipe
  412. #
  413. (.a| .b )
  414. {"a" : {"b" : {"foo" : "lol" }} }
  415. {"foo":"lol"}
  416.  
  417.  
  418. # VALUE CONSTRUCTORS
  419. # Arrays
  420.  
  421. [.[]|.foo?]
  422. [1,[2],{"foo":3,"bar":4},{},{"foo":5}]
  423. [3,null,5]
  424.  
  425. [.[]|.foo?.bar?]
  426. [1,[2],[],{"foo":3},{"foo":{"bar":4}},{}]
  427. [4,null]
  428.  
  429. [.[]|.[]?]
  430. [1,null,[],[1,[2,[[3]]]],[{}],[{"a":[1,[2]]}]]
  431. [1,[2,[[3]]],{},{"a":[1,[2]]}]
  432.  
  433. [.[]|.[1:3]?]
  434. [1,null,true,false,"abcdef",{},{"a":1,"b":2},[],[1,2,3,4,5],[1,2]]
  435. [null,"bc",[],[2,3],[2]]
  436.  
  437. # Value construction
  438.  
  439. true
  440. null
  441. true
  442.  
  443. false
  444. null
  445. false
  446.  
  447. null
  448. 42
  449. null
  450.  
  451. 1
  452. null
  453. 1
  454.  
  455.  
  456. -1
  457. null
  458. -1
  459.  
  460. {}
  461. null
  462. {}
  463.  
  464. []
  465. null
  466. []
  467.  
  468. {x: -1}
  469. null
  470. {"x": -1}
  471.  
  472.  
  473. #
  474. # Dictionary construction syntax
  475. #
  476.  
  477. {a: 1}
  478. null
  479. {"a":1}
  480.  
  481. #
  482. # Dictionary construction when it exists
  483. #
  484.  
  485. {a : 1}
  486. {"a":2}
  487. {"a":1}
  488.  
  489.  
  490. #
  491. # Dictionary construction when it exists
  492. #
  493.  
  494. {a}
  495. {"a":1}
  496. {"a":1}
  497.  
  498.  
  499. {a,b,(.d):.a,e:.b}
  500. {"a":1, "b":2, "c":3, "d":"c"}
  501. {"a":1, "b":2, "c":1, "e":2}
  502.  
  503. # {"a",b,"a$2"}
  504. # {"a":1, "b":2, "c":3, "a$2":4}
  505. # {"a":1, "b":2, "a$2":4}
  506.  
  507. {a}
  508. {"a":1}
  509. {"a":1}
  510.  
  511. {e:.b}
  512. {"a":1, "b":2, "c":3, "d":"c"}
  513. {"e:2}
  514.  
  515. {e:100}
  516. {"a":1, "b":2, "c":3, "d":"c"}
  517. {"e":100}
  518.  
  519. {(.d):2}
  520. {"a":1, "b":2, "c":3, "d":"c"}
  521. {"c":2}
  522.  
  523. {(.d):.a}
  524. {"a":1, "b":2, "c":3, "d":"c"}
  525. {"c":1}
  526.  
  527. {a,b,(.d):.a}
  528. {"a":1, "b":2, "c":3, "d":"c"}
  529. {"a":1, "b":2, "c":1}
  530.  
  531. {e:.b}
  532. {"a":1, "b":2, "c":3, "d":"c"}
  533. {"e": 2}
  534.  
  535. #
  536. # Test assignment 1 - Value ctor
  537. #
  538. {"this" : [.]}
  539. 1
  540. {"this": [1]}
  541.  
  542. #
  543. # Test assignment 2 - Value ctor
  544. #
  545. {"this" : [42]}
  546. null
  547. {"this": [42]}
  548.  
  549. #
  550. # Unicode input
  551. #
  552. # unicode tests are particularly finicky depending on the encoding/OS/terminal
  553. # if the grading tests say you're deadling with unicode just fine
  554. # then you can safely ignore the tests below
  555. # but if you are missing points during grading these might help to debug your project
  556.  
  557. .
  558. "\b\r\f\t\n\r\u02ac\u058E\u05d2\u0606"
  559. "\b\r\f\t\n\rʬ֎ג؆"
  560.  
  561. .
  562. "\u0000"
  563. "\u0000"
  564.  
  565. #
  566. # Null input
  567. #
  568.  
  569. .[0:10]
  570. null
  571. null
  572.  
  573. .[0:10]?
  574. null
  575. null
  576.  
  577. .[0]
  578. null
  579. null
  580.  
  581. .[0]?
  582. null
  583. null
  584.  
  585. .["foo"]
  586. null
  587. null
  588.  
  589. .["foo"]?
  590. null
  591. null
  592.  
  593. .foo
  594. null
  595. null
  596.  
  597. .foo?
  598. null
  599. null
  600.  
  601. #
  602. # Test string slice
  603. #
  604.  
  605. .[1:3]
  606. "abcdef"
  607. "bc"
  608.  
  609. #
  610. # Test string slice
  611. #
  612.  
  613. .[1:3]
  614. "abcdef"
  615. "bc"
  616.  
  617. #
  618. # Recursive descent operator test
  619. #
  620. ..
  621. [{"a": 1}]
  622. [{"a": 1}]
  623. {"a": 1}
  624. 1
  625.  
  626. #
  627. # Recursive descent operator test 2
  628. #
  629. ..
  630. {"a": 1}
  631. {"a": 1}
  632. 1
  633.  
  634. # Comparator and Comparison bounds
  635.  
  636. # Test for : and or not
  637.  
  638. 42 and "a string"
  639. null
  640. true
  641.  
  642. (true, true) and (true, false)
  643. null
  644. true
  645. false
  646. true
  647. false
  648.  
  649. [true, false | not]
  650. null
  651. [false, true]
  652.  
  653.  
  654. # Test for <, >, <= and >=
  655. . < 5
  656. 2
  657. true
  658.  
  659. # Test for if .. then .. else ..
  660.  
  661. # elif
  662. if . == 0 then "zero" elif . == 1 then "one" else "many" end
  663. 2
  664. "many"
  665.  
  666. # shortcuts
  667.  
  668. if false then "haha" end
  669. [1,2,3,4]
  670. [1,2,3,4]
  671.  
  672. # null is also falsy
  673. if null then "haha" end
  674. [1,2,3,4]
  675. [1,2,3,4]
  676.  
  677. if true then "haha" end
  678. [1,2,3,4]
  679. "haha"
  680.  
  681. # Anything besides null and false is true
  682. if .[2] then "haha" end
  683. [1,2,3,4]
  684. "haha"
  685.  
  686.  
  687. # Tests for eq and not eq
  688.  
  689. . == false
  690. null
  691. false
  692.  
  693.  
  694. # Needs arith ops BONUS (+, -, *) to do this
  695. . == {"b": {"d": (4 + 1e-20), "c": 3}, "a":1}
  696. {"a":1, "b": {"c": 3, "d": 4}}
  697. true
  698.  
  699.  
  700. .[] == 1
  701. [1, 1.0, "1", "banana"]
  702. true
  703. true
  704. false
  705. false
  706.  
  707.  
  708. try .a catch ". is not an object"
  709. true
  710. ". is not an object"
  711.  
  712. [.[]|try .a]
  713. [{}, true, {"a":1}]
  714. [null, 1]
  715.  
  716. try error("some exception") catch .
  717. true
  718. "some exception"
  719.  
  720. # Number test
  721.  
  722. # JSON number test
  723. .
  724. .13
  725. .13
  726.  
  727. # Filter Wrapper (JNumber 0.13) test
  728. .13
  729. null
  730. .13
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement