From cd1f662e17812ba6c5e7ce692667842ef63ac456 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Sun, 9 Aug 2026 20:02:57 +0800 Subject: [PATCH] =?UTF-8?q?test:=20=E5=88=A0=E9=99=A4=20TestProject/2/3=20?= =?UTF-8?q?=E8=81=9A=E5=90=88=E9=A1=B9=E7=9B=AE(=E5=B7=B2=E6=8B=86?= =?UTF-8?q?=E5=88=86=E8=A6=86=E7=9B=96);=20HashLibTest=20=E5=B9=B6?= =?UTF-8?q?=E5=85=A5=20binascii/base64/hashlib=20=E5=85=A8=E5=A5=97?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Test/HashLibTest/App/main.vp | 101 +- .../.tpv_build/temp/7a/7a2aeb1d7ef1f519.vpi | 10 - .../TestProject/.tpv_build/temp/_sha1_map.txt | 10 - Test/TestProject/App/BINASCII.vp | 47 - Test/TestProject/App/HASHLIB.vp | 80 -- Test/TestProject/App/config.vp | 24 - Test/TestProject/App/main.vp | 220 ---- Test/TestProject/App/test_numpy.vp | 1087 ----------------- Test/TestProject/App/test_zlib.vp | 883 ------------- Test/TestProject/App/zc/class_test.vp | 245 ---- Test/TestProject/App/zc/config.vp | 24 - Test/TestProject/App/zc/logic_test.vp | 372 ------ Test/TestProject/App/zc/test.vp | 298 ----- .../output/49cae05490a513cb.deps.json | 1 - .../output/75583f20a922ab2e.deps.json | 1 - .../output/8e0d8fdba991b3b4.deps.json | 1 - .../output/cfc83b830141b00e.deps.json | 1 - .../output/e5fb16127bce8f68.deps.json | 1 - .../output/faec3233d98371da.deps.json | 1 - Test/TestProject/project.json | 29 - .../temp/285b6aa29a34754d.stub.ll.dep | 0 Test/TestProject/temp/285b6aa29a34754d.vpi | 23 - .../temp/3cd87018ba1e76bc.doc.json | 1 - Test/TestProject/temp/3cd87018ba1e76bc.vpi | 108 -- .../temp/3f7c5e78d8652535.stub.ll.dep | 0 Test/TestProject/temp/3f7c5e78d8652535.vpi | 128 -- .../temp/49cae05490a513cb.doc.json | 1 - Test/TestProject/temp/49cae05490a513cb.vpi | 19 - .../temp/6c658cc728d0bbf4.stub.ll.dep | 1 - Test/TestProject/temp/6c658cc728d0bbf4.vpi | 22 - .../temp/748d0424e8976fa0.stub.ll.dep | 1 - Test/TestProject/temp/748d0424e8976fa0.vpi | 31 - .../temp/75583f20a922ab2e.doc.json | 1 - Test/TestProject/temp/75583f20a922ab2e.vpi | 38 - .../temp/8e0d8fdba991b3b4.doc.json | 1 - Test/TestProject/temp/8e0d8fdba991b3b4.vpi | 25 - Test/TestProject/temp/_phase1_manifest.json | 1 - Test/TestProject/temp/_sha1_map.txt | 19 - Test/TestProject/temp/_shared_sym.json | Bin 618362 -> 0 bytes .../temp/aa246c6e6aa30484.stub.ll.dep | 0 Test/TestProject/temp/aa246c6e6aa30484.vpi | 26 - .../temp/bbdf3bbd4c3bc28c.stub.ll.dep | 1 - Test/TestProject/temp/bbdf3bbd4c3bc28c.vpi | 138 --- .../temp/c3a6aed1f1fb8b1e.stub.ll.dep | 0 Test/TestProject/temp/c3a6aed1f1fb8b1e.vpi | 240 ---- .../temp/c9f4be41ca1cc2b4.stub.ll.dep | 1 - Test/TestProject/temp/c9f4be41ca1cc2b4.vpi | 22 - .../temp/cfc83b830141b00e.doc.json | 1 - Test/TestProject/temp/cfc83b830141b00e.vpi | 27 - .../temp/e5fb16127bce8f68.doc.json | 1 - Test/TestProject/temp/e5fb16127bce8f68.vpi | 66 - .../temp/f5522571bcce7bcb.stub.ll.dep | 0 Test/TestProject/temp/f5522571bcce7bcb.vpi | 100 -- .../temp/faec3233d98371da.doc.json | 1 - Test/TestProject/temp/faec3233d98371da.vpi | 54 - .../temp/fc980acec33d69a7.stub.ll.dep | 1 - Test/TestProject/temp/fc980acec33d69a7.vpi | 100 -- .../.tpv_build/temp/54/541a1ed9b8be53c8.vpi | 13 - .../.tpv_build/temp/_sha1_map.txt | 5 - Test/TestProject2/App/main.vp | 35 - Test/TestProject2/App/zc/class_test.vp | 245 ---- Test/TestProject2/App/zc/config.vp | 24 - Test/TestProject2/App/zc/logic_test.vp | 372 ------ Test/TestProject2/App/zc/test.vp | 298 ----- .../output/0df65b8ed15664b0.deps.json | 1 - .../output/19f8024d10c828e8.deps.json | 1 - .../output/1f6617c02fc8899d.deps.json | 1 - .../output/3e775aa83705b119.deps.json | 1 - .../output/451745df21e598af.deps.json | 1 - .../output/541a1ed9b8be53c8.deps.json | 1 - .../output/6ff26590374ae6fc.deps.json | 1 - .../output/8ebed83a7817fa0c.deps.json | 1 - .../output/90921d009fdd674c.deps.json | 1 - .../output/_shared_sym_includes.pickle | Bin 787706 -> 0 bytes .../output/c9d54a4158f7f5a8.deps.json | 1 - .../output/cfc83b830141b00e.deps.json | 1 - .../output/d3917d97537f703c.deps.json | 1 - .../output/d541ade6afb689a5.deps.json | 1 - Test/TestProject2/project.json | 29 - Test/TestProject2/temp/067c78e9f121dce3.vpi | 136 --- Test/TestProject2/temp/06f53cc594b4ac6c.vpi | 109 -- .../temp/0df65b8ed15664b0.stub.ll.dep | 1 - Test/TestProject2/temp/0df65b8ed15664b0.vpi | 30 - .../temp/19f8024d10c828e8.stub.ll.dep | 1 - Test/TestProject2/temp/19f8024d10c828e8.vpi | 35 - .../temp/1f6617c02fc8899d.stub.ll.dep | 1 - Test/TestProject2/temp/1f6617c02fc8899d.vpi | 66 - .../temp/285b6aa29a34754d.stub.ll.dep | 0 Test/TestProject2/temp/285b6aa29a34754d.vpi | 23 - .../temp/3e775aa83705b119.stub.ll.dep | 1 - Test/TestProject2/temp/3e775aa83705b119.vpi | 125 -- .../temp/451745df21e598af.stub.ll.dep | 1 - Test/TestProject2/temp/451745df21e598af.vpi | 52 - .../temp/541a1ed9b8be53c8.doc.json | 1 - Test/TestProject2/temp/541a1ed9b8be53c8.vpi | 16 - Test/TestProject2/temp/6446627d4f07a1b5.vpi | 86 -- .../temp/6c658cc728d0bbf4.stub.ll.dep | 1 - Test/TestProject2/temp/6c658cc728d0bbf4.vpi | 22 - .../temp/6ff26590374ae6fc.stub.ll.dep | 0 Test/TestProject2/temp/6ff26590374ae6fc.vpi | 39 - Test/TestProject2/temp/72e2d5ccb7cedcf1.vpi | 91 -- .../temp/748d0424e8976fa0.stub.ll.dep | 1 - Test/TestProject2/temp/748d0424e8976fa0.vpi | 31 - .../temp/8ebed83a7817fa0c.stub.ll.dep | 1 - Test/TestProject2/temp/8ebed83a7817fa0c.vpi | 15 - .../temp/90921d009fdd674c.stub.ll.dep | 1 - Test/TestProject2/temp/90921d009fdd674c.vpi | 56 - .../temp/96837bcc64032444.stub.ll.dep | 0 Test/TestProject2/temp/96837bcc64032444.vpi | 13 - Test/TestProject2/temp/_phase1_manifest.json | 1 - Test/TestProject2/temp/_sha1_map.txt | 24 - Test/TestProject2/temp/_shared_sym.json | Bin 527038 -> 0 bytes .../temp/aa246c6e6aa30484.stub.ll.dep | 0 Test/TestProject2/temp/aa246c6e6aa30484.vpi | 26 - .../temp/bbdf3bbd4c3bc28c.stub.ll.dep | 1 - Test/TestProject2/temp/bbdf3bbd4c3bc28c.vpi | 138 --- .../temp/c9d54a4158f7f5a8.stub.ll.dep | 0 Test/TestProject2/temp/c9d54a4158f7f5a8.vpi | 34 - .../temp/c9f4be41ca1cc2b4.stub.ll.dep | 1 - Test/TestProject2/temp/c9f4be41ca1cc2b4.vpi | 22 - .../temp/cfc83b830141b00e.doc.json | 1 - Test/TestProject2/temp/cfc83b830141b00e.vpi | 27 - Test/TestProject2/temp/d137b1f3311f3a7f.vpi | 81 -- .../temp/d3917d97537f703c.stub.ll.dep | 0 Test/TestProject2/temp/d3917d97537f703c.vpi | 45 - .../temp/d541ade6afb689a5.stub.ll.dep | 1 - Test/TestProject2/temp/d541ade6afb689a5.vpi | 44 - Test/TestProject2/temp/d63d2c2a2bd9bd2a.vpi | 10 - .../temp/f5522571bcce7bcb.stub.ll.dep | 0 Test/TestProject2/temp/f5522571bcce7bcb.vpi | 100 -- Test/TestProject2/temp/f6b51804a0ba8ff0.vpi | 192 --- .../temp/fc980acec33d69a7.stub.ll.dep | 1 - Test/TestProject2/temp/fc980acec33d69a7.vpi | 100 -- .../.tpv_build/temp/64/64ac83614c9bdbc6.vpi | 75 -- .../.tpv_build/temp/_sha1_map.txt | 6 - Test/TestProject3/App/enumtest.vp | 95 -- Test/TestProject3/App/fileiotest.vp | 395 ------ Test/TestProject3/App/main.vp | 513 -------- Test/TestProject3/App/mpooltest.vp | 91 -- Test/TestProject3/App/vectortest.vp | 43 - .../output/0019c939aae7f9f1.deps.json | 1 - .../output/1b58766d38d05de3.deps.json | 1 - .../output/285a822aa26bfbda.deps.json | 1 - .../output/64ac83614c9bdbc6.deps.json | 1 - .../output/b235d6477436c524.deps.json | 1 - .../output/b777c587cc21465a.deps.json | 1 - .../output/c01b27dbcd683245.deps.json | 1 - Test/TestProject3/project.json | 29 - .../temp/0019c939aae7f9f1.doc.json | 1 - Test/TestProject3/temp/0019c939aae7f9f1.vpi | 14 - Test/TestProject3/temp/067c78e9f121dce3.vpi | 136 --- Test/TestProject3/temp/06f53cc594b4ac6c.vpi | 109 -- .../temp/1b58766d38d05de3.doc.json | 1 - Test/TestProject3/temp/1b58766d38d05de3.vpi | 35 - .../temp/285a822aa26bfbda.stub.ll.dep | 1 - Test/TestProject3/temp/285a822aa26bfbda.vpi | 24 - .../temp/285b6aa29a34754d.stub.ll.dep | 0 Test/TestProject3/temp/285b6aa29a34754d.vpi | 23 - Test/TestProject3/temp/6446627d4f07a1b5.vpi | 86 -- .../temp/64ac83614c9bdbc6.doc.json | 1 - Test/TestProject3/temp/64ac83614c9bdbc6.vpi | 85 -- .../temp/6c658cc728d0bbf4.stub.ll.dep | 1 - Test/TestProject3/temp/6c658cc728d0bbf4.vpi | 22 - .../temp/71e0a3ffcb3ebfad.stub.ll.dep | 0 Test/TestProject3/temp/71e0a3ffcb3ebfad.vpi | 20 - Test/TestProject3/temp/72e2d5ccb7cedcf1.vpi | 91 -- .../temp/748d0424e8976fa0.stub.ll.dep | 1 - Test/TestProject3/temp/748d0424e8976fa0.vpi | 31 - Test/TestProject3/temp/_phase1_manifest.json | 1 - Test/TestProject3/temp/_sha1_map.txt | 22 - Test/TestProject3/temp/_shared_sym.json | Bin 584979 -> 0 bytes .../temp/aa246c6e6aa30484.stub.ll.dep | 0 Test/TestProject3/temp/aa246c6e6aa30484.vpi | 26 - .../temp/b235d6477436c524.doc.json | 1 - Test/TestProject3/temp/b235d6477436c524.vpi | 131 -- .../temp/b57252077e6b596b.stub.ll.dep | 0 Test/TestProject3/temp/b57252077e6b596b.vpi | 53 - .../temp/b777c587cc21465a.doc.json | 1 - Test/TestProject3/temp/b777c587cc21465a.vpi | 16 - .../temp/bbdf3bbd4c3bc28c.stub.ll.dep | 1 - Test/TestProject3/temp/bbdf3bbd4c3bc28c.vpi | 138 --- .../temp/c01b27dbcd683245.doc.json | 1 - Test/TestProject3/temp/c01b27dbcd683245.vpi | 30 - .../temp/c9f4be41ca1cc2b4.stub.ll.dep | 1 - Test/TestProject3/temp/c9f4be41ca1cc2b4.vpi | 22 - .../temp/d137b1f3311f3a7f.stub.ll.dep | 1 - Test/TestProject3/temp/d137b1f3311f3a7f.vpi | 81 -- .../temp/f5522571bcce7bcb.stub.ll.dep | 0 Test/TestProject3/temp/f5522571bcce7bcb.vpi | 100 -- .../temp/f6ab8989f3545e83.stub.ll.dep | 1 - Test/TestProject3/temp/f6ab8989f3545e83.vpi | 23 - .../temp/f6b51804a0ba8ff0.stub.ll.dep | 1 - Test/TestProject3/temp/f6b51804a0ba8ff0.vpi | 192 --- .../temp/fc980acec33d69a7.stub.ll.dep | 1 - Test/TestProject3/temp/fc980acec33d69a7.vpi | 100 -- 195 files changed, 99 insertions(+), 10254 deletions(-) delete mode 100644 Test/TestProject/.tpv_build/temp/7a/7a2aeb1d7ef1f519.vpi delete mode 100644 Test/TestProject/.tpv_build/temp/_sha1_map.txt delete mode 100644 Test/TestProject/App/BINASCII.vp delete mode 100644 Test/TestProject/App/HASHLIB.vp delete mode 100644 Test/TestProject/App/config.vp delete mode 100644 Test/TestProject/App/main.vp delete mode 100644 Test/TestProject/App/test_numpy.vp delete mode 100644 Test/TestProject/App/test_zlib.vp delete mode 100644 Test/TestProject/App/zc/class_test.vp delete mode 100644 Test/TestProject/App/zc/config.vp delete mode 100644 Test/TestProject/App/zc/logic_test.vp delete mode 100644 Test/TestProject/App/zc/test.vp delete mode 100644 Test/TestProject/output/49cae05490a513cb.deps.json delete mode 100644 Test/TestProject/output/75583f20a922ab2e.deps.json delete mode 100644 Test/TestProject/output/8e0d8fdba991b3b4.deps.json delete mode 100644 Test/TestProject/output/cfc83b830141b00e.deps.json delete mode 100644 Test/TestProject/output/e5fb16127bce8f68.deps.json delete mode 100644 Test/TestProject/output/faec3233d98371da.deps.json delete mode 100644 Test/TestProject/project.json delete mode 100644 Test/TestProject/temp/285b6aa29a34754d.stub.ll.dep delete mode 100644 Test/TestProject/temp/285b6aa29a34754d.vpi delete mode 100644 Test/TestProject/temp/3cd87018ba1e76bc.doc.json delete mode 100644 Test/TestProject/temp/3cd87018ba1e76bc.vpi delete mode 100644 Test/TestProject/temp/3f7c5e78d8652535.stub.ll.dep delete mode 100644 Test/TestProject/temp/3f7c5e78d8652535.vpi delete mode 100644 Test/TestProject/temp/49cae05490a513cb.doc.json delete mode 100644 Test/TestProject/temp/49cae05490a513cb.vpi delete mode 100644 Test/TestProject/temp/6c658cc728d0bbf4.stub.ll.dep delete mode 100644 Test/TestProject/temp/6c658cc728d0bbf4.vpi delete mode 100644 Test/TestProject/temp/748d0424e8976fa0.stub.ll.dep delete mode 100644 Test/TestProject/temp/748d0424e8976fa0.vpi delete mode 100644 Test/TestProject/temp/75583f20a922ab2e.doc.json delete mode 100644 Test/TestProject/temp/75583f20a922ab2e.vpi delete mode 100644 Test/TestProject/temp/8e0d8fdba991b3b4.doc.json delete mode 100644 Test/TestProject/temp/8e0d8fdba991b3b4.vpi delete mode 100644 Test/TestProject/temp/_phase1_manifest.json delete mode 100644 Test/TestProject/temp/_sha1_map.txt delete mode 100644 Test/TestProject/temp/_shared_sym.json delete mode 100644 Test/TestProject/temp/aa246c6e6aa30484.stub.ll.dep delete mode 100644 Test/TestProject/temp/aa246c6e6aa30484.vpi delete mode 100644 Test/TestProject/temp/bbdf3bbd4c3bc28c.stub.ll.dep delete mode 100644 Test/TestProject/temp/bbdf3bbd4c3bc28c.vpi delete mode 100644 Test/TestProject/temp/c3a6aed1f1fb8b1e.stub.ll.dep delete mode 100644 Test/TestProject/temp/c3a6aed1f1fb8b1e.vpi delete mode 100644 Test/TestProject/temp/c9f4be41ca1cc2b4.stub.ll.dep delete mode 100644 Test/TestProject/temp/c9f4be41ca1cc2b4.vpi delete mode 100644 Test/TestProject/temp/cfc83b830141b00e.doc.json delete mode 100644 Test/TestProject/temp/cfc83b830141b00e.vpi delete mode 100644 Test/TestProject/temp/e5fb16127bce8f68.doc.json delete mode 100644 Test/TestProject/temp/e5fb16127bce8f68.vpi delete mode 100644 Test/TestProject/temp/f5522571bcce7bcb.stub.ll.dep delete mode 100644 Test/TestProject/temp/f5522571bcce7bcb.vpi delete mode 100644 Test/TestProject/temp/faec3233d98371da.doc.json delete mode 100644 Test/TestProject/temp/faec3233d98371da.vpi delete mode 100644 Test/TestProject/temp/fc980acec33d69a7.stub.ll.dep delete mode 100644 Test/TestProject/temp/fc980acec33d69a7.vpi delete mode 100644 Test/TestProject2/.tpv_build/temp/54/541a1ed9b8be53c8.vpi delete mode 100644 Test/TestProject2/.tpv_build/temp/_sha1_map.txt delete mode 100644 Test/TestProject2/App/main.vp delete mode 100644 Test/TestProject2/App/zc/class_test.vp delete mode 100644 Test/TestProject2/App/zc/config.vp delete mode 100644 Test/TestProject2/App/zc/logic_test.vp delete mode 100644 Test/TestProject2/App/zc/test.vp delete mode 100644 Test/TestProject2/output/0df65b8ed15664b0.deps.json delete mode 100644 Test/TestProject2/output/19f8024d10c828e8.deps.json delete mode 100644 Test/TestProject2/output/1f6617c02fc8899d.deps.json delete mode 100644 Test/TestProject2/output/3e775aa83705b119.deps.json delete mode 100644 Test/TestProject2/output/451745df21e598af.deps.json delete mode 100644 Test/TestProject2/output/541a1ed9b8be53c8.deps.json delete mode 100644 Test/TestProject2/output/6ff26590374ae6fc.deps.json delete mode 100644 Test/TestProject2/output/8ebed83a7817fa0c.deps.json delete mode 100644 Test/TestProject2/output/90921d009fdd674c.deps.json delete mode 100644 Test/TestProject2/output/_shared_sym_includes.pickle delete mode 100644 Test/TestProject2/output/c9d54a4158f7f5a8.deps.json delete mode 100644 Test/TestProject2/output/cfc83b830141b00e.deps.json delete mode 100644 Test/TestProject2/output/d3917d97537f703c.deps.json delete mode 100644 Test/TestProject2/output/d541ade6afb689a5.deps.json delete mode 100644 Test/TestProject2/project.json delete mode 100644 Test/TestProject2/temp/067c78e9f121dce3.vpi delete mode 100644 Test/TestProject2/temp/06f53cc594b4ac6c.vpi delete mode 100644 Test/TestProject2/temp/0df65b8ed15664b0.stub.ll.dep delete mode 100644 Test/TestProject2/temp/0df65b8ed15664b0.vpi delete mode 100644 Test/TestProject2/temp/19f8024d10c828e8.stub.ll.dep delete mode 100644 Test/TestProject2/temp/19f8024d10c828e8.vpi delete mode 100644 Test/TestProject2/temp/1f6617c02fc8899d.stub.ll.dep delete mode 100644 Test/TestProject2/temp/1f6617c02fc8899d.vpi delete mode 100644 Test/TestProject2/temp/285b6aa29a34754d.stub.ll.dep delete mode 100644 Test/TestProject2/temp/285b6aa29a34754d.vpi delete mode 100644 Test/TestProject2/temp/3e775aa83705b119.stub.ll.dep delete mode 100644 Test/TestProject2/temp/3e775aa83705b119.vpi delete mode 100644 Test/TestProject2/temp/451745df21e598af.stub.ll.dep delete mode 100644 Test/TestProject2/temp/451745df21e598af.vpi delete mode 100644 Test/TestProject2/temp/541a1ed9b8be53c8.doc.json delete mode 100644 Test/TestProject2/temp/541a1ed9b8be53c8.vpi delete mode 100644 Test/TestProject2/temp/6446627d4f07a1b5.vpi delete mode 100644 Test/TestProject2/temp/6c658cc728d0bbf4.stub.ll.dep delete mode 100644 Test/TestProject2/temp/6c658cc728d0bbf4.vpi delete mode 100644 Test/TestProject2/temp/6ff26590374ae6fc.stub.ll.dep delete mode 100644 Test/TestProject2/temp/6ff26590374ae6fc.vpi delete mode 100644 Test/TestProject2/temp/72e2d5ccb7cedcf1.vpi delete mode 100644 Test/TestProject2/temp/748d0424e8976fa0.stub.ll.dep delete mode 100644 Test/TestProject2/temp/748d0424e8976fa0.vpi delete mode 100644 Test/TestProject2/temp/8ebed83a7817fa0c.stub.ll.dep delete mode 100644 Test/TestProject2/temp/8ebed83a7817fa0c.vpi delete mode 100644 Test/TestProject2/temp/90921d009fdd674c.stub.ll.dep delete mode 100644 Test/TestProject2/temp/90921d009fdd674c.vpi delete mode 100644 Test/TestProject2/temp/96837bcc64032444.stub.ll.dep delete mode 100644 Test/TestProject2/temp/96837bcc64032444.vpi delete mode 100644 Test/TestProject2/temp/_phase1_manifest.json delete mode 100644 Test/TestProject2/temp/_sha1_map.txt delete mode 100644 Test/TestProject2/temp/_shared_sym.json delete mode 100644 Test/TestProject2/temp/aa246c6e6aa30484.stub.ll.dep delete mode 100644 Test/TestProject2/temp/aa246c6e6aa30484.vpi delete mode 100644 Test/TestProject2/temp/bbdf3bbd4c3bc28c.stub.ll.dep delete mode 100644 Test/TestProject2/temp/bbdf3bbd4c3bc28c.vpi delete mode 100644 Test/TestProject2/temp/c9d54a4158f7f5a8.stub.ll.dep delete mode 100644 Test/TestProject2/temp/c9d54a4158f7f5a8.vpi delete mode 100644 Test/TestProject2/temp/c9f4be41ca1cc2b4.stub.ll.dep delete mode 100644 Test/TestProject2/temp/c9f4be41ca1cc2b4.vpi delete mode 100644 Test/TestProject2/temp/cfc83b830141b00e.doc.json delete mode 100644 Test/TestProject2/temp/cfc83b830141b00e.vpi delete mode 100644 Test/TestProject2/temp/d137b1f3311f3a7f.vpi delete mode 100644 Test/TestProject2/temp/d3917d97537f703c.stub.ll.dep delete mode 100644 Test/TestProject2/temp/d3917d97537f703c.vpi delete mode 100644 Test/TestProject2/temp/d541ade6afb689a5.stub.ll.dep delete mode 100644 Test/TestProject2/temp/d541ade6afb689a5.vpi delete mode 100644 Test/TestProject2/temp/d63d2c2a2bd9bd2a.vpi delete mode 100644 Test/TestProject2/temp/f5522571bcce7bcb.stub.ll.dep delete mode 100644 Test/TestProject2/temp/f5522571bcce7bcb.vpi delete mode 100644 Test/TestProject2/temp/f6b51804a0ba8ff0.vpi delete mode 100644 Test/TestProject2/temp/fc980acec33d69a7.stub.ll.dep delete mode 100644 Test/TestProject2/temp/fc980acec33d69a7.vpi delete mode 100644 Test/TestProject3/.tpv_build/temp/64/64ac83614c9bdbc6.vpi delete mode 100644 Test/TestProject3/.tpv_build/temp/_sha1_map.txt delete mode 100644 Test/TestProject3/App/enumtest.vp delete mode 100644 Test/TestProject3/App/fileiotest.vp delete mode 100644 Test/TestProject3/App/main.vp delete mode 100644 Test/TestProject3/App/mpooltest.vp delete mode 100644 Test/TestProject3/App/vectortest.vp delete mode 100644 Test/TestProject3/output/0019c939aae7f9f1.deps.json delete mode 100644 Test/TestProject3/output/1b58766d38d05de3.deps.json delete mode 100644 Test/TestProject3/output/285a822aa26bfbda.deps.json delete mode 100644 Test/TestProject3/output/64ac83614c9bdbc6.deps.json delete mode 100644 Test/TestProject3/output/b235d6477436c524.deps.json delete mode 100644 Test/TestProject3/output/b777c587cc21465a.deps.json delete mode 100644 Test/TestProject3/output/c01b27dbcd683245.deps.json delete mode 100644 Test/TestProject3/project.json delete mode 100644 Test/TestProject3/temp/0019c939aae7f9f1.doc.json delete mode 100644 Test/TestProject3/temp/0019c939aae7f9f1.vpi delete mode 100644 Test/TestProject3/temp/067c78e9f121dce3.vpi delete mode 100644 Test/TestProject3/temp/06f53cc594b4ac6c.vpi delete mode 100644 Test/TestProject3/temp/1b58766d38d05de3.doc.json delete mode 100644 Test/TestProject3/temp/1b58766d38d05de3.vpi delete mode 100644 Test/TestProject3/temp/285a822aa26bfbda.stub.ll.dep delete mode 100644 Test/TestProject3/temp/285a822aa26bfbda.vpi delete mode 100644 Test/TestProject3/temp/285b6aa29a34754d.stub.ll.dep delete mode 100644 Test/TestProject3/temp/285b6aa29a34754d.vpi delete mode 100644 Test/TestProject3/temp/6446627d4f07a1b5.vpi delete mode 100644 Test/TestProject3/temp/64ac83614c9bdbc6.doc.json delete mode 100644 Test/TestProject3/temp/64ac83614c9bdbc6.vpi delete mode 100644 Test/TestProject3/temp/6c658cc728d0bbf4.stub.ll.dep delete mode 100644 Test/TestProject3/temp/6c658cc728d0bbf4.vpi delete mode 100644 Test/TestProject3/temp/71e0a3ffcb3ebfad.stub.ll.dep delete mode 100644 Test/TestProject3/temp/71e0a3ffcb3ebfad.vpi delete mode 100644 Test/TestProject3/temp/72e2d5ccb7cedcf1.vpi delete mode 100644 Test/TestProject3/temp/748d0424e8976fa0.stub.ll.dep delete mode 100644 Test/TestProject3/temp/748d0424e8976fa0.vpi delete mode 100644 Test/TestProject3/temp/_phase1_manifest.json delete mode 100644 Test/TestProject3/temp/_sha1_map.txt delete mode 100644 Test/TestProject3/temp/_shared_sym.json delete mode 100644 Test/TestProject3/temp/aa246c6e6aa30484.stub.ll.dep delete mode 100644 Test/TestProject3/temp/aa246c6e6aa30484.vpi delete mode 100644 Test/TestProject3/temp/b235d6477436c524.doc.json delete mode 100644 Test/TestProject3/temp/b235d6477436c524.vpi delete mode 100644 Test/TestProject3/temp/b57252077e6b596b.stub.ll.dep delete mode 100644 Test/TestProject3/temp/b57252077e6b596b.vpi delete mode 100644 Test/TestProject3/temp/b777c587cc21465a.doc.json delete mode 100644 Test/TestProject3/temp/b777c587cc21465a.vpi delete mode 100644 Test/TestProject3/temp/bbdf3bbd4c3bc28c.stub.ll.dep delete mode 100644 Test/TestProject3/temp/bbdf3bbd4c3bc28c.vpi delete mode 100644 Test/TestProject3/temp/c01b27dbcd683245.doc.json delete mode 100644 Test/TestProject3/temp/c01b27dbcd683245.vpi delete mode 100644 Test/TestProject3/temp/c9f4be41ca1cc2b4.stub.ll.dep delete mode 100644 Test/TestProject3/temp/c9f4be41ca1cc2b4.vpi delete mode 100644 Test/TestProject3/temp/d137b1f3311f3a7f.stub.ll.dep delete mode 100644 Test/TestProject3/temp/d137b1f3311f3a7f.vpi delete mode 100644 Test/TestProject3/temp/f5522571bcce7bcb.stub.ll.dep delete mode 100644 Test/TestProject3/temp/f5522571bcce7bcb.vpi delete mode 100644 Test/TestProject3/temp/f6ab8989f3545e83.stub.ll.dep delete mode 100644 Test/TestProject3/temp/f6ab8989f3545e83.vpi delete mode 100644 Test/TestProject3/temp/f6b51804a0ba8ff0.stub.ll.dep delete mode 100644 Test/TestProject3/temp/f6b51804a0ba8ff0.vpi delete mode 100644 Test/TestProject3/temp/fc980acec33d69a7.stub.ll.dep delete mode 100644 Test/TestProject3/temp/fc980acec33d69a7.vpi diff --git a/Test/HashLibTest/App/main.vp b/Test/HashLibTest/App/main.vp index ac111ff..ec994d4 100644 --- a/Test/HashLibTest/App/main.vp +++ b/Test/HashLibTest/App/main.vp @@ -1,26 +1,123 @@ import t, c +import stdio +import stdlib +import string import testcheck import hashlib import binascii +import base64 import w32.win32console +# ============================================== +# 工具函数:打印十六进制哈希串 +# ============================================== +def print_hex(buf: t.CUInt8T | t.CPtr, length: t.CInt): + for i in range(length): + stdio.printf("%02x", buf[i]) + stdio.printf("\n") + + +def default_value_test_function(a: t.CInt, b: t.CInt = 1): + print(a, b) + + def main() -> t.CInt | t.CExport: w32.win32console.SetConsoleCP(65001) w32.win32console.SetConsoleOutputCP(65001) testcheck.begin("HashLibTest: 哈希与校验测试") + # ---------- hashlib 摘要测试 ---------- testcheck.section("HASHLIB") + plain: str = "hello123" + md5_buf: t.CArray[t.CUInt8T, hashlib.MD5_DIGEST_LEN] mctx = hashlib.md5() - mctx.update("hello") + mctx.update(plain) mctx.final(md5_buf) + print("MD5: ") + print_hex(md5_buf, hashlib.MD5_DIGEST_LEN) testcheck.ok("HASHLIB md5 completed") + sha1_buf: t.CArray[t.CUInt8T, hashlib.SHA1_DIGEST_LEN] + s1ctx = hashlib.sha1() + s1ctx.update(plain) + s1ctx.final(sha1_buf) + print("SHA1: ") + print_hex(sha1_buf, hashlib.SHA1_DIGEST_LEN) + testcheck.ok("HASHLIB sha1 completed") + + sha256_buf: t.CArray[t.CUInt8T, hashlib.SHA256_DIGEST_LEN] + s2ctx = hashlib.sha256() + s2ctx.update(plain) + s2ctx.final(sha256_buf) + print("SHA256: ") + print_hex(sha256_buf, hashlib.SHA256_DIGEST_LEN) + testcheck.ok("HASHLIB sha256 completed") + + sha512_buf: t.CArray[t.CUInt8T, hashlib.SHA512_DIGEST_LEN] + s5ctx = hashlib.sha512() + s5ctx.update(plain) + s5ctx.final(sha512_buf) + print("SHA512: ") + print_hex(sha512_buf, hashlib.SHA512_DIGEST_LEN) + testcheck.ok("HASHLIB sha512 completed") + + default_value_test_function(b=2, a=1) + testcheck.ok("default value test completed") + + # ---------- base64 编解码测试 ---------- + testcheck.section("BASE64") + b64_out: t.CArray[t.CChar, 256] + b64_dec: t.CArray[t.CUInt8T, 256] + base64.b64encode(plain, b64_out) + print("Base64 编码:", b64_out) + dlen: t.CSizeT = base64.b64decode(b64_out, b64_dec) + b64_dec[dlen] = 0 + print("Base64 解码:", b64_dec) + testcheck.ok("BASE64 encode/decode completed") + + # ---------- binascii 全套测试 ---------- testcheck.section("BINASCII") binascii.init_binascii() - crc_val: t.CUnsignedInt = binascii.crc32("hello", 5, 0) + raw: str = "HelloWorld!" + raw_length: t.CInt = 11 + + hex_out: str = binascii.b2a_hex(raw, raw_length) + if hex_out: + stdio.printf("Hex: %s\n", hex_out) + stdlib.free(hex_out) + testcheck.ok("BINASCII b2a_hex completed") + + crc_val: t.CUnsignedInt = binascii.crc32(raw, raw_length, 0) + stdio.printf("CRC32: %u\n", crc_val) testcheck.ok("BINASCII crc32 completed") + b64_out2: str = binascii.b2a_base64(raw, raw_length) + if b64_out2: + stdio.printf("Base64: %s\n", b64_out2) + stdlib.free(b64_out2) + testcheck.ok("BINASCII b2a_base64 completed") + + uu_out: str = binascii.b2a_uu(raw, raw_length) + if uu_out: + stdio.printf("UU: %s\n", uu_out) + stdlib.free(uu_out) + testcheck.ok("BINASCII b2a_uu completed") + + hqx_in: t.CArray[t.CChar, 4] = ['A', 'B', 'C', '\0'] + hqx_crc: t.CUnsignedShort = 0 + hqx_out: str + unhqx: str + hqx_out, hqx_crc = binascii.b2a_hqx(hqx_in, 3) + unhqx, hqx_crc = binascii.a2b_hqx(hqx_out) + stdio.printf("HQX Test: ABC -> %s -> %s (CRC:%u)\n", hqx_out, unhqx, hqx_crc) + stdlib.free(hqx_out); stdlib.free(unhqx) + testcheck.ok("BINASCII hqx completed") + + adler_val: t.CUnsignedInt = binascii.adler32(raw, raw_length, 1) + stdio.printf("Adler32: %u\n", adler_val) + testcheck.ok("BINASCII adler32 completed") + return testcheck.end() diff --git a/Test/TestProject/.tpv_build/temp/7a/7a2aeb1d7ef1f519.vpi b/Test/TestProject/.tpv_build/temp/7a/7a2aeb1d7ef1f519.vpi deleted file mode 100644 index d54c65c..0000000 --- a/Test/TestProject/.tpv_build/temp/7a/7a2aeb1d7ef1f519.vpi +++ /dev/null @@ -1,10 +0,0 @@ -"""Auto-generated Python stub file""" - - -import stdio -import stdlib -import string -import binascii -import t, c -def main222(): pass - diff --git a/Test/TestProject/.tpv_build/temp/_sha1_map.txt b/Test/TestProject/.tpv_build/temp/_sha1_map.txt deleted file mode 100644 index ae75833..0000000 --- a/Test/TestProject/.tpv_build/temp/_sha1_map.txt +++ /dev/null @@ -1,10 +0,0 @@ -7a2aeb1d7ef1f519:BINASCII.vp -22ae99fbf5fa16e6:config.vp -49315f8913bda6a4:HASHLIB.vp -49cae05490a513cb:main.vp -3cd87018ba1e76bc:test_numpy.vp -9ba2a595433e0d35:test_zlib.vp -110d7d2c8a47ff77:zc/class_test.vp -15b2db4f5d33f57e:zc/config.vp -faec3233d98371da:zc/logic_test.vp -07b189ae3dcfb270:zc/test.vp diff --git a/Test/TestProject/App/BINASCII.vp b/Test/TestProject/App/BINASCII.vp deleted file mode 100644 index f58b7c1..0000000 --- a/Test/TestProject/App/BINASCII.vp +++ /dev/null @@ -1,47 +0,0 @@ -import stdio -import stdlib -import string -import binascii -import t, c - - - - -def main222(): - binascii.init_binascii() - raw: str = "HelloWorld!" - raw_length: t.CInt = 11 - - stdio.printf("你好\n") - - hex_out: str = binascii.b2a_hex(raw, raw_length) - if hex_out: - stdio.printf("Hex: %s\n", hex_out) - free(hex_out) - - crc_val: t.CUnsignedInt = binascii.crc32(raw, raw_length, 0) - stdio.printf("CRC32: %u\n", crc_val) - - b64_out: str = binascii.b2a_base64(raw, raw_length) - if b64_out: - stdio.printf("Base64: %s\n", b64_out) - free(b64_out) - - uu_out: str = binascii.b2a_uu(raw, raw_length) - if uu_out: - stdio.printf("UU: %s\n", uu_out) - free(uu_out) - - hqx_in: t.CArray[t.CChar, 4] = ['A', 'B', 'C', '\0'] - hqx_crc: t.CUnsignedShort = 0 - hqx_out: str - unhqx: str - hqx_out, hqx_crc = binascii.b2a_hqx(hqx_in, 3) - unhqx, hqx_crc = binascii.a2b_hqx(hqx_out) - stdio.printf("HQX Test: ABC -> %s -> %s (CRC:%u)\n", hqx_out, unhqx, hqx_crc) - free(hqx_out); free(unhqx) - - adler_val: t.CUnsignedInt = binascii.adler32(raw, raw_length, 1) - stdio.printf("Adler32: %u\n", adler_val) - - stdio.printf("Bye\n") diff --git a/Test/TestProject/App/HASHLIB.vp b/Test/TestProject/App/HASHLIB.vp deleted file mode 100644 index b84258c..0000000 --- a/Test/TestProject/App/HASHLIB.vp +++ /dev/null @@ -1,80 +0,0 @@ -import stdio -import stdlib -import string -import stdint -import t, c -import base64 -import hashlib - - - - - - - - -def default_value_test_function(a: t.CInt, b: t.CInt = 1): - print(a, b) - - - - -# ============================================== -# 工具函数:打印十六进制哈希串 -# ============================================== -def print_hex(buf: t.CUInt8T | t.CPtr, length: t.CInt): - for i in range(length): - stdio.printf("%02x", buf[i]) - stdio.printf("\n") - -# ============================================== -# 主函数测试入口 -# ============================================== -def main1() -> t.CInt: - plain: str = "hello123" - print("原文", plain) - - # ---------- Base64 测试 ---------- - b64_out: t.CArray[t.CChar, 256] - b64_dec: t.CArray[t.CUInt8T, 256] - base64.b64encode(plain, b64_out) - print("Base64 编码:", b64_out) - dlen: t.CSizeT = base64.b64decode(b64_out, b64_dec) - b64_dec[dlen] = 0 - print("Base64 解码:", b64_dec) - - # ---------- MD5 测试 ---------- - md5_buf: t.CArray[t.CUInt8T, hashlib.MD5_DIGEST_LEN] - mctx = hashlib.md5() - mctx.update(plain) - mctx.final(md5_buf) - print("MD5: ") - print_hex(md5_buf, hashlib.MD5_DIGEST_LEN) - - # ---------- SHA1 测试 ---------- - sha1_buf: t.CArray[t.CUInt8T, hashlib.SHA1_DIGEST_LEN] - s1ctx = hashlib.sha1() - s1ctx.update(plain) - s1ctx.final(sha1_buf) - print("SHA1: ") - print_hex(sha1_buf, hashlib.SHA1_DIGEST_LEN) - - # ---------- SHA256 测试 ---------- - sha256_buf: t.CArray[t.CUInt8T, hashlib.SHA256_DIGEST_LEN] - s2ctx = hashlib.sha256() - s2ctx.update(plain) - s2ctx.final(sha256_buf) - print("SHA256: ") - print_hex(sha256_buf, hashlib.SHA256_DIGEST_LEN) - - # ---------- SHA512 测试 ---------- - sha512_buf: t.CArray[t.CUInt8T, hashlib.SHA512_DIGEST_LEN] - s5ctx = hashlib.sha512() - s5ctx.update(plain) - s5ctx.final(sha512_buf) - print("SHA512: ") - print_hex(sha512_buf, hashlib.SHA512_DIGEST_LEN) - - default_value_test_function(b=2, a=1) - - return 0 diff --git a/Test/TestProject/App/config.vp b/Test/TestProject/App/config.vp deleted file mode 100644 index 5ead5bc..0000000 --- a/Test/TestProject/App/config.vp +++ /dev/null @@ -1,24 +0,0 @@ -import stdint -import t, c - - -A: t.CChar | t.CPtr = "你好" - -class BIT_TEST(t.Object): - a: t.CInt | t.Bit(1) - b: t.CInt | t.Bit(1) - c: t.CInt | t.Bit(1) - d: t.CInt | t.Bit(5) - -class OOP_TEST(t.Object): - a: t.CInt - def __init__(self): - self.a = 0 - def __call__(self) -> stdint.UINT: - return 123 - -class ENUM_TEST(t.CEnum): - A: t.State = 0 - B: t.State - C: t.State - Len: t.State diff --git a/Test/TestProject/App/main.vp b/Test/TestProject/App/main.vp deleted file mode 100644 index 12043d7..0000000 --- a/Test/TestProject/App/main.vp +++ /dev/null @@ -1,220 +0,0 @@ -import stdio -import stdint -import zc.config as config -import zc.test as test -import zc.logic_test as logic -import zc.class_test as class_test -import testcheck -import test_numpy - - -def main() -> stdint.INT: - testcheck.begin("Hello World!") - testcheck.section("Cross-module macros") - stdio.printf(" POSMAX: %d\n", config.POSMAX) - stdio.printf(" MATH_SCALE: %d\n", config.MATH_SCALE) - stdio.printf(" THRESHOLD: %d\n", config.THRESHOLD) - stdio.printf(" SHIFT_AMOUNT: %d\n", config.SHIFT_AMOUNT) - stdio.printf(" MASK_VALUE: 0x%x\n", config.MASK_VALUE) - testcheck.ok("config macros accessible") - - testcheck.section("While Loop Test") - test.AboutSizeTWhileTest(10) - testcheck.ok("While Loop Test (10)") - - testcheck.section("Math Basic Test (20, 6)") - test.MathBasicTest(20, 6) - testcheck.ok("Math Basic Test (20, 6)") - - testcheck.section("Math Advanced Test (value=15)") - test.MathAdvancedTest(15) - testcheck.ok("Math Advanced Test (value=15)") - - testcheck.section("While with Elif-Else Test (-2 to 12)") - test.WhileWithElifElseTest(-2, 12) - testcheck.ok("While with Elif-Else Test (-2 to 12)") - - testcheck.section("Nested While with Macros Test") - test.NestedWhileWithMacrosTest(3, 4) - testcheck.ok("Nested While with Macros Test (3, 4)") - - testcheck.section("Complex Condition Test (1, 2, 3)") - test.ComplexConditionTest(1, 2, 3) - testcheck.ok("Complex Condition Test (1, 2, 3)") - - testcheck.section("Retry Loop Test (8)") - test.RetryLoopTest(8) - testcheck.ok("Retry Loop Test (8)") - - testcheck.section("Bitwise Operations Test (0b1101101)") - test.BitwiseOperationsTest(109) - testcheck.ok("Bitwise Operations Test (109)") - - testcheck.section("Compound Assignment Math Test (15, 4)") - test.CompoundAssignmentMathTest(15, 4) - testcheck.ok("Compound Assignment Math Test (15, 4)") - - testcheck.section("Power and Modulo Test (2, 8)") - test.PowerAndModuloTest(2, 8) - testcheck.ok("Power and Modulo Test (2, 8)") - - testcheck.section("Mixed Arithmetic Test (5, 3, 4)") - test.MixedArithmeticTest(5, 3, 4) - testcheck.ok("Mixed Arithmetic Test (5, 3, 4)") - - testcheck.section("Math with While Loop Test (start=1, count=5)") - test.MathWithWhileLoopTest(1, 5) - testcheck.ok("Math with While Loop Test (1, 5)") - - testcheck.section("Complex Nested Math Test (7, 3)") - test.ComplexNestedMathTest(7, 3) - testcheck.ok("Complex Nested Math Test (7, 3)") - - testcheck.section("Conditional Math Chain Test (value=10)") - test.ConditionalMathChainTest(10) - testcheck.ok("Conditional Math Chain Test (value=10)") - - testcheck.section("Bit Manipulation Math Test (0xABCD)") - test.BitManipulationMathTest(0xABCD) - testcheck.ok("Bit Manipulation Math Test (0xABCD)") - - testcheck.section("COMPLEX LOGIC TESTS") - - testcheck.section("For Range Basic Test (stop=5)") - logic.ForRangeBasicTest(5) - testcheck.ok("For Range Basic Test (5)") - - testcheck.section("For Range With Start Stop Step (start=1, stop=10, step=2)") - logic.ForRangeWithStartStop(1, 10, 2) - testcheck.ok("For Range With Start Stop (1, 10, 2)") - - testcheck.section("Nested For Range Test (rows=2, cols=3)") - logic.NestedForRangeTest(2, 3) - testcheck.ok("Nested For Range Test (2, 3)") - - testcheck.section("For With If Break Test (size=8)") - logic.ForWithIfBreakTest(8) - testcheck.ok("For With If Break Test (8)") - - testcheck.section("For With If Continue Test (n=10)") - logic.ForWithIfContinueTest(10) - testcheck.ok("For With If Continue Test (10)") - - testcheck.section("For With Elif Branch Test (value=10)") - logic.ForWithElifBranchTest(10) - testcheck.ok("For With Elif Branch Test (10)") - - testcheck.section("While With If Elif Else Test (iterations=7)") - logic.WhileWithIfElifElseTest(7) - testcheck.ok("While With If Elif Else Test (7)") - - testcheck.section("While With Nested If Test (limit=4)") - logic.WhileWithNestedIfTest(4) - testcheck.ok("While With Nested If Test (4)") - - testcheck.section("While With Match Case Test (value=2)") - logic.WhileWithMatchCaseTest(2) - testcheck.ok("While With Match Case Test (2)") - - testcheck.section("While With Match Case Test (value=99)") - logic.WhileWithMatchCaseTest(99) - testcheck.ok("While With Match Case Test (99)") - - testcheck.section("While With Match Case NoBreak Test (value=3)") - logic.WhileWithMatchCaseNoBreakTest(3) - testcheck.ok("While With Match Case NoBreak Test (3)") - - testcheck.section("Complex For While Match Test (outer=3, inner=3)") - logic.ComplexForWhileMatchTest(3, 3) - testcheck.ok("Complex For While Match Test (3, 3)") - - testcheck.section("For With Case And NoBreak Test (n=5)") - logic.ForWithCaseAndNoBreakTest(5) - testcheck.ok("For With Case And NoBreak Test (5)") - - testcheck.section("While With Break Condition Test (limit=6)") - logic.WhileWithBreakConditionTest(6) - testcheck.ok("While With Break Condition Test (6)") - - testcheck.section("Nested While With Multiple BreakPoints (depth=3, width=4)") - logic.NestedWhileWithMultipleBreakPoints(3, 4) - testcheck.ok("Nested While With Multiple BreakPoints (3, 4)") - - testcheck.section("For With Match Case In Loop Test (iterations=9)") - logic.ForWithMatchCaseInLoopTest(9) - testcheck.ok("For With Match Case In Loop Test (9)") - - testcheck.section("Complex Logic With Elif Chains (a=3, b=5, c=7)") - logic.ComplexLogicWithElifChains(3, 5, 7) - testcheck.ok("Complex Logic With Elif Chains (3, 5, 7)") - - testcheck.section("For Range With Step And Condition (n=12, step=2)") - logic.ForRangeWithStepAndCondition(12, 2) - testcheck.ok("For Range With Step And Condition (12, 2)") - - testcheck.section("Match Case With Guard Conditions (value=1)") - logic.MatchCaseWithGuardConditions(1) - testcheck.ok("Match Case With Guard Conditions (1)") - - testcheck.section("While With Multiple Match Cases (iterations=12)") - logic.WhileWithMultipleMatchCases(12) - testcheck.ok("While With Multiple Match Cases (12)") - - testcheck.section("For While Mix With Break And Continue (n=5)") - logic.ForWhileMixWithBreakAndContinue(5) - testcheck.ok("For While Mix With Break And Continue (5)") - - testcheck.section("Complex Case Matching With Ranges (start=0, end=35)") - logic.ComplexCaseMatchingWithRanges(0, 35) - testcheck.ok("Complex Case Matching With Ranges (0, 35)") - - testcheck.section("While With Elif In Elif Chain (limit=7)") - logic.WhileWithElifInElifChain(7) - testcheck.ok("While With Elif In Elif Chain (7)") - - testcheck.section("For With Case NoBreak Nested (inner_limit=4)") - logic.ForWithCaseNoBreakNested(4) - testcheck.ok("For With Case NoBreak Nested (4)") - - testcheck.section("CLASS TESTS") - class_test.TestBasicDataClass() - testcheck.ok("TestBasicDataClass") - class_test.TestPoint3DClass() - testcheck.ok("TestPoint3DClass") - class_test.TestStudentClass() - testcheck.ok("TestStudentClass") - class_test.TestCounterClass() - testcheck.ok("TestCounterClass") - class_test.TestStackAllocation() - testcheck.ok("TestStackAllocation") - class_test.TestHeapAllocation() - testcheck.ok("TestHeapAllocation") - class_test.TestHeapObjectWithInit() - testcheck.ok("TestHeapObjectWithInit") - class_test.TestMultipleStackObjects() - testcheck.ok("TestMultipleStackObjects") - class_test.TestImplicitInitCall() - testcheck.ok("TestImplicitInitCall") - class_test.TestClassWithBitFields() - testcheck.ok("TestClassWithBitFields") - - testcheck.section("ARRAY TESTS") - class_test.TestIntArray() - testcheck.ok("TestIntArray") - class_test.TestFloatArray() - testcheck.ok("TestFloatArray") - class_test.TestCharArray() - testcheck.ok("TestCharArray") - class_test.TestNestedArray() - testcheck.ok("TestNestedArray") - class_test.TestArrayWithStruct() - testcheck.ok("TestArrayWithStruct") - class_test.TestArrayPointer() - testcheck.ok("TestArrayPointer") - class_test.TestDynamicString() - testcheck.ok("TestDynamicString") - - testcheck.section("numpy Correctness Tests") - test_numpy.test_numpy_correct() - - return testcheck.end() diff --git a/Test/TestProject/App/test_numpy.vp b/Test/TestProject/App/test_numpy.vp deleted file mode 100644 index 91cf870..0000000 --- a/Test/TestProject/App/test_numpy.vp +++ /dev/null @@ -1,1087 +0,0 @@ -from stdint import * -import numpy -from stdio import printf -from stdlib import calloc, free -import string -import vipermath -import memhub -import t, c - -# ============================================================ -# Constants -# ============================================================ -EPS: t.CDouble = t.CDouble(1e-9) -EPS_LOOSE: t.CDouble = t.CDouble(1e-5) -SIMD_BLOCK: t.CSizeT = 4 - -# ============================================================ -# Global state -# ============================================================ -arena: t.CUInt8T | t.CPtr = None -pool: memhub.MemPool | t.CPtr = None - -test_passed: t.CInt = 0 -test_failed: t.CInt = 0 - -# ============================================================ -# Global check function -# ============================================================ -def check(name: str, condition: t.CInt, detail: str): - global test_passed, test_failed - if condition: - test_passed += 1 - printf(" [PASS] %s\n", name) - else: - test_failed += 1 - printf(" [FAIL] %s -- %s\n", name, detail if detail else "") - - -# ============================================================ -# Approximate comparison (top-level, uses vipermath.fabs) -# ============================================================ -def approx_eq(a: t.CDouble, b: t.CDouble) -> t.CInt: - d: t.CDouble = a - b - if d < t.CDouble(0.0): - d = t.CDouble(0.0) - d - if d < EPS: - return 1 - return 0 - -def approx_loose(a: t.CDouble, b: t.CDouble) -> t.CInt: - d: t.CDouble = a - b - if d < t.CDouble(0.0): - d = t.CDouble(0.0) - d - if d < EPS_LOOSE: - return 1 - return 0 - - -# ============================================================ -# Section headers -# ============================================================ -def section_header(title: str): - printf("\n+-- %s --+\n", title) - -def section_footer(): - printf("+--------------------------------------------+\n") - - -# ============================================================ -# Utility: quick array creation -# ============================================================ -def vec4(p: memhub.MemPool | t.CPtr, v0: t.CDouble, v1: t.CDouble, v2: t.CDouble, v3: t.CDouble) -> numpy.ndarray | t.CPtr: - a: numpy.ndarray | t.CPtr = numpy.zeros(p, 4) - a.data[0] = v0; a.data[1] = v1; a.data[2] = v2; a.data[3] = v3 - return a - -def vec3(p: memhub.MemPool | t.CPtr, v0: t.CDouble, v1: t.CDouble, v2: t.CDouble) -> numpy.ndarray | t.CPtr: - a: numpy.ndarray | t.CPtr = numpy.zeros(p, 3) - a.data[0] = v0; a.data[1] = v1; a.data[2] = v2 - return a - -def vec2(p: memhub.MemPool | t.CPtr, v0: t.CDouble, v1: t.CDouble) -> numpy.ndarray | t.CPtr: - a: numpy.ndarray | t.CPtr = numpy.zeros(p, 2) - a.data[0] = v0; a.data[1] = v1 - return a - - -# ============================================================ -# 1. Array creation -# ============================================================ -def test_zeros_ones(): - section_header("zeros / ones / full") - - a: numpy.ndarray | t.CPtr = numpy.zeros(pool, 5) - check("zeros not None", a != None, "zeros returned None") - check("zeros size == 5", a.size == 5, "size mismatch") - check("zeros [0]==0", a.data[0] == t.CDouble(0.0), "not zero") - check("zeros [4]==0", a.data[4] == t.CDouble(0.0), "not zero") - - b: numpy.ndarray | t.CPtr = numpy.ones(pool, 4) - check("ones not None", b != None, "ones returned None") - check("ones [0]==1", b.data[0] == t.CDouble(1.0), "not one") - check("ones [3]==1", b.data[3] == t.CDouble(1.0), "not one") - - c: numpy.ndarray | t.CPtr = numpy.full(pool, 3, t.CDouble(7.5)) - check("full not None", c != None, "full returned None") - check("full value", c.data[0] == t.CDouble(7.5), "value mismatch") - - a.delete() - b.delete() - c.delete() - section_footer() - - -def test_arange_linspace(): - section_header("arange / linspace") - - a: numpy.ndarray | t.CPtr = numpy.arange(pool, t.CDouble(0.0), t.CDouble(5.0), t.CDouble(1.0)) - check("arange not None", a != None, "arange returned None") - check("arange size == 5", a.size == 5, "size mismatch") - check("arange [0]==0", approx_eq(a.data[0], t.CDouble(0.0)), "mismatch") - check("arange [4]==4", approx_eq(a.data[4], t.CDouble(4.0)), "mismatch") - - b: numpy.ndarray | t.CPtr = numpy.linspace(pool, t.CDouble(0.0), t.CDouble(1.0), 5) - check("linspace not None", b != None, "linspace returned None") - check("linspace size == 5", b.size == 5, "size mismatch") - check("linspace [0]==0", approx_eq(b.data[0], t.CDouble(0.0)), "mismatch") - check("linspace [4]==1", approx_eq(b.data[4], t.CDouble(1.0)), "mismatch") - - a.delete() - b.delete() - section_footer() - - -def test_eye_diag(): - section_header("eye / diag") - - e: numpy.ndarray | t.CPtr = numpy.eye(pool, 3) - check("eye not None", e != None, "eye returned None") - check("eye ndim == 2", e.ndim == 2, "ndim mismatch") - check("eye [0,0]==1", e.at2d(0, 0) == t.CDouble(1.0), "mismatch") - check("eye [0,1]==0", e.at2d(0, 1) == t.CDouble(0.0), "mismatch") - check("eye [1,1]==1", e.at2d(1, 1) == t.CDouble(1.0), "mismatch") - - vals: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) - d: numpy.ndarray | t.CPtr = numpy.diag(pool, vals) - check("diag not None", d != None, "diag returned None") - check("diag [0,0]==1", d.at2d(0, 0) == t.CDouble(1.0), "mismatch") - check("diag [1,1]==2", d.at2d(1, 1) == t.CDouble(2.0), "mismatch") - check("diag [2,2]==3", d.at2d(2, 2) == t.CDouble(3.0), "mismatch") - - e.delete() - vals.delete() - d.delete() - section_footer() - - -# ============================================================ -# 2. Methods -# ============================================================ -def test_sum_mean_min_max(): - section_header("sum / mean / min / max / argmax / argmin") - - a: numpy.ndarray | t.CPtr = numpy.arange(pool, t.CDouble(1.0), t.CDouble(6.0), t.CDouble(1.0)) - check("sum == 15", approx_eq(a.sum(), t.CDouble(15.0)), "mismatch") - check("mean == 3", approx_eq(a.mean(), t.CDouble(3.0)), "mismatch") - check("min == 1", approx_eq(a.min(), t.CDouble(1.0)), "mismatch") - check("max == 5", approx_eq(a.max(), t.CDouble(5.0)), "mismatch") - check("argmax == 4", a.argmax() == 4, "mismatch") - check("argmin == 0", a.argmin() == 0, "mismatch") - - a.delete() - section_footer() - - -def test_fill_copy(): - section_header("fill / copy") - - a: numpy.ndarray | t.CPtr = numpy.zeros(pool, 3) - a.fill(t.CDouble(9.0)) - check("fill [0]==9", a.data[0] == t.CDouble(9.0), "mismatch") - check("fill [2]==9", a.data[2] == t.CDouble(9.0), "mismatch") - - b: numpy.ndarray | t.CPtr = a.copy() - check("copy not None", b != None, "copy returned None") - check("copy [0]==9", b.data[0] == t.CDouble(9.0), "mismatch") - - b.data[0] = t.CDouble(0.0) - check("copy is independent", a.data[0] == t.CDouble(9.0), "copy not independent") - - a.delete() - b.delete() - section_footer() - - -# ============================================================ -# 3. Operator overloading -# ============================================================ -def test_add_sub_mul_div(): - section_header("__add__ / __sub__ / __mul__ / __truediv__") - - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) - b: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(4.0), t.CDouble(5.0), t.CDouble(6.0)) - - c_add: numpy.ndarray | t.CPtr = a + b - check("a+b not None", c_add != None, "add returned None") - check("a+b [0]==5", c_add.data[0] == t.CDouble(5.0), "mismatch") - check("a+b [2]==9", c_add.data[2] == t.CDouble(9.0), "mismatch") - - c_sub: numpy.ndarray | t.CPtr = a - b - check("a-b [0]==-3", c_sub.data[0] == t.CDouble(-3.0), "mismatch") - - c_mul: numpy.ndarray | t.CPtr = a * b - check("a*b [1]==10", c_mul.data[1] == t.CDouble(10.0), "mismatch") - - c_div: numpy.ndarray | t.CPtr = b / a - check("b/a [0]==4", c_div.data[0] == t.CDouble(4.0), "mismatch") - check("b/a [2]==2", c_div.data[2] == t.CDouble(2.0), "mismatch") - - a.delete() - b.delete() - c_add.delete() - c_sub.delete() - c_mul.delete() - c_div.delete() - section_footer() - - -def test_neg(): - section_header("__neg__") - - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(-2.0), t.CDouble(3.0)) - neg_a: numpy.ndarray | t.CPtr = -a - check("neg not None", neg_a != None, "neg returned None") - check("neg [0]==-1", neg_a.data[0] == t.CDouble(-1.0), "mismatch") - check("neg [1]==2", neg_a.data[1] == t.CDouble(2.0), "mismatch") - - a.delete() - neg_a.delete() - section_footer() - - -def test_len(): - section_header("__len__") - - a: numpy.ndarray | t.CPtr = numpy.zeros(pool, 10) - check("len == 10", len(a) == 10, "mismatch") - - a.delete() - section_footer() - - -# ============================================================ -# 4. Scalar operations -# ============================================================ -def test_scalar_ops(): - section_header("add_scalar / mul_scalar / sub_scalar / div_scalar") - - a: numpy.ndarray | t.CPtr = numpy.ones(pool, 3) - - r1: numpy.ndarray | t.CPtr = numpy.add_scalar(a, t.CDouble(2.0)) - check("add_scalar [0]==3", r1.data[0] == t.CDouble(3.0), "mismatch") - - r2: numpy.ndarray | t.CPtr = numpy.mul_scalar(a, t.CDouble(5.0)) - check("mul_scalar [0]==5", r2.data[0] == t.CDouble(5.0), "mismatch") - - r3: numpy.ndarray | t.CPtr = numpy.sub_scalar(a, t.CDouble(0.5)) - check("sub_scalar [0]==0.5", r3.data[0] == t.CDouble(0.5), "mismatch") - - r4: numpy.ndarray | t.CPtr = numpy.div_scalar(a, t.CDouble(2.0)) - check("div_scalar [0]==0.5", r4.data[0] == t.CDouble(0.5), "mismatch") - - a.delete() - r1.delete() - r2.delete() - r3.delete() - r4.delete() - section_footer() - - -# ============================================================ -# 5. Math functions -# ============================================================ -def test_math_funcs(): - section_header("np_abs / np_sqrt / np_pow") - - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(4.0), t.CDouble(9.0)) - - r_sqrt: numpy.ndarray | t.CPtr = numpy.np_sqrt(a) - check("sqrt [0]==1", approx_eq(r_sqrt.data[0], t.CDouble(1.0)), "mismatch") - check("sqrt [1]==2", approx_eq(r_sqrt.data[1], t.CDouble(2.0)), "mismatch") - check("sqrt [2]==3", approx_eq(r_sqrt.data[2], t.CDouble(3.0)), "mismatch") - - b: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(-1.0), t.CDouble(-4.0), t.CDouble(9.0)) - r_abs: numpy.ndarray | t.CPtr = numpy.np_abs(b) - check("abs [0]==1", approx_eq(r_abs.data[0], t.CDouble(1.0)), "mismatch") - check("abs [1]==4", approx_eq(r_abs.data[1], t.CDouble(4.0)), "mismatch") - - c: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) - r_pow: numpy.ndarray | t.CPtr = numpy.np_pow(c, t.CDouble(2.0)) - check("pow [0]==1", approx_eq(r_pow.data[0], t.CDouble(1.0)), "mismatch") - check("pow [1]==4", approx_eq(r_pow.data[1], t.CDouble(4.0)), "mismatch") - check("pow [2]==9", approx_eq(r_pow.data[2], t.CDouble(9.0)), "mismatch") - - a.delete() - b.delete() - c.delete() - r_sqrt.delete() - r_abs.delete() - r_pow.delete() - section_footer() - - -# ============================================================ -# 6. Matrix operations -# ============================================================ -def test_matmul(): - section_header("matmul") - - # [1,2;3,4] x [5,6;7,8] = [19,22;43,50] - a: numpy.ndarray | t.CPtr = numpy.empty2d(pool, 2, 2) - a.set2d(0, 0, t.CDouble(1.0)); a.set2d(0, 1, t.CDouble(2.0)) - a.set2d(1, 0, t.CDouble(3.0)); a.set2d(1, 1, t.CDouble(4.0)) - - b: numpy.ndarray | t.CPtr = numpy.empty2d(pool, 2, 2) - b.set2d(0, 0, t.CDouble(5.0)); b.set2d(0, 1, t.CDouble(6.0)) - b.set2d(1, 0, t.CDouble(7.0)); b.set2d(1, 1, t.CDouble(8.0)) - - c: numpy.ndarray | t.CPtr = numpy.matmul(a, b) - check("matmul not None", c != None, "matmul returned None") - check("matmul [0,0]==19", c.at2d(0, 0) == t.CDouble(19.0), "mismatch") - check("matmul [0,1]==22", c.at2d(0, 1) == t.CDouble(22.0), "mismatch") - check("matmul [1,0]==43", c.at2d(1, 0) == t.CDouble(43.0), "mismatch") - check("matmul [1,1]==50", c.at2d(1, 1) == t.CDouble(50.0), "mismatch") - - a.delete() - b.delete() - c.delete() - section_footer() - - -def test_dot(): - section_header("dot / dot_product") - - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) - b: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(4.0), t.CDouble(5.0), t.CDouble(6.0)) - - d: t.CDouble = a.dot(b) - check("dot == 32", approx_eq(d, t.CDouble(32.0)), "mismatch") - - d2: t.CDouble = numpy.dot_product(a, b) - check("dot_product == 32", approx_eq(d2, t.CDouble(32.0)), "mismatch") - - a.delete() - b.delete() - section_footer() - - -def test_transpose(): - section_header("T (transpose)") - - a: numpy.ndarray | t.CPtr = numpy.empty2d(pool, 2, 3) - a.set2d(0, 0, t.CDouble(1.0)); a.set2d(0, 1, t.CDouble(2.0)); a.set2d(0, 2, t.CDouble(3.0)) - a.set2d(1, 0, t.CDouble(4.0)); a.set2d(1, 1, t.CDouble(5.0)); a.set2d(1, 2, t.CDouble(6.0)) - - at: numpy.ndarray | t.CPtr = a.T() - check("T not None", at != None, "T returned None") - check("T shape[0]==3", at.shape[0] == 3, "shape mismatch") - check("T shape[1]==2", at.shape[1] == 2, "shape mismatch") - check("T [0,0]==1", at.at2d(0, 0) == t.CDouble(1.0), "mismatch") - check("T [0,1]==4", at.at2d(0, 1) == t.CDouble(4.0), "mismatch") - check("T [1,0]==2", at.at2d(1, 0) == t.CDouble(2.0), "mismatch") - - a.delete() - at.delete() - section_footer() - - -# ============================================================ -# 7. Utility -# ============================================================ -def test_var_std_norm(): - section_header("var / std / norm") - - # [2,4,4,4,5,5,7,9] mean=5, var=4, std=2 - a: numpy.ndarray | t.CPtr = numpy.zeros(pool, 8) - a.data[0] = t.CDouble(2.0); a.data[1] = t.CDouble(4.0) - a.data[2] = t.CDouble(4.0); a.data[3] = t.CDouble(4.0) - a.data[4] = t.CDouble(5.0); a.data[5] = t.CDouble(5.0) - a.data[6] = t.CDouble(7.0); a.data[7] = t.CDouble(9.0) - - v: t.CDouble = numpy.var(a) - printf(" var = %.6f (expect 4.0)\n", v) - check("var ~= 4", approx_eq(v, t.CDouble(4.0)), "mismatch") - - s: t.CDouble = numpy.std(a) - printf(" std = %.6f (expect 2.0)\n", s) - check("std ~= 2", approx_eq(s, t.CDouble(2.0)), "mismatch") - - b: numpy.ndarray | t.CPtr = vec2(pool, t.CDouble(3.0), t.CDouble(4.0)) - n: t.CDouble = numpy.norm(b) - printf(" norm = %.6f (expect 5.0)\n", n) - check("norm ~= 5", approx_eq(n, t.CDouble(5.0)), "mismatch") - - a.delete() - b.delete() - section_footer() - - -def test_clip_concatenate(): - section_header("clip / concatenate") - - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(5.0), t.CDouble(10.0)) - r: numpy.ndarray | t.CPtr = numpy.clip(a, t.CDouble(2.0), t.CDouble(8.0)) - check("clip [0]==2", r.data[0] == t.CDouble(2.0), "mismatch") - check("clip [1]==5", r.data[1] == t.CDouble(5.0), "mismatch") - check("clip [2]==8", r.data[2] == t.CDouble(8.0), "mismatch") - - b: numpy.ndarray | t.CPtr = vec2(pool, t.CDouble(1.0), t.CDouble(2.0)) - c: numpy.ndarray | t.CPtr = vec2(pool, t.CDouble(3.0), t.CDouble(4.0)) - cat: numpy.ndarray | t.CPtr = numpy.concatenate(b, c) - check("concatenate not None", cat != None, "concatenate returned None") - check("concatenate size == 4", cat.size == 4, "size mismatch") - check("concatenate [0]==1", cat.data[0] == t.CDouble(1.0), "mismatch") - check("concatenate [3]==4", cat.data[3] == t.CDouble(4.0), "mismatch") - - a.delete() - r.delete() - b.delete() - c.delete() - cat.delete() - section_footer() - - -def test_sort_reverse(): - section_header("sort_arr / reverse") - - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(3.0), t.CDouble(1.0), t.CDouble(2.0)) - s: numpy.ndarray | t.CPtr = numpy.sort_arr(a) - check("sort not None", s != None, "sort returned None") - check("sort [0]==1", s.data[0] == t.CDouble(1.0), "mismatch") - check("sort [1]==2", s.data[1] == t.CDouble(2.0), "mismatch") - check("sort [2]==3", s.data[2] == t.CDouble(3.0), "mismatch") - - r: numpy.ndarray | t.CPtr = numpy.reverse(a) - check("reverse not None", r != None, "reverse returned None") - check("reverse [0]==2", r.data[0] == t.CDouble(2.0), "mismatch") - check("reverse [1]==1", r.data[1] == t.CDouble(1.0), "mismatch") - check("reverse [2]==3", r.data[2] == t.CDouble(3.0), "mismatch") - - a.delete() - s.delete() - r.delete() - section_footer() - - -def test_print_arr(): - section_header("print_arr") - - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) - printf(" 1D array: ") - a.print_arr() - - b: numpy.ndarray | t.CPtr = numpy.eye(pool, 3) - printf(" 2D eye(3):\n") - b.print_arr() - - a.delete() - b.delete() - section_footer() - - -# ============================================================ -# 8. Additional operator overloading -# ============================================================ -def test_floordiv_mod(): - section_header("__floordiv__ / __mod__") - - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(7.0), t.CDouble(10.0), t.CDouble(15.0)) - b: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(2.0), t.CDouble(3.0), t.CDouble(4.0)) - - c_fd: numpy.ndarray | t.CPtr = a // b - check("7//2==3", c_fd.data[0] == t.CDouble(3.0), "mismatch") - check("10//3==3", c_fd.data[1] == t.CDouble(3.0), "mismatch") - check("15//4==3", c_fd.data[2] == t.CDouble(3.0), "mismatch") - - c_mod: numpy.ndarray | t.CPtr = a % b - check("7%%2==1", c_mod.data[0] == t.CDouble(1.0), "mismatch") - check("10%%3==1", c_mod.data[1] == t.CDouble(1.0), "mismatch") - check("15%%4==3", c_mod.data[2] == t.CDouble(3.0), "mismatch") - - a.delete() - b.delete() - c_fd.delete() - c_mod.delete() - section_footer() - - -# ============================================================ -# 9. Additional math functions -# ============================================================ -def test_additional_math(): - section_header("np_log10 / np_log2 / np_floor / np_ceil / np_round / np_sign") - - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(10.0), t.CDouble(100.0), t.CDouble(1000.0)) - r_log10: numpy.ndarray | t.CPtr = numpy.np_log10(a) - check("log10(10)~=1", approx_loose(r_log10.data[0], t.CDouble(1.0)), "mismatch") - check("log10(100)~=2", approx_loose(r_log10.data[1], t.CDouble(2.0)), "mismatch") - - b: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(2.0), t.CDouble(4.0), t.CDouble(8.0)) - r_log2: numpy.ndarray | t.CPtr = numpy.np_log2(b) - check("log2(2)~=1", approx_loose(r_log2.data[0], t.CDouble(1.0)), "mismatch") - check("log2(4)~=2", approx_loose(r_log2.data[1], t.CDouble(2.0)), "mismatch") - - c: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.5), t.CDouble(2.7), t.CDouble(-1.3)) - r_floor: numpy.ndarray | t.CPtr = numpy.np_floor(c) - check("floor(1.5)==1", r_floor.data[0] == t.CDouble(1.0), "mismatch") - check("floor(2.7)==2", r_floor.data[1] == t.CDouble(2.0), "mismatch") - check("floor(-1.3)==-2", r_floor.data[2] == t.CDouble(-2.0), "mismatch") - - r_ceil: numpy.ndarray | t.CPtr = numpy.np_ceil(c) - check("ceil(1.5)==2", r_ceil.data[0] == t.CDouble(2.0), "mismatch") - check("ceil(2.7)==3", r_ceil.data[1] == t.CDouble(3.0), "mismatch") - check("ceil(-1.3)==-1", r_ceil.data[2] == t.CDouble(-1.0), "mismatch") - - d: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.4), t.CDouble(2.5), t.CDouble(3.6)) - r_round: numpy.ndarray | t.CPtr = numpy.np_round(d) - check("round(1.4)==1", r_round.data[0] == t.CDouble(1.0), "mismatch") - check("round(3.6)==4", r_round.data[2] == t.CDouble(4.0), "mismatch") - - e: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4) - e.data[0] = t.CDouble(-3.0); e.data[1] = t.CDouble(0.0); e.data[2] = t.CDouble(5.0); e.data[3] = t.CDouble(-0.1) - r_sign: numpy.ndarray | t.CPtr = numpy.np_sign(e) - check("sign(-3)==-1", r_sign.data[0] == t.CDouble(-1.0), "mismatch") - check("sign(0)==0", r_sign.data[1] == t.CDouble(0.0), "mismatch") - check("sign(5)==1", r_sign.data[2] == t.CDouble(1.0), "mismatch") - - a.delete() - b.delete() - c.delete() - d.delete() - e.delete() - r_log10.delete() - r_log2.delete() - r_floor.delete() - r_ceil.delete() - r_round.delete() - r_sign.delete() - section_footer() - - -def test_trig_hyperbolic(): - section_header("np_tanh / np_sinh / np_cosh / np_arcsin / np_arccos / np_arctan") - - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(0.0), t.CDouble(1.0), t.CDouble(-1.0)) - - r_tanh: numpy.ndarray | t.CPtr = numpy.np_tanh(a) - check("tanh(0)~=0", approx_loose(r_tanh.data[0], t.CDouble(0.0)), "mismatch") - - r_sinh: numpy.ndarray | t.CPtr = numpy.np_sinh(a) - check("sinh(0)~=0", approx_loose(r_sinh.data[0], t.CDouble(0.0)), "mismatch") - - r_cosh: numpy.ndarray | t.CPtr = numpy.np_cosh(a) - check("cosh(0)~=1", approx_loose(r_cosh.data[0], t.CDouble(1.0)), "mismatch") - - b: numpy.ndarray | t.CPtr = vec2(pool, t.CDouble(0.0), t.CDouble(0.5)) - r_asin: numpy.ndarray | t.CPtr = numpy.np_arcsin(b) - check("arcsin(0)~=0", approx_loose(r_asin.data[0], t.CDouble(0.0)), "mismatch") - - r_acos: numpy.ndarray | t.CPtr = numpy.np_arccos(b) - check("arccos(0)~=pi/2", approx_loose(r_acos.data[0], t.CDouble(1.5707963)), "mismatch") - - r_atan: numpy.ndarray | t.CPtr = numpy.np_arctan(b) - check("arctan(0)~=0", approx_loose(r_atan.data[0], t.CDouble(0.0)), "mismatch") - - a.delete() - b.delete() - r_tanh.delete() - r_sinh.delete() - r_cosh.delete() - r_asin.delete() - r_acos.delete() - r_atan.delete() - section_footer() - - -def test_degrees_radians(): - section_header("np_degrees / np_radians") - - a: numpy.ndarray | t.CPtr = vec2(pool, t.CDouble(0.0), t.CDouble(1.5707963267948966)) - - r_deg: numpy.ndarray | t.CPtr = numpy.np_degrees(a) - check("deg(0)~=0", approx_loose(r_deg.data[0], t.CDouble(0.0)), "mismatch") - check("deg(pi/2)~=90", approx_loose(r_deg.data[1], t.CDouble(90.0)), "mismatch") - - b: numpy.ndarray | t.CPtr = vec2(pool, t.CDouble(0.0), t.CDouble(90.0)) - r_rad: numpy.ndarray | t.CPtr = numpy.np_radians(b) - check("rad(0)~=0", approx_loose(r_rad.data[0], t.CDouble(0.0)), "mismatch") - check("rad(90)~=pi/2", approx_loose(r_rad.data[1], t.CDouble(1.5707963)), "mismatch") - - a.delete() - b.delete() - r_deg.delete() - r_rad.delete() - section_footer() - - -# ============================================================ -# 10. Additional array operations -# ============================================================ -def test_cumsum_diff(): - section_header("cumsum / diff") - - a: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4) - a.data[0] = t.CDouble(1.0); a.data[1] = t.CDouble(2.0); a.data[2] = t.CDouble(3.0); a.data[3] = t.CDouble(4.0) - - r_cs: numpy.ndarray | t.CPtr = numpy.cumsum(a) - check("cumsum not None", r_cs != None, "cumsum returned None") - check("cumsum[0]==1", r_cs.data[0] == t.CDouble(1.0), "mismatch") - check("cumsum[1]==3", r_cs.data[1] == t.CDouble(3.0), "mismatch") - check("cumsum[2]==6", r_cs.data[2] == t.CDouble(6.0), "mismatch") - check("cumsum[3]==10", r_cs.data[3] == t.CDouble(10.0), "mismatch") - - r_diff: numpy.ndarray | t.CPtr = numpy.diff(a) - check("diff not None", r_diff != None, "diff returned None") - check("diff size==3", r_diff.size == 3, "size mismatch") - check("diff[0]==1", r_diff.data[0] == t.CDouble(1.0), "mismatch") - check("diff[2]==1", r_diff.data[2] == t.CDouble(1.0), "mismatch") - - a.delete() - r_cs.delete() - r_diff.delete() - section_footer() - - -def test_max_min_where(): - section_header("np_maximum / np_minimum / np_where") - - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(5.0), t.CDouble(3.0)) - b: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(4.0), t.CDouble(2.0), t.CDouble(6.0)) - - r_max: numpy.ndarray | t.CPtr = numpy.np_maximum(a, b) - check("maximum[0]==4", r_max.data[0] == t.CDouble(4.0), "mismatch") - check("maximum[1]==5", r_max.data[1] == t.CDouble(5.0), "mismatch") - check("maximum[2]==6", r_max.data[2] == t.CDouble(6.0), "mismatch") - - r_min: numpy.ndarray | t.CPtr = numpy.np_minimum(a, b) - check("minimum[0]==1", r_min.data[0] == t.CDouble(1.0), "mismatch") - check("minimum[1]==2", r_min.data[1] == t.CDouble(2.0), "mismatch") - check("minimum[2]==3", r_min.data[2] == t.CDouble(3.0), "mismatch") - - # where: cond > 0 ? a : b - cond: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(0.0), t.CDouble(1.0), t.CDouble(0.0)) - r_where: numpy.ndarray | t.CPtr = numpy.np_where(cond, a, b) - check("where[0]==4", r_where.data[0] == t.CDouble(4.0), "mismatch") - check("where[1]==5", r_where.data[1] == t.CDouble(5.0), "mismatch") - check("where[2]==6", r_where.data[2] == t.CDouble(6.0), "mismatch") - - a.delete() - b.delete() - cond.delete() - r_max.delete() - r_min.delete() - r_where.delete() - section_footer() - - -def test_flatten_trace(): - section_header("flatten / trace") - - a: numpy.ndarray | t.CPtr = numpy.empty2d(pool, 2, 3) - a.set2d(0, 0, t.CDouble(1.0)); a.set2d(0, 1, t.CDouble(2.0)); a.set2d(0, 2, t.CDouble(3.0)) - a.set2d(1, 0, t.CDouble(4.0)); a.set2d(1, 1, t.CDouble(5.0)); a.set2d(1, 2, t.CDouble(6.0)) - - r_flat: numpy.ndarray | t.CPtr = numpy.flatten(a) - check("flatten not None", r_flat != None, "flatten returned None") - check("flatten ndim==1", r_flat.ndim == 1, "ndim mismatch") - check("flatten size==6", r_flat.size == 6, "size mismatch") - check("flatten[0]==1", r_flat.data[0] == t.CDouble(1.0), "mismatch") - - # trace of [[1,2],[3,4]] = 1+4 = 5 - b: numpy.ndarray | t.CPtr = numpy.empty2d(pool, 2, 2) - b.set2d(0, 0, t.CDouble(1.0)); b.set2d(0, 1, t.CDouble(2.0)) - b.set2d(1, 0, t.CDouble(3.0)); b.set2d(1, 1, t.CDouble(4.0)) - tr: t.CDouble = numpy.trace(b) - check("trace == 5", tr == t.CDouble(5.0), "mismatch") - - a.delete() - r_flat.delete() - b.delete() - section_footer() - - -def test_outer(): - section_header("outer") - - a: numpy.ndarray | t.CPtr = vec2(pool, t.CDouble(1.0), t.CDouble(2.0)) - b: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(3.0), t.CDouble(4.0), t.CDouble(5.0)) - - r: numpy.ndarray | t.CPtr = numpy.outer(a, b) - check("outer not None", r != None, "outer returned None") - check("outer ndim==2", r.ndim == 2, "ndim mismatch") - check("outer[0,0]==3", r.at2d(0, 0) == t.CDouble(3.0), "mismatch") - check("outer[0,1]==4", r.at2d(0, 1) == t.CDouble(4.0), "mismatch") - check("outer[1,0]==6", r.at2d(1, 0) == t.CDouble(6.0), "mismatch") - check("outer[1,2]==10", r.at2d(1, 2) == t.CDouble(10.0), "mismatch") - - a.delete() - b.delete() - r.delete() - section_footer() - - -# ============================================================ -# 11. Boolean / comparison -# ============================================================ -def test_bool_comparison(): - section_header("np_all / np_any / np_count_nonzero / np_equal / np_less / np_greater") - - a: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4) - a.data[0] = t.CDouble(1.0); a.data[1] = t.CDouble(0.0); a.data[2] = t.CDouble(3.0); a.data[3] = t.CDouble(0.0) - check("count_nonzero==2", numpy.np_count_nonzero(a) == 2, "mismatch") - check("any==1", numpy.np_any(a) == 1, "mismatch") - - b: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) - check("all(1,2,3)==1", numpy.np_all(b) == 1, "mismatch") - - c: numpy.ndarray | t.CPtr = numpy.zeros(pool, 3) - check("all(0,0,0)==0", numpy.np_all(c) == 0, "mismatch") - check("any(0,0,0)==0", numpy.np_any(c) == 0, "mismatch") - - d: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) - e: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(0.0), t.CDouble(4.0)) - - r_eq: numpy.ndarray | t.CPtr = numpy.np_equal(d, e) - check("equal[0]==1", r_eq.data[0] == t.CDouble(1.0), "mismatch") - check("equal[1]==0", r_eq.data[1] == t.CDouble(0.0), "mismatch") - - r_lt: numpy.ndarray | t.CPtr = numpy.np_less(d, e) - check("less[2]==1", r_lt.data[2] == t.CDouble(1.0), "mismatch") - check("less[0]==0", r_lt.data[0] == t.CDouble(0.0), "mismatch") - - r_gt: numpy.ndarray | t.CPtr = numpy.np_greater(d, e) - check("greater[1]==1", r_gt.data[1] == t.CDouble(1.0), "mismatch") - - a.delete() - b.delete() - c.delete() - d.delete() - e.delete() - r_eq.delete() - r_lt.delete() - r_gt.delete() - section_footer() - - -# ============================================================ -# 12. Linear algebra -# ============================================================ -def test_linalg(): - section_header("det2x2 / inv2x2 / cross3 / prod / median / percentile") - - # det2x2: [[1,2],[3,4]] -> 1*4-2*3 = -2 - a: numpy.ndarray | t.CPtr = numpy.empty2d(pool, 2, 2) - a.set2d(0, 0, t.CDouble(1.0)); a.set2d(0, 1, t.CDouble(2.0)) - a.set2d(1, 0, t.CDouble(3.0)); a.set2d(1, 1, t.CDouble(4.0)) - d: t.CDouble = numpy.det2x2(a) - check("det2x2==-2", d == t.CDouble(-2.0), "mismatch") - - # inv2x2 of [[1,2],[3,4]] - inv: numpy.ndarray | t.CPtr = numpy.inv2x2(a) - check("inv2x2 not None", inv != None, "inv2x2 returned None") - check("inv[0,0]==-2", approx_eq(inv.at2d(0, 0), t.CDouble(-2.0)), "mismatch") - check("inv[0,1]==1", approx_eq(inv.at2d(0, 1), t.CDouble(1.0)), "mismatch") - - # cross3: [1,0,0] x [0,1,0] = [0,0,1] - x: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(0.0), t.CDouble(0.0)) - y: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(0.0), t.CDouble(1.0), t.CDouble(0.0)) - cr: numpy.ndarray | t.CPtr = numpy.cross3(x, y) - check("cross not None", cr != None, "cross returned None") - check("cross[2]==1", cr.data[2] == t.CDouble(1.0), "mismatch") - - # prod - p: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4) - p.data[0] = t.CDouble(1.0); p.data[1] = t.CDouble(2.0); p.data[2] = t.CDouble(3.0); p.data[3] = t.CDouble(4.0) - check("prod==24", numpy.prod(p) == t.CDouble(24.0), "mismatch") - - # median - m: numpy.ndarray | t.CPtr = numpy.zeros(pool, 5) - m.data[0] = t.CDouble(3.0); m.data[1] = t.CDouble(1.0); m.data[2] = t.CDouble(2.0) - m.data[3] = t.CDouble(5.0); m.data[4] = t.CDouble(4.0) - check("median==3", numpy.median(m) == t.CDouble(3.0), "mismatch") - - # percentile - check("p50==3", approx_eq(numpy.percentile(m, t.CDouble(50.0)), t.CDouble(3.0)), "mismatch") - - a.delete() - inv.delete() - x.delete() - y.delete() - cr.delete() - p.delete() - m.delete() - section_footer() - - -# ============================================================ -# 13. Additional creation / constants -# ============================================================ -def test_additional_creation(): - section_header("full2d / zeros_like / ones_like / arange1 / constants") - - f: numpy.ndarray | t.CPtr = numpy.full2d(pool, 2, 3, t.CDouble(7.0)) - check("full2d not None", f != None, "full2d returned None") - check("full2d ndim==2", f.ndim == 2, "ndim mismatch") - check("full2d[0,0]==7", f.at2d(0, 0) == t.CDouble(7.0), "mismatch") - check("full2d[1,2]==7", f.at2d(1, 2) == t.CDouble(7.0), "mismatch") - - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) - zl: numpy.ndarray | t.CPtr = numpy.zeros_like(a) - check("zeros_like not None", zl != None, "returned None") - check("zeros_like size==3", zl.size == 3, "size mismatch") - check("zeros_like[0]==0", zl.data[0] == t.CDouble(0.0), "mismatch") - - ol: numpy.ndarray | t.CPtr = numpy.ones_like(a) - check("ones_like not None", ol != None, "returned None") - check("ones_like[0]==1", ol.data[0] == t.CDouble(1.0), "mismatch") - - ar: numpy.ndarray | t.CPtr = numpy.arange1(pool, t.CDouble(4.0)) - check("arange1 not None", ar != None, "returned None") - check("arange1 size==4", ar.size == 4, "size mismatch") - check("arange1[0]==0", ar.data[0] == t.CDouble(0.0), "mismatch") - check("arange1[3]==3", ar.data[3] == t.CDouble(3.0), "mismatch") - - # Constants - check("pi ~= 3.14", approx_loose(numpy.pi, t.CDouble(3.14159265)), "mismatch") - check("e ~= 2.71", approx_loose(numpy.e, t.CDouble(2.71828182)), "mismatch") - - f.delete() - a.delete() - zl.delete() - ol.delete() - ar.delete() - section_footer() - - -# ============================================================ -# 14. Interpolation -# ============================================================ -def test_interp(): - section_header("np_interp") - - xp: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(0.0), t.CDouble(1.0), t.CDouble(2.0)) - fp: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(0.0), t.CDouble(10.0), t.CDouble(20.0)) - - v: t.CDouble = numpy.np_interp(t.CDouble(0.5), xp, fp) - check("interp(0.5)==5", approx_eq(v, t.CDouble(5.0)), "mismatch") - - v2: t.CDouble = numpy.np_interp(t.CDouble(1.5), xp, fp) - check("interp(1.5)==15", approx_eq(v2, t.CDouble(15.0)), "mismatch") - - v3: t.CDouble = numpy.np_interp(t.CDouble(-1.0), xp, fp) - check("interp(-1)==0", approx_eq(v3, t.CDouble(0.0)), "mismatch") - - v4: t.CDouble = numpy.np_interp(t.CDouble(3.0), xp, fp) - check("interp(3)==20", approx_eq(v4, t.CDouble(20.0)), "mismatch") - - xp.delete() - fp.delete() - section_footer() - - -# ============================================================ -# 15. Edge / boundary / exception tests -# ============================================================ -def test_numpy_edge(): - section_header("edge: size=0 / size=1 / non-SIMD-block / negative / div-zero") - - # size=0: pool.alloc(0) returns None, so zeros(0) returns None (expected) - a0: numpy.ndarray | t.CPtr = numpy.zeros(pool, 0) - check("zeros(0) returns None", a0 == None, "expected None for size=0") - - # size=1 - a1: numpy.ndarray | t.CPtr = numpy.zeros(pool, 1) - check("zeros(1) not None", a1 != None, "returned None") - check("zeros(1) size==1", a1.size == 1, "size mismatch") - check("zeros(1) [0]==0", a1.data[0] == t.CDouble(0.0), "mismatch") - a1.delete() - - # non-SIMD-block sizes (1,2,3,5,6,7) - a5: numpy.ndarray | t.CPtr = numpy.arange(pool, t.CDouble(0.0), t.CDouble(5.0), t.CDouble(1.0)) - check("arange(5) size==5", a5.size == 5, "size mismatch") - check("arange(5) sum==10", approx_eq(a5.sum(), t.CDouble(10.0)), "mismatch") - a5.delete() - - a6: numpy.ndarray | t.CPtr = numpy.arange(pool, t.CDouble(0.0), t.CDouble(6.0), t.CDouble(1.0)) - check("arange(6) sum==15", approx_eq(a6.sum(), t.CDouble(15.0)), "mismatch") - a6.delete() - - a7: numpy.ndarray | t.CPtr = numpy.arange(pool, t.CDouble(0.0), t.CDouble(7.0), t.CDouble(1.0)) - check("arange(7) sum==21", approx_eq(a7.sum(), t.CDouble(21.0)), "mismatch") - a7.delete() - - # negative values in sqrt - neg_arr: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(-1.0), t.CDouble(0.0), t.CDouble(4.0)) - r_sqrt_neg: numpy.ndarray | t.CPtr = numpy.np_sqrt(neg_arr) - check("sqrt(neg) not None", r_sqrt_neg != None, "returned None") - # sqrt(4)=2, sqrt(0)=0; sqrt(-1) is NaN (implementation-defined) - check("sqrt(4)==2", approx_eq(r_sqrt_neg.data[2], t.CDouble(2.0)), "mismatch") - neg_arr.delete() - r_sqrt_neg.delete() - - # div-by-zero: b/a where a has zeros - za: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(0.0), t.CDouble(2.0), t.CDouble(0.0)) - zb: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(6.0), t.CDouble(4.0), t.CDouble(8.0)) - r_divz: numpy.ndarray | t.CPtr = za / zb - check("0/6==0", r_divz.data[0] == t.CDouble(0.0), "mismatch") - check("2/4==0.5", r_divz.data[1] == t.CDouble(0.5), "mismatch") - za.delete() - zb.delete() - r_divz.delete() - - # large array (non-aligned, non-SIMD-block) - big: numpy.ndarray | t.CPtr = numpy.zeros(pool, 1000) - check("zeros(1000) not None", big != None, "returned None") - check("zeros(1000) size==1000", big.size == 1000, "size mismatch") - big.delete() - - section_footer() - - -# ============================================================ -# 16. Performance benchmark -# ============================================================ -def bench_numpy_perf(): - section_header("Benchmark: numpy ops") - - N: t.CSizeT = 10000 - ITERS: t.CInt = 5 - - a: numpy.ndarray | t.CPtr = numpy.zeros(pool, N) - b: numpy.ndarray | t.CPtr = numpy.zeros(pool, N) - i: t.CSizeT = 0 - while i < N: - a.data[i] = t.CDouble(1.0) - b.data[i] = t.CDouble(2.0) - i += 1 - - # add benchmark - t0: t.CDouble = c.Timer() - j: t.CInt = 0 - while j < ITERS: - r: numpy.ndarray | t.CPtr = a + b - r.delete() - j += 1 - t1: t.CDouble = c.Timer() - printf(" ADD: %.1f ms\n", (t1 - t0) * t.CDouble(1000.0)) - - # mul benchmark - t0 = c.Timer() - j = 0 - while j < ITERS: - r2: numpy.ndarray | t.CPtr = a * b - r2.delete() - j += 1 - t1 = c.Timer() - printf(" MUL: %.1f ms\n", (t1 - t0) * t.CDouble(1000.0)) - - # sqrt benchmark - t0 = c.Timer() - j = 0 - while j < ITERS: - r3: numpy.ndarray | t.CPtr = numpy.np_sqrt(a) - r3.delete() - j += 1 - t1 = c.Timer() - printf(" SQRT: %.1f ms\n", (t1 - t0) * t.CDouble(1000.0)) - - a.delete() - b.delete() - section_footer() - - -# ============================================================ -# Entry points -# ============================================================ -def test_numpy_correct() -> t.CInt: - global arena, pool, test_passed, test_failed - - arena = calloc(2 * 1024 * 1024, 1) - pool = memhub.MemPool(arena, 2 * 1024 * 1024) - - test_passed = 0 - test_failed = 0 - - printf("==============================================\n") - printf(" numpy Correctness Tests\n") - printf("==============================================\n") - - test_zeros_ones() - test_arange_linspace() - test_eye_diag() - test_sum_mean_min_max() - test_fill_copy() - test_add_sub_mul_div() - test_neg() - test_len() - test_scalar_ops() - test_math_funcs() - test_matmul() - test_dot() - test_transpose() - test_var_std_norm() - test_clip_concatenate() - test_sort_reverse() - test_print_arr() - test_floordiv_mod() - test_additional_math() - test_trig_hyperbolic() - test_degrees_radians() - test_cumsum_diff() - test_max_min_where() - test_flatten_trace() - test_outer() - test_bool_comparison() - test_linalg() - test_additional_creation() - test_interp() - - printf("\n==============================================\n") - printf(" Correctness: %d passed, %d failed\n", test_passed, test_failed) - printf("==============================================\n") - - return test_failed - - -def test_numpy_edge_main() -> t.CInt: - global arena, pool, test_passed, test_failed - - arena = calloc(2 * 1024 * 1024, 1) - pool = memhub.MemPool(arena, 2 * 1024 * 1024) - - test_passed = 0 - test_failed = 0 - - printf("==============================================\n") - printf(" numpy Edge / Boundary Tests\n") - printf("==============================================\n") - - test_numpy_edge() - - printf("\n==============================================\n") - printf(" Edge: %d passed, %d failed\n", test_passed, test_failed) - printf("==============================================\n") - - return test_failed - - -def bench_numpy_main() -> t.CInt: - global arena, pool - - arena = calloc(8 * 1024 * 1024, 1) - pool = memhub.MemPool(arena, 8 * 1024 * 1024) - - printf("==============================================\n") - printf(" numpy Performance Benchmark\n") - printf("==============================================\n") - - bench_numpy_perf() - - printf("==============================================\n") - return 0 - - -# Backward-compatible entry -def test_numpy_main() -> t.CInt: - global arena, pool - - arena = calloc(2 * 1024 * 1024, 1) - pool = memhub.MemPool(arena, 2 * 1024 * 1024) - - failed: t.CInt = test_numpy_correct() - if failed == 0: - failed = test_numpy_edge_main() - if failed == 0: - bench_numpy_main() - return failed diff --git a/Test/TestProject/App/test_zlib.vp b/Test/TestProject/App/test_zlib.vp deleted file mode 100644 index 7833ffe..0000000 --- a/Test/TestProject/App/test_zlib.vp +++ /dev/null @@ -1,883 +0,0 @@ -from stdint import * -import zlib.pyzlib as pyzlib -import zlib.zhuff as zhuff -import zlib.zdef as zdef -from stdio import printf -from string import strlen, memcmp, memcpy, memset -from stdlib import malloc, free, realloc -import stdlib -import string -import memhub -import t, c - -pool: t.CPtr = None - -test_passed: t.CInt = 0 -test_failed: t.CInt = 0 -def check(name: str, condition: t.CInt, detail: str): - global test_passed, test_failed - if condition: - test_passed += 1 - printf(" [PASS] %s\n", name) - else: - test_failed += 1 - printf(" [FAIL] %s -- %s\n", name, detail if detail else "") - -def print_hex_test(data: BYTEPTR, length: t.CSizeT, max_show: t.CSizeT): - if not data or length == 0: - printf("(empty)\n") - return - show: t.CSizeT = max_show if (length > max_show) else length - i: t.CSizeT - for i in range(show): - printf("%02X ", data[i]) - if length > max_show: - printf("... (%zu bytes total)", length) - printf("\n") - -def print_separator(): - printf(" -------------------------------------------\n") - -def section_header(title: str): - printf("\n+-- %s --+\n", title) - -def section_footer(): - printf("+--------------------------------------------+\n") - -# ============================================================ - -def test_version(): - section_header("Version Info") - - ver: str = pyzlib.ZLIB_VERSION - printf(" ZLIB_VERSION (compile-time) : %s\n", ver) - check("ZLIB_VERSION not None", ver != None, "version string is None") - check("ZLIB_VERSION not empty", strlen(ver) > 0, "version string is empty") - - runtime_ver: str = pyzlib.runtime_version() - printf(" ZLIB_RUNTIME_VERSION : %s\n", runtime_ver) - check("runtime version not None", runtime_ver != None, "runtime version is None") - check("runtime version not empty", strlen(runtime_ver) > 0, "runtime version is empty") - - section_footer() - - -def test_compress_decompress(): - section_header("compress / decompress") - - inp: str = "Hello, World! This is a test of zlib compression and decompression." - input_length: t.CSizeT = strlen(inp) - printf(" Input (%zu bytes): \"%s\"\n", input_length, inp) - - out_length: t.CSizeT = 0 - compressed: BYTEPTR = pyzlib.compress(pool, BYTEPTR(inp), input_length, - pyzlib.Z_DEFAULT_COMPRESSION, pyzlib.MAX_WBITS, c.Addr(out_length)) - check("compress returns non-None", compressed != None, "compress returned None") - check("compress output size > 0", out_length > 0, "compressed size is 0") - check("compress output produced", out_length > 0, "compressed size is 0") - - printf(" Compressed (%zu bytes): ", out_length) - print_hex_test(compressed, out_length, 32) - printf(" Compression ratio: %.1f%%\n", t.CDouble(out_length) / input_length * 100) - - dec_length: t.CSizeT = 0 - decompressed: BYTEPTR = pyzlib.decompress(pool, compressed, out_length, - pyzlib.MAX_WBITS, pyzlib.DEF_BUF_SIZE, c.Addr(dec_length)) - check("decompress returns non-None", decompressed != None, "decompress returned None") - check("decompress output size matches input", dec_length == input_length, "size mismatch") - check("decompress output matches input", decompressed != None and memcmp(decompressed, inp, input_length) == 0, "content mismatch") - - printf(" Decompressed (%zu bytes): \"%.*s\"\n", dec_length, t.CInt(dec_length), str(decompressed)) - - free(compressed) - free(decompressed) - section_footer() - - -def test_compress_levels(): - section_header("Compression Levels") - - inp: str = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" - input_length: t.CSizeT = strlen(inp) - printf(" Input (%zu bytes): \"%s\"\n", input_length, inp) - - out_length: t.CSizeT = 0 - - c0: BYTEPTR = pyzlib.compress(pool, BYTEPTR(inp), input_length, - pyzlib.Z_NO_COMPRESSION, pyzlib.MAX_WBITS, c.Addr(out_length)) - check("level 0 compress OK", c0 != None, "level 0 returned None") - printf(" Level 0 (Z_NO_COMPRESSION): %zu bytes\n", out_length) - length0: t.CSizeT = out_length - free(c0) - - c1: BYTEPTR = pyzlib.compress(pool, BYTEPTR(inp), input_length, - pyzlib.Z_BEST_SPEED, pyzlib.MAX_WBITS, c.Addr(out_length)) - check("level 1 compress OK", c1 != None, "level 1 returned None") - printf(" Level 1 (Z_BEST_SPEED) : %zu bytes\n", out_length) - free(c1) - - c6: BYTEPTR = pyzlib.compress(pool, BYTEPTR(inp), input_length, - pyzlib.Z_DEFAULT_COMPRESSION, pyzlib.MAX_WBITS, c.Addr(out_length)) - check("level -1 compress OK", c6 != None, "default level returned None") - printf(" Level -1 (DEFAULT) : %zu bytes\n", out_length) - free(c6) - - c9: BYTEPTR = pyzlib.compress(pool, BYTEPTR(inp), input_length, - pyzlib.Z_BEST_COMPRESSION, pyzlib.MAX_WBITS, c.Addr(out_length)) - check("level 9 compress OK", c9 != None, "level 9 returned None") - printf(" Level 9 (Z_BEST_COMPRESS) : %zu bytes\n", out_length) - length9: t.CSizeT = out_length - free(c9) - - check("level 9 smaller than level 0", length9 < length0, "level 9 not smaller than level 0") - - section_footer() - - -def test_compressobj(): - section_header("compressobj (incremental)") - - part1: str = "Hello, " - part2: str = "World!" - printf(" Part 1: \"%s\"\n", part1) - printf(" Part 2: \"%s\"\n", part2) - - out_length: t.CSizeT = 0 - - s: pyzlib.Compress | t.CPtr = pyzlib.compressobj(pool, pyzlib.Z_DEFAULT_COMPRESSION, pyzlib.DEFLATED, - pyzlib.MAX_WBITS, pyzlib.DEF_MEM_LEVEL, - pyzlib.Z_DEFAULT_STRATEGY, None, 0) - check("compressobj created", s != None, "compressobj is None") - print_separator() - - c1: BYTEPTR = s.compress(BYTEPTR(part1), strlen(part1), c.Addr(out_length)) - check("compress part1 OK", c1 != None, "compress part1 failed") - printf(" Compressed part1: %zu bytes -> ", out_length) - print_hex_test(c1, out_length, 16) - total: t.CSizeT = out_length - all: BYTEPTR = None - if out_length > 0 and c1: - all = BYTEPTR(malloc(total)) - if all: memcpy(all, c1, out_length) - free(c1) - - c2: BYTEPTR = s.compress(BYTEPTR(part2), - strlen(part2), c.Addr(out_length)) - check("compress part2 OK", c2 != None, "compress part2 failed") - printf(" Compressed part2: %zu bytes -> ", out_length) - print_hex_test(c2, out_length, 16) - if out_length > 0 and c2: - new_all: BYTEPTR = BYTEPTR(realloc(all, total + out_length)) - if new_all: - all = new_all - memcpy(all + total, c2, out_length) - total += out_length - free(c2) - - c3: BYTEPTR = s.flush(pyzlib.Z_FINISH, c.Addr(out_length)) - check("flush (Z_FINISH) OK", c3 != None, "flush failed") - printf(" Flush result : %zu bytes -> ", out_length) - print_hex_test(c3, out_length, 16) - if out_length > 0 and c3: - new_all: BYTEPTR = realloc(all, total + out_length) # 隐式转换 - if new_all: - all = new_all - memcpy(all + total, c3, out_length) - total += out_length - free(c3) - - print_separator() - - if all: - dec_length: t.CSizeT = 0 - dec: BYTEPTR = pyzlib.decompress(pool, all, total, pyzlib.MAX_WBITS, pyzlib.DEF_BUF_SIZE, c.Addr(dec_length)) - check("decompress incremental OK", dec != None, "decompress returned None") - check("decompress incremental size", dec != None and dec_length == strlen(part1) + strlen(part2), "size mismatch") - check("decompress incremental content", - dec != None and memcmp(dec, "Hello, World!", dec_length) == 0, "content mismatch") - if dec: - printf(" Decompressed: \"%.*s\" (%zu bytes)\n", t.CInt(dec_length), str(dec), dec_length) - free(dec) - free(all) - - s.delete() # del s - section_footer() - -def test_decompressobj(): - section_header("decompressobj") - - inp: str = "Test data for decompress object." - input_length: t.CSizeT = strlen(inp) - printf(" Input (%zu bytes): \"%s\"\n", input_length, inp) - - out_length: t.CSizeT = 0 - compressed: BYTEPTR = pyzlib.compress(pool, BYTEPTR(inp), input_length, - pyzlib.Z_DEFAULT_COMPRESSION, pyzlib.MAX_WBITS, c.Addr(out_length)) - printf(" Compressed: %zu bytes\n", out_length) - - d: pyzlib.Decompress | t.CPtr = pyzlib.decompressobj(pool, pyzlib.MAX_WBITS, None, 0) - check("decompressobj created", d != None, "decompressobj is None") - check("eof is false initially", d.eof == 0, "eof should be 0") - print_separator() - - dec_length: t.CSizeT = 0 - dec: BYTEPTR = d.decompress(compressed, out_length, - 0, c.Addr(dec_length)) - check("decompress OK", dec != None, "decompress returned None") - check("decompress size", dec != None and dec_length == input_length, "size mismatch") - check("decompress content", dec != None and memcmp(dec, inp, input_length) == 0, "content mismatch") - check("eof is true after stream end", d.eof == 1, "eof should be 1") - - if dec: - printf(" Decompressed (%zu bytes): \"%.*s\"\n", dec_length, t.CInt(dec_length), str(dec)) - printf(" eof = %d\n", d.eof) - - free(dec) - free(compressed) - d.delete() - section_footer() - -def test_decompressobj_max_lengthgth(): - section_header("decompressobj max_lengthgth") - - inp: str = "This is a longer string for testing max_lengthgth parameter in decompress." - input_length: t.CSizeT = strlen(inp) - printf(" Input (%zu bytes): \"%s\"\n", input_length, inp) - - out_length: t.CSizeT = 0 - compressed: BYTEPTR = pyzlib.compress(pool, BYTEPTR(inp), input_length, - pyzlib.Z_DEFAULT_COMPRESSION, pyzlib.MAX_WBITS, c.Addr(out_length)) - printf(" Compressed: %zu bytes\n", out_length) - - d: pyzlib.Decompress | t.CPtr = pyzlib.decompressobj(pool, pyzlib.MAX_WBITS, None, 0) - - dec_length: t.CSizeT = 0 - dec: BYTEPTR = d.decompress(compressed, out_length, - 10, c.Addr(dec_length)) - check("max_lengthgth decompress OK", dec != None, "decompress returned None") - check("max_lengthgth limits output", dec_length <= 10, "output exceeded max_lengthgth") - if dec: - printf(" First chunk (max_lengthgth=10): \"%.*s\" (%zu bytes)\n", t.CInt(dec_length), str(dec), dec_length) - free(dec) - - tail_length: t.CSizeT = 0 - tail: BYTEPTR = d.unconsumed_tail(c.Addr(tail_length)) - check("unconsumed_tail exists", tail != None or tail_length == 0, "no unconsumed_tail") - printf(" unconsumed_tail: %zu bytes remaining\n", tail_length) - printf(" eof = %d\n", d.eof) - - if tail_length > 0 or not d.eof: - flushed: BYTEPTR = d.flush(pyzlib.DEF_BUF_SIZE, c.Addr(dec_length)) - check("flush after max_lengthgth OK", flushed != None, "flush returned None") - if flushed: printf(" Flushed (%zu bytes): \"%.*s\"\n", dec_length, t.CInt(dec_length), str(flushed)) - free(flushed) - - printf(" eof after flush = %d\n", d.eof) - - d.delete() - free(compressed) - section_footer() - - -def test_decompressobj_unused_data(): - section_header("decompressobj unused_data") - - inp: str = "Hello" - input_length: t.CSizeT = strlen(inp) - printf(" Input: \"%s\"\n", inp) - - out_length: t.CSizeT = 0 - compressed: BYTEPTR = pyzlib.compress(pool, BYTEPTR(inp), input_length, - pyzlib.Z_DEFAULT_COMPRESSION, pyzlib.MAX_WBITS, c.Addr(out_length)) - printf(" Compressed: %zu bytes\n", out_length) - - total_length: t.CSizeT = out_length + 5 - combined: BYTEPTR = BYTEPTR(malloc(total_length)) - memcpy(combined, compressed, out_length) - memcpy(combined + out_length, "EXTRA", 5) - free(compressed) - printf(" Combined (compressed + \"EXTRA\"): %zu bytes\n", total_length) - - d: pyzlib.Decompress | t.CPtr = pyzlib.decompressobj(pool, pyzlib.MAX_WBITS, None, 0) - - dec_length: t.CSizeT = 0 - dec: BYTEPTR = d.decompress(combined, total_length, - 0, c.Addr(dec_length)) - check("decompress with extra OK", dec != None, "decompress returned None") - check("eof after stream end", d.eof == 1, "eof should be 1") - if dec: - printf(" Decompressed: \"%.*s\" (%zu bytes)\n", t.CInt(dec_length), str(dec), dec_length) - free(dec) - - print_separator() - - unused_length: t.CSizeT = 0 - unused: BYTEPTR = d.unused_data(c.Addr(unused_length)) - check("unused_data exists", unused != None and unused_length > 0, "no unused_data") - check("unused_data is EXTRA", unused_length == 5 and unused != None and memcmp(unused, "EXTRA", 5) == 0, "unused_data mismatch") - printf(" unused_data (%zu bytes): \"%.*s\"\n", unused_length, t.CInt(unused_length), str(unused)) - - d.delete() - free(combined) - section_footer() - - -def test_compress_copy(): - section_header("Compress.copy()") - - inp: str = "Copy test data for compress object" - input_length: t.CSizeT = strlen(inp) - printf(" Input: \"%s\"\n", inp) - - out_length: t.CSizeT = 0 - c1: pyzlib.Compress | t.CPtr = pyzlib.compressobj(pool, pyzlib.Z_DEFAULT_COMPRESSION, pyzlib.DEFLATED, - pyzlib.MAX_WBITS, pyzlib.DEF_MEM_LEVEL, - pyzlib.Z_DEFAULT_STRATEGY, None, 0) - c1.compress(BYTEPTR(inp), input_length, c.Addr(out_length)) - printf(" Original: compressed %zu bytes so far\n", out_length) - - c2: pyzlib.Compress | t.CPtr = c1.copy() - check("compress copy OK", c2 != None, "copy returned None") - printf(" Copied compressobj\n") - - print_separator() - - f1: BYTEPTR = c1.flush(pyzlib.Z_FINISH, c.Addr(out_length)) - check("flush original OK", f1 != None, "flush original failed") - length1: t.CSizeT = out_length - printf(" Original flush: %zu bytes\n", length1) - free(f1) - - f2: BYTEPTR = c2.flush(pyzlib.Z_FINISH, c.Addr(out_length)) - check("flush copy OK", f2 != None, "flush copy failed") - length2: t.CSizeT = out_length - printf(" Copy flush : %zu bytes\n", length2) - free(f2) - - check("copy produces same output", length1 == length2, "output lengthgths differ") - - c1.delete() - c2.delete() - section_footer() - - -def test_decompress_copy(): - section_header("Decompress.copy()") - - inp: str = "Decompress copy test" - input_length: t.CSizeT = strlen(inp) - printf(" Input: \"%s\"\n", inp) - - out_length: t.CSizeT = 0 - compressed: BYTEPTR = pyzlib.compress(pool, BYTEPTR(inp), input_length, - pyzlib.Z_DEFAULT_COMPRESSION, pyzlib.MAX_WBITS, c.Addr(out_length)) - printf(" Compressed: %zu bytes\n", out_length) - - d1: pyzlib.Decompress | t.CPtr = pyzlib.decompressobj(pool, pyzlib.MAX_WBITS, None, 0) - d2: pyzlib.Decompress | t.CPtr = d1.copy() - check("decompress copy OK", d2 != None, "copy returned None") - printf(" Copied decompressobj\n") - - print_separator() - - dec_length1: t.CSizeT = 0 - dec_length2: t.CSizeT = 0 - dec1: BYTEPTR = d1.decompress(compressed, out_length, - 0, c.Addr(dec_length1)) - dec2: BYTEPTR = d2.decompress(compressed, out_length, - 0, c.Addr(dec_length2)) - check("decompress copy output size", dec_length1 == dec_length2, "sizes differ") - check("decompress copy output content", - dec1 and dec2 and memcmp(dec1, dec2, dec_length1) == 0, "content differs") - - if dec1: printf(" Original: \"%.*s\" (%zu bytes)\n", t.CInt(dec_length1), str(dec1), dec_length1) - if dec2: printf(" Copy : \"%.*s\" (%zu bytes)\n", t.CInt(dec_length2), str(dec2), dec_length2) - - free(dec1) - free(dec2) - free(compressed) - d1.delete() - d2.delete() - section_footer() - - -def test_adler32(): - section_header("adler32 checksum") - - checksum: ULONG = pyzlib.zlib_adler32(BYTEPTR("Hello"), 5, 1) - printf(" adler32(\"Hello\") = 0x%08lX (%lu)\n", checksum, checksum) - check("adler32 returns non-zero", checksum != 0, "checksum is 0") - - incremental: ULONG = pyzlib.zlib_adler32(BYTEPTR("Hel"), 3, 1) - printf(" adler32(\"Hel\") = 0x%08lX\n", incremental) - incremental = pyzlib.zlib_adler32(BYTEPTR("lo"), 2, incremental) - printf(" adler32(\"lo\", prev) = 0x%08lX\n", incremental) - check("adler32 incremental matches one-shot", incremental == checksum, "incremental != one-shot") - printf(" Incremental == One-shot: %s\n", incremental == checksum if checksum else "NO") - - section_footer() - - -def test_crc32(): - section_header("crc32 checksum") - - checksum: ULONG = pyzlib.zlib_crc32(BYTEPTR("Hello"), 5, 0) - printf(" crc32(\"Hello\") = 0x%08lX (%lu)\n", checksum, checksum) - check("crc32 returns non-zero", checksum != 0, "checksum is 0") - - incremental: ULONG = pyzlib.zlib_crc32(BYTEPTR("Hel"), 3, 0) - printf(" crc32(\"Hel\") = 0x%08lX\n", incremental) - incremental = pyzlib.zlib_crc32(BYTEPTR("lo"), 2, incremental) - printf(" crc32(\"lo\", prev) = 0x%08lX\n", incremental) - check("crc32 incremental matches one-shot", incremental == checksum, "incremental != one-shot") - printf(" Incremental == One-shot: %s\n", incremental == checksum if checksum else "NO") - - section_footer() - - -def test_empty_compress(): - section_header("Empty data compress/decompress") - - out_length: t.CSizeT = 0 - compressed: BYTEPTR = pyzlib.compress(pool, BYTEPTR(""), 0, - pyzlib.Z_DEFAULT_COMPRESSION, pyzlib.MAX_WBITS, c.Addr(out_length)) - check("compress empty OK", compressed != None, "compress empty returned None") - check("compress empty output > 0", out_length > 0, "compressed empty is 0 bytes") - printf(" Empty input compressed: %zu bytes (header only)\n", out_length) - printf(" Hex: ") - print_hex_test(compressed, out_length, 32) - - dec_length: t.CSizeT = 0 - decompressed: BYTEPTR = pyzlib.decompress(pool, compressed, out_length, - pyzlib.MAX_WBITS, pyzlib.DEF_BUF_SIZE, c.Addr(dec_length)) - check("decompress empty OK", decompressed != None, "decompress empty returned None") - check("decompress empty size == 0", dec_length == 0, "decompressed size != 0") - printf(" Decompressed back: %zu bytes\n", dec_length) - - free(compressed) - free(decompressed) - section_footer() - - -def test_gzip_format(): - section_header("Gzip format (wbits=31)") - - inp: str = "Gzip format test" - input_length: t.CSizeT = strlen(inp) - printf(" Input: \"%s\" (%zu bytes)\n", inp, input_length) - - gzip_wbits: t.CInt = pyzlib.MAX_WBITS + 16 - printf(" wbits = MAX_WBITS + 16 = %d\n", gzip_wbits) - - out_length: t.CSizeT = 0 - compressed: BYTEPTR = pyzlib.compress(pool, BYTEPTR(inp), input_length, - pyzlib.Z_DEFAULT_COMPRESSION, gzip_wbits, c.Addr(out_length)) - check("gzip compress OK", compressed != None, "gzip compress failed") - printf(" Gzip compressed: %zu bytes\n", out_length) - printf(" Header bytes: ") - print_hex_test(compressed, 4 if (out_length > 4) else out_length, 4) - - dec_length: t.CSizeT = 0 - decompressed: BYTEPTR = pyzlib.decompress(pool, compressed, out_length, - gzip_wbits, pyzlib.DEF_BUF_SIZE, c.Addr(dec_length)) - check("gzip decompress OK", decompressed != None, "gzip decompress failed") - check("gzip decompress size", dec_length == input_length, "size mismatch") - check("gzip decompress content", decompressed != None and memcmp(decompressed, inp, input_length) == 0, "content mismatch") - if decompressed: printf(" Decompressed: \"%.*s\" (%zu bytes)\n", t.CInt(dec_length), str(decompressed), dec_length) - - free(compressed) - free(decompressed) - section_footer() - - -def test_raw_deflate(): - section_header("Raw deflate (wbits=-15)") - - inp: str = "Raw deflate test" - input_length: t.CSizeT = strlen(inp) - printf(" Input: \"%s\" (%zu bytes)\n", inp, input_length) - - raw_wbits: t.CInt = -pyzlib.MAX_WBITS - printf(" wbits = -MAX_WBITS = %d\n", raw_wbits) - - out_length: t.CSizeT = 0 - compressed: BYTEPTR = pyzlib.compress(pool, BYTEPTR(inp), input_length, - pyzlib.Z_DEFAULT_COMPRESSION, raw_wbits, c.Addr(out_length)) - check("raw deflate compress OK", compressed != None, "raw deflate compress failed") - printf(" Raw compressed: %zu bytes\n", out_length) - - dec_length: t.CSizeT = 0 - decompressed: BYTEPTR = pyzlib.decompress(pool, compressed, out_length, - raw_wbits, pyzlib.DEF_BUF_SIZE, c.Addr(dec_length)) - check("raw deflate decompress OK", decompressed != None, "raw deflate decompress failed") - check("raw deflate decompress size", dec_length == input_length, "size mismatch") - check("raw deflate decompress content", decompressed != None and memcmp(decompressed, inp, input_length) == 0, "content mismatch") - if decompressed: printf(" Decompressed: \"%.*s\" (%zu bytes)\n", t.CInt(dec_length), str(decompressed), dec_length) - - free(compressed) - free(decompressed) - section_footer() - - -def test_zdict(): - section_header("Preset dictionary (zdict)") - - dict: str = "common words that appear frequently in the data" - inp: str = "common words that appear frequently" - input_length: t.CSizeT = strlen(inp) - printf(" Dictionary: \"%s\" (%zu bytes)\n", dict, strlen(dict)) - printf(" Input : \"%s\" (%zu bytes)\n", inp, input_length) - - out_length: t.CSizeT = 0 - s: pyzlib.Compress | t.CPtr = pyzlib.compressobj(pool, pyzlib.Z_DEFAULT_COMPRESSION, pyzlib.DEFLATED, - pyzlib.MAX_WBITS, pyzlib.DEF_MEM_LEVEL, - pyzlib.Z_DEFAULT_STRATEGY, - BYTEPTR(dict), strlen(dict)) - check("compressobj with zdict OK", s != None, "compressobj with zdict failed") - - comp_data: BYTEPTR = s.compress(BYTEPTR(inp), - input_length, c.Addr(out_length)) - check("compress with zdict OK", comp_data != None, "compress with zdict failed") - printf(" Compressed with zdict: %zu bytes\n", out_length) - free(comp_data) - - flush_data: BYTEPTR = s.flush(pyzlib.Z_FINISH, c.Addr(out_length)) - check("flush with zdict OK", flush_data != None, "flush with zdict failed") - printf(" Flush: %zu bytes\n", out_length) - free(flush_data) - - print_separator() - - total_comp: t.CSizeT = out_length - s.delete() - - s = pyzlib.compressobj(pool, pyzlib.Z_DEFAULT_COMPRESSION, pyzlib.DEFLATED, - pyzlib.MAX_WBITS, pyzlib.DEF_MEM_LEVEL, - pyzlib.Z_DEFAULT_STRATEGY, None, 0) - comp_no_dict: BYTEPTR = s.compress(BYTEPTR(inp), - input_length, c.Addr(out_length)) - flush_no_dict: BYTEPTR = s.flush(pyzlib.Z_FINISH, c.Addr(out_length)) - no_dict_total: t.CSizeT = 0 - if comp_no_dict: no_dict_total += out_length - if flush_no_dict: no_dict_total += out_length - printf(" Without zdict: ~%zu bytes compressed\n", no_dict_total) - printf(" With zdict : %zu bytes compressed\n", total_comp) - free(comp_no_dict) - free(flush_no_dict) - s.delete() - - section_footer() - - -def test_huffman_tree(): - section_header("Huffman tree construction") - - printf(" --- Fixed Huffman tree (literal/lengthgth) ---\n") - lit_tree = zhuff.zhuff_tree() - lit_tree.build_fixed_lit_tree() - - check("fixed lit tree count == 288", lit_tree.count == 288, "count mismatch") - check("fixed lit tree max_bits == 9", lit_tree.max_bits == 9, "max_bits mismatch") - - has_8bit: t.CInt = 0 - has_9bit: t.CInt = 0 - has_7bit: t.CInt = 0 - for i in range(143 + 1): - if lit_tree.codes[i].bits == 8: - has_8bit += 1 - for i in range(143 + 1, 255 + 1): - if lit_tree.codes[i].bits == 9: - has_9bit += 1 - for i in range(255 + 1, 279 + 1): - if lit_tree.codes[i].bits == 7: - has_7bit += 1 - check("0-143 are 8-bit", has_8bit == 144, "wrong count") - check("144-255 are 9-bit", has_9bit == 112, "wrong count") - check("256-279 are 7-bit", has_7bit == 24, "wrong count") - - printf(" 0-143: %d codes with 8 bits\n", has_8bit) - printf(" 144-255: %d codes with 9 bits\n", has_9bit) - printf(" 256-279: %d codes with 7 bits\n", has_7bit) - printf(" 280-287: 8-bit (end-of-block 256 = 7-bit)\n") - printf(" EOB (256): code=0x%X, bits=%d\n", lit_tree.codes[256].code, lit_tree.codes[256].bits) - - printf("\n --- Fixed Huffman tree (distance) ---\n") - dist_tree = zhuff.zhuff_tree() - dist_tree.build_fixed_dist_tree() - - check("fixed dist tree count == 32", dist_tree.count == 32, "count mismatch") - check("fixed dist tree max_bits == 5", dist_tree.max_bits == 5, "max_bits mismatch") - - all_5bit: t.CInt = 1 - for i in range(32): - if dist_tree.codes[i].bits != 5: - all_5bit = 0 - check("all 32 distance codes are 5-bit", all_5bit, "not all 5-bit") - printf(" All 32 distance codes: 5 bits each\n") - - printf("\n --- Dynamic Huffman tree from frequencies ---\n") - freqs: t.CArray[t.CInt, 257] - memset(freqs, 0, freqs.__sizeof__()) - freqs['A'] = 50 - freqs['B'] = 25 - freqs['C'] = 12 - freqs['D'] = 6 - freqs['E'] = 3 - freqs['F'] = 1 - freqs[256] = 1 - - dyn_tree = zhuff.zhuff_tree() - dyn_tree.build_codes(freqs, 257, 15) - - check("dynamic tree count == 257", dyn_tree.count == 257, "count mismatch") - check("dynamic tree max_bits <= 15", dyn_tree.max_bits <= 15, "max_bits overflow") - - total_codes: t.CInt = 0 - max_length_found: t.CInt = 0 - for i in range(257): - if dyn_tree.codes[i].bits > 0: - total_codes += 1 - if dyn_tree.codes[i].bits > max_length_found: - max_length_found = dyn_tree.codes[i].bits - check("dynamic tree has 7 active codes", total_codes == 7, "wrong active count") - check("dynamic tree max code lengthgth found <= 15", max_length_found <= 15, "code lengthgth overflow") - - printf(" Frequencies: A=50, B=25, C=12, D=6, E=3, F=1, EOB=1\n") - printf(" Active codes: %d, max code lengthgth: %d\n", total_codes, max_length_found) - - printf(" Code assignments:\n") - names: t.CArray[str, None] = ["A","B","C","D","E","F"] # 一个都是char* 的数组 - syms: t.CArray[t.CInt, None] = ['A','B','C','D','E','F'] - for i in range(6): - printf(" '%s' (freq=%3d): code=0x%04X, bits=%d\n", - names[i], freqs[syms[i]], - dyn_tree.codes[syms[i]].code, - dyn_tree.codes[syms[i]].bits) - - - - printf(" EOB (freq=1): code=0x%04X, bits=%d\n", - dyn_tree.codes[256].code, dyn_tree.codes[256].bits) - a_bits: t.CInt = dyn_tree.codes['A'].bits - f_bits: t.CInt = dyn_tree.codes['F'].bits - check("high-freq symbol has shorter code", a_bits <= f_bits, "A should be <= F") - printf(" High-freq 'A' (%d bits) <= low-freq 'F' (%d bits): %s\n", - a_bits, f_bits, "YES" if (a_bits <= f_bits) else "NO") - - printf("\n --- Huffman encode/decode roundtrip ---\n") - freqs: t.CArray[t.CInt, 288] - memset(freqs, 0, freqs.__sizeof__()) - freqs['H'] = 10 - freqs['e'] = 8 - freqs['l'] = 20 - freqs['o'] = 8 - freqs[' '] = 5 - freqs['W'] = 3 - freqs['r'] = 5 - freqs['d'] = 3 - freqs['!'] = 2 - freqs[256] = 1 - - enc_tree = zhuff.zhuff_tree() - enc_tree.build_codes(freqs, 257, 15) - - dec_tree = zhuff.zhuff_decode_tree() - dec_tree.build_decode_tree(c.Addr(enc_tree)) - - writer = zdef.zbit_writer() - - symbols: t.CArray[t.CInt, 16] - symbols[0] = 'H'; symbols[1] = 'e'; symbols[2] = 'l'; symbols[3] = 'l' - symbols[4] = 'o'; symbols[5] = ' '; symbols[6] = 'W'; symbols[7] = 'o' - symbols[8] = 'r'; symbols[9] = 'l'; symbols[10] = 'd'; symbols[11] = '!' - symbols[12] = 256 - num_symbols: t.CInt = 13 - - for i in range(num_symbols): - enc_tree.encode_symbol(symbols[i], c.Addr(writer)) - - reader = zdef.zbit_reader() - reader.buf = writer.buf - reader.length = writer.byte_pos + (1 if (writer.bit_pos > 0) else 0) - reader.byte_pos = 0 - reader.bit_pos = 0 - - roundtrip_ok: t.CInt = 1 - for i in range(num_symbols): - decoded: t.CInt = dec_tree.decode_symbol(c.Addr(reader)) - if decoded != symbols[i]: - roundtrip_ok = 0 - printf(" MISMATCH at symbol %d: expected %d, got %d\n", i, symbols[i], decoded) - break - check("encode/decode roundtrip matches", roundtrip_ok, "roundtrip failed") - printf(" Encoded %d symbols into %zu bytes, decoded all correctly\n", - num_symbols, writer.byte_pos + (1 if (writer.bit_pos > 0) else 0)) - - free(writer.buf) - - printf("\n --- Overflow handling (many symbols, limited max_bits) ---\n") - freqs: t.CArray[t.CInt, 257] - for i in range(256): - freqs[i] = 1 - freqs[256] = 1 - - tree = zhuff.zhuff_tree() - tree.build_codes(freqs, 257, 15) - - overflow_ok: t.CInt = 1 - for i in range(257): - if tree.codes[i].bits > 15 or tree.codes[i].bits < 0: - overflow_ok = 0 - break - check("all code lengthgths <= 15 with 257 symbols", overflow_ok, "code lengthgth overflow") - - bl_count: t.CArray[t.CInt, 16] = [0] - for i in range(257): - if tree.codes[i].bits > 0: - bl_count[tree.codes[i].bits] += 1 - printf(" Code lengthgth distribution (257 equal-freq symbols, max_bits=15):\n") - for i in range(1, 15 + 1): - if bl_count[i] > 0: - printf(" %2d bits: %3d codes\n", i, bl_count[i]) - - dt = zhuff.zhuff_decode_tree() - dt.build_decode_tree(c.Addr(tree)) - - w = zdef.zbit_writer() - tree.encode_symbol(0, c.Addr(w)) - tree.encode_symbol(128, c.Addr(w)) - tree.encode_symbol(255, c.Addr(w)) - tree.encode_symbol(256, c.Addr(w)) - - r = zdef.zbit_reader() - r.buf = w.buf - r.length = w.byte_pos + (1 if (w.bit_pos > 0) else 0) - r.byte_pos = 0 - r.bit_pos = 0 - - s0: t.CInt = dt.decode_symbol(c.Addr(r)) - s1: t.CInt = dt.decode_symbol(c.Addr(r)) - s2: t.CInt = dt.decode_symbol(c.Addr(r)) - s3: t.CInt = dt.decode_symbol(c.Addr(r)) - - check("overflow roundtrip: symbol 0", s0 == 0, "decode mismatch") - check("overflow roundtrip: symbol 128", s1 == 128, "decode mismatch") - check("overflow roundtrip: symbol 255", s2 == 255, "decode mismatch") - check("overflow roundtrip: symbol 256 (EOB)", s3 == 256, "decode mismatch") - - free(w.buf) - - - printf("\n --- Kraft inequality check ---\n") - freqs: t.CArray[t.CInt, 257] - memset(freqs, 0, freqs.__sizeof__()) - freqs['X'] = 100 - freqs['Y'] = 50 - freqs['Z'] = 25 - freqs[256] = 1 - - tree = zhuff.zhuff_tree() - tree.build_codes(freqs, 257, 15) - - kraft_sum: t.CDouble = 0.0 - for i in range(257): - if tree.codes[i].bits > 0: - kraft_sum += 1.0 / (t.CDouble(ULONGLONG(1) << tree.codes[i].bits)) - check("Kraft inequality: sum <= 1.0", kraft_sum <= 1.0 + 1e-9, "Kraft violated") - printf(" Kraft sum = %.10f (must be <= 1.0)\n", kraft_sum) - - section_footer() - - -def test_error_handling(): - section_header("Error handling") - - out_length: t.CSizeT = 0 - printf(" Trying to decompress garbage data...\n") - - result: BYTEPTR = pyzlib.decompress(pool, BYTEPTR("garbage"), 7, - pyzlib.MAX_WBITS, pyzlib.DEF_BUF_SIZE, c.Addr(out_length)) - check("decompress garbage returns None", result == None, "should have returned None") - printf(" Error code : %d\n", pyzlib.get_error_code()) - printf(" Error message: \"%s\"\n", pyzlib.get_error()) - check("error message set", strlen(pyzlib.get_error()) > 0, "error message is empty") - check("error code is set", pyzlib.get_error_code() != pyzlib.Z_OK, "error code is Z_OK") - - print_separator() - - pyzlib.clear_error() - check("clear error clears code", pyzlib.get_error_code() == 0, "error code not cleared") - printf(" After clear: code=%d, msg=\"%s\"\n", pyzlib.get_error_code(), pyzlib.get_error()) - - section_footer() - - -def test_constants(): - section_header("Constants") - printf(" Compression Levels:\n") - printf(" Z_NO_COMPRESSION = %d\n", pyzlib.Z_NO_COMPRESSION) - printf(" Z_BEST_SPEED = %d\n", pyzlib.Z_BEST_SPEED) - printf(" Z_BEST_COMPRESSION = %d\n", pyzlib.Z_BEST_COMPRESSION) - printf(" Z_DEFAULT_COMPRESSION = %d\n", pyzlib.Z_DEFAULT_COMPRESSION) - printf(" Methods:\n") - printf(" DEFLATED = %d\n", pyzlib.DEFLATED) - printf(" Flush Modes:\n") - printf(" Z_NO_FLUSH = %d\n", pyzlib.Z_NO_FLUSH) - printf(" Z_PARTIAL_FLUSH = %d\n", pyzlib.Z_PARTIAL_FLUSH) - printf(" Z_SYNC_FLUSH = %d\n", pyzlib.Z_SYNC_FLUSH) - printf(" Z_FULL_FLUSH = %d\n", pyzlib.Z_FULL_FLUSH) - printf(" Z_FINISH = %d\n", pyzlib.Z_FINISH) - printf(" Z_BLOCK = %d\n", pyzlib.Z_BLOCK) - printf(" Z_TREES = %d\n", pyzlib.Z_TREES) - printf(" Strategies:\n") - printf(" Z_DEFAULT_STRATEGY = %d\n", pyzlib.Z_DEFAULT_STRATEGY) - printf(" Z_FILTERED = %d\n", pyzlib.Z_FILTERED) - printf(" Z_HUFFMAN_ONLY = %d\n", pyzlib.Z_HUFFMAN_ONLY) - printf(" Z_RLE = %d\n", pyzlib.Z_RLE) - printf(" Z_FIXED = %d\n", pyzlib.Z_FIXED) - printf(" Return Codes:\n") - printf(" Z_OK = %d\n", pyzlib.Z_OK) - printf(" Z_STREAM_END = %d\n", pyzlib.Z_STREAM_END) - printf(" Z_NEED_DICT = %d\n", pyzlib.Z_NEED_DICT) - printf(" Z_ERRNO = %d\n", pyzlib.Z_ERRNO) - printf(" Z_STREAM_ERROR = %d\n", pyzlib.Z_STREAM_ERROR) - printf(" Z_DATA_ERROR = %d\n", pyzlib.Z_DATA_ERROR) - printf(" Z_MEM_ERROR = %d\n", pyzlib.Z_MEM_ERROR) - printf(" Z_BUF_ERROR = %d\n", pyzlib.Z_BUF_ERROR) - printf(" Z_VERSION_ERROR = %d\n", pyzlib.Z_VERSION_ERROR) - printf(" Window / Buffer:\n") - printf(" MAX_WBITS = %d\n", pyzlib.MAX_WBITS) - printf(" DEF_BUF_SIZE = %d\n", pyzlib.DEF_BUF_SIZE) - printf(" DEF_MEM_LEVEL = %d\n", pyzlib.DEF_MEM_LEVEL) - section_footer() - - -def main123456() -> t.CInt: - printf("==============================================\n") - printf(" Python zlib - C Implementation Tests\n") - printf("==============================================\n") - - test_constants() - test_version() - test_compress_decompress() - test_compress_levels() - test_compressobj() - test_decompressobj() - test_decompressobj_max_lengthgth() - test_decompressobj_unused_data() - test_compress_copy() - test_decompress_copy() - test_adler32() - test_crc32() - test_empty_compress() - test_gzip_format() - test_raw_deflate() - test_zdict() - test_huffman_tree() - test_error_handling() - - printf("\n==============================================\n") - printf(" Results: %d passed, %d failed\n", test_passed, test_failed) - printf("==============================================\n") - - return 1 if test_failed > 0 else 0 diff --git a/Test/TestProject/App/zc/class_test.vp b/Test/TestProject/App/zc/class_test.vp deleted file mode 100644 index 4594f8b..0000000 --- a/Test/TestProject/App/zc/class_test.vp +++ /dev/null @@ -1,245 +0,0 @@ -import stdio -import stdint -import t, c - - -class SimpleData(t.Object): - x: t.CInt - y: t.CInt - - -class Point3D(t.Object): - x: t.CFloat - y: t.CFloat - z: t.CFloat - - -class Student(t.Object): - name: t.CChar | t.CPtr - age: t.CInt - score: t.CInt - - def __init__(self, n: t.CChar | t.CPtr, a: t.CInt, s: t.CInt): - self.name = n - self.age = a - self.score = s - - def get_age(self) -> t.CInt: - return self.age - - def get_score(self) -> t.CInt: - return self.score - - -class Counter(t.Object): - value: t.CInt - - def __init__(self, initial: t.CInt): - self.value = initial - - def increment(self): - self.value += 1 - - def get_value(self) -> t.CInt: - return self.value - - -class StackObj(t.Object): - data: t.CInt - next_ptr: t.CVoid | t.CPtr - - -def TestBasicDataClass(): - stdio.printf("=== Test Basic Data Class ===\n") - p: SimpleData = SimpleData() - p.x = 10 - p.y = 20 - stdio.printf("SimpleData: x=%d, y=%d\n", p.x, p.y) - - -def TestPoint3DClass(): - stdio.printf("=== Test Point3D Class ===\n") - pt: Point3D = Point3D() - pt.x = 1.5 - pt.y = 2.5 - pt.z = 3.5 - stdio.printf("Point3D: x=%.1f, y=%.1f, z=%.1f\n", pt.x, pt.y, pt.z) - - -def TestStudentClass(): - stdio.printf("=== Test Student Class ===\n") - s: Student = Student("Alice", 20, 95) - stdio.printf("Student: name=%s, age=%d, score=%d\n", s.name, s.age, s.score) - stdio.printf(" get_age()=%d, get_score()=%d\n", s.get_age(), s.get_score()) - - -def TestCounterClass(): - stdio.printf("=== Test Counter Class ===\n") - cnt: Counter = Counter(0) - stdio.printf("Initial value: %d\n", cnt.get_value()) - cnt.increment() - cnt.increment() - cnt.increment() - stdio.printf("After 3 increments: %d\n", cnt.get_value()) - - -def TestStackAllocation(): - stdio.printf("=== Test Stack Allocation ===\n") - obj1: SimpleData = SimpleData() - obj1.x = 100 - obj1.y = 200 - stdio.printf("Stack obj1: x=%d, y=%d\n", obj1.x, obj1.y) - - obj2: Point3D = Point3D() - obj2.x = 10.0 - obj2.y = 20.0 - obj2.z = 30.0 - stdio.printf("Stack obj2: x=%.1f, y=%.1f, z=%.1f\n", obj2.x, obj2.y, obj2.z) - - -def TestHeapAllocation(): - stdio.printf("=== Test Heap Allocation ===\n") - ptr: t.CVoid | t.CPtr = c.malloc(1024) - if ptr != 0: - stdio.printf("Allocated 1024 bytes at %p\n", ptr) - c.free(ptr) - stdio.printf("Freed memory\n") - else: - stdio.printf("malloc failed\n") - - -def TestHeapObjectWithInit(): - stdio.printf("=== Test Heap Object with Init ===\n") - mem_size: t.CSizeT = 256 - ptr: t.CVoid | t.CPtr = c.malloc(mem_size) - if ptr != 0: - stdio.printf("Allocated %d bytes\n", mem_size) - c.free(ptr) - else: - stdio.printf("malloc failed\n") - - -def TestMultipleStackObjects(): - stdio.printf("=== Test Multiple Stack Objects ===\n") - objs: SimpleData = SimpleData() - objs.x = 1 - objs.y = 2 - obj2: Point3D = Point3D() - obj2.x = 5.0 - obj2.y = 10.0 - obj2.z = 15.0 - obj3: Counter = Counter(42) - stdio.printf("objs: x=%d, y=%d\n", objs.x, objs.y) - stdio.printf("obj2: x=%.1f, y=%.1f, z=%.1f\n", obj2.x, obj2.y, obj2.z) - stdio.printf("obj3 initial: %d\n", obj3.get_value()) - obj3.increment() - obj3.increment() - stdio.printf("obj3 after 2 increments: %d\n", obj3.get_value()) - - -def TestImplicitInitCall(): - stdio.printf("=== Test Implicit Init Call ===\n") - stu1: Student = Student("Bob", 22, 88) - stu2: Student = Student("Charlie", 19, 77) - stdio.printf("stu1: name=%s, age=%d, score=%d\n", stu1.name, stu1.age, stu1.score) - stdio.printf("stu2: name=%s, age=%d, score=%d\n", stu2.name, stu2.age, stu2.score) - - -def TestClassWithBitFields(): - stdio.printf("=== Test Class with Bit Fields ===\n") - flags: StackObj = StackObj() - flags.data = 0 - flags.next_ptr = 0 - stdio.printf("StackObj: data=%d, next_ptr=%p\n", flags.data, flags.next_ptr) - - -def TestIntArray(): - stdio.printf("=== Test Int Array ===\n") - arr: t.CArray[t.CInt, 5] = t.CArray[t.CInt, 5]() - i: t.CInt = 0 - while i < 5: - arr[i] = i * 10 - i += 1 - i = 0 - while i < 5: - stdio.printf("arr[%d]=%d\n", i, arr[i]) - i += 1 - - -def TestFloatArray(): - stdio.printf("=== Test Float Array ===\n") - farr: t.CArray[t.CFloat, 4] = t.CArray[t.CFloat, 4]() - farr[0] = 1.5 - farr[1] = 2.5 - farr[2] = 3.5 - farr[3] = 4.5 - i: t.CInt = 0 - while i < 4: - stdio.printf("farr[%d]=%.1f\n", i, farr[i]) - i += 1 - - -def TestCharArray(): - stdio.printf("=== Test Char Array (String) ===\n") - str_arr: t.CArray[t.CChar, 32] = t.CArray[t.CChar, 32]() - str_arr[0] = 'H' - str_arr[1] = 'e' - str_arr[2] = 'l' - str_arr[3] = 'l' - str_arr[4] = 'o' - str_arr[5] = '\0' - stdio.printf("String: %s\n", str_arr) - - -def TestNestedArray(): - stdio.printf("=== Test Nested Array (Array of Arrays) ===\n") - row0: t.CArray[t.CInt, 3] = t.CArray[t.CInt, 3]() - row1: t.CArray[t.CInt, 3] = t.CArray[t.CInt, 3]() - row0[0] = 0 - row0[1] = 1 - row0[2] = 2 - row1[0] = 10 - row1[1] = 11 - row1[2] = 12 - i: t.CInt = 0 - while i < 3: - stdio.printf("row0[%d]=%d ", i, row0[i]) - i += 1 - stdio.printf("\n") - i = 0 - while i < 3: - stdio.printf("row1[%d]=%d ", i, row1[i]) - i += 1 - stdio.printf("\n") - - -def TestArrayWithStruct(): - stdio.printf("=== Test Array with Struct ===\n") - points: t.CArray[SimpleData, 3] = t.CArray[SimpleData, 3]() - i: t.CInt = 0 - while i < 3: - points[i].x = i * 10 - points[i].y = i * 100 - i += 1 - i = 0 - while i < 3: - stdio.printf("Point[%d]: x=%d, y=%d\n", i, points[i].x, points[i].y) - i += 1 - - -def TestArrayPointer(): - stdio.printf("=== Test Array Pointer ===\n") - data: t.CArray[t.CInt, 8] = t.CArray[t.CInt, 8]() - data[0] = 100 - data[1] = 200 - data[2] = 300 - ptr: t.CInt | t.CPtr = data - stdio.printf("ptr[0]=%d\n", ptr[0]) - stdio.printf("ptr[1]=%d\n", ptr[1]) - stdio.printf("ptr[2]=%d\n", ptr[2]) - - -def TestDynamicString(): - stdio.printf("=== Test Dynamic String ===\n") - name: str = "TransPyC" - stdio.printf("Hello %s!\n", name) \ No newline at end of file diff --git a/Test/TestProject/App/zc/config.vp b/Test/TestProject/App/zc/config.vp deleted file mode 100644 index 1b4e36f..0000000 --- a/Test/TestProject/App/zc/config.vp +++ /dev/null @@ -1,24 +0,0 @@ -import t, c - - -POSMAX: t.CDefine = 100 -MAX_RETRY: t.CDefine = 5 -BUFFER_SIZE: t.CDefine = 256 -PI: t.CDefine = 3.14159 -EULER: t.CDefine = 2.71828 -TRUE: t.CDefine = 1 -FALSE: t.CDefine = 0 -NULL: t.CDefine = 0 - - -MATH_OFFSET: t.CDefine = 10 -MATH_SCALE: t.CDefine = 2 -THRESHOLD: t.CDefine = 50 -LOOP_LIMIT: t.CDefine = 20 -SHIFT_AMOUNT: t.CDefine = 2 -MASK_VALUE: t.CDefine = 0xFF -BIT_RANGE: t.CDefine = 4 -EXPONENT_BASE: t.CDefine = 3 -MODULO_DIVISOR: t.CDefine = 7 -SCALE_SHIFT: t.CDefine = 4 -HALF_SCALE: t.CDefine = 0.5 \ No newline at end of file diff --git a/Test/TestProject/App/zc/logic_test.vp b/Test/TestProject/App/zc/logic_test.vp deleted file mode 100644 index 4d5c266..0000000 --- a/Test/TestProject/App/zc/logic_test.vp +++ /dev/null @@ -1,372 +0,0 @@ -import config -import t, c - - -def ForRangeBasicTest(stop: t.CInt): - i: t.CInt = 0 - for i in range(stop): - print("For range: ", i) - print("Done") - - -def ForRangeWithStartStop(start: t.CInt, stop: t.CInt, step: t.CInt): - i: t.CInt = 0 - for i in range(start, stop, step): - print("Range: ", i) - print("Done") - - -def NestedForRangeTest(rows: t.CInt, cols: t.CInt): - r: t.CInt = 0 - c_val: t.CInt = 0 - for r in range(rows): - for c_val in range(cols): - print("Cell: ", r, c_val) - print("Grid done") - - -def ForWithIfBreakTest(data_size: t.CInt): - i: t.CInt = 0 - found: t.CInt = 0 - for i in range(data_size): - if i == 5: - print("Found at: ", i) - found = 1 - break - print("Checking: ", i) - if found == 0: - print("Not found") - - -def ForWithIfContinueTest(n: t.CInt): - i: t.CInt = 0 - count: t.CInt = 0 - for i in range(n): - if i % 2 == 0: - continue - print("Odd: ", i) - count += 1 - print("Total odd: ", count) - - -def ForWithElifBranchTest(value: t.CInt): - i: t.CInt = 0 - result: t.CInt = 0 - for i in range(value): - if i < 3: - result += 1 - elif i < 6: - result += 2 - elif i < 9: - result += 3 - else: - result += 4 - print("Elif branch result: ", result) - - -def WhileWithIfElifElseTest(iterations: t.CInt): - counter: t.CInt = 0 - while counter < iterations: - if counter < 2: - print("Phase 1: ", counter) - elif counter < 4: - print("Phase 2: ", counter) - elif counter < 6: - print("Phase 3: ", counter) - else: - print("Phase 4: ", counter) - counter += 1 - print("While done") - - -def WhileWithNestedIfTest(limit: t.CInt): - outer: t.CInt = 0 - while outer < limit: - inner: t.CInt = 0 - while inner < limit: - if inner == 2 and outer == 1: - print("Target: ", outer, inner) - inner += 1 - continue - if inner > 3: - break - print("Inner: ", inner) - inner += 1 - outer += 1 - - -def WhileWithMatchCaseTest(value: t.CInt): - result: t.CInt = 0 - match value: - case 1: - result = 100 - print("Case 1") - case 2: - result = 200 - print("Case 2") - case 3: - result = 300 - print("Case 3") - case _: - result = 999 - print("Default case") - print("Match result: ", result) - - -def WhileWithMatchCaseNoBreakTest(value: t.CInt): - result: t.CInt = 0 - match value: - case 1: - result = 10 - print("Case 1: ", result) - case 2: - result = 20 - print("Case 2: ", result) - result += 5 - case 3: - result = 30 - print("Case 3: ", result) - case _: - result = 0 - print("No break match result: ", result) - - -def ComplexForWhileMatchTest(outer_limit: t.CInt, inner_limit: t.CInt): - i: t.CInt = 0 - j: t.CInt = 0 - result: t.CInt = 0 - for i in range(outer_limit): - j = 0 - while j < inner_limit: - match (i, j): - case (0, 0): - result += 1 - case (1, 1): - result += 10 - case (2, _): - result += 100 - case (_, 0): - result += 1000 - case _: - result += 10000 - j += 1 - print("Complex match result: ", result) - - -def ForWithCaseAndNoBreakTest(n: t.CInt): - i: t.CInt = 0 - result: t.CInt = 0 - for i in range(n): - match i: - case 0: - result += 1 - case 1: - result += 2 - case 2: - result += 3 - result += 10 - case _: - result += i - c.NoBreak - print("NoBreak result: ", result) - - -def WhileWithBreakConditionTest(limit: t.CInt): - i: t.CInt = 0 - early_exit: t.CInt = 0 - while i < limit: - if i == 3: - early_exit = 1 - break - if i == 2: - i += 1 - continue - print("While i: ", i) - i += 1 - - -def NestedWhileWithMultipleBreakPoints(depth: t.CInt, width: t.CInt): - d: t.CInt = 0 - w: t.CInt = 0 - count: t.CInt = 0 - while d < depth: - w = 0 - while w < width: - if w == 2: - break - if d == 1 and w == 1: - c.Break - count += 1 - w += 1 - d += 1 - print("Nested break count: ", count) - - -def ForWithMatchCaseInLoopTest(iterations: t.CInt): - i: t.CInt = 0 - sum_even: t.CInt = 0 - sum_odd: t.CInt = 0 - for i in range(iterations): - match i % 3: - case 0: - sum_even += i - case 1: - sum_odd += i - case 2: - sum_even += i * 2 - case _: - pass - print("Sum even: ", sum_even) - print("Sum odd: ", sum_odd) - - -def ComplexLogicWithElifChains(a: t.CInt, b: t.CInt, c_val: t.CInt): - i: t.CInt = 0 - result: t.CInt = 0 - while i < 10: - if i < a: - if i < b: - result += 1 - elif i < c_val: - result += 2 - else: - result += 3 - elif i < b: - if i < c_val: - result += 4 - else: - result += 5 - elif i < c_val: - result += 6 - else: - result += 7 - i += 1 - print("Complex elif chain result: ", result) - - -def ForRangeWithStepAndCondition(n: t.CInt, step: t.CInt): - i: t.CInt = 0 - count: t.CInt = 0 - for i in range(0, n, step): - if i % 2 == 0: - print("Even step: ", i) - count += 1 - else: - if i > 5: - print("Large odd: ", i) - else: - print("Small odd: ", i) - print("Total steps: ", count) - - -def MatchCaseWithGuardConditions(value: t.CInt): - result: t.CInt = 0 - match value: - case 1 if config.TRUE == 1: - result = 100 - case 2 if config.FALSE == 0: - result = 200 - case 3: - result = 300 - case _: - result = 0 - print("Guard match result: ", result) - - -def WhileWithMultipleMatchCases(iterations: t.CInt): - i: t.CInt = 0 - state: t.CInt = 0 - while i < iterations: - match state: - case 0: - if i > 3: - state = 1 - case 1: - if i > 6: - state = 2 - case 2: - if i > 9: - state = 0 - print("State at i=", i, ": ", state) - i += 1 - - -def ForWhileMixWithBreakAndContinue(n: t.CInt): - i: t.CInt = 0 - j: t.CInt = 0 - count: t.CInt = 0 - for i in range(n): - j = 0 - while j < n: - if j == 2: - j += 1 - continue - if i == 3 and j == 3: - break - count += 1 - j += 1 - print("Mix break continue count: ", count) - - -def ComplexCaseMatchingWithRanges(start: t.CInt, end: t.CInt): - i: t.CInt = 0 - bucket0: t.CInt = 0 - bucket1: t.CInt = 0 - bucket2: t.CInt = 0 - bucket3: t.CInt = 0 - for i in range(start, end): - match i: - case _ if i < 10: - bucket0 += 1 - case _ if i < 20: - bucket1 += 1 - case _ if i < 30: - bucket2 += 1 - case _: - bucket3 += 1 - print("Bucket0 (<10): ", bucket0) - print("Bucket1 (10-19): ", bucket1) - print("Bucket2 (20-29): ", bucket2) - print("Bucket3 (>=30): ", bucket3) - - -def WhileWithElifInElifChain(limit: t.CInt): - i: t.CInt = 0 - result: t.CInt = 0 - while i < limit: - if i < 2: - if i == 0: - result = 1 - else: - result = 2 - elif i < 4: - if i == 2: - result = 3 - else: - result = 4 - elif i < 6: - if i == 4: - result = 5 - else: - result = 6 - else: - result = 7 - print("Chain result[", i, "]: ", result) - i += 1 - - -def ForWithCaseNoBreakNested(inner_limit: t.CInt): - i: t.CInt = 0 - j: t.CInt = 0 - result: t.CInt = 0 - for i in range(3): - for j in range(inner_limit): - match j: - case 0: - result += 1 - case 1: - result += 2 - case _: - result += 3 - c.NoBreak - print("Nested NoBreak result: ", result) \ No newline at end of file diff --git a/Test/TestProject/App/zc/test.vp b/Test/TestProject/App/zc/test.vp deleted file mode 100644 index 24a08a8..0000000 --- a/Test/TestProject/App/zc/test.vp +++ /dev/null @@ -1,298 +0,0 @@ -import config -import t, c - - -def AboutSizeTWhileTest(length: t.CSizeT): - pos: t.CSizeT = 0 - while pos < length: - print("Pos: ", pos) - if pos > config.POSMAX: break - pos += 1 - while pos < length: - if pos > config.POSMAX: - print("Pos: ", pos) - pos += 1 - else: - print("Pos: ", pos) - pos += 1 - if pos > config.POSMAX: break - else: - pos += 1 - print("Pos: ", pos) - while pos < length: - print("Pos: ", pos) - pos += 1 - - -def MathBasicTest(x: t.CInt, y: t.CInt) -> t.CInt: - result: t.CInt = 0 - result = x + y - print("Add: ", result) - result = x - y - print("Sub: ", result) - result = x * y - print("Mul: ", result) - if y != 0: - result = x / y - print("Div: ", result) - result = x % y if y != 0 else 0 - print("Mod: ", result) - return result - - -def MathAdvancedTest(value: t.CInt) -> t.CInt: - counter: t.CInt = 0 - scaled: t.CInt = 0 - offset: t.CInt = 0 - scaled = value * config.MATH_SCALE - print("Scaled: ", scaled) - offset = scaled + config.MATH_OFFSET - print("Offset: ", offset) - threshold: t.CInt = config.THRESHOLD - if offset > threshold: - print("Above threshold") - counter = 1 - elif offset == threshold: - print("At threshold") - counter = 0 - else: - print("Below threshold") - counter = -1 - return counter - - -def WhileWithElifElseTest(start: t.CInt, end: t.CInt): - idx: t.CInt = start - while idx < end: - if idx < 0: - print("Negative: ", idx) - elif idx == 0: - print("Zero: ", idx) - elif idx > 0 and idx < 5: - print("Small positive: ", idx) - elif idx >= 5 and idx < 10: - print("Medium positive: ", idx) - else: - print("Large: ", idx) - idx += 1 - - -def NestedWhileWithMacrosTest(outer_limit: t.CInt, inner_limit: t.CInt): - outer: t.CInt = 0 - inner: t.CInt = 0 - total_ops: t.CInt = 0 - while outer < outer_limit: - inner = 0 - while inner < inner_limit: - if inner == config.TRUE: - print("Inner loop break condition at: ", inner) - total_ops += 1 - inner += 1 - outer += 1 - print("Total operations: ", total_ops) - - -def ComplexConditionTest(a: t.CInt, b: t.CInt, c_val: t.CInt): - x: t.CInt = a - y: t.CInt = b - z: t.CInt = c_val - while x < config.LOOP_LIMIT: - if x > 0 and y > 0 and z > 0: - print("All positive: ", x, y, z) - elif x <= 0 and y <= 0 and z <= 0: - print("All non-positive: ", x, y, z) - else: - if x > 0: - print("X positive") - elif y > 0: - print("Y positive") - else: - print("Z positive") - x += 1 - y += 1 - z += 1 - - -def RetryLoopTest(retry_count: t.CInt) -> t.CInt: - attempt: t.CInt = 0 - success: t.CInt = 0 - while attempt < retry_count: - if attempt < config.MAX_RETRY: - print("Attempt: ", attempt, " less than max") - success = attempt * 2 - elif attempt == config.MAX_RETRY: - print("At max retry") - success = -1 - else: - print("Beyond max retry") - success = -2 - attempt += 1 - return success - - -def BitwiseOperationsTest(value: t.CInt) -> t.CInt: - shifted: t.CInt = 0 - masked: t.CInt = 0 - xored: t.CInt = 0 - anded: t.CInt = 0 - ored: t.CInt = 0 - shifted = value << config.SHIFT_AMOUNT - print("Left shift: ", shifted) - shifted = value >> config.SHIFT_AMOUNT - print("Right shift: ", shifted) - masked = value & config.MASK_VALUE - print("Bitwise AND mask: ", masked) - xored = value ^ config.MASK_VALUE - print("Bitwise XOR: ", xored) - anded = value & (config.MASK_VALUE >> config.SHIFT_AMOUNT) - print("Bitwise AND shifted mask: ", anded) - ored = value | config.SHIFT_AMOUNT - print("Bitwise OR shift: ", ored) - return masked - - -def CompoundAssignmentMathTest(a: t.CInt, b: t.CInt) -> t.CInt: - x: t.CInt = a - y: t.CInt = b - result: t.CInt = 0 - x += y - print("x += y: ", x) - x -= y - print("x -= y: ", x) - x *= y - print("x *= y: ", x) - x = a - y = b - if b != 0: - x /= b - print("x /= y: ", x) - x = a - if b != 0: - x %= b - print("x %%= y: ", x) - x = a - x <<= config.SHIFT_AMOUNT - print("x <<= shift: ", x) - x >>= config.SHIFT_AMOUNT - print("x >>= shift: ", x) - x &= config.MASK_VALUE - print("x &= mask: ", x) - x |= config.SHIFT_AMOUNT - print("x |= shift: ", x) - result = (a + b) * config.MATH_SCALE - config.MATH_OFFSET - print("Compound: (a+b)*scale-offset: ", result) - result = (a * b) + (config.MATH_OFFSET / 2) - print("Compound: a*b+offset/2: ", result) - return result - - -def PowerAndModuloTest(base: t.CInt, exponent: t.CInt) -> t.CInt: - result: t.CInt = 1 - temp: t.CInt = 0 - i: t.CInt = 0 - while i < exponent: - result *= base - i += 1 - print("Power: ", result) - temp = result % config.MODULO_DIVISOR - print("Power mod: ", temp) - temp = (base * config.EXPONENT_BASE) % config.MODULO_DIVISOR - print("base*exp %% divisor: ", temp) - temp = ((base + config.MATH_OFFSET) * config.MATH_SCALE) % config.MODULO_DIVISOR - print("(base+offset)*scale %% divisor: ", temp) - return result - - -def MixedArithmeticTest(x: t.CInt, y: t.CInt, z: t.CInt) -> t.CInt: - result: t.CInt = 0 - result = (x + y) * z - print("(x+y)*z: ", result) - result = x + (y * z) - print("x+(y*z): ", result) - result = ((x + y) * config.MATH_SCALE) - config.MATH_OFFSET - print("((x+y)*scale)-offset: ", result) - result = (x * config.MATH_SCALE) + (y * config.MATH_SCALE) - print("x*scale + y*scale: ", result) - result = ((x % config.MODULO_DIVISOR) + (y % config.MODULO_DIVISOR)) * config.MATH_SCALE - print("(x%%mod + y%%mod)*scale: ", result) - temp: t.CInt = 0 - temp = x | y & z - print("x | y & z: ", temp) - temp = (x | y) & z - print("(x | y) & z: ", temp) - temp = x ^ y ^ z - print("x ^ y ^ z: ", temp) - return result - - -def MathWithWhileLoopTest(start: t.CInt, count: t.CInt) -> t.CInt: - idx: t.CInt = 0 - accumulator: t.CInt = 0 - multiplier: t.CInt = config.MATH_SCALE - while idx < count: - temp: t.CInt = (start + idx) * multiplier - temp = temp + config.MATH_OFFSET - if temp > config.THRESHOLD: - temp = config.THRESHOLD - accumulator += temp - multiplier += 1 - idx += 1 - print("Accumulator: ", accumulator) - return accumulator - - -def ComplexNestedMathTest(a: t.CInt, b: t.CInt) -> t.CInt: - layer1: t.CInt = 0 - layer2: t.CInt = 0 - layer3: t.CInt = 0 - i: t.CInt = 0 - layer1 = (a + b) * config.MATH_SCALE - print("Layer1: ", layer1) - while i < config.BIT_RANGE: - layer2 += layer1 >> 1 - i += 1 - print("Layer2: ", layer2) - layer3 = layer1 + layer2 - config.MATH_OFFSET - print("Layer3: ", layer3) - layer3 = layer3 * config.MATH_SCALE / 2 if config.MATH_SCALE != 0 else layer3 - print("Layer3 scaled: ", layer3) - return layer3 - - -def ConditionalMathChainTest(value: t.CInt) -> t.CInt: - result: t.CInt = 0 - step: t.CInt = 0 - while step < config.LOOP_LIMIT: - if step < 5: - result += step * config.MATH_SCALE - print("step<5: ", result) - elif step < 10: - result -= step - config.MATH_OFFSET - print("step<10: ", result) - elif step < 15: - result += (step * config.MATH_OFFSET) / config.MATH_SCALE - print("step<15: ", result) - else: - result = result * config.EXPONENT_BASE % config.MODULO_DIVISOR - print("step>=15: ", result) - step += 1 - return result - - -def BitManipulationMathTest(value: t.CInt) -> t.CInt: - original: t.CInt = value - nibble: t.CInt = 0 - result: t.CInt = 0 - result = (value << config.SHIFT_AMOUNT) | (value >> (8 - config.SHIFT_AMOUNT)) - print("Rotate left: ", result) - result = (value >> config.SHIFT_AMOUNT) | (value << (8 - config.SHIFT_AMOUNT)) - print("Rotate right: ", result) - nibble = value & 0xF - print("Lower nibble: ", nibble) - nibble = (value >> config.BIT_RANGE) & 0xF - print("Upper nibble: ", nibble) - result = ((value & config.MASK_VALUE) + config.MATH_OFFSET) * config.MATH_SCALE - print("Masked and scaled: ", result) - result = ((original << config.SHIFT_AMOUNT) ^ original) & config.MASK_VALUE - print("XOR shifted: ", result) - return result \ No newline at end of file diff --git a/Test/TestProject/output/49cae05490a513cb.deps.json b/Test/TestProject/output/49cae05490a513cb.deps.json deleted file mode 100644 index acdc08a..0000000 --- a/Test/TestProject/output/49cae05490a513cb.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"memhub": "04e5fe47ff2af528", "stdio": "285b6aa29a34754d", "test_numpy": "3cd87018ba1e76bc", "vipermath": "3f7c5e78d8652535", "stdlib": "6c658cc728d0bbf4", "testcheck": "748d0424e8976fa0", "zc.test": "75583f20a922ab2e", "test": "75583f20a922ab2e", "config": "cfc83b830141b00e", "string": "928c0ff6d8c69ec9", "atom": "aa246c6e6aa30484", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "numpy.__init__": "c3a6aed1f1fb8b1e", "__init__": "c3a6aed1f1fb8b1e", "numpy": "c3a6aed1f1fb8b1e", "viperio": "c9f4be41ca1cc2b4", "zc.config": "cfc83b830141b00e", "zc.class_test": "e5fb16127bce8f68", "class_test": "e5fb16127bce8f68", "stdint": "f5522571bcce7bcb", "zc.logic_test": "faec3233d98371da", "logic_test": "faec3233d98371da", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7"} \ No newline at end of file diff --git a/Test/TestProject/output/75583f20a922ab2e.deps.json b/Test/TestProject/output/75583f20a922ab2e.deps.json deleted file mode 100644 index dc354b7..0000000 --- a/Test/TestProject/output/75583f20a922ab2e.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"memhub": "04e5fe47ff2af528", "stdio": "285b6aa29a34754d", "test_numpy": "3cd87018ba1e76bc", "vipermath": "3f7c5e78d8652535", "main": "49cae05490a513cb", "stdlib": "6c658cc728d0bbf4", "testcheck": "748d0424e8976fa0", "config": "cfc83b830141b00e", "string": "928c0ff6d8c69ec9", "atom": "aa246c6e6aa30484", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "numpy.__init__": "c3a6aed1f1fb8b1e", "__init__": "c3a6aed1f1fb8b1e", "numpy": "c3a6aed1f1fb8b1e", "viperio": "c9f4be41ca1cc2b4", "zc.config": "cfc83b830141b00e", "zc.class_test": "e5fb16127bce8f68", "class_test": "e5fb16127bce8f68", "stdint": "f5522571bcce7bcb", "zc.logic_test": "faec3233d98371da", "logic_test": "faec3233d98371da", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7"} \ No newline at end of file diff --git a/Test/TestProject/output/8e0d8fdba991b3b4.deps.json b/Test/TestProject/output/8e0d8fdba991b3b4.deps.json deleted file mode 100644 index 8f09b8f..0000000 --- a/Test/TestProject/output/8e0d8fdba991b3b4.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"memhub": "04e5fe47ff2af528", "stdio": "285b6aa29a34754d", "test_numpy": "3cd87018ba1e76bc", "vipermath": "3f7c5e78d8652535", "main": "49cae05490a513cb", "stdlib": "6c658cc728d0bbf4", "testcheck": "748d0424e8976fa0", "zc.test": "75583f20a922ab2e", "test": "75583f20a922ab2e", "string": "928c0ff6d8c69ec9", "atom": "aa246c6e6aa30484", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "numpy.__init__": "c3a6aed1f1fb8b1e", "__init__": "c3a6aed1f1fb8b1e", "numpy": "c3a6aed1f1fb8b1e", "viperio": "c9f4be41ca1cc2b4", "zc.config": "cfc83b830141b00e", "config": "cfc83b830141b00e", "zc.class_test": "e5fb16127bce8f68", "class_test": "e5fb16127bce8f68", "stdint": "f5522571bcce7bcb", "zc.logic_test": "faec3233d98371da", "logic_test": "faec3233d98371da", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7"} \ No newline at end of file diff --git a/Test/TestProject/output/cfc83b830141b00e.deps.json b/Test/TestProject/output/cfc83b830141b00e.deps.json deleted file mode 100644 index 0b2b60e..0000000 --- a/Test/TestProject/output/cfc83b830141b00e.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"memhub": "04e5fe47ff2af528", "stdio": "285b6aa29a34754d", "test_numpy": "3cd87018ba1e76bc", "vipermath": "3f7c5e78d8652535", "main": "49cae05490a513cb", "stdlib": "6c658cc728d0bbf4", "testcheck": "748d0424e8976fa0", "zc.test": "75583f20a922ab2e", "test": "75583f20a922ab2e", "config": "8e0d8fdba991b3b4", "string": "928c0ff6d8c69ec9", "atom": "aa246c6e6aa30484", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "numpy.__init__": "c3a6aed1f1fb8b1e", "__init__": "c3a6aed1f1fb8b1e", "numpy": "c3a6aed1f1fb8b1e", "viperio": "c9f4be41ca1cc2b4", "zc.class_test": "e5fb16127bce8f68", "class_test": "e5fb16127bce8f68", "stdint": "f5522571bcce7bcb", "zc.logic_test": "faec3233d98371da", "logic_test": "faec3233d98371da", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7"} \ No newline at end of file diff --git a/Test/TestProject/output/e5fb16127bce8f68.deps.json b/Test/TestProject/output/e5fb16127bce8f68.deps.json deleted file mode 100644 index c91720d..0000000 --- a/Test/TestProject/output/e5fb16127bce8f68.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"memhub": "04e5fe47ff2af528", "stdio": "285b6aa29a34754d", "test_numpy": "3cd87018ba1e76bc", "vipermath": "3f7c5e78d8652535", "main": "49cae05490a513cb", "stdlib": "6c658cc728d0bbf4", "testcheck": "748d0424e8976fa0", "zc.test": "75583f20a922ab2e", "test": "75583f20a922ab2e", "config": "cfc83b830141b00e", "string": "928c0ff6d8c69ec9", "atom": "aa246c6e6aa30484", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "numpy.__init__": "c3a6aed1f1fb8b1e", "__init__": "c3a6aed1f1fb8b1e", "numpy": "c3a6aed1f1fb8b1e", "viperio": "c9f4be41ca1cc2b4", "zc.config": "cfc83b830141b00e", "stdint": "f5522571bcce7bcb", "zc.logic_test": "faec3233d98371da", "logic_test": "faec3233d98371da", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7"} \ No newline at end of file diff --git a/Test/TestProject/output/faec3233d98371da.deps.json b/Test/TestProject/output/faec3233d98371da.deps.json deleted file mode 100644 index 5b29178..0000000 --- a/Test/TestProject/output/faec3233d98371da.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"memhub": "04e5fe47ff2af528", "stdio": "285b6aa29a34754d", "test_numpy": "3cd87018ba1e76bc", "vipermath": "3f7c5e78d8652535", "main": "49cae05490a513cb", "stdlib": "6c658cc728d0bbf4", "testcheck": "748d0424e8976fa0", "zc.test": "75583f20a922ab2e", "test": "75583f20a922ab2e", "config": "cfc83b830141b00e", "string": "928c0ff6d8c69ec9", "atom": "aa246c6e6aa30484", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "numpy.__init__": "c3a6aed1f1fb8b1e", "__init__": "c3a6aed1f1fb8b1e", "numpy": "c3a6aed1f1fb8b1e", "viperio": "c9f4be41ca1cc2b4", "zc.config": "cfc83b830141b00e", "zc.class_test": "e5fb16127bce8f68", "class_test": "e5fb16127bce8f68", "stdint": "f5522571bcce7bcb", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7"} \ No newline at end of file diff --git a/Test/TestProject/project.json b/Test/TestProject/project.json deleted file mode 100644 index 743baad..0000000 --- a/Test/TestProject/project.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/TermiNexus/TransPyC/main/schemas/project-schema.json", - "name": "TestProject", - "version": "1.0.0", - "source_dir": "./App", - "build_dir": "./.tpv_build", - "compiler": { - "cmd": "llc", - "flags": ["-filetype=obj"] - }, - "linker": { - "cmd": "clang++", - "flags": ["-Wl,--allow-multiple-definition", "-Wl,--unresolved-symbols=ignore-in-object-files", "-lmsvcrt", "-lucrt", "-lpthread", "-lmingwex", "-lkernel32", "-luser32", "-latomic"], - "output": "TestProject.exe" - }, - "includes": [ - "../../includes" - ], - "target": { - "triple": "x86_64-pc-windows-gnu", - "datalayout": "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" - }, - "options": { - "slice_level": 3, - "sha1_slice_level": 1, - "target": "llvm", - "strict_mode": true - } -} diff --git a/Test/TestProject/temp/285b6aa29a34754d.stub.ll.dep b/Test/TestProject/temp/285b6aa29a34754d.stub.ll.dep deleted file mode 100644 index e69de29..0000000 diff --git a/Test/TestProject/temp/285b6aa29a34754d.vpi b/Test/TestProject/temp/285b6aa29a34754d.vpi deleted file mode 100644 index acc57c7..0000000 --- a/Test/TestProject/temp/285b6aa29a34754d.vpi +++ /dev/null @@ -1,23 +0,0 @@ -""" -Auto-generated Python stub file from stdio.vp -Module: stdio -""" - - -import t, c - -def printf(fmt: t.CConst | str, *args) -> int | t.State: pass - -def fprintf(stream: bytes, fmt: t.CConst | str, *args) -> int | t.State: pass - -def sprintf(buf: bytes, fmt: t.CConst | str, *args) -> int | t.State: pass - -def snprintf(buf: bytes, size: t.CSizeT, fmt: t.CConst | str, *args) -> int | t.State: pass - -def puts(s: t.CConst | str) -> int | t.State: pass - -def fputs(s: t.CConst | str, stream: bytes) -> int | t.State: pass - -def fgets(buf: bytes, size: int, stream: bytes) -> bytes | t.State: pass - -def fflush(stream: bytes) -> int | t.State: pass diff --git a/Test/TestProject/temp/3cd87018ba1e76bc.doc.json b/Test/TestProject/temp/3cd87018ba1e76bc.doc.json deleted file mode 100644 index 9e26dfe..0000000 --- a/Test/TestProject/temp/3cd87018ba1e76bc.doc.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/Test/TestProject/temp/3cd87018ba1e76bc.vpi b/Test/TestProject/temp/3cd87018ba1e76bc.vpi deleted file mode 100644 index 18dba6c..0000000 --- a/Test/TestProject/temp/3cd87018ba1e76bc.vpi +++ /dev/null @@ -1,108 +0,0 @@ -""" -Auto-generated Python stub file from test_numpy.vp -Module: test_numpy -""" - - -from stdint import * -import numpy -from stdio import printf -from stdlib import calloc, free -import string -import vipermath -import memhub -import t, c - -EPS: t.CExtern | t.CDouble -EPS_LOOSE: t.CExtern | t.CDouble -SIMD_BLOCK: t.CExtern | t.CSizeT -arena: t.CExtern | t.CUInt8T | t.CPtr -pool: t.CExtern | memhub.MemPool | t.CPtr -test_passed: t.CExtern | t.CInt -test_failed: t.CExtern | t.CInt - -def check(name: str, condition: t.CInt, detail: str) -> t.CInt: pass - -def approx_eq(a: t.CDouble, b: t.CDouble) -> t.CInt: pass - -def approx_loose(a: t.CDouble, b: t.CDouble) -> t.CInt: pass - -def section_header(title: str) -> t.CInt: pass - -def section_footer() -> t.CInt: pass - -def vec4(p: memhub.MemPool | t.CPtr, v0: t.CDouble, v1: t.CDouble, v2: t.CDouble, v3: t.CDouble) -> numpy.ndarray | t.CPtr: pass - -def vec3(p: memhub.MemPool | t.CPtr, v0: t.CDouble, v1: t.CDouble, v2: t.CDouble) -> numpy.ndarray | t.CPtr: pass - -def vec2(p: memhub.MemPool | t.CPtr, v0: t.CDouble, v1: t.CDouble) -> numpy.ndarray | t.CPtr: pass - -def test_zeros_ones() -> t.CInt: pass - -def test_arange_linspace() -> t.CInt: pass - -def test_eye_diag() -> t.CInt: pass - -def test_sum_mean_min_max() -> t.CInt: pass - -def test_fill_copy() -> t.CInt: pass - -def test_add_sub_mul_div() -> t.CInt: pass - -def test_neg() -> t.CInt: pass - -def test_len() -> t.CInt: pass - -def test_scalar_ops() -> t.CInt: pass - -def test_math_funcs() -> t.CInt: pass - -def test_matmul() -> t.CInt: pass - -def test_dot() -> t.CInt: pass - -def test_transpose() -> t.CInt: pass - -def test_var_std_norm() -> t.CInt: pass - -def test_clip_concatenate() -> t.CInt: pass - -def test_sort_reverse() -> t.CInt: pass - -def test_print_arr() -> t.CInt: pass - -def test_floordiv_mod() -> t.CInt: pass - -def test_additional_math() -> t.CInt: pass - -def test_trig_hyperbolic() -> t.CInt: pass - -def test_degrees_radians() -> t.CInt: pass - -def test_cumsum_diff() -> t.CInt: pass - -def test_max_min_where() -> t.CInt: pass - -def test_flatten_trace() -> t.CInt: pass - -def test_outer() -> t.CInt: pass - -def test_bool_comparison() -> t.CInt: pass - -def test_linalg() -> t.CInt: pass - -def test_additional_creation() -> t.CInt: pass - -def test_interp() -> t.CInt: pass - -def test_numpy_edge() -> t.CInt: pass - -def bench_numpy_perf() -> t.CInt: pass - -def test_numpy_correct() -> t.CInt: pass - -def test_numpy_edge_main() -> t.CInt: pass - -def bench_numpy_main() -> t.CInt: pass - -def test_numpy_main() -> t.CInt: pass diff --git a/Test/TestProject/temp/3f7c5e78d8652535.stub.ll.dep b/Test/TestProject/temp/3f7c5e78d8652535.stub.ll.dep deleted file mode 100644 index e69de29..0000000 diff --git a/Test/TestProject/temp/3f7c5e78d8652535.vpi b/Test/TestProject/temp/3f7c5e78d8652535.vpi deleted file mode 100644 index b7c7585..0000000 --- a/Test/TestProject/temp/3f7c5e78d8652535.vpi +++ /dev/null @@ -1,128 +0,0 @@ -""" -Auto-generated Python stub file from vipermath.vp -Module: vipermath -""" - - -import t, c - -U_M_PI: t.CDefine = 3.14159265358979323846 -U_M_E: t.CDefine = 2.71828182845904523536 -U_M_PI_2: t.CDefine = 1.57079632679489661923 -U_M_PI_4: t.CDefine = 0.78539816339744830962 -U_M_1_PI: t.CDefine = 0.31830988618379067154 -U_M_2_PI: t.CDefine = 0.63661977236758134308 -U_M_LN2: t.CDefine = 0.69314718055994530942 -U_M_LN10: t.CDefine = 2.30258509299404568402 -U_M_2_SQRT_PI: t.CDefine = 1.77245385090551602730 - -def radians(degrees: t.CDouble) -> t.CDouble: pass - -def degrees(radians: t.CDouble) -> t.CDouble: pass - -def sin(x: t.CDouble) -> t.CDouble: pass - -def cos(x: t.CDouble) -> t.CDouble: pass - -def tan(x: t.CDouble) -> t.CDouble: pass - -def asin(x: t.CDouble) -> t.CDouble: pass - -def acos(x: t.CDouble) -> t.CDouble: pass - -def _atan_core(x: t.CDouble) -> t.CDouble: pass - -def atan(x: t.CDouble) -> t.CDouble: pass - -def atan2(y: t.CDouble, x: t.CDouble) -> t.CDouble: pass - -def sinh(x: t.CDouble) -> t.CDouble: pass - -def cosh(x: t.CDouble) -> t.CDouble: pass - -def tanh(x: t.CDouble) -> t.CDouble: pass - -def exp(x: t.CDouble) -> t.CDouble: pass - -def log(x: t.CDouble) -> t.CDouble: pass - -def sqrt(x: t.CDouble) -> t.CDouble: pass - -def abs(x: t.CInt) -> t.CInt: pass - -def fabs(x: t.CDouble) -> t.CDouble: pass - -def labs(x: t.CLong) -> t.CLong: pass - -def factorial(n: t.CInt) -> t.CDouble: pass - -def combination(n: t.CInt, k: t.CInt) -> t.CDouble: pass - -def permutation(n: t.CInt, k: t.CInt) -> t.CDouble: pass - -def pow(x: t.CDouble, y: t.CDouble) -> t.CDouble: pass - -def powf(x: t.CDouble, y: t.CDouble) -> t.CDouble: pass - -def cbrt(x: t.CDouble) -> t.CDouble: pass - -def hypot(x: t.CDouble, y: t.CDouble) -> t.CDouble: pass - -def floor(x: t.CDouble) -> t.CDouble: pass - -def ceil(x: t.CDouble) -> t.CDouble: pass - -def round(x: t.CDouble) -> t.CDouble: pass - -def trunc(x: t.CDouble) -> t.CDouble: pass - -def fmod(x: t.CDouble, y: t.CDouble) -> t.CDouble: pass - -def fmodf(x: float, y: float) -> float: pass - -def modf(x: t.CDouble, iptr: t.CDouble | t.CPtr) -> t.CDouble: pass - -def log10(x: t.CDouble) -> t.CDouble: pass - -def log2(x: t.CDouble) -> t.CDouble: pass - -def exp2(x: t.CDouble) -> t.CDouble: pass - -def expm1(x: t.CDouble) -> t.CDouble: pass - -def log1p(x: t.CDouble) -> t.CDouble: pass - -def asinh(x: t.CDouble) -> t.CDouble: pass - -def acosh(x: t.CDouble) -> t.CDouble: pass - -def atanh(x: t.CDouble) -> t.CDouble: pass - -def gamma(x: t.CDouble) -> t.CDouble: pass - -def erf(x: t.CDouble) -> t.CDouble: pass - -def erfc(x: t.CDouble) -> t.CDouble: pass - -def sqrtf(x: t.CFloat) -> t.CFloat: pass - -def sinf(x: t.CFloat) -> t.CFloat: pass - -def cosf(x: t.CFloat) -> t.CFloat: pass - -def tanf(x: t.CFloat) -> t.CFloat: pass - -def fabsf(x: t.CFloat) -> t.CFloat: pass - -def floorf(x: t.CFloat) -> t.CFloat: pass - -def ceilf(x: t.CFloat) -> t.CFloat: pass - - -class _U(t.CUnion): - d: t.CDouble - u: t.CUInt64T - -def isnan(x: t.CDouble) -> t.CStatic | t.CInt: pass - -def isinf(x: t.CDouble) -> t.CStatic | t.CInt: pass diff --git a/Test/TestProject/temp/49cae05490a513cb.doc.json b/Test/TestProject/temp/49cae05490a513cb.doc.json deleted file mode 100644 index 9e26dfe..0000000 --- a/Test/TestProject/temp/49cae05490a513cb.doc.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/Test/TestProject/temp/49cae05490a513cb.vpi b/Test/TestProject/temp/49cae05490a513cb.vpi deleted file mode 100644 index 634d3d0..0000000 --- a/Test/TestProject/temp/49cae05490a513cb.vpi +++ /dev/null @@ -1,19 +0,0 @@ -""" -Auto-generated Python stub file from main.vp -Module: main -""" - -import t -import c - - -import stdio -import stdint -import zc.config as config -import zc.test as test -import zc.logic_test as logic -import zc.class_test as class_test -import testcheck -import test_numpy - -def main() -> stdint.INT: pass diff --git a/Test/TestProject/temp/6c658cc728d0bbf4.stub.ll.dep b/Test/TestProject/temp/6c658cc728d0bbf4.stub.ll.dep deleted file mode 100644 index 793e7ed..0000000 --- a/Test/TestProject/temp/6c658cc728d0bbf4.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -f5522571bcce7bcb \ No newline at end of file diff --git a/Test/TestProject/temp/6c658cc728d0bbf4.vpi b/Test/TestProject/temp/6c658cc728d0bbf4.vpi deleted file mode 100644 index d7c42cf..0000000 --- a/Test/TestProject/temp/6c658cc728d0bbf4.vpi +++ /dev/null @@ -1,22 +0,0 @@ -""" -Auto-generated Python stub file from stdlib.vp -Module: stdlib -""" - -import c - - -from stdint import * -import t - -def malloc(size: t.CSizeT) -> t.CVoid | t.CPtr | t.State: pass - -def calloc(nmemb: t.CSizeT, size: t.CSizeT) -> t.CVoid | t.CPtr | t.State: pass - -def realloc(p: t.CVoid | t.CPtr, size: t.CSizeT) -> t.CVoid | t.CPtr | t.State: pass - -def free(p: t.CVoid | t.CPtr) -> t.State: pass - -def system(cmd: t.CConst | t.CChar | t.CPtr) -> INT | t.State: pass - -def exit(status: int) -> t.State: pass diff --git a/Test/TestProject/temp/748d0424e8976fa0.stub.ll.dep b/Test/TestProject/temp/748d0424e8976fa0.stub.ll.dep deleted file mode 100644 index be4eebc..0000000 --- a/Test/TestProject/temp/748d0424e8976fa0.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -285b6aa29a34754d|bbdf3bbd4c3bc28c|f5522571bcce7bcb|fc980acec33d69a7 \ No newline at end of file diff --git a/Test/TestProject/temp/748d0424e8976fa0.vpi b/Test/TestProject/temp/748d0424e8976fa0.vpi deleted file mode 100644 index 5ff4850..0000000 --- a/Test/TestProject/temp/748d0424e8976fa0.vpi +++ /dev/null @@ -1,31 +0,0 @@ -""" -Auto-generated Python stub file from testcheck.vp -Module: testcheck -""" - - -import t, c -import stdio -from w32.win32console import SetConsoleOutputCP, SetConsoleCP - -CP_UTF8: t.CDefine = 65001 -_pass_count: t.CExtern | t.CInt -_fail_count: t.CExtern | t.CInt -_total_pass: t.CExtern | t.CInt -_total_fail: t.CExtern | t.CInt - -def begin(name: str) -> t.CInt: pass - -def section(name: str) -> t.CInt: pass - -def ok(msg: str) -> t.CInt: pass - -def fail(msg: str) -> t.CInt: pass - -def check(cond: t.CInt, ok_msg: str, fail_msg: str) -> t.CInt: pass - -def info(msg: str) -> t.CInt: pass - -def end() -> t.CInt: pass - -def summary() -> t.CInt: pass diff --git a/Test/TestProject/temp/75583f20a922ab2e.doc.json b/Test/TestProject/temp/75583f20a922ab2e.doc.json deleted file mode 100644 index 9e26dfe..0000000 --- a/Test/TestProject/temp/75583f20a922ab2e.doc.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/Test/TestProject/temp/75583f20a922ab2e.vpi b/Test/TestProject/temp/75583f20a922ab2e.vpi deleted file mode 100644 index 9da5382..0000000 --- a/Test/TestProject/temp/75583f20a922ab2e.vpi +++ /dev/null @@ -1,38 +0,0 @@ -""" -Auto-generated Python stub file from zc.test.vp -Module: zc.test -""" - - -import config -import t, c - -def AboutSizeTWhileTest(length: t.CSizeT) -> t.CInt: pass - -def MathBasicTest(x: t.CInt, y: t.CInt) -> t.CInt: pass - -def MathAdvancedTest(value: t.CInt) -> t.CInt: pass - -def WhileWithElifElseTest(start: t.CInt, end: t.CInt) -> t.CInt: pass - -def NestedWhileWithMacrosTest(outer_limit: t.CInt, inner_limit: t.CInt) -> t.CInt: pass - -def ComplexConditionTest(a: t.CInt, b: t.CInt, c_val: t.CInt) -> t.CInt: pass - -def RetryLoopTest(retry_count: t.CInt) -> t.CInt: pass - -def BitwiseOperationsTest(value: t.CInt) -> t.CInt: pass - -def CompoundAssignmentMathTest(a: t.CInt, b: t.CInt) -> t.CInt: pass - -def PowerAndModuloTest(base: t.CInt, exponent: t.CInt) -> t.CInt: pass - -def MixedArithmeticTest(x: t.CInt, y: t.CInt, z: t.CInt) -> t.CInt: pass - -def MathWithWhileLoopTest(start: t.CInt, count: t.CInt) -> t.CInt: pass - -def ComplexNestedMathTest(a: t.CInt, b: t.CInt) -> t.CInt: pass - -def ConditionalMathChainTest(value: t.CInt) -> t.CInt: pass - -def BitManipulationMathTest(value: t.CInt) -> t.CInt: pass diff --git a/Test/TestProject/temp/8e0d8fdba991b3b4.doc.json b/Test/TestProject/temp/8e0d8fdba991b3b4.doc.json deleted file mode 100644 index 9e26dfe..0000000 --- a/Test/TestProject/temp/8e0d8fdba991b3b4.doc.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/Test/TestProject/temp/8e0d8fdba991b3b4.vpi b/Test/TestProject/temp/8e0d8fdba991b3b4.vpi deleted file mode 100644 index e6465d3..0000000 --- a/Test/TestProject/temp/8e0d8fdba991b3b4.vpi +++ /dev/null @@ -1,25 +0,0 @@ -""" -Auto-generated Python stub file from config.vp -Module: config -""" - - -import stdint -import t, c - -A: t.CExtern | t.CChar | t.CPtr - -class BIT_TEST(t.Object): - a: t.CInt | t.Bit(1) - b: t.CInt | t.Bit(1) - c: t.CInt | t.Bit(1) - d: t.CInt | t.Bit(5) -class OOP_TEST(t.Object): - a: t.CInt - def __init__(self: OOP_TEST) -> t.CInt: pass - def __call__(self: OOP_TEST) -> stdint.UINT: pass -class ENUM_TEST(t.CEnum): - A: t.State = 0 - B: t.State - C: t.State - Len: t.State \ No newline at end of file diff --git a/Test/TestProject/temp/_phase1_manifest.json b/Test/TestProject/temp/_phase1_manifest.json deleted file mode 100644 index cd39d9f..0000000 --- a/Test/TestProject/temp/_phase1_manifest.json +++ /dev/null @@ -1 +0,0 @@ -{"d:\\Users\\TermiNexus\\Desktop\\TransPyC\\Test\\TestProject\\App\\config.vp": {"sha1": "8e0d8fdba991b3b4", "mtime": 1781111175.0269876, "size": 445}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\Test\\TestProject\\App\\main.vp": {"sha1": "49cae05490a513cb", "mtime": 1782949786.0815294, "size": 8223}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\Test\\TestProject\\App\\test_numpy.vp": {"sha1": "3cd87018ba1e76bc", "mtime": 1782828269.700148, "size": 40140}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\Test\\TestProject\\App\\zc\\class_test.vp": {"sha1": "e5fb16127bce8f68", "mtime": 1782266207.4312654, "size": 6472}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\Test\\TestProject\\App\\zc\\config.vp": {"sha1": "cfc83b830141b00e", "mtime": 1778402243.1661563, "size": 531}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\Test\\TestProject\\App\\zc\\logic_test.vp": {"sha1": "faec3233d98371da", "mtime": 1778402365.7843194, "size": 8848}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\Test\\TestProject\\App\\zc\\test.vp": {"sha1": "75583f20a922ab2e", "mtime": 1778401973.4865518, "size": 8976}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\atom.vp": {"sha1": "aa246c6e6aa30484", "mtime": 1785389628.701967, "size": 1198}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\memhub.vp": {"sha1": "04e5fe47ff2af528", "mtime": 1786093335.1900027, "size": 27855}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\numpy\\__init__.vp": {"sha1": "c3a6aed1f1fb8b1e", "mtime": 1784446436.2910569, "size": 39111}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\stdint.vp": {"sha1": "f5522571bcce7bcb", "mtime": 1785563642.3805652, "size": 4356}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\stdio.vp": {"sha1": "285b6aa29a34754d", "mtime": 1785332415.1829746, "size": 561}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\stdlib.vp": {"sha1": "6c658cc728d0bbf4", "mtime": 1785750602.5446548, "size": 413}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\string.vp": {"sha1": "928c0ff6d8c69ec9", "mtime": 1786032947.9330952, "size": 11557}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\testcheck.vp": {"sha1": "748d0424e8976fa0", "mtime": 1785332415.20287, "size": 1919}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\viperio.vp": {"sha1": "c9f4be41ca1cc2b4", "mtime": 1782812279.506002, "size": 1556}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\vipermath.vp": {"sha1": "3f7c5e78d8652535", "mtime": 1781532528.2518907, "size": 15412}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\win32base.vp": {"sha1": "fc980acec33d69a7", "mtime": 1785332415.2228394, "size": 2653}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\win32console.vp": {"sha1": "bbdf3bbd4c3bc28c", "mtime": 1781200703.5338137, "size": 5604}} \ No newline at end of file diff --git a/Test/TestProject/temp/_sha1_map.txt b/Test/TestProject/temp/_sha1_map.txt deleted file mode 100644 index 1dd02a0..0000000 --- a/Test/TestProject/temp/_sha1_map.txt +++ /dev/null @@ -1,19 +0,0 @@ -04e5fe47ff2af528:includes/memhub.vp -285b6aa29a34754d:includes/stdio.vp -3cd87018ba1e76bc:test_numpy.vp -3f7c5e78d8652535:includes/vipermath.vp -49cae05490a513cb:main.vp -6c658cc728d0bbf4:includes/stdlib.vp -748d0424e8976fa0:includes/testcheck.vp -75583f20a922ab2e:zc/test.vp -8e0d8fdba991b3b4:config.vp -928c0ff6d8c69ec9:includes/string.vp -aa246c6e6aa30484:includes/atom.vp -bbdf3bbd4c3bc28c:includes/w32\win32console.vp -c3a6aed1f1fb8b1e:includes/numpy\__init__.vp -c9f4be41ca1cc2b4:includes/viperio.vp -cfc83b830141b00e:zc/config.vp -e5fb16127bce8f68:zc/class_test.vp -f5522571bcce7bcb:includes/stdint.vp -faec3233d98371da:zc/logic_test.vp -fc980acec33d69a7:includes/w32\win32base.vp diff --git a/Test/TestProject/temp/_shared_sym.json b/Test/TestProject/temp/_shared_sym.json deleted file mode 100644 index 0b82583ddcb2bedd43d4fc582a36c0e107d5af80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 618362 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 WfJ+Y;#Kv4}b;nvyPUY2}>-k@4r=xNJ diff --git a/Test/TestProject/temp/aa246c6e6aa30484.stub.ll.dep b/Test/TestProject/temp/aa246c6e6aa30484.stub.ll.dep deleted file mode 100644 index e69de29..0000000 diff --git a/Test/TestProject/temp/aa246c6e6aa30484.vpi b/Test/TestProject/temp/aa246c6e6aa30484.vpi deleted file mode 100644 index 3147b54..0000000 --- a/Test/TestProject/temp/aa246c6e6aa30484.vpi +++ /dev/null @@ -1,26 +0,0 @@ -""" -Auto-generated Python stub file from atom.vp -Module: atom -""" - - -import t, c - -ATOMIC_RELAXED: t.CDefine = 0 -ATOMIC_CONSUME: t.CDefine = 1 -ATOMIC_ACQUIRE: t.CDefine = 2 -ATOMIC_RELEASE: t.CDefine = 3 -ATOMIC_ACQ_REL: t.CDefine = 4 -ATOMIC_SEQ_CST: t.CDefine = 5 - -def __atomic_test_and_set(ptr: t.CUInt64T | t.CPtr, order: t.CInt) -> t.CBool: pass - -def __atomic_clear(ptr: t.CUInt64T | t.CPtr, order: t.CInt) -> t.CVoid: pass - -def __atomic_thread_fence(order: t.CInt) -> t.CVoid: pass - -def __atomic_signal_fence(order: t.CInt) -> t.CVoid: pass - -def __atomic_always_lock_free(size: t.CSizeT, ptr: t.CVoid | t.CPtr) -> t.CBool: pass - -def __atomic_is_lock_free(size: t.CSizeT, ptr: t.CVoid | t.CPtr) -> t.CBool: pass diff --git a/Test/TestProject/temp/bbdf3bbd4c3bc28c.stub.ll.dep b/Test/TestProject/temp/bbdf3bbd4c3bc28c.stub.ll.dep deleted file mode 100644 index d4b382c..0000000 --- a/Test/TestProject/temp/bbdf3bbd4c3bc28c.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -f5522571bcce7bcb|fc980acec33d69a7 \ No newline at end of file diff --git a/Test/TestProject/temp/bbdf3bbd4c3bc28c.vpi b/Test/TestProject/temp/bbdf3bbd4c3bc28c.vpi deleted file mode 100644 index 4709b3e..0000000 --- a/Test/TestProject/temp/bbdf3bbd4c3bc28c.vpi +++ /dev/null @@ -1,138 +0,0 @@ -""" -Auto-generated Python stub file from w32.win32console.vp -Module: w32.win32console -""" - -import c - - -import t -from stdint import * -from w32.win32base import * - -ENABLE_PROCESSED_INPUT: t.CDefine = 0x0001 -ENABLE_LINE_INPUT: t.CDefine = 0x0002 -ENABLE_ECHO_INPUT: t.CDefine = 0x0004 -ENABLE_WINDOW_INPUT: t.CDefine = 0x0008 -ENABLE_MOUSE_INPUT: t.CDefine = 0x0010 -ENABLE_INSERT_MODE: t.CDefine = 0x0020 -ENABLE_QUICK_EDIT_MODE: t.CDefine = 0x0040 -ENABLE_EXTENDED_FLAGS: t.CDefine = 0x0080 -ENABLE_PROCESSED_OUTPUT: t.CDefine = 0x0001 -ENABLE_WRAP_AT_EOL_OUTPUT: t.CDefine = 0x0002 -ENABLE_VIRTUAL_TERMINAL_PROCESSING: t.CDefine = 0x0004 -DISABLE_NEWLINE_AUTO_RETURN: t.CDefine = 0x0008 -ENABLE_LVB_GRID_WORLDWIDE: t.CDefine = 0x0010 -FOREGROUND_BLUE: t.CDefine = 0x0001 -FOREGROUND_GREEN: t.CDefine = 0x0002 -FOREGROUND_RED: t.CDefine = 0x0004 -FOREGROUND_INTENSITY: t.CDefine = 0x0008 -BACKGROUND_BLUE: t.CDefine = 0x0010 -BACKGROUND_GREEN: t.CDefine = 0x0020 -BACKGROUND_RED: t.CDefine = 0x0040 -BACKGROUND_INTENSITY: t.CDefine = 0x0080 -KEY_EVENT: t.CDefine = 0x0001 -MOUSE_EVENT: t.CDefine = 0x0002 -WINDOW_BUFFER_SIZE_EVENT: t.CDefine = 0x0004 -MENU_EVENT: t.CDefine = 0x0008 -FOCUS_EVENT: t.CDefine = 0x0010 - -class COORD: - X: SHORT - Y: SHORT -class SMALL_RECT: - Left: SHORT - Top: SHORT - Right: SHORT - Bottom: SHORT -class CONSOLE_SCREEN_BUFFER_INFO: - dwSize: COORD - dwCursorPosition: COORD - wAttributes: WORD - srWindow: SMALL_RECT - dwMaximumWindowSize: COORD -class CONSOLE_CURSOR_INFO: - dwSize: ULONG - bVisible: BOOL -class CHAR_INFO: - UnicodeChar: WCHAR - Attributes: WORD -class KEY_EVENT_RECORD: - bKeyDown: BOOL - wRepeatCount: WORD - wVirtualKeyCode: WORD - wVirtualScanCode: WORD - uChar: WCHAR - dwControlKeyState: ULONG -class MOUSE_EVENT_RECORD: - dwMousePosition: COORD - dwButtonState: ULONG - dwControlKeyState: ULONG - dwEventFlags: ULONG -class WINDOW_BUFFER_SIZE_RECORD: - dwSize: COORD -class INPUT_RECORD: - EventType: WORD - Event: KEY_EVENT_RECORD - -def SetConsoleOutputCP(codepage: UINT) -> BOOL | t.State: pass - -def SetConsoleCP(codepage: UINT) -> BOOL | t.State: pass - -def GetConsoleCP() -> UINT | t.State: pass - -def GetConsoleOutputCP() -> UINT | t.State: pass - -def GetConsoleScreenBufferInfo(hConsoleOutput: HANDLE, lpConsoleScreenBufferInfo: CONSOLE_SCREEN_BUFFER_INFO | t.CPtr) -> BOOL | t.State: pass - -def SetConsoleScreenBufferSize(hConsoleOutput: HANDLE, dwSize: COORD) -> BOOL | t.State: pass - -def SetConsoleCursorPosition(hConsoleOutput: HANDLE, dwCursorPosition: COORD) -> BOOL | t.State: pass - -def GetConsoleCursorInfo(hConsoleOutput: HANDLE, lpConsoleCursorInfo: CONSOLE_CURSOR_INFO | t.CPtr) -> BOOL | t.State: pass - -def SetConsoleCursorInfo(hConsoleOutput: HANDLE, lpConsoleCursorInfo: CONSOLE_CURSOR_INFO | t.CPtr) -> BOOL | t.State: pass - -def SetConsoleTextAttribute(hConsoleOutput: HANDLE, wAttributes: WORD) -> BOOL | t.State: pass - -def FillConsoleOutputCharacterA(hConsoleOutput: HANDLE, cCharacter: t.CChar, nLength: ULONG, dwWriteCoord: COORD, lpNumberOfCharsWritten: ULONG | t.CPtr) -> BOOL | t.State: pass - -def FillConsoleOutputCharacterW(hConsoleOutput: HANDLE, cCharacter: WCHAR, nLength: ULONG, dwWriteCoord: COORD, lpNumberOfCharsWritten: ULONG | t.CPtr) -> BOOL | t.State: pass - -def FillConsoleOutputAttribute(hConsoleOutput: HANDLE, wAttribute: WORD, nLength: ULONG, dwWriteCoord: COORD, lpNumberOfAttrsWritten: ULONG | t.CPtr) -> BOOL | t.State: pass - -def WriteConsoleA(hConsoleOutput: HANDLE, lpBuffer: t.CConst | VOIDPTR, nNumberOfCharsToWrite: ULONG, lpNumberOfCharsWritten: ULONG | t.CPtr, lpReserved: VOIDPTR) -> BOOL | t.State: pass - -def WriteConsoleW(hConsoleOutput: HANDLE, lpBuffer: t.CConst | VOIDPTR, nNumberOfCharsToWrite: ULONG, lpNumberOfCharsWritten: ULONG | t.CPtr, lpReserved: VOIDPTR) -> BOOL | t.State: pass - -def ReadConsoleA(hConsoleInput: HANDLE, lpBuffer: VOIDPTR, nNumberOfCharsToRead: ULONG, lpNumberOfCharsRead: ULONG | t.CPtr, pInputControl: VOIDPTR) -> BOOL | t.State: pass - -def ReadConsoleW(hConsoleInput: HANDLE, lpBuffer: VOIDPTR, nNumberOfCharsToRead: ULONG, lpNumberOfCharsRead: ULONG | t.CPtr, pInputControl: VOIDPTR) -> BOOL | t.State: pass - -def GetConsoleMode(hConsoleHandle: HANDLE, lpMode: ULONG | t.CPtr) -> BOOL | t.State: pass - -def SetConsoleMode(hConsoleHandle: HANDLE, dwMode: ULONG) -> BOOL | t.State: pass - -def ReadConsoleInputA(hConsoleInput: HANDLE, lpBuffer: INPUT_RECORD | t.CPtr, nLength: ULONG, lpNumberOfEventsRead: ULONG | t.CPtr) -> BOOL | t.State: pass - -def ReadConsoleInputW(hConsoleInput: HANDLE, lpBuffer: INPUT_RECORD | t.CPtr, nLength: ULONG, lpNumberOfEventsRead: ULONG | t.CPtr) -> BOOL | t.State: pass - -def GetNumberOfConsoleInputEvents(hConsoleInput: HANDLE, lpNumberOfEvents: ULONG | t.CPtr) -> BOOL | t.State: pass - -def FlushConsoleInputBuffer(hConsoleInput: HANDLE) -> BOOL | t.State: pass - -def SetConsoleTitleA(lpConsoleTitle: LPCSTR) -> BOOL | t.State: pass - -def SetConsoleTitleW(lpConsoleTitle: LPCWSTR) -> BOOL | t.State: pass - -def GetConsoleTitleA(lpConsoleTitle: CHARPTR, nSize: ULONG) -> ULONG | t.State: pass - -def GetConsoleTitleW(lpConsoleTitle: WCHARPTR, nSize: ULONG) -> ULONG | t.State: pass - -def AllocConsole() -> BOOL | t.State: pass - -def FreeConsole() -> BOOL | t.State: pass - -def SetConsoleWindowInfo(hConsoleOutput: HANDLE, bAbsolute: BOOL, lpConsoleWindow: SMALL_RECT | t.CPtr) -> BOOL | t.State: pass - -def ScrollConsoleScreenBufferA(hConsoleOutput: HANDLE, lpScrollRectangle: SMALL_RECT | t.CPtr, lpClipRectangle: SMALL_RECT | t.CPtr, dwDestinationOrigin: COORD, lpFill: CHAR_INFO | t.CPtr) -> BOOL | t.State: pass diff --git a/Test/TestProject/temp/c3a6aed1f1fb8b1e.stub.ll.dep b/Test/TestProject/temp/c3a6aed1f1fb8b1e.stub.ll.dep deleted file mode 100644 index e69de29..0000000 diff --git a/Test/TestProject/temp/c3a6aed1f1fb8b1e.vpi b/Test/TestProject/temp/c3a6aed1f1fb8b1e.vpi deleted file mode 100644 index fd928e3..0000000 --- a/Test/TestProject/temp/c3a6aed1f1fb8b1e.vpi +++ /dev/null @@ -1,240 +0,0 @@ -""" -Auto-generated Python stub file from numpy.__init__.vp -Module: numpy.__init__ -""" - - -from stdint import * -import stdlib -import string -import vipermath -import stdio -import t, c -import memhub - -MAX_NDIM: t.CDefine = 4 -float64: t.CTypedef = t.CDouble -float32: t.CTypedef = t.CFloat -int64: t.CTypedef = t.CLong -int32: t.CTypedef = t.CInt -uint8: t.CTypedef = t.CUnsignedChar -pi: t.CDefine = 3.14159265358979323846 -e: t.CDefine = 2.71828182845904523536 - -@t.Object -class ndarray[T]: - data: T | t.CPtr - shape: t.CArray[t.CSizeT, MAX_NDIM] - strides: t.CArray[t.CSizeT, MAX_NDIM] - ndim: t.CInt - size: t.CSizeT - owns_data: t.CInt - pool: memhub.MemManager | t.CPtr - def __new__(self: ndarray, pool: memhub.MemManager | t.CPtr, n: t.CSizeT) -> t.CInt: pass - def __add__(self: ndarray, other: ndarray[T] | t.CPtr) -> ndarray[T] | t.CPtr: pass - def __sub__(self: ndarray, other: ndarray[T] | t.CPtr) -> ndarray[T] | t.CPtr: pass - def __mul__(self: ndarray, other: ndarray[T] | t.CPtr) -> ndarray[T] | t.CPtr: pass - def __truediv__(self: ndarray, other: ndarray[T] | t.CPtr) -> ndarray[T] | t.CPtr: pass - def __floordiv__(self: ndarray, other: ndarray[T] | t.CPtr) -> ndarray[T] | t.CPtr: pass - def __mod__(self: ndarray, other: ndarray[T] | t.CPtr) -> ndarray[T] | t.CPtr: pass - def __neg__(self: ndarray) -> ndarray[T] | t.CPtr: pass - def __len__(self: ndarray) -> t.CInt: pass - def at2d(self: ndarray, row: t.CSizeT, col: t.CSizeT) -> T: pass - def set2d(self: ndarray, row: t.CSizeT, col: t.CSizeT, val: T) -> t.CInt: pass - def delete(self: ndarray) -> t.CInt: pass - def fill(self: ndarray, val: T) -> t.CInt: pass - def copy(self: ndarray) -> ndarray[T] | t.CPtr: pass - def reshape(self: ndarray, new_shape: INTPTR, new_ndim: t.CInt) -> ndarray[T] | t.CPtr: pass - def sum(self: ndarray) -> T: pass - def mean(self: ndarray) -> T: pass - def min(self: ndarray) -> T: pass - def max(self: ndarray) -> T: pass - def argmax(self: ndarray) -> t.CInt: pass - def argmin(self: ndarray) -> t.CInt: pass - def dot(self: ndarray, other: ndarray[T] | t.CPtr) -> T: pass - def T(self: ndarray) -> ndarray[T] | t.CPtr: pass - def print_arr(self: ndarray) -> t.CInt: pass - -Float64Array: t.CTypedef = ndarray[t.CDouble] -Float32Array: t.CTypedef = ndarray[t.CFloat] -Int64Array: t.CTypedef = ndarray[t.CLong] -Int32Array: t.CTypedef = ndarray[t.CInt] -Uint8Array: t.CTypedef = ndarray[t.CUnsignedChar] - -def _alloc_ndarray(pool: memhub.MemManager | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def _compute_strides(a: ndarray[t.CDouble] | t.CPtr) -> t.CInt: pass - -def _empty_like(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def array(pool: memhub.MemManager | t.CPtr, data: t.CDouble | t.CPtr, n: t.CSizeT) -> ndarray[t.CDouble] | t.CPtr: pass - -def zeros(pool: memhub.MemManager | t.CPtr, n: t.CSizeT) -> ndarray[t.CDouble] | t.CPtr: pass - -def ones(pool: memhub.MemManager | t.CPtr, n: t.CSizeT) -> ndarray[t.CDouble] | t.CPtr: pass - -def full(pool: memhub.MemManager | t.CPtr, n: t.CSizeT, val: t.CDouble) -> ndarray[t.CDouble] | t.CPtr: pass - -def arange(pool: memhub.MemManager | t.CPtr, start: t.CDouble, stop: t.CDouble, step: t.CDouble) -> ndarray[t.CDouble] | t.CPtr: pass - -def linspace(pool: memhub.MemManager | t.CPtr, start: t.CDouble, stop: t.CDouble, num: t.CSizeT) -> ndarray[t.CDouble] | t.CPtr: pass - -def empty2d(pool: memhub.MemManager | t.CPtr, rows: t.CSizeT, cols: t.CSizeT) -> ndarray[t.CDouble] | t.CPtr: pass - -def zeros2d(pool: memhub.MemManager | t.CPtr, rows: t.CSizeT, cols: t.CSizeT) -> ndarray[t.CDouble] | t.CPtr: pass - -def ones2d(pool: memhub.MemManager | t.CPtr, rows: t.CSizeT, cols: t.CSizeT) -> ndarray[t.CDouble] | t.CPtr: pass - -def eye(pool: memhub.MemManager | t.CPtr, n: t.CSizeT) -> ndarray[t.CDouble] | t.CPtr: pass - -def diag(pool: memhub.MemManager | t.CPtr, vals: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_abs(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_sqrt(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_exp(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_log(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_sin(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_cos(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_tan(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_pow(a: ndarray[t.CDouble] | t.CPtr, p: t.CDouble) -> ndarray[t.CDouble] | t.CPtr: pass - -def add_scalar(a: ndarray[t.CDouble] | t.CPtr, s: t.CDouble) -> ndarray[t.CDouble] | t.CPtr: pass - -def mul_scalar(a: ndarray[t.CDouble] | t.CPtr, s: t.CDouble) -> ndarray[t.CDouble] | t.CPtr: pass - -def sub_scalar(a: ndarray[t.CDouble] | t.CPtr, s: t.CDouble) -> ndarray[t.CDouble] | t.CPtr: pass - -def div_scalar(a: ndarray[t.CDouble] | t.CPtr, s: t.CDouble) -> ndarray[t.CDouble] | t.CPtr: pass - -def matmul(a: ndarray[t.CDouble] | t.CPtr, b: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def dot_product(a: ndarray[t.CDouble] | t.CPtr, b: ndarray[t.CDouble] | t.CPtr) -> t.CDouble: pass - -def np_sum(a: ndarray[t.CDouble] | t.CPtr) -> t.CDouble: pass - -def np_mean(a: ndarray[t.CDouble] | t.CPtr) -> t.CDouble: pass - -def np_min(a: ndarray[t.CDouble] | t.CPtr) -> t.CDouble: pass - -def np_max(a: ndarray[t.CDouble] | t.CPtr) -> t.CDouble: pass - -def np_argmax(a: ndarray[t.CDouble] | t.CPtr) -> t.CInt: pass - -def np_argmin(a: ndarray[t.CDouble] | t.CPtr) -> t.CInt: pass - -def var(a: ndarray[t.CDouble] | t.CPtr) -> t.CDouble: pass - -def std(a: ndarray[t.CDouble] | t.CPtr) -> t.CDouble: pass - -def norm(a: ndarray[t.CDouble] | t.CPtr) -> t.CDouble: pass - -def clip(a: ndarray[t.CDouble] | t.CPtr, lo: t.CDouble, hi: t.CDouble) -> ndarray[t.CDouble] | t.CPtr: pass - -def concatenate(a: ndarray[t.CDouble] | t.CPtr, b: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def sort_arr(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def reverse(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_log10(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_log2(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_floor(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_ceil(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_round(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_sign(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_tanh(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_sinh(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_cosh(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_arcsin(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_arccos(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_arctan(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_arctan2(y: ndarray[t.CDouble] | t.CPtr, x: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_degrees(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_radians(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_isnan(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_isinf(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_maximum(a: ndarray[t.CDouble] | t.CPtr, b: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_minimum(a: ndarray[t.CDouble] | t.CPtr, b: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def cumsum(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def diff(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def flatten(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def trace(a: ndarray[t.CDouble] | t.CPtr) -> t.CDouble: pass - -def outer(a: ndarray[t.CDouble] | t.CPtr, b: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_where(condition: ndarray[t.CDouble] | t.CPtr, x: ndarray[t.CDouble] | t.CPtr, y: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_count_nonzero(a: ndarray[t.CDouble] | t.CPtr) -> t.CInt: pass - -def np_all(a: ndarray[t.CDouble] | t.CPtr) -> t.CInt: pass - -def np_any(a: ndarray[t.CDouble] | t.CPtr) -> t.CInt: pass - -def np_equal(a: ndarray[t.CDouble] | t.CPtr, b: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_not_equal(a: ndarray[t.CDouble] | t.CPtr, b: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_less(a: ndarray[t.CDouble] | t.CPtr, b: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_greater(a: ndarray[t.CDouble] | t.CPtr, b: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_less_equal(a: ndarray[t.CDouble] | t.CPtr, b: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_greater_equal(a: ndarray[t.CDouble] | t.CPtr, b: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def empty(pool: memhub.MemManager | t.CPtr, n: t.CSizeT) -> ndarray[t.CDouble] | t.CPtr: pass - -def full2d(pool: memhub.MemManager | t.CPtr, rows: t.CSizeT, cols: t.CSizeT, val: t.CDouble) -> ndarray[t.CDouble] | t.CPtr: pass - -def zeros_like(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def ones_like(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def arange1(pool: memhub.MemManager | t.CPtr, stop: t.CDouble) -> ndarray[t.CDouble] | t.CPtr: pass - -def linspace2(pool: memhub.MemManager | t.CPtr, start: t.CDouble, stop: t.CDouble) -> ndarray[t.CDouble] | t.CPtr: pass - -def meshgrid(x: ndarray[t.CDouble] | t.CPtr, y: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def det2x2(a: ndarray[t.CDouble] | t.CPtr) -> t.CDouble: pass - -def inv2x2(a: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def cross3(a: ndarray[t.CDouble] | t.CPtr, b: ndarray[t.CDouble] | t.CPtr) -> ndarray[t.CDouble] | t.CPtr: pass - -def np_interp(x: t.CDouble, xp: ndarray[t.CDouble] | t.CPtr, fp: ndarray[t.CDouble] | t.CPtr) -> t.CDouble: pass - -def prod(a: ndarray[t.CDouble] | t.CPtr) -> t.CDouble: pass - -def median(a: ndarray[t.CDouble] | t.CPtr) -> t.CDouble: pass - -def percentile(a: ndarray[t.CDouble] | t.CPtr, q: t.CDouble) -> t.CDouble: pass diff --git a/Test/TestProject/temp/c9f4be41ca1cc2b4.stub.ll.dep b/Test/TestProject/temp/c9f4be41ca1cc2b4.stub.ll.dep deleted file mode 100644 index 793e7ed..0000000 --- a/Test/TestProject/temp/c9f4be41ca1cc2b4.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -f5522571bcce7bcb \ No newline at end of file diff --git a/Test/TestProject/temp/c9f4be41ca1cc2b4.vpi b/Test/TestProject/temp/c9f4be41ca1cc2b4.vpi deleted file mode 100644 index f7ed5fd..0000000 --- a/Test/TestProject/temp/c9f4be41ca1cc2b4.vpi +++ /dev/null @@ -1,22 +0,0 @@ -""" -Auto-generated Python stub file from viperio.vp -Module: viperio -""" - - -import t, c -from stdint import * - -class Buf: - data: t.CChar | t.CPtr - length: t.CSizeT - capacity: t.CSizeT - owned: bool - def __init__(self: Buf, data: t.CChar | t.CPtr, capacity: t.CSizeT, length: t.CSizeT = 0, owned: bool = False) -> t.CInt: pass - def clear(self: Buf) -> t.CInt: pass - def write(self: Buf, src: t.CChar | t.CPtr, count: t.CSizeT) -> t.CSizeT: pass - def cstr(self: Buf) -> t.CChar | t.CPtr: pass - def reset(self: Buf) -> t.CInt: pass - def __enter__(self: Buf) -> 'Buf' | t.CPtr: pass - def __exit__(self: Buf) -> t.CInt: pass - def free(self: Buf) -> t.CInt: pass \ No newline at end of file diff --git a/Test/TestProject/temp/cfc83b830141b00e.doc.json b/Test/TestProject/temp/cfc83b830141b00e.doc.json deleted file mode 100644 index 9e26dfe..0000000 --- a/Test/TestProject/temp/cfc83b830141b00e.doc.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/Test/TestProject/temp/cfc83b830141b00e.vpi b/Test/TestProject/temp/cfc83b830141b00e.vpi deleted file mode 100644 index a3a9f1c..0000000 --- a/Test/TestProject/temp/cfc83b830141b00e.vpi +++ /dev/null @@ -1,27 +0,0 @@ -""" -Auto-generated Python stub file from zc.config.vp -Module: zc.config -""" - - -import t, c - -POSMAX: t.CDefine = 100 -MAX_RETRY: t.CDefine = 5 -BUFFER_SIZE: t.CDefine = 256 -PI: t.CDefine = 3.14159 -EULER: t.CDefine = 2.71828 -TRUE: t.CDefine = 1 -FALSE: t.CDefine = 0 -NULL: t.CDefine = 0 -MATH_OFFSET: t.CDefine = 10 -MATH_SCALE: t.CDefine = 2 -THRESHOLD: t.CDefine = 50 -LOOP_LIMIT: t.CDefine = 20 -SHIFT_AMOUNT: t.CDefine = 2 -MASK_VALUE: t.CDefine = 0xFF -BIT_RANGE: t.CDefine = 4 -EXPONENT_BASE: t.CDefine = 3 -MODULO_DIVISOR: t.CDefine = 7 -SCALE_SHIFT: t.CDefine = 4 -HALF_SCALE: t.CDefine = 0.5 \ No newline at end of file diff --git a/Test/TestProject/temp/e5fb16127bce8f68.doc.json b/Test/TestProject/temp/e5fb16127bce8f68.doc.json deleted file mode 100644 index 9e26dfe..0000000 --- a/Test/TestProject/temp/e5fb16127bce8f68.doc.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/Test/TestProject/temp/e5fb16127bce8f68.vpi b/Test/TestProject/temp/e5fb16127bce8f68.vpi deleted file mode 100644 index 70b33c7..0000000 --- a/Test/TestProject/temp/e5fb16127bce8f68.vpi +++ /dev/null @@ -1,66 +0,0 @@ -""" -Auto-generated Python stub file from zc.class_test.vp -Module: zc.class_test -""" - - -import stdio -import stdint -import t, c - -class SimpleData(t.Object): - x: t.CInt - y: t.CInt -class Point3D(t.Object): - x: t.CFloat - y: t.CFloat - z: t.CFloat -class Student(t.Object): - name: t.CChar | t.CPtr - age: t.CInt - score: t.CInt - def __init__(self: Student, n: t.CChar | t.CPtr, a: t.CInt, s: t.CInt) -> t.CInt: pass - def get_age(self: Student) -> t.CInt: pass - def get_score(self: Student) -> t.CInt: pass -class Counter(t.Object): - value: t.CInt - def __init__(self: Counter, initial: t.CInt) -> t.CInt: pass - def increment(self: Counter) -> t.CInt: pass - def get_value(self: Counter) -> t.CInt: pass -class StackObj(t.Object): - data: t.CInt - next_ptr: t.CVoid | t.CPtr - -def TestBasicDataClass() -> t.CInt: pass - -def TestPoint3DClass() -> t.CInt: pass - -def TestStudentClass() -> t.CInt: pass - -def TestCounterClass() -> t.CInt: pass - -def TestStackAllocation() -> t.CInt: pass - -def TestHeapAllocation() -> t.CInt: pass - -def TestHeapObjectWithInit() -> t.CInt: pass - -def TestMultipleStackObjects() -> t.CInt: pass - -def TestImplicitInitCall() -> t.CInt: pass - -def TestClassWithBitFields() -> t.CInt: pass - -def TestIntArray() -> t.CInt: pass - -def TestFloatArray() -> t.CInt: pass - -def TestCharArray() -> t.CInt: pass - -def TestNestedArray() -> t.CInt: pass - -def TestArrayWithStruct() -> t.CInt: pass - -def TestArrayPointer() -> t.CInt: pass - -def TestDynamicString() -> t.CInt: pass diff --git a/Test/TestProject/temp/f5522571bcce7bcb.stub.ll.dep b/Test/TestProject/temp/f5522571bcce7bcb.stub.ll.dep deleted file mode 100644 index e69de29..0000000 diff --git a/Test/TestProject/temp/f5522571bcce7bcb.vpi b/Test/TestProject/temp/f5522571bcce7bcb.vpi deleted file mode 100644 index f0bc071..0000000 --- a/Test/TestProject/temp/f5522571bcce7bcb.vpi +++ /dev/null @@ -1,100 +0,0 @@ -""" -Auto-generated Python stub file from stdint.vp -Module: stdint -""" - -import c - - -import t - -INT: t.CTypedef = t.CInt -INTPTR: t.CTypedef = t.CInt | t.CPtr -BOOL: t.CTypedef = t.CInt -UINT: t.CTypedef = t.CUnsignedInt -UINTPTR: t.CTypedef = UINT | t.CPtr -BYTE: t.CTypedef = t.CUnsignedChar -BYTEPTR: t.CTypedef = BYTE | t.CPtr -WORD: t.CTypedef = t.CUInt16T -DWORD: t.CTypedef = t.CUInt32T -QWORD: t.CTypedef = t.CUInt64T -TCHAR: t.CTypedef = t.CChar -CHARLIST: t.CTypedef = str | t.CPtr -VOID: t.CTypedef = t.CVoid -SHORT: t.CTypedef = t.CShort -SHORTPTR: t.CTypedef = t.CShort | t.CPtr -USHORT: t.CTypedef = t.CUnsignedShort -USHORTPTR: t.CTypedef = t.CUnsignedShort | t.CPtr -LONGLONG: t.CTypedef = t.CLongLong -ULONGLONG: t.CTypedef = t.CUnsignedLongLong -LONG: t.CTypedef = t.CLong -ULONG: t.CTypedef = t.CUnsignedLong -WCHAR: t.CTypedef = WORD -WCHARPTR: t.CTypedef = WORD | t.CPtr -CHARPTR: t.CTypedef = t.CChar | t.CPtr -FSIZE_t: t.CTypedef = DWORD -LBA_t: t.CTypedef = DWORD -VOIDPTR: t.CTypedef = t.CVoid | t.CPtr -FLOAT: t.CTypedef = t.CFloat -DOUBLE: t.CTypedef = t.CDouble -FLOAT8: t.CTypedef = t.CFloat8T -FLOAT16: t.CTypedef = t.CFloat16T -FLOAT32: t.CTypedef = t.CFloat32T -FLOAT64: t.CTypedef = t.CFloat64T -FLOAT128: t.CTypedef = t.CFloat128T -INT8: t.CTypedef = t.CInt8T -INT16: t.CTypedef = t.CInt16T -INT32: t.CTypedef = t.CInt32T -INT64: t.CTypedef = t.CInt64T -UINT8: t.CTypedef = t.CUInt8T -UINT16: t.CTypedef = t.CUInt16T -UINT32: t.CTypedef = t.CUInt32T -UINT64: t.CTypedef = t.CUInt64T -INT8PTR: t.CTypedef = t.CInt8T | t.CPtr -INT16PTR: t.CTypedef = t.CInt16T | t.CPtr -INT32PTR: t.CTypedef = t.CInt32T | t.CPtr -INT64PTR: t.CTypedef = t.CInt64T | t.CPtr -UINT8PTR: t.CTypedef = t.CUInt8T | t.CPtr -UINT16PTR: t.CTypedef = t.CUInt16T | t.CPtr -UINT32PTR: t.CTypedef = t.CUInt32T | t.CPtr -UINT64PTR: t.CTypedef = t.CUInt64T | t.CPtr -CHAR8: t.CTypedef = t.CChar8T -CHAR16: t.CTypedef = t.CChar16T -CHAR32: t.CTypedef = t.CChar32T -CHAR8PTR: t.CTypedef = t.CChar8T | t.CPtr -CHAR16PTR: t.CTypedef = t.CChar16T | t.CPtr -CHAR32PTR: t.CTypedef = t.CChar32T | t.CPtr -i8: t.CTypedef = t.CInt8T -i16: t.CTypedef = t.CInt16T -i32: t.CTypedef = t.CInt32T -i64: t.CTypedef = t.CInt64T -u8: t.CTypedef = t.CUInt8T -u16: t.CTypedef = t.CUInt16T -u32: t.CTypedef = t.CUInt32T -u64: t.CTypedef = t.CUInt64T -SIZE_T: t.CTypedef = t.CSizeT -SSIZE_T: t.CTypedef = t.CPtrDiffT -PTRDIFF_T: t.CTypedef = t.CPtrDiffT -int8_t: t.CTypedef = t.CInt8T -int16_t: t.CTypedef = t.CInt16T -int32_t: t.CTypedef = t.CInt32T -int64_t: t.CTypedef = t.CInt64T -uint8_t: t.CTypedef = t.CUInt8T -uint16_t: t.CTypedef = t.CUInt16T -uint32_t: t.CTypedef = t.CUInt32T -uint64_t: t.CTypedef = t.CUInt64T -size_t: t.CTypedef = t.CSizeT -ssize_t: t.CTypedef = t.CPtrDiffT -ptrdiff_t: t.CTypedef = t.CPtrDiffT -intptr_t: t.CTypedef = t.CIntPtrT -uintptr_t: t.CTypedef = t.CUIntPtrT -wchar_t: t.CTypedef = t.CWCharT -char8_t: t.CTypedef = t.CChar8T -char16_t: t.CTypedef = t.CChar16T -char32_t: t.CTypedef = t.CChar32T -float8_t: t.CTypedef = t.CFloat8T -float16_t: t.CTypedef = t.CFloat16T -float32_t: t.CTypedef = t.CFloat32T -float64_t: t.CTypedef = t.CFloat64T -float128_t: t.CTypedef = t.CFloat128T -_Bool: t.CTypedef = t.CBool \ No newline at end of file diff --git a/Test/TestProject/temp/faec3233d98371da.doc.json b/Test/TestProject/temp/faec3233d98371da.doc.json deleted file mode 100644 index 9e26dfe..0000000 --- a/Test/TestProject/temp/faec3233d98371da.doc.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/Test/TestProject/temp/faec3233d98371da.vpi b/Test/TestProject/temp/faec3233d98371da.vpi deleted file mode 100644 index 01c9b57..0000000 --- a/Test/TestProject/temp/faec3233d98371da.vpi +++ /dev/null @@ -1,54 +0,0 @@ -""" -Auto-generated Python stub file from zc.logic_test.vp -Module: zc.logic_test -""" - - -import config -import t, c - -def ForRangeBasicTest(stop: t.CInt) -> t.CInt: pass - -def ForRangeWithStartStop(start: t.CInt, stop: t.CInt, step: t.CInt) -> t.CInt: pass - -def NestedForRangeTest(rows: t.CInt, cols: t.CInt) -> t.CInt: pass - -def ForWithIfBreakTest(data_size: t.CInt) -> t.CInt: pass - -def ForWithIfContinueTest(n: t.CInt) -> t.CInt: pass - -def ForWithElifBranchTest(value: t.CInt) -> t.CInt: pass - -def WhileWithIfElifElseTest(iterations: t.CInt) -> t.CInt: pass - -def WhileWithNestedIfTest(limit: t.CInt) -> t.CInt: pass - -def WhileWithMatchCaseTest(value: t.CInt) -> t.CInt: pass - -def WhileWithMatchCaseNoBreakTest(value: t.CInt) -> t.CInt: pass - -def ComplexForWhileMatchTest(outer_limit: t.CInt, inner_limit: t.CInt) -> t.CInt: pass - -def ForWithCaseAndNoBreakTest(n: t.CInt) -> t.CInt: pass - -def WhileWithBreakConditionTest(limit: t.CInt) -> t.CInt: pass - -def NestedWhileWithMultipleBreakPoints(depth: t.CInt, width: t.CInt) -> t.CInt: pass - -def ForWithMatchCaseInLoopTest(iterations: t.CInt) -> t.CInt: pass - -def ComplexLogicWithElifChains(a: t.CInt, b: t.CInt, c_val: t.CInt) -> t.CInt: pass - -def ForRangeWithStepAndCondition(n: t.CInt, step: t.CInt) -> t.CInt: pass - -def MatchCaseWithGuardConditions(value: t.CInt) -> t.CInt: pass - -def WhileWithMultipleMatchCases(iterations: t.CInt) -> t.CInt: pass - -def ForWhileMixWithBreakAndContinue(n: t.CInt) -> t.CInt: pass - -def ComplexCaseMatchingWithRanges(start: t.CInt, end: t.CInt) -> t.CInt: pass - -def WhileWithElifInElifChain(limit: t.CInt) -> t.CInt: pass - -def ForWithCaseNoBreakNested(inner_limit: t.CInt) -> t.CInt: pass diff --git a/Test/TestProject/temp/fc980acec33d69a7.stub.ll.dep b/Test/TestProject/temp/fc980acec33d69a7.stub.ll.dep deleted file mode 100644 index 793e7ed..0000000 --- a/Test/TestProject/temp/fc980acec33d69a7.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -f5522571bcce7bcb \ No newline at end of file diff --git a/Test/TestProject/temp/fc980acec33d69a7.vpi b/Test/TestProject/temp/fc980acec33d69a7.vpi deleted file mode 100644 index 3f9feff..0000000 --- a/Test/TestProject/temp/fc980acec33d69a7.vpi +++ /dev/null @@ -1,100 +0,0 @@ -""" -Auto-generated Python stub file from w32.win32base.vp -Module: w32.win32base -""" - -import c - - -import t -from stdint import * - -HANDLE: t.CTypedef = VOIDPTR -LPCSTR: t.CTypedef = t.CConst | t.CChar | t.CPtr -LPCWSTR: t.CTypedef = t.CConst | t.CUnsignedShort | t.CPtr -INVALID_HANDLE_VALUE: t.CDefine = -1 -NULL: t.CDefine = 0 -TRUE: t.CDefine = 1 -FALSE: t.CDefine = 0 -INFINITE: t.CDefine = 0xFFFFFFFF -WAIT_FAILED: t.CDefine = 0xFFFFFFFF -WAIT_OBJECT_0: t.CDefine = 0 -WAIT_TIMEOUT: t.CDefine = 258 -WAIT_ABANDONED: t.CDefine = 0x80 -MAX_PATH: t.CDefine = 260 -ERROR_SUCCESS: t.CDefine = 0 -ERROR_FILE_NOT_FOUND: t.CDefine = 2 -ERROR_ACCESS_DENIED: t.CDefine = 5 -ERROR_INSUFFICIENT_BUFFER: t.CDefine = 122 - -class SECURITY_ATTRIBUTES: - nLength: ULONG - lpSecurityDescriptor: VOIDPTR - bInheritHandle: BOOL -class OVERLAPPED: - Internal: ULONGLONG - InternalHigh: ULONGLONG - Offset: ULONG - OffsetHigh: ULONG - hEvent: HANDLE -class FILETIME: - dwLowDateTime: DWORD - dwHighDateTime: DWORD -class SYSTEMTIME: - wYear: WORD - wMonth: WORD - wDayOfWeek: WORD - wDay: WORD - wHour: WORD - wMinute: WORD - wSecond: WORD - wMilliseconds: WORD -class GUID: - Data1: DWORD - Data2: WORD - Data3: WORD - Data4: BYTEPTR -class LARGE_INTEGER: - QuadPart: LONGLONG -class ULARGE_INTEGER: - QuadPart: ULONGLONG - -def GetLastError() -> ULONG | t.State: pass - -def SetLastError(dwErrCode: ULONG) -> t.State: pass - -def CloseHandle(hObject: HANDLE) -> BOOL | t.State: pass - -def GetProcAddress(hModule: HANDLE, lpProcName: LPCSTR) -> VOIDPTR | t.State: pass - -def GetModuleHandleA(lpModuleName: LPCSTR) -> HANDLE | t.State: pass - -def GetModuleHandleW(lpModuleName: LPCWSTR) -> HANDLE | t.State: pass - -def LoadLibraryA(lpLibFileName: LPCSTR) -> HANDLE | t.State: pass - -def LoadLibraryW(lpLibFileName: LPCWSTR) -> HANDLE | t.State: pass - -def FreeLibrary(hLibModule: HANDLE) -> BOOL | t.State: pass - -def GetSystemTime(lpSystemTime: SYSTEMTIME | t.CPtr) -> t.State: pass - -def GetLocalTime(lpSystemTime: SYSTEMTIME | t.CPtr) -> t.State: pass - -def FileTimeToSystemTime(lpFileTime: FILETIME | t.CPtr, lpSystemTime: SYSTEMTIME | t.CPtr) -> BOOL | t.State: pass - -def SystemTimeToFileTime(lpSystemTime: SYSTEMTIME | t.CPtr, lpFileTime: FILETIME | t.CPtr) -> BOOL | t.State: pass - -def QueryPerformanceCounter(lpPerformanceCount: LARGE_INTEGER | t.CPtr) -> BOOL | t.State: pass - -def QueryPerformanceFrequency(lpFrequency: LARGE_INTEGER | t.CPtr) -> BOOL | t.State: pass - -def Sleep(dwMilliseconds: ULONG) -> t.State: pass - -def SleepEx(dwMilliseconds: ULONG, bAlertable: BOOL) -> ULONG | t.State: pass - -def GetTickCount() -> ULONG | t.State: pass - -def GetTickCount64() -> ULONGLONG | t.State: pass - -def GetCommandLineA() -> CHARPTR | t.State: pass diff --git a/Test/TestProject2/.tpv_build/temp/54/541a1ed9b8be53c8.vpi b/Test/TestProject2/.tpv_build/temp/54/541a1ed9b8be53c8.vpi deleted file mode 100644 index 2729a90..0000000 --- a/Test/TestProject2/.tpv_build/temp/54/541a1ed9b8be53c8.vpi +++ /dev/null @@ -1,13 +0,0 @@ -"""Auto-generated Python stub file""" - - -from stdint import * -import w32.win32console -import config -import hashlib -import binascii -import zlib.pyzlib as zp -import t, c -import testcheck -def main() -> t.CInt | t.CExport: pass - diff --git a/Test/TestProject2/.tpv_build/temp/_sha1_map.txt b/Test/TestProject2/.tpv_build/temp/_sha1_map.txt deleted file mode 100644 index 43460a2..0000000 --- a/Test/TestProject2/.tpv_build/temp/_sha1_map.txt +++ /dev/null @@ -1,5 +0,0 @@ -541a1ed9b8be53c8:main.vp -110d7d2c8a47ff77:zc/class_test.vp -15b2db4f5d33f57e:zc/config.vp -faec3233d98371da:zc/logic_test.vp -07b189ae3dcfb270:zc/test.vp diff --git a/Test/TestProject2/App/main.vp b/Test/TestProject2/App/main.vp deleted file mode 100644 index 69f06d0..0000000 --- a/Test/TestProject2/App/main.vp +++ /dev/null @@ -1,35 +0,0 @@ -from stdint import * -import w32.win32console -import config -import hashlib -import binascii -import zlib.pyzlib as zp - -import t, c -import testcheck - - -def main() -> t.CInt | t.CExport: - w32.win32console.SetConsoleCP(65001) - w32.win32console.SetConsoleOutputCP(65001) - - testcheck.begin("TestProject2: 综合库测试") - - testcheck.section("zlib runtime version") - print(zp.runtime_version()) - testcheck.ok("zlib runtime version printed") - - testcheck.section("HASHLIB") - md5_buf: t.CArray[t.CUInt8T, hashlib.MD5_DIGEST_LEN] - mctx = hashlib.md5() - mctx.update("hello") - mctx.final(md5_buf) - testcheck.ok("HASHLIB md5 completed") - - testcheck.section("BINASCII") - binascii.init_binascii() - crc_val: t.CUnsignedInt = binascii.crc32("hello", 5, 0) - testcheck.ok("BINASCII crc32 completed") - - testcheck.info("END") - return testcheck.end() diff --git a/Test/TestProject2/App/zc/class_test.vp b/Test/TestProject2/App/zc/class_test.vp deleted file mode 100644 index 4594f8b..0000000 --- a/Test/TestProject2/App/zc/class_test.vp +++ /dev/null @@ -1,245 +0,0 @@ -import stdio -import stdint -import t, c - - -class SimpleData(t.Object): - x: t.CInt - y: t.CInt - - -class Point3D(t.Object): - x: t.CFloat - y: t.CFloat - z: t.CFloat - - -class Student(t.Object): - name: t.CChar | t.CPtr - age: t.CInt - score: t.CInt - - def __init__(self, n: t.CChar | t.CPtr, a: t.CInt, s: t.CInt): - self.name = n - self.age = a - self.score = s - - def get_age(self) -> t.CInt: - return self.age - - def get_score(self) -> t.CInt: - return self.score - - -class Counter(t.Object): - value: t.CInt - - def __init__(self, initial: t.CInt): - self.value = initial - - def increment(self): - self.value += 1 - - def get_value(self) -> t.CInt: - return self.value - - -class StackObj(t.Object): - data: t.CInt - next_ptr: t.CVoid | t.CPtr - - -def TestBasicDataClass(): - stdio.printf("=== Test Basic Data Class ===\n") - p: SimpleData = SimpleData() - p.x = 10 - p.y = 20 - stdio.printf("SimpleData: x=%d, y=%d\n", p.x, p.y) - - -def TestPoint3DClass(): - stdio.printf("=== Test Point3D Class ===\n") - pt: Point3D = Point3D() - pt.x = 1.5 - pt.y = 2.5 - pt.z = 3.5 - stdio.printf("Point3D: x=%.1f, y=%.1f, z=%.1f\n", pt.x, pt.y, pt.z) - - -def TestStudentClass(): - stdio.printf("=== Test Student Class ===\n") - s: Student = Student("Alice", 20, 95) - stdio.printf("Student: name=%s, age=%d, score=%d\n", s.name, s.age, s.score) - stdio.printf(" get_age()=%d, get_score()=%d\n", s.get_age(), s.get_score()) - - -def TestCounterClass(): - stdio.printf("=== Test Counter Class ===\n") - cnt: Counter = Counter(0) - stdio.printf("Initial value: %d\n", cnt.get_value()) - cnt.increment() - cnt.increment() - cnt.increment() - stdio.printf("After 3 increments: %d\n", cnt.get_value()) - - -def TestStackAllocation(): - stdio.printf("=== Test Stack Allocation ===\n") - obj1: SimpleData = SimpleData() - obj1.x = 100 - obj1.y = 200 - stdio.printf("Stack obj1: x=%d, y=%d\n", obj1.x, obj1.y) - - obj2: Point3D = Point3D() - obj2.x = 10.0 - obj2.y = 20.0 - obj2.z = 30.0 - stdio.printf("Stack obj2: x=%.1f, y=%.1f, z=%.1f\n", obj2.x, obj2.y, obj2.z) - - -def TestHeapAllocation(): - stdio.printf("=== Test Heap Allocation ===\n") - ptr: t.CVoid | t.CPtr = c.malloc(1024) - if ptr != 0: - stdio.printf("Allocated 1024 bytes at %p\n", ptr) - c.free(ptr) - stdio.printf("Freed memory\n") - else: - stdio.printf("malloc failed\n") - - -def TestHeapObjectWithInit(): - stdio.printf("=== Test Heap Object with Init ===\n") - mem_size: t.CSizeT = 256 - ptr: t.CVoid | t.CPtr = c.malloc(mem_size) - if ptr != 0: - stdio.printf("Allocated %d bytes\n", mem_size) - c.free(ptr) - else: - stdio.printf("malloc failed\n") - - -def TestMultipleStackObjects(): - stdio.printf("=== Test Multiple Stack Objects ===\n") - objs: SimpleData = SimpleData() - objs.x = 1 - objs.y = 2 - obj2: Point3D = Point3D() - obj2.x = 5.0 - obj2.y = 10.0 - obj2.z = 15.0 - obj3: Counter = Counter(42) - stdio.printf("objs: x=%d, y=%d\n", objs.x, objs.y) - stdio.printf("obj2: x=%.1f, y=%.1f, z=%.1f\n", obj2.x, obj2.y, obj2.z) - stdio.printf("obj3 initial: %d\n", obj3.get_value()) - obj3.increment() - obj3.increment() - stdio.printf("obj3 after 2 increments: %d\n", obj3.get_value()) - - -def TestImplicitInitCall(): - stdio.printf("=== Test Implicit Init Call ===\n") - stu1: Student = Student("Bob", 22, 88) - stu2: Student = Student("Charlie", 19, 77) - stdio.printf("stu1: name=%s, age=%d, score=%d\n", stu1.name, stu1.age, stu1.score) - stdio.printf("stu2: name=%s, age=%d, score=%d\n", stu2.name, stu2.age, stu2.score) - - -def TestClassWithBitFields(): - stdio.printf("=== Test Class with Bit Fields ===\n") - flags: StackObj = StackObj() - flags.data = 0 - flags.next_ptr = 0 - stdio.printf("StackObj: data=%d, next_ptr=%p\n", flags.data, flags.next_ptr) - - -def TestIntArray(): - stdio.printf("=== Test Int Array ===\n") - arr: t.CArray[t.CInt, 5] = t.CArray[t.CInt, 5]() - i: t.CInt = 0 - while i < 5: - arr[i] = i * 10 - i += 1 - i = 0 - while i < 5: - stdio.printf("arr[%d]=%d\n", i, arr[i]) - i += 1 - - -def TestFloatArray(): - stdio.printf("=== Test Float Array ===\n") - farr: t.CArray[t.CFloat, 4] = t.CArray[t.CFloat, 4]() - farr[0] = 1.5 - farr[1] = 2.5 - farr[2] = 3.5 - farr[3] = 4.5 - i: t.CInt = 0 - while i < 4: - stdio.printf("farr[%d]=%.1f\n", i, farr[i]) - i += 1 - - -def TestCharArray(): - stdio.printf("=== Test Char Array (String) ===\n") - str_arr: t.CArray[t.CChar, 32] = t.CArray[t.CChar, 32]() - str_arr[0] = 'H' - str_arr[1] = 'e' - str_arr[2] = 'l' - str_arr[3] = 'l' - str_arr[4] = 'o' - str_arr[5] = '\0' - stdio.printf("String: %s\n", str_arr) - - -def TestNestedArray(): - stdio.printf("=== Test Nested Array (Array of Arrays) ===\n") - row0: t.CArray[t.CInt, 3] = t.CArray[t.CInt, 3]() - row1: t.CArray[t.CInt, 3] = t.CArray[t.CInt, 3]() - row0[0] = 0 - row0[1] = 1 - row0[2] = 2 - row1[0] = 10 - row1[1] = 11 - row1[2] = 12 - i: t.CInt = 0 - while i < 3: - stdio.printf("row0[%d]=%d ", i, row0[i]) - i += 1 - stdio.printf("\n") - i = 0 - while i < 3: - stdio.printf("row1[%d]=%d ", i, row1[i]) - i += 1 - stdio.printf("\n") - - -def TestArrayWithStruct(): - stdio.printf("=== Test Array with Struct ===\n") - points: t.CArray[SimpleData, 3] = t.CArray[SimpleData, 3]() - i: t.CInt = 0 - while i < 3: - points[i].x = i * 10 - points[i].y = i * 100 - i += 1 - i = 0 - while i < 3: - stdio.printf("Point[%d]: x=%d, y=%d\n", i, points[i].x, points[i].y) - i += 1 - - -def TestArrayPointer(): - stdio.printf("=== Test Array Pointer ===\n") - data: t.CArray[t.CInt, 8] = t.CArray[t.CInt, 8]() - data[0] = 100 - data[1] = 200 - data[2] = 300 - ptr: t.CInt | t.CPtr = data - stdio.printf("ptr[0]=%d\n", ptr[0]) - stdio.printf("ptr[1]=%d\n", ptr[1]) - stdio.printf("ptr[2]=%d\n", ptr[2]) - - -def TestDynamicString(): - stdio.printf("=== Test Dynamic String ===\n") - name: str = "TransPyC" - stdio.printf("Hello %s!\n", name) \ No newline at end of file diff --git a/Test/TestProject2/App/zc/config.vp b/Test/TestProject2/App/zc/config.vp deleted file mode 100644 index 1b4e36f..0000000 --- a/Test/TestProject2/App/zc/config.vp +++ /dev/null @@ -1,24 +0,0 @@ -import t, c - - -POSMAX: t.CDefine = 100 -MAX_RETRY: t.CDefine = 5 -BUFFER_SIZE: t.CDefine = 256 -PI: t.CDefine = 3.14159 -EULER: t.CDefine = 2.71828 -TRUE: t.CDefine = 1 -FALSE: t.CDefine = 0 -NULL: t.CDefine = 0 - - -MATH_OFFSET: t.CDefine = 10 -MATH_SCALE: t.CDefine = 2 -THRESHOLD: t.CDefine = 50 -LOOP_LIMIT: t.CDefine = 20 -SHIFT_AMOUNT: t.CDefine = 2 -MASK_VALUE: t.CDefine = 0xFF -BIT_RANGE: t.CDefine = 4 -EXPONENT_BASE: t.CDefine = 3 -MODULO_DIVISOR: t.CDefine = 7 -SCALE_SHIFT: t.CDefine = 4 -HALF_SCALE: t.CDefine = 0.5 \ No newline at end of file diff --git a/Test/TestProject2/App/zc/logic_test.vp b/Test/TestProject2/App/zc/logic_test.vp deleted file mode 100644 index 4d5c266..0000000 --- a/Test/TestProject2/App/zc/logic_test.vp +++ /dev/null @@ -1,372 +0,0 @@ -import config -import t, c - - -def ForRangeBasicTest(stop: t.CInt): - i: t.CInt = 0 - for i in range(stop): - print("For range: ", i) - print("Done") - - -def ForRangeWithStartStop(start: t.CInt, stop: t.CInt, step: t.CInt): - i: t.CInt = 0 - for i in range(start, stop, step): - print("Range: ", i) - print("Done") - - -def NestedForRangeTest(rows: t.CInt, cols: t.CInt): - r: t.CInt = 0 - c_val: t.CInt = 0 - for r in range(rows): - for c_val in range(cols): - print("Cell: ", r, c_val) - print("Grid done") - - -def ForWithIfBreakTest(data_size: t.CInt): - i: t.CInt = 0 - found: t.CInt = 0 - for i in range(data_size): - if i == 5: - print("Found at: ", i) - found = 1 - break - print("Checking: ", i) - if found == 0: - print("Not found") - - -def ForWithIfContinueTest(n: t.CInt): - i: t.CInt = 0 - count: t.CInt = 0 - for i in range(n): - if i % 2 == 0: - continue - print("Odd: ", i) - count += 1 - print("Total odd: ", count) - - -def ForWithElifBranchTest(value: t.CInt): - i: t.CInt = 0 - result: t.CInt = 0 - for i in range(value): - if i < 3: - result += 1 - elif i < 6: - result += 2 - elif i < 9: - result += 3 - else: - result += 4 - print("Elif branch result: ", result) - - -def WhileWithIfElifElseTest(iterations: t.CInt): - counter: t.CInt = 0 - while counter < iterations: - if counter < 2: - print("Phase 1: ", counter) - elif counter < 4: - print("Phase 2: ", counter) - elif counter < 6: - print("Phase 3: ", counter) - else: - print("Phase 4: ", counter) - counter += 1 - print("While done") - - -def WhileWithNestedIfTest(limit: t.CInt): - outer: t.CInt = 0 - while outer < limit: - inner: t.CInt = 0 - while inner < limit: - if inner == 2 and outer == 1: - print("Target: ", outer, inner) - inner += 1 - continue - if inner > 3: - break - print("Inner: ", inner) - inner += 1 - outer += 1 - - -def WhileWithMatchCaseTest(value: t.CInt): - result: t.CInt = 0 - match value: - case 1: - result = 100 - print("Case 1") - case 2: - result = 200 - print("Case 2") - case 3: - result = 300 - print("Case 3") - case _: - result = 999 - print("Default case") - print("Match result: ", result) - - -def WhileWithMatchCaseNoBreakTest(value: t.CInt): - result: t.CInt = 0 - match value: - case 1: - result = 10 - print("Case 1: ", result) - case 2: - result = 20 - print("Case 2: ", result) - result += 5 - case 3: - result = 30 - print("Case 3: ", result) - case _: - result = 0 - print("No break match result: ", result) - - -def ComplexForWhileMatchTest(outer_limit: t.CInt, inner_limit: t.CInt): - i: t.CInt = 0 - j: t.CInt = 0 - result: t.CInt = 0 - for i in range(outer_limit): - j = 0 - while j < inner_limit: - match (i, j): - case (0, 0): - result += 1 - case (1, 1): - result += 10 - case (2, _): - result += 100 - case (_, 0): - result += 1000 - case _: - result += 10000 - j += 1 - print("Complex match result: ", result) - - -def ForWithCaseAndNoBreakTest(n: t.CInt): - i: t.CInt = 0 - result: t.CInt = 0 - for i in range(n): - match i: - case 0: - result += 1 - case 1: - result += 2 - case 2: - result += 3 - result += 10 - case _: - result += i - c.NoBreak - print("NoBreak result: ", result) - - -def WhileWithBreakConditionTest(limit: t.CInt): - i: t.CInt = 0 - early_exit: t.CInt = 0 - while i < limit: - if i == 3: - early_exit = 1 - break - if i == 2: - i += 1 - continue - print("While i: ", i) - i += 1 - - -def NestedWhileWithMultipleBreakPoints(depth: t.CInt, width: t.CInt): - d: t.CInt = 0 - w: t.CInt = 0 - count: t.CInt = 0 - while d < depth: - w = 0 - while w < width: - if w == 2: - break - if d == 1 and w == 1: - c.Break - count += 1 - w += 1 - d += 1 - print("Nested break count: ", count) - - -def ForWithMatchCaseInLoopTest(iterations: t.CInt): - i: t.CInt = 0 - sum_even: t.CInt = 0 - sum_odd: t.CInt = 0 - for i in range(iterations): - match i % 3: - case 0: - sum_even += i - case 1: - sum_odd += i - case 2: - sum_even += i * 2 - case _: - pass - print("Sum even: ", sum_even) - print("Sum odd: ", sum_odd) - - -def ComplexLogicWithElifChains(a: t.CInt, b: t.CInt, c_val: t.CInt): - i: t.CInt = 0 - result: t.CInt = 0 - while i < 10: - if i < a: - if i < b: - result += 1 - elif i < c_val: - result += 2 - else: - result += 3 - elif i < b: - if i < c_val: - result += 4 - else: - result += 5 - elif i < c_val: - result += 6 - else: - result += 7 - i += 1 - print("Complex elif chain result: ", result) - - -def ForRangeWithStepAndCondition(n: t.CInt, step: t.CInt): - i: t.CInt = 0 - count: t.CInt = 0 - for i in range(0, n, step): - if i % 2 == 0: - print("Even step: ", i) - count += 1 - else: - if i > 5: - print("Large odd: ", i) - else: - print("Small odd: ", i) - print("Total steps: ", count) - - -def MatchCaseWithGuardConditions(value: t.CInt): - result: t.CInt = 0 - match value: - case 1 if config.TRUE == 1: - result = 100 - case 2 if config.FALSE == 0: - result = 200 - case 3: - result = 300 - case _: - result = 0 - print("Guard match result: ", result) - - -def WhileWithMultipleMatchCases(iterations: t.CInt): - i: t.CInt = 0 - state: t.CInt = 0 - while i < iterations: - match state: - case 0: - if i > 3: - state = 1 - case 1: - if i > 6: - state = 2 - case 2: - if i > 9: - state = 0 - print("State at i=", i, ": ", state) - i += 1 - - -def ForWhileMixWithBreakAndContinue(n: t.CInt): - i: t.CInt = 0 - j: t.CInt = 0 - count: t.CInt = 0 - for i in range(n): - j = 0 - while j < n: - if j == 2: - j += 1 - continue - if i == 3 and j == 3: - break - count += 1 - j += 1 - print("Mix break continue count: ", count) - - -def ComplexCaseMatchingWithRanges(start: t.CInt, end: t.CInt): - i: t.CInt = 0 - bucket0: t.CInt = 0 - bucket1: t.CInt = 0 - bucket2: t.CInt = 0 - bucket3: t.CInt = 0 - for i in range(start, end): - match i: - case _ if i < 10: - bucket0 += 1 - case _ if i < 20: - bucket1 += 1 - case _ if i < 30: - bucket2 += 1 - case _: - bucket3 += 1 - print("Bucket0 (<10): ", bucket0) - print("Bucket1 (10-19): ", bucket1) - print("Bucket2 (20-29): ", bucket2) - print("Bucket3 (>=30): ", bucket3) - - -def WhileWithElifInElifChain(limit: t.CInt): - i: t.CInt = 0 - result: t.CInt = 0 - while i < limit: - if i < 2: - if i == 0: - result = 1 - else: - result = 2 - elif i < 4: - if i == 2: - result = 3 - else: - result = 4 - elif i < 6: - if i == 4: - result = 5 - else: - result = 6 - else: - result = 7 - print("Chain result[", i, "]: ", result) - i += 1 - - -def ForWithCaseNoBreakNested(inner_limit: t.CInt): - i: t.CInt = 0 - j: t.CInt = 0 - result: t.CInt = 0 - for i in range(3): - for j in range(inner_limit): - match j: - case 0: - result += 1 - case 1: - result += 2 - case _: - result += 3 - c.NoBreak - print("Nested NoBreak result: ", result) \ No newline at end of file diff --git a/Test/TestProject2/App/zc/test.vp b/Test/TestProject2/App/zc/test.vp deleted file mode 100644 index 24a08a8..0000000 --- a/Test/TestProject2/App/zc/test.vp +++ /dev/null @@ -1,298 +0,0 @@ -import config -import t, c - - -def AboutSizeTWhileTest(length: t.CSizeT): - pos: t.CSizeT = 0 - while pos < length: - print("Pos: ", pos) - if pos > config.POSMAX: break - pos += 1 - while pos < length: - if pos > config.POSMAX: - print("Pos: ", pos) - pos += 1 - else: - print("Pos: ", pos) - pos += 1 - if pos > config.POSMAX: break - else: - pos += 1 - print("Pos: ", pos) - while pos < length: - print("Pos: ", pos) - pos += 1 - - -def MathBasicTest(x: t.CInt, y: t.CInt) -> t.CInt: - result: t.CInt = 0 - result = x + y - print("Add: ", result) - result = x - y - print("Sub: ", result) - result = x * y - print("Mul: ", result) - if y != 0: - result = x / y - print("Div: ", result) - result = x % y if y != 0 else 0 - print("Mod: ", result) - return result - - -def MathAdvancedTest(value: t.CInt) -> t.CInt: - counter: t.CInt = 0 - scaled: t.CInt = 0 - offset: t.CInt = 0 - scaled = value * config.MATH_SCALE - print("Scaled: ", scaled) - offset = scaled + config.MATH_OFFSET - print("Offset: ", offset) - threshold: t.CInt = config.THRESHOLD - if offset > threshold: - print("Above threshold") - counter = 1 - elif offset == threshold: - print("At threshold") - counter = 0 - else: - print("Below threshold") - counter = -1 - return counter - - -def WhileWithElifElseTest(start: t.CInt, end: t.CInt): - idx: t.CInt = start - while idx < end: - if idx < 0: - print("Negative: ", idx) - elif idx == 0: - print("Zero: ", idx) - elif idx > 0 and idx < 5: - print("Small positive: ", idx) - elif idx >= 5 and idx < 10: - print("Medium positive: ", idx) - else: - print("Large: ", idx) - idx += 1 - - -def NestedWhileWithMacrosTest(outer_limit: t.CInt, inner_limit: t.CInt): - outer: t.CInt = 0 - inner: t.CInt = 0 - total_ops: t.CInt = 0 - while outer < outer_limit: - inner = 0 - while inner < inner_limit: - if inner == config.TRUE: - print("Inner loop break condition at: ", inner) - total_ops += 1 - inner += 1 - outer += 1 - print("Total operations: ", total_ops) - - -def ComplexConditionTest(a: t.CInt, b: t.CInt, c_val: t.CInt): - x: t.CInt = a - y: t.CInt = b - z: t.CInt = c_val - while x < config.LOOP_LIMIT: - if x > 0 and y > 0 and z > 0: - print("All positive: ", x, y, z) - elif x <= 0 and y <= 0 and z <= 0: - print("All non-positive: ", x, y, z) - else: - if x > 0: - print("X positive") - elif y > 0: - print("Y positive") - else: - print("Z positive") - x += 1 - y += 1 - z += 1 - - -def RetryLoopTest(retry_count: t.CInt) -> t.CInt: - attempt: t.CInt = 0 - success: t.CInt = 0 - while attempt < retry_count: - if attempt < config.MAX_RETRY: - print("Attempt: ", attempt, " less than max") - success = attempt * 2 - elif attempt == config.MAX_RETRY: - print("At max retry") - success = -1 - else: - print("Beyond max retry") - success = -2 - attempt += 1 - return success - - -def BitwiseOperationsTest(value: t.CInt) -> t.CInt: - shifted: t.CInt = 0 - masked: t.CInt = 0 - xored: t.CInt = 0 - anded: t.CInt = 0 - ored: t.CInt = 0 - shifted = value << config.SHIFT_AMOUNT - print("Left shift: ", shifted) - shifted = value >> config.SHIFT_AMOUNT - print("Right shift: ", shifted) - masked = value & config.MASK_VALUE - print("Bitwise AND mask: ", masked) - xored = value ^ config.MASK_VALUE - print("Bitwise XOR: ", xored) - anded = value & (config.MASK_VALUE >> config.SHIFT_AMOUNT) - print("Bitwise AND shifted mask: ", anded) - ored = value | config.SHIFT_AMOUNT - print("Bitwise OR shift: ", ored) - return masked - - -def CompoundAssignmentMathTest(a: t.CInt, b: t.CInt) -> t.CInt: - x: t.CInt = a - y: t.CInt = b - result: t.CInt = 0 - x += y - print("x += y: ", x) - x -= y - print("x -= y: ", x) - x *= y - print("x *= y: ", x) - x = a - y = b - if b != 0: - x /= b - print("x /= y: ", x) - x = a - if b != 0: - x %= b - print("x %%= y: ", x) - x = a - x <<= config.SHIFT_AMOUNT - print("x <<= shift: ", x) - x >>= config.SHIFT_AMOUNT - print("x >>= shift: ", x) - x &= config.MASK_VALUE - print("x &= mask: ", x) - x |= config.SHIFT_AMOUNT - print("x |= shift: ", x) - result = (a + b) * config.MATH_SCALE - config.MATH_OFFSET - print("Compound: (a+b)*scale-offset: ", result) - result = (a * b) + (config.MATH_OFFSET / 2) - print("Compound: a*b+offset/2: ", result) - return result - - -def PowerAndModuloTest(base: t.CInt, exponent: t.CInt) -> t.CInt: - result: t.CInt = 1 - temp: t.CInt = 0 - i: t.CInt = 0 - while i < exponent: - result *= base - i += 1 - print("Power: ", result) - temp = result % config.MODULO_DIVISOR - print("Power mod: ", temp) - temp = (base * config.EXPONENT_BASE) % config.MODULO_DIVISOR - print("base*exp %% divisor: ", temp) - temp = ((base + config.MATH_OFFSET) * config.MATH_SCALE) % config.MODULO_DIVISOR - print("(base+offset)*scale %% divisor: ", temp) - return result - - -def MixedArithmeticTest(x: t.CInt, y: t.CInt, z: t.CInt) -> t.CInt: - result: t.CInt = 0 - result = (x + y) * z - print("(x+y)*z: ", result) - result = x + (y * z) - print("x+(y*z): ", result) - result = ((x + y) * config.MATH_SCALE) - config.MATH_OFFSET - print("((x+y)*scale)-offset: ", result) - result = (x * config.MATH_SCALE) + (y * config.MATH_SCALE) - print("x*scale + y*scale: ", result) - result = ((x % config.MODULO_DIVISOR) + (y % config.MODULO_DIVISOR)) * config.MATH_SCALE - print("(x%%mod + y%%mod)*scale: ", result) - temp: t.CInt = 0 - temp = x | y & z - print("x | y & z: ", temp) - temp = (x | y) & z - print("(x | y) & z: ", temp) - temp = x ^ y ^ z - print("x ^ y ^ z: ", temp) - return result - - -def MathWithWhileLoopTest(start: t.CInt, count: t.CInt) -> t.CInt: - idx: t.CInt = 0 - accumulator: t.CInt = 0 - multiplier: t.CInt = config.MATH_SCALE - while idx < count: - temp: t.CInt = (start + idx) * multiplier - temp = temp + config.MATH_OFFSET - if temp > config.THRESHOLD: - temp = config.THRESHOLD - accumulator += temp - multiplier += 1 - idx += 1 - print("Accumulator: ", accumulator) - return accumulator - - -def ComplexNestedMathTest(a: t.CInt, b: t.CInt) -> t.CInt: - layer1: t.CInt = 0 - layer2: t.CInt = 0 - layer3: t.CInt = 0 - i: t.CInt = 0 - layer1 = (a + b) * config.MATH_SCALE - print("Layer1: ", layer1) - while i < config.BIT_RANGE: - layer2 += layer1 >> 1 - i += 1 - print("Layer2: ", layer2) - layer3 = layer1 + layer2 - config.MATH_OFFSET - print("Layer3: ", layer3) - layer3 = layer3 * config.MATH_SCALE / 2 if config.MATH_SCALE != 0 else layer3 - print("Layer3 scaled: ", layer3) - return layer3 - - -def ConditionalMathChainTest(value: t.CInt) -> t.CInt: - result: t.CInt = 0 - step: t.CInt = 0 - while step < config.LOOP_LIMIT: - if step < 5: - result += step * config.MATH_SCALE - print("step<5: ", result) - elif step < 10: - result -= step - config.MATH_OFFSET - print("step<10: ", result) - elif step < 15: - result += (step * config.MATH_OFFSET) / config.MATH_SCALE - print("step<15: ", result) - else: - result = result * config.EXPONENT_BASE % config.MODULO_DIVISOR - print("step>=15: ", result) - step += 1 - return result - - -def BitManipulationMathTest(value: t.CInt) -> t.CInt: - original: t.CInt = value - nibble: t.CInt = 0 - result: t.CInt = 0 - result = (value << config.SHIFT_AMOUNT) | (value >> (8 - config.SHIFT_AMOUNT)) - print("Rotate left: ", result) - result = (value >> config.SHIFT_AMOUNT) | (value << (8 - config.SHIFT_AMOUNT)) - print("Rotate right: ", result) - nibble = value & 0xF - print("Lower nibble: ", nibble) - nibble = (value >> config.BIT_RANGE) & 0xF - print("Upper nibble: ", nibble) - result = ((value & config.MASK_VALUE) + config.MATH_OFFSET) * config.MATH_SCALE - print("Masked and scaled: ", result) - result = ((original << config.SHIFT_AMOUNT) ^ original) & config.MASK_VALUE - print("XOR shifted: ", result) - return result \ No newline at end of file diff --git a/Test/TestProject2/output/0df65b8ed15664b0.deps.json b/Test/TestProject2/output/0df65b8ed15664b0.deps.json deleted file mode 100644 index c832d07..0000000 --- a/Test/TestProject2/output/0df65b8ed15664b0.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"memhub": "04e5fe47ff2af528", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "zlib.zdef": "1f6617c02fc8899d", "zdef": "1f6617c02fc8899d", "stdio": "285b6aa29a34754d", "zlib.pyzlib": "3e775aa83705b119", "pyzlib": "3e775aa83705b119", "zlib.zinflate": "451745df21e598af", "zinflate": "451745df21e598af", "main": "541a1ed9b8be53c8", "stdlib": "6c658cc728d0bbf4", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "testcheck": "748d0424e8976fa0", "zlib.zchecksum": "8ebed83a7817fa0c", "zchecksum": "8ebed83a7817fa0c", "zlib.zdeflate": "90921d009fdd674c", "zdeflate": "90921d009fdd674c", "string": "928c0ff6d8c69ec9", "hashlib.__init__": "96837bcc64032444", "__init__": "d63d2c2a2bd9bd2a", "hashlib": "96837bcc64032444", "atom": "aa246c6e6aa30484", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "zc.config": "cfc83b830141b00e", "config": "cfc83b830141b00e", "binascii": "d3917d97537f703c", "zlib.zhuff": "d541ade6afb689a5", "zhuff": "d541ade6afb689a5", "stdint": "f5522571bcce7bcb", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "w32.fileio": "d137b1f3311f3a7f", "fileio": "d137b1f3311f3a7f", "w32.win32memory": "72e2d5ccb7cedcf1", "win32memory": "72e2d5ccb7cedcf1", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "w32.winsock2": "6446627d4f07a1b5", "winsock2": "6446627d4f07a1b5", "zlib.__init__": "d63d2c2a2bd9bd2a", "zlib": "d63d2c2a2bd9bd2a"} \ No newline at end of file diff --git a/Test/TestProject2/output/19f8024d10c828e8.deps.json b/Test/TestProject2/output/19f8024d10c828e8.deps.json deleted file mode 100644 index c832d07..0000000 --- a/Test/TestProject2/output/19f8024d10c828e8.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"memhub": "04e5fe47ff2af528", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "zlib.zdef": "1f6617c02fc8899d", "zdef": "1f6617c02fc8899d", "stdio": "285b6aa29a34754d", "zlib.pyzlib": "3e775aa83705b119", "pyzlib": "3e775aa83705b119", "zlib.zinflate": "451745df21e598af", "zinflate": "451745df21e598af", "main": "541a1ed9b8be53c8", "stdlib": "6c658cc728d0bbf4", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "testcheck": "748d0424e8976fa0", "zlib.zchecksum": "8ebed83a7817fa0c", "zchecksum": "8ebed83a7817fa0c", "zlib.zdeflate": "90921d009fdd674c", "zdeflate": "90921d009fdd674c", "string": "928c0ff6d8c69ec9", "hashlib.__init__": "96837bcc64032444", "__init__": "d63d2c2a2bd9bd2a", "hashlib": "96837bcc64032444", "atom": "aa246c6e6aa30484", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "zc.config": "cfc83b830141b00e", "config": "cfc83b830141b00e", "binascii": "d3917d97537f703c", "zlib.zhuff": "d541ade6afb689a5", "zhuff": "d541ade6afb689a5", "stdint": "f5522571bcce7bcb", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "w32.fileio": "d137b1f3311f3a7f", "fileio": "d137b1f3311f3a7f", "w32.win32memory": "72e2d5ccb7cedcf1", "win32memory": "72e2d5ccb7cedcf1", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "w32.winsock2": "6446627d4f07a1b5", "winsock2": "6446627d4f07a1b5", "zlib.__init__": "d63d2c2a2bd9bd2a", "zlib": "d63d2c2a2bd9bd2a"} \ No newline at end of file diff --git a/Test/TestProject2/output/1f6617c02fc8899d.deps.json b/Test/TestProject2/output/1f6617c02fc8899d.deps.json deleted file mode 100644 index c832d07..0000000 --- a/Test/TestProject2/output/1f6617c02fc8899d.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"memhub": "04e5fe47ff2af528", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "zlib.zdef": "1f6617c02fc8899d", "zdef": "1f6617c02fc8899d", "stdio": "285b6aa29a34754d", "zlib.pyzlib": "3e775aa83705b119", "pyzlib": "3e775aa83705b119", "zlib.zinflate": "451745df21e598af", "zinflate": "451745df21e598af", "main": "541a1ed9b8be53c8", "stdlib": "6c658cc728d0bbf4", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "testcheck": "748d0424e8976fa0", "zlib.zchecksum": "8ebed83a7817fa0c", "zchecksum": "8ebed83a7817fa0c", "zlib.zdeflate": "90921d009fdd674c", "zdeflate": "90921d009fdd674c", "string": "928c0ff6d8c69ec9", "hashlib.__init__": "96837bcc64032444", "__init__": "d63d2c2a2bd9bd2a", "hashlib": "96837bcc64032444", "atom": "aa246c6e6aa30484", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "zc.config": "cfc83b830141b00e", "config": "cfc83b830141b00e", "binascii": "d3917d97537f703c", "zlib.zhuff": "d541ade6afb689a5", "zhuff": "d541ade6afb689a5", "stdint": "f5522571bcce7bcb", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "w32.fileio": "d137b1f3311f3a7f", "fileio": "d137b1f3311f3a7f", "w32.win32memory": "72e2d5ccb7cedcf1", "win32memory": "72e2d5ccb7cedcf1", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "w32.winsock2": "6446627d4f07a1b5", "winsock2": "6446627d4f07a1b5", "zlib.__init__": "d63d2c2a2bd9bd2a", "zlib": "d63d2c2a2bd9bd2a"} \ No newline at end of file diff --git a/Test/TestProject2/output/3e775aa83705b119.deps.json b/Test/TestProject2/output/3e775aa83705b119.deps.json deleted file mode 100644 index c832d07..0000000 --- a/Test/TestProject2/output/3e775aa83705b119.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"memhub": "04e5fe47ff2af528", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "zlib.zdef": "1f6617c02fc8899d", "zdef": "1f6617c02fc8899d", "stdio": "285b6aa29a34754d", "zlib.pyzlib": "3e775aa83705b119", "pyzlib": "3e775aa83705b119", "zlib.zinflate": "451745df21e598af", "zinflate": "451745df21e598af", "main": "541a1ed9b8be53c8", "stdlib": "6c658cc728d0bbf4", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "testcheck": "748d0424e8976fa0", "zlib.zchecksum": "8ebed83a7817fa0c", "zchecksum": "8ebed83a7817fa0c", "zlib.zdeflate": "90921d009fdd674c", "zdeflate": "90921d009fdd674c", "string": "928c0ff6d8c69ec9", "hashlib.__init__": "96837bcc64032444", "__init__": "d63d2c2a2bd9bd2a", "hashlib": "96837bcc64032444", "atom": "aa246c6e6aa30484", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "zc.config": "cfc83b830141b00e", "config": "cfc83b830141b00e", "binascii": "d3917d97537f703c", "zlib.zhuff": "d541ade6afb689a5", "zhuff": "d541ade6afb689a5", "stdint": "f5522571bcce7bcb", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "w32.fileio": "d137b1f3311f3a7f", "fileio": "d137b1f3311f3a7f", "w32.win32memory": "72e2d5ccb7cedcf1", "win32memory": "72e2d5ccb7cedcf1", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "w32.winsock2": "6446627d4f07a1b5", "winsock2": "6446627d4f07a1b5", "zlib.__init__": "d63d2c2a2bd9bd2a", "zlib": "d63d2c2a2bd9bd2a"} \ No newline at end of file diff --git a/Test/TestProject2/output/451745df21e598af.deps.json b/Test/TestProject2/output/451745df21e598af.deps.json deleted file mode 100644 index c832d07..0000000 --- a/Test/TestProject2/output/451745df21e598af.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"memhub": "04e5fe47ff2af528", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "zlib.zdef": "1f6617c02fc8899d", "zdef": "1f6617c02fc8899d", "stdio": "285b6aa29a34754d", "zlib.pyzlib": "3e775aa83705b119", "pyzlib": "3e775aa83705b119", "zlib.zinflate": "451745df21e598af", "zinflate": "451745df21e598af", "main": "541a1ed9b8be53c8", "stdlib": "6c658cc728d0bbf4", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "testcheck": "748d0424e8976fa0", "zlib.zchecksum": "8ebed83a7817fa0c", "zchecksum": "8ebed83a7817fa0c", "zlib.zdeflate": "90921d009fdd674c", "zdeflate": "90921d009fdd674c", "string": "928c0ff6d8c69ec9", "hashlib.__init__": "96837bcc64032444", "__init__": "d63d2c2a2bd9bd2a", "hashlib": "96837bcc64032444", "atom": "aa246c6e6aa30484", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "zc.config": "cfc83b830141b00e", "config": "cfc83b830141b00e", "binascii": "d3917d97537f703c", "zlib.zhuff": "d541ade6afb689a5", "zhuff": "d541ade6afb689a5", "stdint": "f5522571bcce7bcb", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "w32.fileio": "d137b1f3311f3a7f", "fileio": "d137b1f3311f3a7f", "w32.win32memory": "72e2d5ccb7cedcf1", "win32memory": "72e2d5ccb7cedcf1", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "w32.winsock2": "6446627d4f07a1b5", "winsock2": "6446627d4f07a1b5", "zlib.__init__": "d63d2c2a2bd9bd2a", "zlib": "d63d2c2a2bd9bd2a"} \ No newline at end of file diff --git a/Test/TestProject2/output/541a1ed9b8be53c8.deps.json b/Test/TestProject2/output/541a1ed9b8be53c8.deps.json deleted file mode 100644 index 9f309f8..0000000 --- a/Test/TestProject2/output/541a1ed9b8be53c8.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"memhub": "04e5fe47ff2af528", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "zlib.zdef": "1f6617c02fc8899d", "zdef": "1f6617c02fc8899d", "stdio": "285b6aa29a34754d", "zlib.pyzlib": "3e775aa83705b119", "pyzlib": "3e775aa83705b119", "zlib.zinflate": "451745df21e598af", "zinflate": "451745df21e598af", "stdlib": "6c658cc728d0bbf4", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "testcheck": "748d0424e8976fa0", "zlib.zchecksum": "8ebed83a7817fa0c", "zchecksum": "8ebed83a7817fa0c", "zlib.zdeflate": "90921d009fdd674c", "zdeflate": "90921d009fdd674c", "string": "928c0ff6d8c69ec9", "hashlib.__init__": "96837bcc64032444", "__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "atom": "aa246c6e6aa30484", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "zc.config": "cfc83b830141b00e", "config": "cfc83b830141b00e", "binascii": "d3917d97537f703c", "zlib.zhuff": "d541ade6afb689a5", "zhuff": "d541ade6afb689a5", "stdint": "f5522571bcce7bcb", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7"} \ No newline at end of file diff --git a/Test/TestProject2/output/6ff26590374ae6fc.deps.json b/Test/TestProject2/output/6ff26590374ae6fc.deps.json deleted file mode 100644 index c832d07..0000000 --- a/Test/TestProject2/output/6ff26590374ae6fc.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"memhub": "04e5fe47ff2af528", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "zlib.zdef": "1f6617c02fc8899d", "zdef": "1f6617c02fc8899d", "stdio": "285b6aa29a34754d", "zlib.pyzlib": "3e775aa83705b119", "pyzlib": "3e775aa83705b119", "zlib.zinflate": "451745df21e598af", "zinflate": "451745df21e598af", "main": "541a1ed9b8be53c8", "stdlib": "6c658cc728d0bbf4", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "testcheck": "748d0424e8976fa0", "zlib.zchecksum": "8ebed83a7817fa0c", "zchecksum": "8ebed83a7817fa0c", "zlib.zdeflate": "90921d009fdd674c", "zdeflate": "90921d009fdd674c", "string": "928c0ff6d8c69ec9", "hashlib.__init__": "96837bcc64032444", "__init__": "d63d2c2a2bd9bd2a", "hashlib": "96837bcc64032444", "atom": "aa246c6e6aa30484", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "zc.config": "cfc83b830141b00e", "config": "cfc83b830141b00e", "binascii": "d3917d97537f703c", "zlib.zhuff": "d541ade6afb689a5", "zhuff": "d541ade6afb689a5", "stdint": "f5522571bcce7bcb", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "w32.fileio": "d137b1f3311f3a7f", "fileio": "d137b1f3311f3a7f", "w32.win32memory": "72e2d5ccb7cedcf1", "win32memory": "72e2d5ccb7cedcf1", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "w32.winsock2": "6446627d4f07a1b5", "winsock2": "6446627d4f07a1b5", "zlib.__init__": "d63d2c2a2bd9bd2a", "zlib": "d63d2c2a2bd9bd2a"} \ No newline at end of file diff --git a/Test/TestProject2/output/8ebed83a7817fa0c.deps.json b/Test/TestProject2/output/8ebed83a7817fa0c.deps.json deleted file mode 100644 index c832d07..0000000 --- a/Test/TestProject2/output/8ebed83a7817fa0c.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"memhub": "04e5fe47ff2af528", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "zlib.zdef": "1f6617c02fc8899d", "zdef": "1f6617c02fc8899d", "stdio": "285b6aa29a34754d", "zlib.pyzlib": "3e775aa83705b119", "pyzlib": "3e775aa83705b119", "zlib.zinflate": "451745df21e598af", "zinflate": "451745df21e598af", "main": "541a1ed9b8be53c8", "stdlib": "6c658cc728d0bbf4", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "testcheck": "748d0424e8976fa0", "zlib.zchecksum": "8ebed83a7817fa0c", "zchecksum": "8ebed83a7817fa0c", "zlib.zdeflate": "90921d009fdd674c", "zdeflate": "90921d009fdd674c", "string": "928c0ff6d8c69ec9", "hashlib.__init__": "96837bcc64032444", "__init__": "d63d2c2a2bd9bd2a", "hashlib": "96837bcc64032444", "atom": "aa246c6e6aa30484", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "zc.config": "cfc83b830141b00e", "config": "cfc83b830141b00e", "binascii": "d3917d97537f703c", "zlib.zhuff": "d541ade6afb689a5", "zhuff": "d541ade6afb689a5", "stdint": "f5522571bcce7bcb", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "w32.fileio": "d137b1f3311f3a7f", "fileio": "d137b1f3311f3a7f", "w32.win32memory": "72e2d5ccb7cedcf1", "win32memory": "72e2d5ccb7cedcf1", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "w32.winsock2": "6446627d4f07a1b5", "winsock2": "6446627d4f07a1b5", "zlib.__init__": "d63d2c2a2bd9bd2a", "zlib": "d63d2c2a2bd9bd2a"} \ No newline at end of file diff --git a/Test/TestProject2/output/90921d009fdd674c.deps.json b/Test/TestProject2/output/90921d009fdd674c.deps.json deleted file mode 100644 index c832d07..0000000 --- a/Test/TestProject2/output/90921d009fdd674c.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"memhub": "04e5fe47ff2af528", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "zlib.zdef": "1f6617c02fc8899d", "zdef": "1f6617c02fc8899d", "stdio": "285b6aa29a34754d", "zlib.pyzlib": "3e775aa83705b119", "pyzlib": "3e775aa83705b119", "zlib.zinflate": "451745df21e598af", "zinflate": "451745df21e598af", "main": "541a1ed9b8be53c8", "stdlib": "6c658cc728d0bbf4", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "testcheck": "748d0424e8976fa0", "zlib.zchecksum": "8ebed83a7817fa0c", "zchecksum": "8ebed83a7817fa0c", "zlib.zdeflate": "90921d009fdd674c", "zdeflate": "90921d009fdd674c", "string": "928c0ff6d8c69ec9", "hashlib.__init__": "96837bcc64032444", "__init__": "d63d2c2a2bd9bd2a", "hashlib": "96837bcc64032444", "atom": "aa246c6e6aa30484", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "zc.config": "cfc83b830141b00e", "config": "cfc83b830141b00e", "binascii": "d3917d97537f703c", "zlib.zhuff": "d541ade6afb689a5", "zhuff": "d541ade6afb689a5", "stdint": "f5522571bcce7bcb", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "w32.fileio": "d137b1f3311f3a7f", "fileio": "d137b1f3311f3a7f", "w32.win32memory": "72e2d5ccb7cedcf1", "win32memory": "72e2d5ccb7cedcf1", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "w32.winsock2": "6446627d4f07a1b5", "winsock2": "6446627d4f07a1b5", "zlib.__init__": "d63d2c2a2bd9bd2a", "zlib": "d63d2c2a2bd9bd2a"} \ No newline at end of file diff --git a/Test/TestProject2/output/_shared_sym_includes.pickle b/Test/TestProject2/output/_shared_sym_includes.pickle deleted file mode 100644 index ab8437d9748a383c5d3a02b6a3264a719f054384..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 787706 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

d=l{YfG+~R1o#%<+kl?| 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 diff --git a/Test/TestProject2/temp/aa246c6e6aa30484.stub.ll.dep b/Test/TestProject2/temp/aa246c6e6aa30484.stub.ll.dep deleted file mode 100644 index e69de29..0000000 diff --git a/Test/TestProject2/temp/aa246c6e6aa30484.vpi b/Test/TestProject2/temp/aa246c6e6aa30484.vpi deleted file mode 100644 index 3147b54..0000000 --- a/Test/TestProject2/temp/aa246c6e6aa30484.vpi +++ /dev/null @@ -1,26 +0,0 @@ -""" -Auto-generated Python stub file from atom.vp -Module: atom -""" - - -import t, c - -ATOMIC_RELAXED: t.CDefine = 0 -ATOMIC_CONSUME: t.CDefine = 1 -ATOMIC_ACQUIRE: t.CDefine = 2 -ATOMIC_RELEASE: t.CDefine = 3 -ATOMIC_ACQ_REL: t.CDefine = 4 -ATOMIC_SEQ_CST: t.CDefine = 5 - -def __atomic_test_and_set(ptr: t.CUInt64T | t.CPtr, order: t.CInt) -> t.CBool: pass - -def __atomic_clear(ptr: t.CUInt64T | t.CPtr, order: t.CInt) -> t.CVoid: pass - -def __atomic_thread_fence(order: t.CInt) -> t.CVoid: pass - -def __atomic_signal_fence(order: t.CInt) -> t.CVoid: pass - -def __atomic_always_lock_free(size: t.CSizeT, ptr: t.CVoid | t.CPtr) -> t.CBool: pass - -def __atomic_is_lock_free(size: t.CSizeT, ptr: t.CVoid | t.CPtr) -> t.CBool: pass diff --git a/Test/TestProject2/temp/bbdf3bbd4c3bc28c.stub.ll.dep b/Test/TestProject2/temp/bbdf3bbd4c3bc28c.stub.ll.dep deleted file mode 100644 index d4b382c..0000000 --- a/Test/TestProject2/temp/bbdf3bbd4c3bc28c.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -f5522571bcce7bcb|fc980acec33d69a7 \ No newline at end of file diff --git a/Test/TestProject2/temp/bbdf3bbd4c3bc28c.vpi b/Test/TestProject2/temp/bbdf3bbd4c3bc28c.vpi deleted file mode 100644 index 4709b3e..0000000 --- a/Test/TestProject2/temp/bbdf3bbd4c3bc28c.vpi +++ /dev/null @@ -1,138 +0,0 @@ -""" -Auto-generated Python stub file from w32.win32console.vp -Module: w32.win32console -""" - -import c - - -import t -from stdint import * -from w32.win32base import * - -ENABLE_PROCESSED_INPUT: t.CDefine = 0x0001 -ENABLE_LINE_INPUT: t.CDefine = 0x0002 -ENABLE_ECHO_INPUT: t.CDefine = 0x0004 -ENABLE_WINDOW_INPUT: t.CDefine = 0x0008 -ENABLE_MOUSE_INPUT: t.CDefine = 0x0010 -ENABLE_INSERT_MODE: t.CDefine = 0x0020 -ENABLE_QUICK_EDIT_MODE: t.CDefine = 0x0040 -ENABLE_EXTENDED_FLAGS: t.CDefine = 0x0080 -ENABLE_PROCESSED_OUTPUT: t.CDefine = 0x0001 -ENABLE_WRAP_AT_EOL_OUTPUT: t.CDefine = 0x0002 -ENABLE_VIRTUAL_TERMINAL_PROCESSING: t.CDefine = 0x0004 -DISABLE_NEWLINE_AUTO_RETURN: t.CDefine = 0x0008 -ENABLE_LVB_GRID_WORLDWIDE: t.CDefine = 0x0010 -FOREGROUND_BLUE: t.CDefine = 0x0001 -FOREGROUND_GREEN: t.CDefine = 0x0002 -FOREGROUND_RED: t.CDefine = 0x0004 -FOREGROUND_INTENSITY: t.CDefine = 0x0008 -BACKGROUND_BLUE: t.CDefine = 0x0010 -BACKGROUND_GREEN: t.CDefine = 0x0020 -BACKGROUND_RED: t.CDefine = 0x0040 -BACKGROUND_INTENSITY: t.CDefine = 0x0080 -KEY_EVENT: t.CDefine = 0x0001 -MOUSE_EVENT: t.CDefine = 0x0002 -WINDOW_BUFFER_SIZE_EVENT: t.CDefine = 0x0004 -MENU_EVENT: t.CDefine = 0x0008 -FOCUS_EVENT: t.CDefine = 0x0010 - -class COORD: - X: SHORT - Y: SHORT -class SMALL_RECT: - Left: SHORT - Top: SHORT - Right: SHORT - Bottom: SHORT -class CONSOLE_SCREEN_BUFFER_INFO: - dwSize: COORD - dwCursorPosition: COORD - wAttributes: WORD - srWindow: SMALL_RECT - dwMaximumWindowSize: COORD -class CONSOLE_CURSOR_INFO: - dwSize: ULONG - bVisible: BOOL -class CHAR_INFO: - UnicodeChar: WCHAR - Attributes: WORD -class KEY_EVENT_RECORD: - bKeyDown: BOOL - wRepeatCount: WORD - wVirtualKeyCode: WORD - wVirtualScanCode: WORD - uChar: WCHAR - dwControlKeyState: ULONG -class MOUSE_EVENT_RECORD: - dwMousePosition: COORD - dwButtonState: ULONG - dwControlKeyState: ULONG - dwEventFlags: ULONG -class WINDOW_BUFFER_SIZE_RECORD: - dwSize: COORD -class INPUT_RECORD: - EventType: WORD - Event: KEY_EVENT_RECORD - -def SetConsoleOutputCP(codepage: UINT) -> BOOL | t.State: pass - -def SetConsoleCP(codepage: UINT) -> BOOL | t.State: pass - -def GetConsoleCP() -> UINT | t.State: pass - -def GetConsoleOutputCP() -> UINT | t.State: pass - -def GetConsoleScreenBufferInfo(hConsoleOutput: HANDLE, lpConsoleScreenBufferInfo: CONSOLE_SCREEN_BUFFER_INFO | t.CPtr) -> BOOL | t.State: pass - -def SetConsoleScreenBufferSize(hConsoleOutput: HANDLE, dwSize: COORD) -> BOOL | t.State: pass - -def SetConsoleCursorPosition(hConsoleOutput: HANDLE, dwCursorPosition: COORD) -> BOOL | t.State: pass - -def GetConsoleCursorInfo(hConsoleOutput: HANDLE, lpConsoleCursorInfo: CONSOLE_CURSOR_INFO | t.CPtr) -> BOOL | t.State: pass - -def SetConsoleCursorInfo(hConsoleOutput: HANDLE, lpConsoleCursorInfo: CONSOLE_CURSOR_INFO | t.CPtr) -> BOOL | t.State: pass - -def SetConsoleTextAttribute(hConsoleOutput: HANDLE, wAttributes: WORD) -> BOOL | t.State: pass - -def FillConsoleOutputCharacterA(hConsoleOutput: HANDLE, cCharacter: t.CChar, nLength: ULONG, dwWriteCoord: COORD, lpNumberOfCharsWritten: ULONG | t.CPtr) -> BOOL | t.State: pass - -def FillConsoleOutputCharacterW(hConsoleOutput: HANDLE, cCharacter: WCHAR, nLength: ULONG, dwWriteCoord: COORD, lpNumberOfCharsWritten: ULONG | t.CPtr) -> BOOL | t.State: pass - -def FillConsoleOutputAttribute(hConsoleOutput: HANDLE, wAttribute: WORD, nLength: ULONG, dwWriteCoord: COORD, lpNumberOfAttrsWritten: ULONG | t.CPtr) -> BOOL | t.State: pass - -def WriteConsoleA(hConsoleOutput: HANDLE, lpBuffer: t.CConst | VOIDPTR, nNumberOfCharsToWrite: ULONG, lpNumberOfCharsWritten: ULONG | t.CPtr, lpReserved: VOIDPTR) -> BOOL | t.State: pass - -def WriteConsoleW(hConsoleOutput: HANDLE, lpBuffer: t.CConst | VOIDPTR, nNumberOfCharsToWrite: ULONG, lpNumberOfCharsWritten: ULONG | t.CPtr, lpReserved: VOIDPTR) -> BOOL | t.State: pass - -def ReadConsoleA(hConsoleInput: HANDLE, lpBuffer: VOIDPTR, nNumberOfCharsToRead: ULONG, lpNumberOfCharsRead: ULONG | t.CPtr, pInputControl: VOIDPTR) -> BOOL | t.State: pass - -def ReadConsoleW(hConsoleInput: HANDLE, lpBuffer: VOIDPTR, nNumberOfCharsToRead: ULONG, lpNumberOfCharsRead: ULONG | t.CPtr, pInputControl: VOIDPTR) -> BOOL | t.State: pass - -def GetConsoleMode(hConsoleHandle: HANDLE, lpMode: ULONG | t.CPtr) -> BOOL | t.State: pass - -def SetConsoleMode(hConsoleHandle: HANDLE, dwMode: ULONG) -> BOOL | t.State: pass - -def ReadConsoleInputA(hConsoleInput: HANDLE, lpBuffer: INPUT_RECORD | t.CPtr, nLength: ULONG, lpNumberOfEventsRead: ULONG | t.CPtr) -> BOOL | t.State: pass - -def ReadConsoleInputW(hConsoleInput: HANDLE, lpBuffer: INPUT_RECORD | t.CPtr, nLength: ULONG, lpNumberOfEventsRead: ULONG | t.CPtr) -> BOOL | t.State: pass - -def GetNumberOfConsoleInputEvents(hConsoleInput: HANDLE, lpNumberOfEvents: ULONG | t.CPtr) -> BOOL | t.State: pass - -def FlushConsoleInputBuffer(hConsoleInput: HANDLE) -> BOOL | t.State: pass - -def SetConsoleTitleA(lpConsoleTitle: LPCSTR) -> BOOL | t.State: pass - -def SetConsoleTitleW(lpConsoleTitle: LPCWSTR) -> BOOL | t.State: pass - -def GetConsoleTitleA(lpConsoleTitle: CHARPTR, nSize: ULONG) -> ULONG | t.State: pass - -def GetConsoleTitleW(lpConsoleTitle: WCHARPTR, nSize: ULONG) -> ULONG | t.State: pass - -def AllocConsole() -> BOOL | t.State: pass - -def FreeConsole() -> BOOL | t.State: pass - -def SetConsoleWindowInfo(hConsoleOutput: HANDLE, bAbsolute: BOOL, lpConsoleWindow: SMALL_RECT | t.CPtr) -> BOOL | t.State: pass - -def ScrollConsoleScreenBufferA(hConsoleOutput: HANDLE, lpScrollRectangle: SMALL_RECT | t.CPtr, lpClipRectangle: SMALL_RECT | t.CPtr, dwDestinationOrigin: COORD, lpFill: CHAR_INFO | t.CPtr) -> BOOL | t.State: pass diff --git a/Test/TestProject2/temp/c9d54a4158f7f5a8.stub.ll.dep b/Test/TestProject2/temp/c9d54a4158f7f5a8.stub.ll.dep deleted file mode 100644 index e69de29..0000000 diff --git a/Test/TestProject2/temp/c9d54a4158f7f5a8.vpi b/Test/TestProject2/temp/c9d54a4158f7f5a8.vpi deleted file mode 100644 index 0619c4b..0000000 --- a/Test/TestProject2/temp/c9d54a4158f7f5a8.vpi +++ /dev/null @@ -1,34 +0,0 @@ -""" -Auto-generated Python stub file from hashlib.__sha256.vp -Module: hashlib.__sha256 -""" - - -import t, c - -SHA256_BLOCK_LEN: t.CDefine = 64 -SHA256_DIGEST_LEN: t.CDefine = 32 -sha256_K: t.CExtern | t.CArray[t.CUInt32T, 64] - -def s0(x: t.CUInt32T) -> t.CUInt32T: pass - -def s1(x: t.CUInt32T) -> t.CUInt32T: pass - -def S0(x: t.CUInt32T) -> t.CUInt32T: pass - -def S1(x: t.CUInt32T) -> t.CUInt32T: pass - -def Ch(x: t.CUInt32T, y: t.CUInt32T, z: t.CUInt32T) -> t.CUInt32T: pass - -def Maj(x: t.CUInt32T, y: t.CUInt32T, z: t.CUInt32T) -> t.CUInt32T: pass - - -@t.Object -class sha256: - state: t.CArray[t.CUInt32T, 8] - count: t.CUInt64T - buf: t.CArray[t.CUInt8T, SHA256_BLOCK_LEN] - def __init__(self: sha256) -> t.CInt: pass - def transform(self: sha256, block: t.CUInt8T | t.CPtr) -> t.CInt: pass - def update(self: sha256, s: str) -> t.CInt: pass - def final(self: sha256, out: t.CArray[t.CUInt8T, SHA256_DIGEST_LEN]) -> t.CInt: pass \ No newline at end of file diff --git a/Test/TestProject2/temp/c9f4be41ca1cc2b4.stub.ll.dep b/Test/TestProject2/temp/c9f4be41ca1cc2b4.stub.ll.dep deleted file mode 100644 index 793e7ed..0000000 --- a/Test/TestProject2/temp/c9f4be41ca1cc2b4.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -f5522571bcce7bcb \ No newline at end of file diff --git a/Test/TestProject2/temp/c9f4be41ca1cc2b4.vpi b/Test/TestProject2/temp/c9f4be41ca1cc2b4.vpi deleted file mode 100644 index f7ed5fd..0000000 --- a/Test/TestProject2/temp/c9f4be41ca1cc2b4.vpi +++ /dev/null @@ -1,22 +0,0 @@ -""" -Auto-generated Python stub file from viperio.vp -Module: viperio -""" - - -import t, c -from stdint import * - -class Buf: - data: t.CChar | t.CPtr - length: t.CSizeT - capacity: t.CSizeT - owned: bool - def __init__(self: Buf, data: t.CChar | t.CPtr, capacity: t.CSizeT, length: t.CSizeT = 0, owned: bool = False) -> t.CInt: pass - def clear(self: Buf) -> t.CInt: pass - def write(self: Buf, src: t.CChar | t.CPtr, count: t.CSizeT) -> t.CSizeT: pass - def cstr(self: Buf) -> t.CChar | t.CPtr: pass - def reset(self: Buf) -> t.CInt: pass - def __enter__(self: Buf) -> 'Buf' | t.CPtr: pass - def __exit__(self: Buf) -> t.CInt: pass - def free(self: Buf) -> t.CInt: pass \ No newline at end of file diff --git a/Test/TestProject2/temp/cfc83b830141b00e.doc.json b/Test/TestProject2/temp/cfc83b830141b00e.doc.json deleted file mode 100644 index 9e26dfe..0000000 --- a/Test/TestProject2/temp/cfc83b830141b00e.doc.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/Test/TestProject2/temp/cfc83b830141b00e.vpi b/Test/TestProject2/temp/cfc83b830141b00e.vpi deleted file mode 100644 index a3a9f1c..0000000 --- a/Test/TestProject2/temp/cfc83b830141b00e.vpi +++ /dev/null @@ -1,27 +0,0 @@ -""" -Auto-generated Python stub file from zc.config.vp -Module: zc.config -""" - - -import t, c - -POSMAX: t.CDefine = 100 -MAX_RETRY: t.CDefine = 5 -BUFFER_SIZE: t.CDefine = 256 -PI: t.CDefine = 3.14159 -EULER: t.CDefine = 2.71828 -TRUE: t.CDefine = 1 -FALSE: t.CDefine = 0 -NULL: t.CDefine = 0 -MATH_OFFSET: t.CDefine = 10 -MATH_SCALE: t.CDefine = 2 -THRESHOLD: t.CDefine = 50 -LOOP_LIMIT: t.CDefine = 20 -SHIFT_AMOUNT: t.CDefine = 2 -MASK_VALUE: t.CDefine = 0xFF -BIT_RANGE: t.CDefine = 4 -EXPONENT_BASE: t.CDefine = 3 -MODULO_DIVISOR: t.CDefine = 7 -SCALE_SHIFT: t.CDefine = 4 -HALF_SCALE: t.CDefine = 0.5 \ No newline at end of file diff --git a/Test/TestProject2/temp/d137b1f3311f3a7f.vpi b/Test/TestProject2/temp/d137b1f3311f3a7f.vpi deleted file mode 100644 index a85310e..0000000 --- a/Test/TestProject2/temp/d137b1f3311f3a7f.vpi +++ /dev/null @@ -1,81 +0,0 @@ -""" -Auto-generated Python stub file from w32.fileio.vp -Module: w32.fileio -""" - - -import t, c -from stdint import * -import stdio -import w32.win32base -import w32.win32file - -class MODE(t.CEnum): - R = 0 - W = 1 - A = 2 - RP = 3 - WP = 4 - AP = 5 - X = 6 - XP = 7 -class FRESULT(t.CEnum): - OK = 0 - ERR = -1 - ERR_CLOSED = -2 - ERR_PERM = -3 - ERR_IO = -4 - ERR_NOTFOUND = -5 - -SEEK_SET: t.CDefine = 0 -SEEK_CUR: t.CDefine = 1 -SEEK_END: t.CDefine = 2 -INVALID_SET_FILE_POINTER: t.CDefine = -1 -SHARE_READ: t.CDefine = 0x00000001 -SHARE_WRITE: t.CDefine = 0x00000002 -SHARE_DELETE: t.CDefine = 0x00000004 - -class File: - handle: w32.win32base.HANDLE - closed: bool - can_read: bool - can_write: bool - is_append: bool - _share_mode: ULONG - def __init__(self: File, filename: str, mode: ULONG, share: ULONG = SHARE_READ) -> t.CInt: pass - def __enter__(self: File) -> 'File' | t.CPtr: pass - def __exit__(self: File) -> t.CInt: pass - def read(self: File, buf: bytes, count: ULONG) -> LONG: pass - def write(self: File, buf: bytes, count: ULONG) -> LONG: pass - def write_str(self: File, s: str) -> LONG: pass - def seek(self: File, offset: LONG, origin: ULONG) -> LONG: pass - def tell(self: File) -> LONG: pass - def close(self: File) -> LONG: pass - def flush(self: File) -> LONG: pass - def size(self: File) -> LONGLONG: pass - def readline(self: File, buf: bytes, max_count: ULONG) -> LONG: pass - def read_all(self: File, buf: bytes, max_count: ULONG) -> LONG: pass -class FileW: - handle: w32.win32base.HANDLE - closed: bool - can_read: bool - can_write: bool - is_append: bool - _share_mode: ULONG - def __init__(self: FileW, filename: w32.win32base.LPCWSTR, mode: ULONG, share: ULONG = SHARE_READ) -> t.CInt: pass - def __enter__(self: FileW) -> 'FileW' | t.CPtr: pass - def __exit__(self: FileW) -> t.CInt: pass - def read(self: FileW, buf: bytes, count: ULONG) -> LONG: pass - def write(self: FileW, buf: bytes, count: ULONG) -> LONG: pass - def write_str(self: FileW, s: str) -> LONG: pass - def seek(self: FileW, offset: LONG, origin: ULONG) -> LONG: pass - def tell(self: FileW) -> LONG: pass - def close(self: FileW) -> LONG: pass - def flush(self: FileW) -> LONG: pass - def size(self: FileW) -> LONGLONG: pass - def readline(self: FileW, buf: bytes, max_count: ULONG) -> LONG: pass - def read_all(self: FileW, buf: bytes, max_count: ULONG) -> LONG: pass - -def open(filename: str, mode: ULONG, share: ULONG = SHARE_READ) -> File | t.CPtr: pass - -def openw(filename: w32.win32base.LPCWSTR, mode: ULONG, share: ULONG = SHARE_READ) -> FileW | t.CPtr: pass diff --git a/Test/TestProject2/temp/d3917d97537f703c.stub.ll.dep b/Test/TestProject2/temp/d3917d97537f703c.stub.ll.dep deleted file mode 100644 index e69de29..0000000 diff --git a/Test/TestProject2/temp/d3917d97537f703c.vpi b/Test/TestProject2/temp/d3917d97537f703c.vpi deleted file mode 100644 index 9187725..0000000 --- a/Test/TestProject2/temp/d3917d97537f703c.vpi +++ /dev/null @@ -1,45 +0,0 @@ -""" -Auto-generated Python stub file from binascii.vp -Module: binascii -""" - - -import t, c - -HEX_CHARS: t.CExtern | t.CArray[t.CChar, None] -HEX_VALS: t.CExtern | t.CArray[t.CInt, 256] -B64_CHARS: t.CExtern | t.CArray[t.CChar, None] -B64_VALS: t.CExtern | t.CArray[t.CInt, 256] -HQX_CHARS: t.CExtern | t.CArray[t.CChar, 64] -HQX_VALS: t.CExtern | t.CArray[t.CInt, 256] -UU_CHARS: t.CExtern | t.CArray[t.CChar, None] -CRC32_TABLE: t.CExtern | t.CArray[t.CUnsignedInt, 256] -CRC_HQX_TABLE: t.CExtern | t.CArray[t.CUnsignedShort, 256] - -def init_binascii() -> t.CInt: pass - -def crc32(data: str, length: t.CInt, crc: t.CUnsignedInt) -> t.CUnsignedInt: pass - -def crc_hqx(data: str, length: t.CInt, crc: t.CUnsignedShort) -> t.CUnsignedShort: pass - -def hexlify(data: str, length: t.CInt) -> str: pass - -def b2a_hex(data: str, length: t.CInt) -> str: pass - -def a2b_hex(hexstr: str, length: t.CInt) -> str: pass - -def unhexlify(data: str, length: t.CInt) -> bytes: pass - -def b2a_base64(data: str, length: t.CInt) -> str: pass - -def a2b_base64(data: str, length: t.CInt) -> str: pass - -def b2a_uu(data: str, length: t.CInt) -> str: pass - -def a2b_uu(data: str) -> str: pass - -def b2a_hqx(data: str, length: t.CInt, crc: t.CUnsignedShort = 0) -> tuple[str, t.CUnsignedShort]: pass - -def a2b_hqx(data: str, crc: t.CUnsignedShort = 0) -> tuple[str, t.CUnsignedShort]: pass - -def adler32(data: str, length: t.CInt, adler: t.CUnsignedInt) -> t.CUnsignedInt: pass diff --git a/Test/TestProject2/temp/d541ade6afb689a5.stub.ll.dep b/Test/TestProject2/temp/d541ade6afb689a5.stub.ll.dep deleted file mode 100644 index 25a2827..0000000 --- a/Test/TestProject2/temp/d541ade6afb689a5.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -04e5fe47ff2af528|1f6617c02fc8899d|285b6aa29a34754d|6c658cc728d0bbf4|928c0ff6d8c69ec9|aa246c6e6aa30484|c9f4be41ca1cc2b4|f5522571bcce7bcb \ No newline at end of file diff --git a/Test/TestProject2/temp/d541ade6afb689a5.vpi b/Test/TestProject2/temp/d541ade6afb689a5.vpi deleted file mode 100644 index 5da55b1..0000000 --- a/Test/TestProject2/temp/d541ade6afb689a5.vpi +++ /dev/null @@ -1,44 +0,0 @@ -""" -Auto-generated Python stub file from zlib.zhuff.vp -Module: zlib.zhuff -""" - - -from stdint import * -import zlib.zdef as zdef -import memhub -import t, c - -ZHUFF_MAX_CODES: t.CDefine = 288 -ZHUFF_MAX_BITS: t.CDefine = 15 - -class zhuff_code: - code: UINT - bits: t.CInt -@t.Object -class zhuff_tree: - pool: memhub.MemManager | t.CPtr - codes: t.CArray[zhuff_code, ZHUFF_MAX_CODES] - count: t.CInt - max_bits: t.CInt - def __init__(self: zhuff_tree) -> t.CInt: pass - def build_codes(self: zhuff_tree, freqs: INTPTR, count: t.CInt, max_bits: t.CInt) -> t.CInt: pass - def build_fixed_lit_tree(self: zhuff_tree) -> t.CInt: pass - def build_fixed_dist_tree(self: zhuff_tree) -> t.CInt: pass - def encode_symbol(self: zhuff_tree, symbol: int, writer: zdef.zbit_writer | t.CPtr) -> t.CInt: pass - def build_code_lengths(self: zhuff_tree, lengths: t.CInt | t.CPtr, freqs: t.CInt | t.CPtr, count: t.CInt, max_bits: t.CInt) -> t.CInt: pass - def get_fixed_lit_lengths(self: zhuff_tree, lengths: INTPTR) -> t.CInt: pass - def get_fixed_dist_lengths(self: zhuff_tree, lengths: INTPTR) -> t.CInt: pass - def build_tree_from_lengths(self: zhuff_tree, lengths: INTPTR, count: t.CInt, max_bits: t.CInt) -> t.CInt: pass -class zhuff_decode_node: - children: t.CArray[t.CInt, 2] - symbol: t.CInt -@t.Object -class zhuff_decode_tree: - pool: memhub.MemManager | t.CPtr - nodes: t.CArray[zhuff_decode_node, 2 * ZHUFF_MAX_CODES] - node_count: t.CInt - root: t.CInt - def __init__(self: zhuff_decode_tree) -> t.CInt: pass - def build_decode_tree(self: zhuff_decode_tree, ht: zhuff_tree | t.CPtr) -> t.CInt: pass - def decode_symbol(self: zhuff_decode_tree, reader: zdef.zbit_reader | t.CPtr) -> t.CInt: pass \ No newline at end of file diff --git a/Test/TestProject2/temp/d63d2c2a2bd9bd2a.vpi b/Test/TestProject2/temp/d63d2c2a2bd9bd2a.vpi deleted file mode 100644 index 300ab3b..0000000 --- a/Test/TestProject2/temp/d63d2c2a2bd9bd2a.vpi +++ /dev/null @@ -1,10 +0,0 @@ -""" -Auto-generated Python stub file from zlib.__init__.vp -Module: zlib.__init__ -""" - -import t -import c - - -from .pyzlib import * \ No newline at end of file diff --git a/Test/TestProject2/temp/f5522571bcce7bcb.stub.ll.dep b/Test/TestProject2/temp/f5522571bcce7bcb.stub.ll.dep deleted file mode 100644 index e69de29..0000000 diff --git a/Test/TestProject2/temp/f5522571bcce7bcb.vpi b/Test/TestProject2/temp/f5522571bcce7bcb.vpi deleted file mode 100644 index f0bc071..0000000 --- a/Test/TestProject2/temp/f5522571bcce7bcb.vpi +++ /dev/null @@ -1,100 +0,0 @@ -""" -Auto-generated Python stub file from stdint.vp -Module: stdint -""" - -import c - - -import t - -INT: t.CTypedef = t.CInt -INTPTR: t.CTypedef = t.CInt | t.CPtr -BOOL: t.CTypedef = t.CInt -UINT: t.CTypedef = t.CUnsignedInt -UINTPTR: t.CTypedef = UINT | t.CPtr -BYTE: t.CTypedef = t.CUnsignedChar -BYTEPTR: t.CTypedef = BYTE | t.CPtr -WORD: t.CTypedef = t.CUInt16T -DWORD: t.CTypedef = t.CUInt32T -QWORD: t.CTypedef = t.CUInt64T -TCHAR: t.CTypedef = t.CChar -CHARLIST: t.CTypedef = str | t.CPtr -VOID: t.CTypedef = t.CVoid -SHORT: t.CTypedef = t.CShort -SHORTPTR: t.CTypedef = t.CShort | t.CPtr -USHORT: t.CTypedef = t.CUnsignedShort -USHORTPTR: t.CTypedef = t.CUnsignedShort | t.CPtr -LONGLONG: t.CTypedef = t.CLongLong -ULONGLONG: t.CTypedef = t.CUnsignedLongLong -LONG: t.CTypedef = t.CLong -ULONG: t.CTypedef = t.CUnsignedLong -WCHAR: t.CTypedef = WORD -WCHARPTR: t.CTypedef = WORD | t.CPtr -CHARPTR: t.CTypedef = t.CChar | t.CPtr -FSIZE_t: t.CTypedef = DWORD -LBA_t: t.CTypedef = DWORD -VOIDPTR: t.CTypedef = t.CVoid | t.CPtr -FLOAT: t.CTypedef = t.CFloat -DOUBLE: t.CTypedef = t.CDouble -FLOAT8: t.CTypedef = t.CFloat8T -FLOAT16: t.CTypedef = t.CFloat16T -FLOAT32: t.CTypedef = t.CFloat32T -FLOAT64: t.CTypedef = t.CFloat64T -FLOAT128: t.CTypedef = t.CFloat128T -INT8: t.CTypedef = t.CInt8T -INT16: t.CTypedef = t.CInt16T -INT32: t.CTypedef = t.CInt32T -INT64: t.CTypedef = t.CInt64T -UINT8: t.CTypedef = t.CUInt8T -UINT16: t.CTypedef = t.CUInt16T -UINT32: t.CTypedef = t.CUInt32T -UINT64: t.CTypedef = t.CUInt64T -INT8PTR: t.CTypedef = t.CInt8T | t.CPtr -INT16PTR: t.CTypedef = t.CInt16T | t.CPtr -INT32PTR: t.CTypedef = t.CInt32T | t.CPtr -INT64PTR: t.CTypedef = t.CInt64T | t.CPtr -UINT8PTR: t.CTypedef = t.CUInt8T | t.CPtr -UINT16PTR: t.CTypedef = t.CUInt16T | t.CPtr -UINT32PTR: t.CTypedef = t.CUInt32T | t.CPtr -UINT64PTR: t.CTypedef = t.CUInt64T | t.CPtr -CHAR8: t.CTypedef = t.CChar8T -CHAR16: t.CTypedef = t.CChar16T -CHAR32: t.CTypedef = t.CChar32T -CHAR8PTR: t.CTypedef = t.CChar8T | t.CPtr -CHAR16PTR: t.CTypedef = t.CChar16T | t.CPtr -CHAR32PTR: t.CTypedef = t.CChar32T | t.CPtr -i8: t.CTypedef = t.CInt8T -i16: t.CTypedef = t.CInt16T -i32: t.CTypedef = t.CInt32T -i64: t.CTypedef = t.CInt64T -u8: t.CTypedef = t.CUInt8T -u16: t.CTypedef = t.CUInt16T -u32: t.CTypedef = t.CUInt32T -u64: t.CTypedef = t.CUInt64T -SIZE_T: t.CTypedef = t.CSizeT -SSIZE_T: t.CTypedef = t.CPtrDiffT -PTRDIFF_T: t.CTypedef = t.CPtrDiffT -int8_t: t.CTypedef = t.CInt8T -int16_t: t.CTypedef = t.CInt16T -int32_t: t.CTypedef = t.CInt32T -int64_t: t.CTypedef = t.CInt64T -uint8_t: t.CTypedef = t.CUInt8T -uint16_t: t.CTypedef = t.CUInt16T -uint32_t: t.CTypedef = t.CUInt32T -uint64_t: t.CTypedef = t.CUInt64T -size_t: t.CTypedef = t.CSizeT -ssize_t: t.CTypedef = t.CPtrDiffT -ptrdiff_t: t.CTypedef = t.CPtrDiffT -intptr_t: t.CTypedef = t.CIntPtrT -uintptr_t: t.CTypedef = t.CUIntPtrT -wchar_t: t.CTypedef = t.CWCharT -char8_t: t.CTypedef = t.CChar8T -char16_t: t.CTypedef = t.CChar16T -char32_t: t.CTypedef = t.CChar32T -float8_t: t.CTypedef = t.CFloat8T -float16_t: t.CTypedef = t.CFloat16T -float32_t: t.CTypedef = t.CFloat32T -float64_t: t.CTypedef = t.CFloat64T -float128_t: t.CTypedef = t.CFloat128T -_Bool: t.CTypedef = t.CBool \ No newline at end of file diff --git a/Test/TestProject2/temp/f6b51804a0ba8ff0.vpi b/Test/TestProject2/temp/f6b51804a0ba8ff0.vpi deleted file mode 100644 index 6ee80a6..0000000 --- a/Test/TestProject2/temp/f6b51804a0ba8ff0.vpi +++ /dev/null @@ -1,192 +0,0 @@ -""" -Auto-generated Python stub file from w32.win32file.vp -Module: w32.win32file -""" - -import c - - -import t -from stdint import * -from w32.win32base import * - -GENERIC_READ: t.CDefine = 0x80000000 -GENERIC_WRITE: t.CDefine = 0x40000000 -GENERIC_EXECUTE: t.CDefine = 0x20000000 -GENERIC_ALL: t.CDefine = 0x10000000 -FILE_SHARE_READ: t.CDefine = 0x00000001 -FILE_SHARE_WRITE: t.CDefine = 0x00000002 -FILE_SHARE_DELETE: t.CDefine = 0x00000004 -CREATE_NEW: t.CDefine = 1 -CREATE_ALWAYS: t.CDefine = 2 -OPEN_EXISTING: t.CDefine = 3 -OPEN_ALWAYS: t.CDefine = 4 -TRUNCATE_EXISTING: t.CDefine = 5 -FILE_ATTRIBUTE_READONLY: t.CDefine = 0x00000001 -FILE_ATTRIBUTE_HIDDEN: t.CDefine = 0x00000002 -FILE_ATTRIBUTE_SYSTEM: t.CDefine = 0x00000004 -FILE_ATTRIBUTE_DIRECTORY: t.CDefine = 0x00000010 -FILE_ATTRIBUTE_ARCHIVE: t.CDefine = 0x00000020 -FILE_ATTRIBUTE_NORMAL: t.CDefine = 0x00000080 -FILE_ATTRIBUTE_TEMPORARY: t.CDefine = 0x00000100 -FILE_ATTRIBUTE_COMPRESSED: t.CDefine = 0x00000800 -FILE_ATTRIBUTE_OFFLINE: t.CDefine = 0x00001000 -FILE_ATTRIBUTE_ENCRYPTED: t.CDefine = 0x00004000 -FILE_FLAG_WRITE_THROUGH: t.CDefine = 0x80000000 -FILE_FLAG_OVERLAPPED: t.CDefine = 0x40000000 -FILE_FLAG_NO_BUFFERING: t.CDefine = 0x20000000 -FILE_FLAG_RANDOM_ACCESS: t.CDefine = 0x10000000 -FILE_FLAG_SEQUENTIAL_SCAN: t.CDefine = 0x08000000 -FILE_FLAG_DELETE_ON_CLOSE: t.CDefine = 0x04000000 -FILE_FLAG_BACKUP_SEMANTICS: t.CDefine = 0x02000000 -FILE_FLAG_POSIX_SEMANTICS: t.CDefine = 0x01000000 -FILE_BEGIN: t.CDefine = 0 -FILE_CURRENT: t.CDefine = 1 -FILE_END: t.CDefine = 2 -STD_INPUT_HANDLE: t.CDefine = t.CUnsignedLong(-10) -STD_OUTPUT_HANDLE: t.CDefine = t.CUnsignedLong(-11) -STD_ERROR_HANDLE: t.CDefine = t.CUnsignedLong(-12) -MOVEFILE_REPLACE_EXISTING: t.CDefine = 0x00000001 -MOVEFILE_COPY_ALLOWED: t.CDefine = 0x00000002 -MOVEFILE_WRITE_THROUGH: t.CDefine = 0x00000008 - -class BY_HANDLE_FILE_INFORMATION: - dwFileAttributes: ULONG - ftCreationTime: FILETIME - ftLastAccessTime: FILETIME - ftLastWriteTime: FILETIME - dwVolumeSerialNumber: ULONG - nFileSizeHigh: ULONG - nFileSizeLow: ULONG - nNumberOfLinks: ULONG - nFileIndexHigh: ULONG - nFileIndexLow: ULONG -class WIN32_FIND_DATAA: - dwFileAttributes: ULONG - ftCreationTime: FILETIME - ftLastAccessTime: FILETIME - ftLastWriteTime: FILETIME - nFileSizeHigh: ULONG - nFileSizeLow: ULONG - dwReserved0: ULONG - dwReserved1: ULONG - cFileName: t.CArray[t.CChar, 260] - cAlternateFileName: t.CArray[t.CChar, 14] -class WIN32_FIND_DATAW: - dwFileAttributes: ULONG - ftCreationTime: FILETIME - ftLastAccessTime: FILETIME - ftLastWriteTime: FILETIME - nFileSizeHigh: ULONG - nFileSizeLow: ULONG - dwReserved0: ULONG - dwReserved1: ULONG - cFileName: t.CArray[t.CUInt16T, 260] - cAlternateFileName: t.CArray[t.CUInt16T, 14] - -def CreateFileA(lpFileName: LPCSTR, dwDesiredAccess: ULONG, dwShareMode: ULONG, lpSecurityAttributes: SECURITY_ATTRIBUTES | t.CPtr, dwCreationDisposition: ULONG, dwFlagsAndAttributes: ULONG, hTemplateFile: HANDLE) -> HANDLE | t.State: pass - -def CreateFileW(lpFileName: LPCWSTR, dwDesiredAccess: ULONG, dwShareMode: ULONG, lpSecurityAttributes: SECURITY_ATTRIBUTES | t.CPtr, dwCreationDisposition: ULONG, dwFlagsAndAttributes: ULONG, hTemplateFile: HANDLE) -> HANDLE | t.State: pass - -def ReadFile(hFile: HANDLE, lpBuffer: VOIDPTR, nNumberOfBytesToRead: ULONG, lpNumberOfBytesRead: ULONG | t.CPtr, lpOverlapped: OVERLAPPED | t.CPtr) -> BOOL | t.State: pass - -def WriteFile(hFile: HANDLE, lpBuffer: t.CConst | VOIDPTR, nNumberOfBytesToWrite: ULONG, lpNumberOfBytesWritten: ULONG | t.CPtr, lpOverlapped: OVERLAPPED | t.CPtr) -> BOOL | t.State: pass - -def SetFilePointer(hFile: HANDLE, lDistanceToMove: LONG, lpDistanceToMoveHigh: LONG | t.CPtr, dwMoveMethod: ULONG) -> LONG | t.State: pass - -def SetFilePointerEx(hFile: HANDLE, liDistanceToMove: LARGE_INTEGER | t.CPtr, lpNewFilePointer: LARGE_INTEGER | t.CPtr, dwMoveMethod: ULONG) -> BOOL | t.State: pass - -def GetFileSize(hFile: HANDLE, lpFileSizeHigh: ULONG | t.CPtr) -> ULONG | t.State: pass - -def GetFileSizeEx(hFile: HANDLE, lpFileSize: LARGE_INTEGER | t.CPtr) -> BOOL | t.State: pass - -def SetEndOfFile(hFile: HANDLE) -> BOOL | t.State: pass - -def FlushFileBuffers(hFile: HANDLE) -> BOOL | t.State: pass - -def GetFileType(hFile: HANDLE) -> ULONG | t.State: pass - -def GetFileAttributesA(lpFileName: LPCSTR) -> ULONG | t.State: pass - -def GetFileAttributesW(lpFileName: LPCWSTR) -> ULONG | t.State: pass - -def SetFileAttributesA(lpFileName: LPCSTR, dwFileAttributes: ULONG) -> BOOL | t.State: pass - -def SetFileAttributesW(lpFileName: LPCWSTR, dwFileAttributes: ULONG) -> BOOL | t.State: pass - -def DeleteFileA(lpFileName: LPCSTR) -> BOOL | t.State: pass - -def DeleteFileW(lpFileName: LPCWSTR) -> BOOL | t.State: pass - -def MoveFileA(lpExistingFileName: LPCSTR, lpNewFileName: LPCSTR) -> BOOL | t.State: pass - -def MoveFileW(lpExistingFileName: LPCWSTR, lpNewFileName: LPCWSTR) -> BOOL | t.State: pass - -def MoveFileExA(lpExistingFileName: LPCSTR, lpNewFileName: LPCSTR, dwFlags: ULONG) -> BOOL | t.State: pass - -def MoveFileExW(lpExistingFileName: LPCWSTR, lpNewFileName: LPCWSTR, dwFlags: ULONG) -> BOOL | t.State: pass - -def CopyFileA(lpExistingFileName: LPCSTR, lpNewFileName: LPCSTR, bFailIfExists: BOOL) -> BOOL | t.State: pass - -def CopyFileW(lpExistingFileName: LPCWSTR, lpNewFileName: LPCWSTR, bFailIfExists: BOOL) -> BOOL | t.State: pass - -def CreateDirectoryA(lpPathName: LPCSTR, lpSecurityAttributes: SECURITY_ATTRIBUTES | t.CPtr) -> BOOL | t.State: pass - -def CreateDirectoryW(lpPathName: LPCWSTR, lpSecurityAttributes: SECURITY_ATTRIBUTES | t.CPtr) -> BOOL | t.State: pass - -def RemoveDirectoryA(lpPathName: LPCSTR) -> BOOL | t.State: pass - -def RemoveDirectoryW(lpPathName: LPCWSTR) -> BOOL | t.State: pass - -def FindFirstFileA(lpFileName: LPCSTR, lpFindFileData: WIN32_FIND_DATAA | t.CPtr) -> HANDLE | t.State: pass - -def FindFirstFileW(lpFileName: LPCWSTR, lpFindFileData: WIN32_FIND_DATAW | t.CPtr) -> HANDLE | t.State: pass - -def FindNextFileA(hFindFile: HANDLE, lpFindFileData: WIN32_FIND_DATAA | t.CPtr) -> BOOL | t.State: pass - -def FindNextFileW(hFindFile: HANDLE, lpFindFileData: WIN32_FIND_DATAW | t.CPtr) -> BOOL | t.State: pass - -def FindClose(hFindFile: HANDLE) -> BOOL | t.State: pass - -def GetStdHandle(nStdHandle: ULONG) -> HANDLE | t.State: pass - -def SetStdHandle(nStdHandle: ULONG, hHandle: HANDLE) -> BOOL | t.State: pass - -def GetFileInformationByHandle(hFile: HANDLE, lpFileInformation: BY_HANDLE_FILE_INFORMATION | t.CPtr) -> BOOL | t.State: pass - -def LockFile(hFile: HANDLE, dwFileOffsetLow: ULONG, dwFileOffsetHigh: ULONG, nNumberOfBytesToLockLow: ULONG, nNumberOfBytesToLockHigh: ULONG) -> BOOL | t.State: pass - -def UnlockFile(hFile: HANDLE, dwFileOffsetLow: ULONG, dwFileOffsetHigh: ULONG, nNumberOfBytesToUnlockLow: ULONG, nNumberOfBytesToUnlockHigh: ULONG) -> BOOL | t.State: pass - -def GetTempPathA(nBufferLength: ULONG, lpBuffer: CHARPTR) -> ULONG | t.State: pass - -def GetTempPathW(nBufferLength: ULONG, lpBuffer: WCHARPTR) -> ULONG | t.State: pass - -def GetTempFileNameA(lpPathName: LPCSTR, lpPrefixString: LPCSTR, uUnique: UINT, lpTempFileName: CHARPTR) -> UINT | t.State: pass - -def GetTempFileNameW(lpPathName: LPCWSTR, lpPrefixString: LPCWSTR, uUnique: UINT, lpTempFileName: WCHARPTR) -> UINT | t.State: pass - -def GetCurrentDirectoryA(nBufferLength: ULONG, lpBuffer: CHARPTR) -> ULONG | t.State: pass - -def GetCurrentDirectoryW(nBufferLength: ULONG, lpBuffer: WCHARPTR) -> ULONG | t.State: pass - -def SetCurrentDirectoryA(lpPathName: LPCSTR) -> BOOL | t.State: pass - -def SetCurrentDirectoryW(lpPathName: LPCWSTR) -> BOOL | t.State: pass - -def GetModuleFileNameA(hModule: HANDLE, lpFilename: CHARPTR, nSize: ULONG) -> ULONG | t.State: pass - -def GetModuleFileNameW(hModule: HANDLE, lpFilename: WCHARPTR, nSize: ULONG) -> ULONG | t.State: pass - - -HANDLE_FLAG_INHERIT: t.CDefine = 0x00000001 -HANDLE_FLAG_PROTECT_FROM_CLOSE: t.CDefine = 0x00000002 - -def CreatePipe(hReadPipe: HANDLE | t.CPtr, hWritePipe: HANDLE | t.CPtr, lpPipeAttributes: SECURITY_ATTRIBUTES | t.CPtr, nSize: ULONG) -> BOOL | t.State: pass - -def SetHandleInformation(hObject: HANDLE, dwMask: ULONG, dwFlags: ULONG) -> BOOL | t.State: pass - -def DuplicateHandle(hSourceProcessHandle: HANDLE, hSourceHandle: HANDLE, hTargetProcessHandle: HANDLE, lpTargetHandle: HANDLE | t.CPtr, dwDesiredAccess: ULONG, bInheritHandle: BOOL, dwOptions: ULONG) -> BOOL | t.State: pass - - -DUPLICATE_SAME_ACCESS: t.CDefine = 0x00000002 \ No newline at end of file diff --git a/Test/TestProject2/temp/fc980acec33d69a7.stub.ll.dep b/Test/TestProject2/temp/fc980acec33d69a7.stub.ll.dep deleted file mode 100644 index 793e7ed..0000000 --- a/Test/TestProject2/temp/fc980acec33d69a7.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -f5522571bcce7bcb \ No newline at end of file diff --git a/Test/TestProject2/temp/fc980acec33d69a7.vpi b/Test/TestProject2/temp/fc980acec33d69a7.vpi deleted file mode 100644 index 3f9feff..0000000 --- a/Test/TestProject2/temp/fc980acec33d69a7.vpi +++ /dev/null @@ -1,100 +0,0 @@ -""" -Auto-generated Python stub file from w32.win32base.vp -Module: w32.win32base -""" - -import c - - -import t -from stdint import * - -HANDLE: t.CTypedef = VOIDPTR -LPCSTR: t.CTypedef = t.CConst | t.CChar | t.CPtr -LPCWSTR: t.CTypedef = t.CConst | t.CUnsignedShort | t.CPtr -INVALID_HANDLE_VALUE: t.CDefine = -1 -NULL: t.CDefine = 0 -TRUE: t.CDefine = 1 -FALSE: t.CDefine = 0 -INFINITE: t.CDefine = 0xFFFFFFFF -WAIT_FAILED: t.CDefine = 0xFFFFFFFF -WAIT_OBJECT_0: t.CDefine = 0 -WAIT_TIMEOUT: t.CDefine = 258 -WAIT_ABANDONED: t.CDefine = 0x80 -MAX_PATH: t.CDefine = 260 -ERROR_SUCCESS: t.CDefine = 0 -ERROR_FILE_NOT_FOUND: t.CDefine = 2 -ERROR_ACCESS_DENIED: t.CDefine = 5 -ERROR_INSUFFICIENT_BUFFER: t.CDefine = 122 - -class SECURITY_ATTRIBUTES: - nLength: ULONG - lpSecurityDescriptor: VOIDPTR - bInheritHandle: BOOL -class OVERLAPPED: - Internal: ULONGLONG - InternalHigh: ULONGLONG - Offset: ULONG - OffsetHigh: ULONG - hEvent: HANDLE -class FILETIME: - dwLowDateTime: DWORD - dwHighDateTime: DWORD -class SYSTEMTIME: - wYear: WORD - wMonth: WORD - wDayOfWeek: WORD - wDay: WORD - wHour: WORD - wMinute: WORD - wSecond: WORD - wMilliseconds: WORD -class GUID: - Data1: DWORD - Data2: WORD - Data3: WORD - Data4: BYTEPTR -class LARGE_INTEGER: - QuadPart: LONGLONG -class ULARGE_INTEGER: - QuadPart: ULONGLONG - -def GetLastError() -> ULONG | t.State: pass - -def SetLastError(dwErrCode: ULONG) -> t.State: pass - -def CloseHandle(hObject: HANDLE) -> BOOL | t.State: pass - -def GetProcAddress(hModule: HANDLE, lpProcName: LPCSTR) -> VOIDPTR | t.State: pass - -def GetModuleHandleA(lpModuleName: LPCSTR) -> HANDLE | t.State: pass - -def GetModuleHandleW(lpModuleName: LPCWSTR) -> HANDLE | t.State: pass - -def LoadLibraryA(lpLibFileName: LPCSTR) -> HANDLE | t.State: pass - -def LoadLibraryW(lpLibFileName: LPCWSTR) -> HANDLE | t.State: pass - -def FreeLibrary(hLibModule: HANDLE) -> BOOL | t.State: pass - -def GetSystemTime(lpSystemTime: SYSTEMTIME | t.CPtr) -> t.State: pass - -def GetLocalTime(lpSystemTime: SYSTEMTIME | t.CPtr) -> t.State: pass - -def FileTimeToSystemTime(lpFileTime: FILETIME | t.CPtr, lpSystemTime: SYSTEMTIME | t.CPtr) -> BOOL | t.State: pass - -def SystemTimeToFileTime(lpSystemTime: SYSTEMTIME | t.CPtr, lpFileTime: FILETIME | t.CPtr) -> BOOL | t.State: pass - -def QueryPerformanceCounter(lpPerformanceCount: LARGE_INTEGER | t.CPtr) -> BOOL | t.State: pass - -def QueryPerformanceFrequency(lpFrequency: LARGE_INTEGER | t.CPtr) -> BOOL | t.State: pass - -def Sleep(dwMilliseconds: ULONG) -> t.State: pass - -def SleepEx(dwMilliseconds: ULONG, bAlertable: BOOL) -> ULONG | t.State: pass - -def GetTickCount() -> ULONG | t.State: pass - -def GetTickCount64() -> ULONGLONG | t.State: pass - -def GetCommandLineA() -> CHARPTR | t.State: pass diff --git a/Test/TestProject3/.tpv_build/temp/64/64ac83614c9bdbc6.vpi b/Test/TestProject3/.tpv_build/temp/64/64ac83614c9bdbc6.vpi deleted file mode 100644 index 6fd9553..0000000 --- a/Test/TestProject3/.tpv_build/temp/64/64ac83614c9bdbc6.vpi +++ /dev/null @@ -1,75 +0,0 @@ -"""Auto-generated Python stub file""" - - -import t, c -from t import CInt, CInt32T, CUInt32T, CUInt64T, CFloat64T, CPtr, CChar, CDefine, CUInt16T -import viperlib -import stdlib -import platmacro -MAX_SIZE: t.CDefine = 1024 -MIN_VAL: t.CDefine = 0 -MAX_VAL: t.CDefine = 100 -MASK_BYTE: t.CDefine = 255 -SHIFT_BITS: t.CDefine = 8 -PI_INT: t.CDefine = 3 -ENABLED: t.CDefine = 1 -DISABLED: t.CDefine = 0 -PAGE_SIZE: t.CDefine = 4096 -BUFFER_LEN: t.CDefine = 256 -CODE_SEG: t.CDefine | t.CUInt16T = 8 -DATA_SEG: t.CDefine | t.CUInt16T = 16 -STACK_SEG: t.CDefine | t.CUInt16T = 32 -def MAKE_FLAG(bit: CInt32T) -> t.CDefine: pass - -def CLAMP(x: CInt32T, lo: CInt32T, hi: CInt32T) -> t.CDefine: pass - -def test_basic_define() -> CInt: pass - -def test_define_arithmetic() -> CInt: pass - -def test_define_conditional() -> CInt: pass - -def test_define_loop() -> CInt: pass - -def test_typed_define() -> CInt: pass - -def test_define_function() -> CInt: pass - -def test_define_clamp() -> CInt: pass - -def test_define_string() -> CInt: pass - -def test_define_combined() -> CInt: pass - -def test_cif_basic() -> CInt: pass - -def test_cif_elif_else() -> CInt: pass - -def test_cifdef_cifndef() -> CInt: pass - -def test_cif_platform() -> CInt: pass - -def test_cif_nested() -> CInt: pass - -def test_cif_expr() -> CInt: pass - -def test_platmacro_platform() -> CInt: pass - -def test_platmacro_sizes() -> CInt: pass - -def test_platmacro_endian() -> CInt: pass - -def test_platmacro_features() -> CInt: pass - -def test_platmacro_align() -> CInt: pass - -def test_cifdef_cross_module() -> CInt: pass - -def test_cifdef_guard() -> CInt: pass - -def test_cifdef_undefined() -> CInt: pass - -def test_cifdef_complex() -> CInt: pass - -def define_main() -> CInt: pass - diff --git a/Test/TestProject3/.tpv_build/temp/_sha1_map.txt b/Test/TestProject3/.tpv_build/temp/_sha1_map.txt deleted file mode 100644 index 73b15aa..0000000 --- a/Test/TestProject3/.tpv_build/temp/_sha1_map.txt +++ /dev/null @@ -1,6 +0,0 @@ -64ac83614c9bdbc6:definetest.vp -1b58766d38d05de3:enumtest.vp -a0feb5ea7bc00189:fileiotest.vp -b235d6477436c524:main.vp -0019c939aae7f9f1:mpooltest.vp -b777c587cc21465a:vectortest.vp diff --git a/Test/TestProject3/App/enumtest.vp b/Test/TestProject3/App/enumtest.vp deleted file mode 100644 index c935a48..0000000 --- a/Test/TestProject3/App/enumtest.vp +++ /dev/null @@ -1,95 +0,0 @@ -import t, c -from t import CInt, CPtr, CChar, CInt32T, CExport -import viperlib -import stdlib - - -class Color(t.CEnum): - Red = 0 - Green = 1 - Blue = 2 - - -class Option(t.REnum): - class Some: - value: CInt - Empty = 1 - - -class Result(t.REnum): - class Ok: - value: CInt - class Err: - msg: t.CChar | CPtr - - -class GeoShape(t.REnum): - class GCircle: - radius: CInt - class GRect: - w: CInt - h: CInt - class GPoint: - x: CInt - y: CInt - - -def enum_main() -> CInt: - buf: CChar | CPtr = CPtr(stdlib.malloc(256)) - - c1: CInt = Color.Red - c2: CInt = Color.Green - c3: CInt = Color.Blue - viperlib.snprintf(buf, 256, "CEnum: Red=%d Green=%d Blue=%d", c1, c2, c3) - print(buf) - - opt: Option = Option.Some(42) - match opt: - case Option.Some(v): - viperlib.snprintf(buf, 256, "Option.Some: value=%d", v) - print(buf) - case Option.Empty(): - pass - - res1: Result = Result.Ok(100) - match res1: - case Result.Ok(v): - viperlib.snprintf(buf, 256, "Result.Ok: value=%d", v) - print(buf) - case Result.Err(e): - pass - - res2: Result = Result.Err("not found") - match res2: - case Result.Ok(v): - pass - case Result.Err(e): - viperlib.snprintf(buf, 256, "Result.Err: msg=%s", e) - print(buf) - - s1: GeoShape = GeoShape.GCircle(5) - match s1: - case GeoShape.GCircle(r): - viperlib.snprintf(buf, 256, "GeoShape.GCircle: radius=%d", r) - print(buf) - case _: - pass - - s2: GeoShape = GeoShape.GRect(10, 20) - match s2: - case GeoShape.GRect(w, h): - viperlib.snprintf(buf, 256, "GeoShape.GRect: w=%d h=%d", w, h) - print(buf) - case _: - pass - - s3: GeoShape = GeoShape.GPoint(3, 4) - match s3: - case GeoShape.GPoint(x, y): - viperlib.snprintf(buf, 256, "GeoShape.GPoint: x=%d y=%d", x, y) - print(buf) - case _: - pass - - stdlib.free(buf) - return 0 diff --git a/Test/TestProject3/App/fileiotest.vp b/Test/TestProject3/App/fileiotest.vp deleted file mode 100644 index 98d6e77..0000000 --- a/Test/TestProject3/App/fileiotest.vp +++ /dev/null @@ -1,395 +0,0 @@ -import t, c -from t import CInt, CInt32T, CUInt32T, CPtr, CChar, CExport -from stdint import * -import stdlib -import viperlib -import w32.win32base -import w32.win32file -import w32.win32console -import w32.fileio -from w32.fileio import File, FileW, MODE, FRESULT, SEEK_SET, SEEK_CUR, SEEK_END - - -BUF_SIZE: t.CDefine = 4096 - - -def fileio_main(): - buf: bytes = stdlib.malloc(256) - write_buf: bytes = stdlib.malloc(BUF_SIZE) - read_buf: bytes = stdlib.malloc(BUF_SIZE) - bytes_written: ULONG = 0 - bytes_read: ULONG = 0 - - w32.win32console.SetConsoleCP(65001) - w32.win32console.SetConsoleOutputCP(65001) - - hFile: w32.win32base.HANDLE = w32.win32file.CreateFileA( - "testfile.txt", - w32.win32file.GENERIC_WRITE, - w32.win32file.FILE_SHARE_READ, - None, - w32.win32file.CREATE_ALWAYS, - w32.win32file.FILE_ATTRIBUTE_NORMAL, - None - ) - - if hFile == w32.win32base.INVALID_HANDLE_VALUE: - print("Failed to create file") - return - - viperlib.snprintf(write_buf, BUF_SIZE, "Hello from TransPyC Win32 FileIO!\nLine 2: %d + %d = %d\n", 10, 20, 30) - write_len: ULONG = 0 - i: CInt = 0 - ch: bytes = write_buf - while i < BUF_SIZE: - if CInt(c.Deref(ch)) == 0: - break - write_len = write_len + 1 - i = i + 1 - ch = ch + 1 - - result: BOOL = w32.win32file.WriteFile(hFile, write_buf, write_len, c.Addr(bytes_written), None) - if result == 0: - print("WriteFile failed") - else: - viperlib.snprintf(buf, 256, "Written %d bytes to testfile.txt", bytes_written) - print(buf) - - w32.win32file.FlushFileBuffers(hFile) - w32.win32base.CloseHandle(hFile) - - hFile = w32.win32file.CreateFileA( - "testfile.txt", - w32.win32file.GENERIC_READ, - w32.win32file.FILE_SHARE_READ, - None, - w32.win32file.OPEN_EXISTING, - w32.win32file.FILE_ATTRIBUTE_NORMAL, - None - ) - - if hFile == w32.win32base.INVALID_HANDLE_VALUE: - print("Failed to open file for reading") - return - - read_len: ULONG = 0 - result = w32.win32file.ReadFile(hFile, read_buf, BUF_SIZE - 1, c.Addr(read_len), None) - if result == 0: - print("ReadFile failed") - else: - viperlib.snprintf(buf, 256, "Read %d bytes from testfile.txt", read_len) - print(buf) - - read_ptr: bytes = read_buf - read_ptr = read_ptr + read_len - c.DerefAs(read_ptr, 0) - print("--- File content ---") - print(read_buf) - print("--- End ---") - - fileSize: ULONG = w32.win32file.GetFileSize(hFile, None) - viperlib.snprintf(buf, 256, "File size: %d bytes", fileSize) - print(buf) - - w32.win32base.CloseHandle(hFile) - - attrs: ULONG = w32.win32file.GetFileAttributesA("testfile.txt") - if attrs == w32.win32base.INVALID_HANDLE_VALUE: - print("GetFileAttributes failed") - else: - viperlib.snprintf(buf, 256, "File attributes: 0x%X", attrs) - print(buf) - - w32.win32file.DeleteFileA("testfile.txt") - print("File deleted") - - stdlib.free(write_buf) - stdlib.free(read_buf) - - print("=== OOP FileIO: with context manager ===") - fileio_with_test() - - print("=== OOP FileIO: f handle style ===") - fileio_handle_test() - - print("=== OOP FileIO: RP/WP/AP modes ===") - fileio_rw_test() - - -def fileio_with_test(): - buf: bytes = stdlib.malloc(256) - write_buf: bytes = stdlib.malloc(BUF_SIZE) - read_buf: bytes = stdlib.malloc(BUF_SIZE) - - with File("oop_with.txt", MODE.W) as f: - viperlib.snprintf(write_buf, BUF_SIZE, "with context manager test!\nLine 2: %d\n", 42) - n: LONG = f.write_str(write_buf) - if n < 0: - print("[with] write failed") - else: - viperlib.snprintf(buf, 256, "[with] wrote %d bytes", n) - print(buf) - - with File("oop_with.txt", MODE.R) as f: - n = f.read_all(read_buf, BUF_SIZE) - if n < 0: - print("[with] read failed") - else: - viperlib.snprintf(buf, 256, "[with] read %d bytes", n) - print(buf) - print("[with] content:") - print(read_buf) - - with File("oop_with.txt", MODE.R) as f: - line1_len: LONG = f.readline(buf, 256) - viperlib.snprintf(read_buf, BUF_SIZE, "[with] Line1(%d): ", line1_len) - print(read_buf) - print(buf) - line2_len: LONG = f.readline(buf, 256) - viperlib.snprintf(read_buf, BUF_SIZE, "[with] Line2(%d): ", line2_len) - print(read_buf) - print(buf) - - with File("oop_with.txt", MODE.A) as f: - f.write_str("Appended line!\n") - - with File("oop_with.txt", MODE.R) as f: - n = f.read_all(read_buf, BUF_SIZE) - print("[with] after append:") - print(read_buf) - - with File("oop_with.txt", MODE.R) as f: - sz: LONGLONG = f.size() - pos: LONG = f.tell() - viperlib.snprintf(buf, 256, "[with] Size=%lld Pos=%d", sz, pos) - print(buf) - f.seek(5, SEEK_SET) - pos = f.tell() - viperlib.snprintf(buf, 256, "[with] After seek: Pos=%d", pos) - print(buf) - - w32.win32file.DeleteFileA("oop_with.txt") - print("[with] test file deleted") - - stdlib.free(buf) - stdlib.free(write_buf) - stdlib.free(read_buf) - - -def fileio_handle_test(): - buf: bytes = stdlib.malloc(256) - write_buf: bytes = stdlib.malloc(BUF_SIZE) - read_buf: bytes = stdlib.malloc(BUF_SIZE) - - fw: File = File("oop_handle.txt", MODE.W) - viperlib.snprintf(write_buf, BUF_SIZE, "f handle style test!\nLine 2: %d\n", 99) - n: LONG = fw.write_str(write_buf) - viperlib.snprintf(buf, 256, "[handle] wrote %d bytes", n) - print(buf) - fw.flush() - fw.close() - - fr: File = File("oop_handle.txt", MODE.R) - n = fr.read_all(read_buf, BUF_SIZE) - viperlib.snprintf(buf, 256, "[handle] read %d bytes", n) - print(buf) - print("[handle] content:") - print(read_buf) - fr.close() - - fr2: File = File("oop_handle.txt", MODE.R) - line1_len: LONG = fr2.readline(buf, 256) - viperlib.snprintf(read_buf, BUF_SIZE, "[handle] Line1(%d): ", line1_len) - print(read_buf) - print(buf) - line2_len: LONG = fr2.readline(buf, 256) - viperlib.snprintf(read_buf, BUF_SIZE, "[handle] Line2(%d): ", line2_len) - print(read_buf) - print(buf) - fr2.close() - - fa: File = File("oop_handle.txt", MODE.A) - fa.write_str("Appended by handle!\n") - fa.close() - - fr3: File = File("oop_handle.txt", MODE.R) - n = fr3.read_all(read_buf, BUF_SIZE) - print("[handle] after append:") - print(read_buf) - fr3.close() - - fr4: File = File("oop_handle.txt", MODE.R) - sz: LONGLONG = fr4.size() - pos: LONG = fr4.tell() - viperlib.snprintf(buf, 256, "[handle] Size=%lld Pos=%d", sz, pos) - print(buf) - fr4.seek(5, SEEK_SET) - pos = fr4.tell() - viperlib.snprintf(buf, 256, "[handle] After seek: Pos=%d", pos) - print(buf) - fr4.close() - - w32.win32file.DeleteFileA("oop_handle.txt") - print("[handle] test file deleted") - - stdlib.free(buf) - stdlib.free(write_buf) - stdlib.free(read_buf) - - -def fileio_rw_test(): - buf: bytes = stdlib.malloc(256) - - fw: File = File("rw_test.txt", MODE.W) - fw.write_str("original content\n") - fw.close() - - frp: File = File("rw_test.txt", MODE.RP) - n: LONG = frp.read_all(buf, 256) - viperlib.snprintf(buf, 256, "[rp] read %d bytes", n) - print(buf) - - frp.seek(0, SEEK_END) - frp.write_str("appended via RP\n") - frp.seek(0, SEEK_SET) - n = frp.read_all(buf, 256) - print("[rp] after RP append:") - print(buf) - frp.close() - - fwp: File = File("rw_test.txt", MODE.WP) - fwp.write_str("truncated + new\n") - fwp.seek(0, SEEK_SET) - n = fwp.read_all(buf, 256) - print("[wp] WP (truncate+read):") - print(buf) - fwp.close() - - fap: File = File("rw_test.txt", MODE.AP) - fap.write_str("a+ appended\n") - fap.seek(0, SEEK_SET) - n = fap.read_all(buf, 256) - print("[ap] AP (append+read):") - print(buf) - fap.close() - - w32.win32file.DeleteFileA("rw_test.txt") - print("[rw] test file deleted") - - print("=== OOP FileIO: wide char (u\"...\") ===") - fileio_wide_test() - - stdlib.free(buf) - - -def fileio_wide_test(): - buf: bytes = stdlib.malloc(256) - - fw: File = File("wide_test.txt", MODE.W) - fw.write_str("wide char test\n") - fw.close() - - fw2: FileW = FileW(u"wide_test.txt", MODE.R) - n: LONG = fw2.read_all(buf, 256) - viperlib.snprintf(buf, 256, "[wide] read %d bytes", n) - print(buf) - fw2.close() - - w32.win32file.DeleteFileA("wide_test.txt") - print("[wide] test file deleted") - - stdlib.free(buf) - - print("=== OOP FileIO: Chinese filename & content (u\"...\" = WCHAR_T) ===") - fileio_chinese_test() - - -def fileio_chinese_test(): - buf: bytes = stdlib.malloc(512) - bytes_written: ULONG = 0 - - # === T1: Chinese filename (WCHAR_T) + ANSI content === - print("[chinese] T1: Chinese filename + ANSI content") - fw: FileW = FileW(u"中文文件.txt", MODE.W) - if fw.closed: - print("[chinese] T1: create failed") - else: - fw.write_str("Hello from Chinese filename!\n") - fw.close() - - fr: FileW = FileW(u"中文文件.txt", MODE.R) - n: LONG = fr.read_all(buf, 512) - viperlib.snprintf(buf, 256, "[chinese] T1: read %d bytes", n) - print(buf) - print("[chinese] T1 content:") - print(buf) - fr.close() - - w32.win32file.DeleteFileW(u"中文文件.txt") - print("[chinese] T1: deleted") - - # === T2: Chinese filename + Chinese wide content (WCHAR_T) === - print("[chinese] T2: Chinese filename + Chinese wide content") - fw2: FileW = FileW(u"中文内容.txt", MODE.W) - if fw2.closed: - print("[chinese] T2: create failed") - else: - # u"你好世界\n" = 5 WCHARs = 10 bytes (UTF-16LE) - w32.win32file.WriteFile(fw2.handle, u"你好世界\n", 10, c.Addr(bytes_written), None) - viperlib.snprintf(buf, 256, "[chinese] T2: wrote %d WCHAR bytes", bytes_written) - print(buf) - fw2.close() - - fr2: FileW = FileW(u"中文内容.txt", MODE.R) - n = fr2.read_all(buf, 512) - viperlib.snprintf(buf, 256, "[chinese] T2: read %d bytes (UTF-16LE)", n) - print(buf) - fr2.close() - - w32.win32file.DeleteFileW(u"中文内容.txt") - print("[chinese] T2: deleted") - - # === T3: Chinese filename + mixed ANSI + wide content === - print("[chinese] T3: Chinese filename + mixed content") - fw3: FileW = FileW(u"混合测试.txt", MODE.WP) - if fw3.closed: - print("[chinese] T3: create failed") - else: - fw3.write_str("ASCII line\n") - # u"中文行\n" = 4 WCHARs = 8 bytes (UTF-16LE) - w32.win32file.WriteFile(fw3.handle, u"中文行\n", 8, c.Addr(bytes_written), None) - fw3.seek(0, SEEK_SET) - n: LONG = fw3.read_all(buf, 512) - viperlib.snprintf(buf, 256, "[chinese] T3: total %d bytes", n) - print(buf) - fw3.close() - - w32.win32file.DeleteFileW(u"混合测试.txt") - print("[chinese] T3: deleted") - - # === T4: Chinese filename + Chinese content via WriteConsoleW === - print("[chinese] T4: Write wide content and print via WriteConsoleW") - fw4: FileW = FileW(u"控制台测试.txt", MODE.W) - if fw4.closed: - print("[chinese] T4: create failed") - else: - # u"你好,世界!\n" = 7 WCHARs = 14 bytes (UTF-16LE) - w32.win32file.WriteFile(fw4.handle, u"你好,世界!\n", 14, c.Addr(bytes_written), None) - viperlib.snprintf(buf, 256, "[chinese] T4: wrote %d WCHAR bytes", bytes_written) - print(buf) - fw4.close() - - fr4: FileW = FileW(u"控制台测试.txt", MODE.R) - n = fr4.read_all(buf, 512) - viperlib.snprintf(buf, 256, "[chinese] T4: read %d bytes", n) - print(buf) - # Print wide content to console using WriteConsoleW - chars_written: ULONG = 0 - hOut: w32.win32base.HANDLE = w32.win32file.GetStdHandle(w32.win32file.STD_OUTPUT_HANDLE) - w32.win32console.WriteConsoleW(hOut, u"你好,世界!\n", 7, c.Addr(chars_written), None) - fr4.close() - - w32.win32file.DeleteFileW(u"控制台测试.txt") - print("[chinese] T4: deleted") - - stdlib.free(buf) diff --git a/Test/TestProject3/App/main.vp b/Test/TestProject3/App/main.vp deleted file mode 100644 index d11a1bd..0000000 --- a/Test/TestProject3/App/main.vp +++ /dev/null @@ -1,513 +0,0 @@ -from stdint import * -import w32.win32console -import t, c -from t import CInt, CPtr, CChar, CInt32T, CUInt64T, CFloat64T, CExport, State -import viperlib -import stdlib -import enumtest -import mpooltest -import vectortest -import fileiotest -import testcheck - - -# === 函数泛型 === - -def add[T](a: T, b: T) -> T: - return a + b - -def add_u64[T](a: T, b: T, c: CUInt64T) -> T: - return a + b + T(c) - -def fxi[T1, T2](a: T1, b: T2) -> T1: - return a + fxi2(a, b, CUInt64T(178900)) - -def fxi2[T1, T2, T3](a: T1, b: T2, c: T3) -> T1: - return a + T1(b) + T1(c) - -def wrap_add[T](a: T, b: T) -> T: - return add(a, b) - -def double_add[T](a: T, b: T) -> T: - return add(a, b) + add(a, b) - - -# === 结构体泛型 === - -class A[T](): - def __init__(self, a: T): - self.a = T(a) - def get_a(self) -> T: - return self.a - -class Pair[T1, T2](): - def __init__(self, first: T1, second: T2): - self.first = T1(first) - self.second = T2(second) - def get_first(self) -> T1: - return self.first - def get_second(self) -> T2: - return self.second - -class Calculator[T](): - def __init__(self, init_val: T): - self.val = T(init_val) - def compute(self, other: T) -> T: - return add(self.val, other) - def double_compute(self, other: T) -> T: - return double_add(self.val, other) - -class Container[T](): - def __init__(self, v: T): - self.value = T(v) - self.flag = CInt32T(1) - def get_value(self) -> T: - return self.value - def get_flag(self) -> CInt32T: - return self.flag - - -# === OOP 继承 + 虚方法(Gargantua 风格) === - -@t.CVTable -class Shape: - def __init__(self, x: CFloat64T, y: CFloat64T): - self.x = x - self.y = y - def area(self) -> CFloat64T: - return 0.0 - def perimeter(self) -> CFloat64T: - return 0.0 - def describe(self) -> CFloat64T: - return self.area() + self.perimeter() - -@t.CVTable -class Circle(Shape): - def __init__(self, x: CFloat64T, y: CFloat64T, r: CFloat64T): - self.x = x - self.y = y - self.r = r - def area(self) -> CFloat64T: - return 3.14159265 * self.r * self.r - def perimeter(self) -> CFloat64T: - return 2.0 * 3.14159265 * self.r - def scale(self, factor: CFloat64T) -> 'Circle' | CPtr: - self.r = self.r * factor - return t.CVoid(c.Addr(self), CPtr) - def move(self, dx: CFloat64T, dy: CFloat64T) -> 'Circle' | CPtr: - self.x = self.x + dx - self.y = self.y + dy - return t.CVoid(c.Addr(self), CPtr) - -@t.CVTable -class Rect(Shape): - def __init__(self, x: CFloat64T, y: CFloat64T, w: CFloat64T, h: CFloat64T): - self.x = x - self.y = y - self.w = w - self.h = h - def area(self) -> CFloat64T: - return self.w * self.h - def perimeter(self) -> CFloat64T: - return 2.0 * (self.w + self.h) - def scale(self, factor: CFloat64T) -> 'Rect' | CPtr: - self.w = self.w * factor - self.h = self.h * factor - return t.CVoid(c.Addr(self), CPtr) - - -# === 运算符重载 + 链式调用(Gargantua V3 风格,堆分配) === - -class Vec2: - x: CFloat64T - y: CFloat64T - - def __new__() -> 'Vec2' | CPtr: - return t.CVoid(t.CUInt64T(stdlib.malloc(16)), CPtr) - - def __init__(self, x: CFloat64T, y: CFloat64T): - self.x = x - self.y = y - - def __add__(self, b: 'Vec2' | CPtr) -> 'Vec2' | CPtr: - return Vec2(self.x + b.x, self.y + b.y) - - def __sub__(self, b: 'Vec2' | CPtr) -> 'Vec2' | CPtr: - return Vec2(self.x - b.x, self.y - b.y) - - def __mul__(self, s: CFloat64T) -> 'Vec2' | CPtr: - return Vec2(self.x * s, self.y * s) - - def __neg__(self) -> 'Vec2' | CPtr: - return Vec2(-self.x, -self.y) - - def dot(self, b: 'Vec2' | CPtr) -> CFloat64T: - return self.x * b.x + self.y * b.y - - def len_sq(self) -> CFloat64T: - return self.x * self.x + self.y * self.y - - -class Vec3: - x: CFloat64T - y: CFloat64T - z: CFloat64T - - def __new__() -> 'Vec3' | CPtr: - return t.CVoid(t.CUInt64T(stdlib.malloc(24)), CPtr) - - def __init__(self, x: CFloat64T, y: CFloat64T, z: CFloat64T): - self.x = x - self.y = y - self.z = z - - def __add__(self, b: 'Vec3' | CPtr) -> 'Vec3' | CPtr: - return Vec3(self.x + b.x, self.y + b.y, self.z + b.z) - - def __sub__(self, b: 'Vec3' | CPtr) -> 'Vec3' | CPtr: - return Vec3(self.x - b.x, self.y - b.y, self.z - b.z) - - def __mul__(self, s: CFloat64T) -> 'Vec3' | CPtr: - return Vec3(self.x * s, self.y * s, self.z * s) - - def __neg__(self) -> 'Vec3' | CPtr: - return Vec3(-self.x, -self.y, -self.z) - - def dot(self, b: 'Vec3' | CPtr) -> CFloat64T: - return self.x * b.x + self.y * b.y + self.z * b.z - - def cross(self, b: 'Vec3' | CPtr) -> 'Vec3' | CPtr: - return Vec3(self.y * b.z - self.z * b.y, - self.z * b.x - self.x * b.z, - self.x * b.y - self.y * b.x) - - def len_sq(self) -> CFloat64T: - return self.dot(self) - - -# === 独立类(非继承,避免链接问题) === - -@t.CVTable -class Dog: - def __init__(self, name_val: CInt, bark_power: CInt32T): - self.name_val = name_val - self.health = CInt32T(100) - self.bark_power = bark_power - def speak(self) -> CInt: - return 1 - def bite(self) -> CInt32T: - return self.bark_power - def take_damage(self, dmg: CInt32T) -> 'Dog' | CPtr: - self.health = self.health - dmg - return t.CVoid(c.Addr(self), CPtr) - def is_alive(self) -> CInt: - if self.health > 0: - return 1 - return 0 - -@t.CVTable -class Cat: - def __init__(self, name_val: CInt, lives: CInt32T): - self.name_val = name_val - self.health = CInt32T(80) - self.lives = lives - def speak(self) -> CInt: - return 2 - def scratch(self) -> CInt32T: - return CInt32T(15) - def take_damage(self, dmg: CInt32T) -> 'Cat' | CPtr: - self.health = self.health - dmg - return t.CVoid(c.Addr(self), CPtr) - def is_alive(self) -> CInt: - if self.health > 0: - return 1 - return 0 - - -# === 嵌套对象组合(堆分配) === - -class Transform: - px: CFloat64T - py: CFloat64T - pz: CFloat64T - scale_x: CFloat64T - scale_y: CFloat64T - scale_z: CFloat64T - - def __new__() -> 'Transform' | CPtr: - return t.CVoid(t.CUInt64T(stdlib.malloc(48)), CPtr) - - def __init__(self, px: CFloat64T, py: CFloat64T, pz: CFloat64T): - self.px = px - self.py = py - self.pz = pz - self.scale_x = 1.0 - self.scale_y = 1.0 - self.scale_z = 1.0 - - def apply_scale(self, sx: CFloat64T, sy: CFloat64T, sz: CFloat64T) -> 'Transform' | CPtr: - self.scale_x = self.scale_x * sx - self.scale_y = self.scale_y * sy - self.scale_z = self.scale_z * sz - return t.CVoid(c.Addr(self), CPtr) - - def world_position(self) -> 'Vec3' | CPtr: - return Vec3(self.px * self.scale_x, self.py * self.scale_y, self.pz * self.scale_z) - - -# === 多层继承(子类只重写需要的方法) === - -@t.CVTable -class Vehicle: - def __init__(self, speed: CInt32T): - self.speed = speed - self.fuel = CInt32T(100) - def move(self) -> CInt: - self.fuel = self.fuel - CInt32T(10) - return self.speed - def is_running(self) -> CInt: - if self.fuel > 0: - return 1 - return 0 - -@t.CVTable -class Car(Vehicle): - def __init__(self, speed: CInt32T, doors: CInt32T): - self.speed = speed - self.fuel = CInt32T(100) - self.doors = doors - def honk(self) -> CInt: - return 1 - -@t.CVTable -class ElectricCar(Car): - def __init__(self, speed: CInt32T, doors: CInt32T, battery: CInt32T): - self.speed = speed - self.fuel = CInt32T(100) - self.doors = doors - self.battery = battery - def charge(self): - self.battery = self.battery + CInt32T(20) - def move(self) -> CInt: - self.battery = self.battery - CInt32T(5) - return self.speed - - -def main() -> CInt | CExport: - w32.win32console.SetConsoleCP(65001) - w32.win32console.SetConsoleOutputCP(65001) - - testcheck.begin("TestProject3: 泛型与OOP综合测试") - - buf: CChar | CPtr = CPtr(stdlib.malloc(256)) - - # === 基础函数泛型 === - testcheck.section("基础函数泛型") - print(add(3, 5)) - print(add(1.5, 2.5)) - print(add_u64(1, 2, CUInt64T(3000000000000000))) - print(fxi(0.2, 6)) - print(wrap_add(10, 20)) - print(double_add(5, 7)) - testcheck.ok("基础函数泛型测试完成") - - # === 基础结构体泛型 === - testcheck.section("基础结构体泛型") - a = A(100) - print(a.get_a()) - p1 = Pair(10, 20) - print(p1.get_first()) - print(p1.get_second()) - testcheck.ok("基础结构体泛型测试完成") - - # === OOP 继承测试 === - testcheck.section("OOP 继承测试") - c1 = Circle(0.0, 0.0, 5.0) - viperlib.snprintf(buf, 256, "Circle area=%.2f perim=%.2f", c1.area(), c1.perimeter()) - print(buf) - - r1 = Rect(0.0, 0.0, 4.0, 3.0) - viperlib.snprintf(buf, 256, "Rect area=%.2f perim=%.2f", r1.area(), r1.perimeter()) - print(buf) - - # 链式调用: scale -> move - c2 = Circle(1.0, 2.0, 3.0) - c2.scale(2.0).move(10.0, 20.0) - viperlib.snprintf(buf, 256, "Circle after scale+move: x=%.1f y=%.1f r=%.1f area=%.2f", - c2.x, c2.y, c2.r, c2.area()) - print(buf) - - r2 = Rect(0.0, 0.0, 10.0, 5.0) - r2.scale(2.0).scale(0.5) - viperlib.snprintf(buf, 256, "Rect after double scale: w=%.1f h=%.1f area=%.2f", - r2.w, r2.h, r2.area()) - print(buf) - testcheck.ok("OOP 继承测试完成") - - # === Vec2 运算符重载 + 链式调用(堆分配) === - testcheck.section("Vec2 运算符重载 + 链式调用") - v1 = Vec2(3.0, 4.0) - v2 = Vec2(1.0, 2.0) - v3 = v1 + v2 - viperlib.snprintf(buf, 256, "Vec2 add: (%.1f, %.1f)", v3.x, v3.y) - print(buf) - - v4 = v1 - v2 - viperlib.snprintf(buf, 256, "Vec2 sub: (%.1f, %.1f)", v4.x, v4.y) - print(buf) - - v5 = v1 * 2.0 - viperlib.snprintf(buf, 256, "Vec2 mul: (%.1f, %.1f)", v5.x, v5.y) - print(buf) - - v6 = -v1 - viperlib.snprintf(buf, 256, "Vec2 neg: (%.1f, %.1f)", v6.x, v6.y) - print(buf) - - d = v1.dot(v2) - viperlib.snprintf(buf, 256, "Vec2 dot: %.1f", d) - print(buf) - - # 链式运算: (v1 + v2) * 3.0 - v_chain = (v1 + v2) * 3.0 - viperlib.snprintf(buf, 256, "Vec2 chain (v1+v2)*3: (%.1f, %.1f)", v_chain.x, v_chain.y) - print(buf) - testcheck.ok("Vec2 运算符重载测试完成") - - # === Vec3 运算符重载 + 链式调用(堆分配) === - testcheck.section("Vec3 运算符重载 + 链式调用") - a1 = Vec3(1.0, 0.0, 0.0) - a2 = Vec3(0.0, 1.0, 0.0) - cross_v = a1.cross(a2) - viperlib.snprintf(buf, 256, "Vec3 cross: (%.1f, %.1f, %.1f)", cross_v.x, cross_v.y, cross_v.z) - print(buf) - - dot_v = a1.dot(a2) - viperlib.snprintf(buf, 256, "Vec3 dot: %.1f", dot_v) - print(buf) - - # 链式: (a + b).dot(c) - a3 = Vec3(1.0, 2.0, 3.0) - a4 = Vec3(4.0, 5.0, 6.0) - a5 = Vec3(7.0, 8.0, 9.0) - chain_dot = (a3 + a4).dot(a5) - viperlib.snprintf(buf, 256, "Vec3 chain dot: %.1f", chain_dot) - print(buf) - - # 链式: (a * 2.0 - b).cross(c) - chain_cross = (a3 * 2.0 - a4).cross(a5) - viperlib.snprintf(buf, 256, "Vec3 chain cross: (%.1f, %.1f, %.1f)", chain_cross.x, chain_cross.y, chain_cross.z) - print(buf) - - # len_sq 链式 - lsq = a3.len_sq() - viperlib.snprintf(buf, 256, "Vec3 len_sq: %.1f", lsq) - print(buf) - testcheck.ok("Vec3 运算符重载测试完成") - - # === Dog/Cat 虚方法 === - testcheck.section("Dog/Cat 虚方法") - dog = Dog(1, CInt32T(30)) - cat = Cat(2, CInt32T(9)) - - viperlib.snprintf(buf, 256, "Dog speak=%d bite=%d alive=%d", dog.speak(), dog.bite(), dog.is_alive()) - print(buf) - viperlib.snprintf(buf, 256, "Cat speak=%d scratch=%d alive=%d", cat.speak(), cat.scratch(), cat.is_alive()) - print(buf) - - dog.take_damage(CInt32T(40)).take_damage(CInt32T(30)) - viperlib.snprintf(buf, 256, "Dog after 70dmg: health=%d alive=%d", dog.health, dog.is_alive()) - print(buf) - - cat.take_damage(CInt32T(50)) - viperlib.snprintf(buf, 256, "Cat after 50dmg: health=%d alive=%d", cat.health, cat.is_alive()) - print(buf) - testcheck.ok("Dog/Cat 虚方法测试完成") - - # === Transform 嵌套组合(堆分配,链式调用) === - testcheck.section("Transform 嵌套组合") - tr = Transform(10.0, 20.0, 30.0) - tr.apply_scale(2.0, 3.0, 4.0) - pos = tr.world_position() - viperlib.snprintf(buf, 256, "Transform pos: (%.1f, %.1f, %.1f)", pos.x, pos.y, pos.z) - print(buf) - - tr2 = Transform(5.0, 10.0, 15.0) - tr2.apply_scale(2.0, 2.0, 2.0) - pos2 = tr2.world_position() - viperlib.snprintf(buf, 256, "Transform2 pos: (%.1f, %.1f, %.1f)", pos2.x, pos2.y, pos2.z) - print(buf) - testcheck.ok("Transform 嵌套组合测试完成") - - # === 多层继承 === - testcheck.section("多层继承") - ec = ElectricCar(CInt32T(120), CInt32T(4), CInt32T(80)) - viperlib.snprintf(buf, 256, "ECar speed=%d doors=%d battery=%d", ec.speed, ec.doors, ec.battery) - print(buf) - ec.charge() - viperlib.snprintf(buf, 256, "ECar after charge: battery=%d", ec.battery) - print(buf) - spd = ec.move() - viperlib.snprintf(buf, 256, "ECar move: speed=%d battery=%d", spd, ec.battery) - print(buf) - viperlib.snprintf(buf, 256, "ECar honk=%d running=%d", ec.honk(), ec.is_running()) - print(buf) - testcheck.ok("多层继承测试完成") - - # === 泛型 + OOP 组合 === - testcheck.section("泛型 + OOP 组合") - calc1 = Calculator(10) - print(calc1.compute(5)) - calc2 = Calculator(1.5) - print(calc2.compute(2.5)) - - c1_gen = Container(42) - print(c1_gen.get_value()) - print(c1_gen.get_flag()) - testcheck.ok("泛型 + OOP 组合测试完成") - - # === snprintf 格式化 === - testcheck.section("snprintf 格式化") - viperlib.snprintf(buf, 256, "int=%d, float=%.2f", 42, 3.14) - print(buf) - viperlib.snprintf(buf, 256, "result=%d", add(100, 200)) - print(buf) - testcheck.ok("snprintf 格式化测试完成") - - # === 新语法类型强转 (t1|t2)(x) === - testcheck.section("新语法类型强转 (t1|t2)(x)") - val_i64: CUInt64T = CUInt64T(42) - val_i32 = (t.CInt)(val_i64) - print(val_i32) - - ptr_raw = stdlib.malloc(8) - ptr_typed = (t.CInt | t.CPtr)(ptr_raw) - viperlib.snprintf(buf, 256, "cast ptr=%p", ptr_typed) - print(buf) - - val_f = (t.CDouble)(42) - viperlib.snprintf(buf, 256, "cast float=%.1f", val_f) - print(buf) - testcheck.ok("新语法类型强转测试完成") - - # === Enum 测试 === - testcheck.section("Enum 测试") - enumtest.enum_main() - testcheck.ok("Enum 测试完成") - - # === MPool OOP 测试 === - testcheck.section("MPool OOP 测试") - mpooltest.mpool_main() - testcheck.ok("MPool OOP 测试完成") - - # === Vector 泛型测试 === - testcheck.section("Vector 泛型测试") - vectortest.vector_main() - testcheck.ok("Vector 泛型测试完成") - - # === Win32 FileIO 测试 === - testcheck.section("Win32 FileIO 测试") - fileiotest.fileio_main() - testcheck.ok("Win32 FileIO 测试完成") - - return testcheck.end() diff --git a/Test/TestProject3/App/mpooltest.vp b/Test/TestProject3/App/mpooltest.vp deleted file mode 100644 index 90012b8..0000000 --- a/Test/TestProject3/App/mpooltest.vp +++ /dev/null @@ -1,91 +0,0 @@ -import t, c -from t import CInt, CPtr, CChar -import viperlib -import viperio -import stdlib -import memhub - - -def mpool_main() -> CInt: - buf: bytes = stdlib.malloc(256) - - arena: bytes = stdlib.malloc(4096) - with memhub.MemPool(arena, 4096) as pool: - p1: bytes = pool.alloc(32) - p2: bytes = pool.alloc(64) - p3: bytes = pool.alloc(128) - if p1 != None and p2 != None and p3 != None: - viperlib.snprintf(buf, 256, "MPool bump: 3 allocs OK") - print(buf) - else: - viperlib.snprintf(buf, 256, "MPool bump: alloc FAILED") - print(buf) - - pool.reset() - p4: bytes = pool.alloc(256) - if p4 != None: - viperlib.snprintf(buf, 256, "MPool bump: reset+alloc OK") - print(buf) - else: - viperlib.snprintf(buf, 256, "MPool bump: reset+alloc FAILED") - print(buf) - - stdlib.free(arena) - - arena2: bytes = stdlib.malloc(4096) - with memhub.MemSlab(arena2, 4096, 64) as spool: - b1: bytes = spool.alloc(64) - b2: bytes = spool.alloc(64) - b3: bytes = spool.alloc(64) - if b1 != None and b2 != None and b3 != None: - viperlib.snprintf(buf, 256, "MPool slab: 3 allocs OK") - print(buf) - else: - viperlib.snprintf(buf, 256, "MPool slab: alloc FAILED") - print(buf) - - spool.free(b2) - b4: bytes = spool.alloc(64) - if b4 != None: - viperlib.snprintf(buf, 256, "MPool slab: free+realloc OK") - print(buf) - else: - viperlib.snprintf(buf, 256, "MPool slab: free+realloc FAILED") - print(buf) - - stdlib.free(arena2) - - arena3: bytes = stdlib.malloc(4096) - hpool: memhub.MemPool | CPtr = memhub.MemPool(arena3, 4096) - h1: bytes = hpool.alloc(32) - h2: bytes = hpool.alloc(64) - if h1 != None and h2 != None: - viperlib.snprintf(buf, 256, "MPool manual: 2 allocs OK") - print(buf) - else: - viperlib.snprintf(buf, 256, "MPool manual: alloc FAILED") - print(buf) - hpool.reset() - h3: bytes = hpool.alloc(128) - if h3 != None: - viperlib.snprintf(buf, 256, "MPool manual: reset+alloc OK") - print(buf) - else: - viperlib.snprintf(buf, 256, "MPool manual: reset+alloc FAILED") - print(buf) - - stdlib.free(arena3) - - arena4: bytes = stdlib.malloc(4096) - with memhub.MemPool(arena4, 4096) as bpool: - wb: viperio.Buf | CPtr = bpool.alloc_buf(128) - if wb.data != None: - viperlib.snprintf(wb.cstr(), 128, "MPool alloc_buf: hello from Buf!") - print(wb.cstr()) - else: - viperlib.snprintf(buf, 256, "MPool alloc_buf: FAILED") - print(buf) - - stdlib.free(arena4) - stdlib.free(buf) - return 0 diff --git a/Test/TestProject3/App/vectortest.vp b/Test/TestProject3/App/vectortest.vp deleted file mode 100644 index e39a5f4..0000000 --- a/Test/TestProject3/App/vectortest.vp +++ /dev/null @@ -1,43 +0,0 @@ -import t, c -from t import CInt, CPtr, CChar, CFloat64T -import viperlib -import stdlib -import vector -import memhub - -POOL_SIZE: t.CDefine = 4096 - -def vector_main() -> CInt: - buf: str = stdlib.malloc(256) - pool_mem: t.CVoid | t.CPtr = stdlib.malloc(POOL_SIZE) - pool: memhub.MemPool | CPtr = memhub.MemPool(pool_mem, POOL_SIZE) - - vi: vector.Vector | CPtr = vector.Vector(pool, 10, CInt(0)) - vi.push(CInt(10)) - vi.push(CInt(20)) - vi.push(CInt(30)) - viperlib.snprintf(buf, 256, "Vector[int]: len=%d, [0]=%d, [1]=%d, [2]=%d", vi.len(), vi.get(0), vi.get(1), vi.get(2)) - print(buf) - - vi.set(1, CInt(99)) - viperlib.snprintf(buf, 256, "Vector[int]: set[1]=99, [1]=%d", vi.get(1)) - print(buf) - - vi.clear() - viperlib.snprintf(buf, 256, "Vector[int]: cleared, len=%d", vi.len()) - print(buf) - - vi.free() - - vd: vector.Vector | CPtr = vector.Vector(pool, 8, CFloat64T(0.0)) - vd.push(CFloat64T(1.5)) - vd.push(CFloat64T(2.7)) - vd.push(CFloat64T(3.14)) - viperlib.snprintf(buf, 256, "Vector[double]: len=%d, [0]=%.1f, [1]=%.1f, [2]=%.2f", vd.len(), vd.get(0), vd.get(1), vd.get(2)) - print(buf) - - vd.free() - - stdlib.free(pool_mem) - stdlib.free(buf) - return 0 diff --git a/Test/TestProject3/output/0019c939aae7f9f1.deps.json b/Test/TestProject3/output/0019c939aae7f9f1.deps.json deleted file mode 100644 index 5e61fc0..0000000 --- a/Test/TestProject3/output/0019c939aae7f9f1.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"memhub": "04e5fe47ff2af528", "enumtest": "1b58766d38d05de3", "vector": "285a822aa26bfbda", "stdio": "285b6aa29a34754d", "definetest": "64ac83614c9bdbc6", "stdlib": "6c658cc728d0bbf4", "stdarg": "71e0a3ffcb3ebfad", "testcheck": "748d0424e8976fa0", "string": "928c0ff6d8c69ec9", "atom": "aa246c6e6aa30484", "main": "b235d6477436c524", "platmacro": "b57252077e6b596b", "vectortest": "b777c587cc21465a", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "fileiotest": "c01b27dbcd683245", "viperio": "c9f4be41ca1cc2b4", "w32.fileio": "d137b1f3311f3a7f", "fileio": "d137b1f3311f3a7f", "stdint": "f5522571bcce7bcb", "viperlib": "f6ab8989f3545e83", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7"} \ No newline at end of file diff --git a/Test/TestProject3/output/1b58766d38d05de3.deps.json b/Test/TestProject3/output/1b58766d38d05de3.deps.json deleted file mode 100644 index e33992f..0000000 --- a/Test/TestProject3/output/1b58766d38d05de3.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"mpooltest": "0019c939aae7f9f1", "memhub": "04e5fe47ff2af528", "vector": "285a822aa26bfbda", "stdio": "285b6aa29a34754d", "definetest": "64ac83614c9bdbc6", "stdlib": "6c658cc728d0bbf4", "stdarg": "71e0a3ffcb3ebfad", "testcheck": "748d0424e8976fa0", "string": "928c0ff6d8c69ec9", "atom": "aa246c6e6aa30484", "main": "b235d6477436c524", "platmacro": "b57252077e6b596b", "vectortest": "b777c587cc21465a", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "fileiotest": "c01b27dbcd683245", "viperio": "c9f4be41ca1cc2b4", "w32.fileio": "d137b1f3311f3a7f", "fileio": "d137b1f3311f3a7f", "stdint": "f5522571bcce7bcb", "viperlib": "f6ab8989f3545e83", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7"} \ No newline at end of file diff --git a/Test/TestProject3/output/285a822aa26bfbda.deps.json b/Test/TestProject3/output/285a822aa26bfbda.deps.json deleted file mode 100644 index bcdd3ee..0000000 --- a/Test/TestProject3/output/285a822aa26bfbda.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"mpooltest": "0019c939aae7f9f1", "memhub": "04e5fe47ff2af528", "enumtest": "1b58766d38d05de3", "vector": "285a822aa26bfbda", "stdio": "285b6aa29a34754d", "definetest": "64ac83614c9bdbc6", "stdlib": "6c658cc728d0bbf4", "stdarg": "71e0a3ffcb3ebfad", "testcheck": "748d0424e8976fa0", "string": "928c0ff6d8c69ec9", "atom": "aa246c6e6aa30484", "main": "b235d6477436c524", "platmacro": "b57252077e6b596b", "vectortest": "b777c587cc21465a", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "fileiotest": "c01b27dbcd683245", "viperio": "c9f4be41ca1cc2b4", "w32.fileio": "d137b1f3311f3a7f", "fileio": "d137b1f3311f3a7f", "stdint": "f5522571bcce7bcb", "viperlib": "f6ab8989f3545e83", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7", "w32.win32memory": "72e2d5ccb7cedcf1", "win32memory": "72e2d5ccb7cedcf1", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "w32.winsock2": "6446627d4f07a1b5", "winsock2": "6446627d4f07a1b5"} \ No newline at end of file diff --git a/Test/TestProject3/output/64ac83614c9bdbc6.deps.json b/Test/TestProject3/output/64ac83614c9bdbc6.deps.json deleted file mode 100644 index 9f0cad3..0000000 --- a/Test/TestProject3/output/64ac83614c9bdbc6.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"mpooltest": "0019c939aae7f9f1", "memhub": "04e5fe47ff2af528", "enumtest": "1b58766d38d05de3", "vector": "285a822aa26bfbda", "stdio": "285b6aa29a34754d", "stdlib": "6c658cc728d0bbf4", "stdarg": "71e0a3ffcb3ebfad", "testcheck": "748d0424e8976fa0", "string": "928c0ff6d8c69ec9", "atom": "aa246c6e6aa30484", "main": "b235d6477436c524", "platmacro": "b57252077e6b596b", "vectortest": "b777c587cc21465a", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "fileiotest": "c01b27dbcd683245", "viperio": "c9f4be41ca1cc2b4", "w32.fileio": "d137b1f3311f3a7f", "fileio": "d137b1f3311f3a7f", "stdint": "f5522571bcce7bcb", "viperlib": "f6ab8989f3545e83", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7"} \ No newline at end of file diff --git a/Test/TestProject3/output/b235d6477436c524.deps.json b/Test/TestProject3/output/b235d6477436c524.deps.json deleted file mode 100644 index 395efe7..0000000 --- a/Test/TestProject3/output/b235d6477436c524.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"mpooltest": "0019c939aae7f9f1", "memhub": "04e5fe47ff2af528", "enumtest": "1b58766d38d05de3", "vector": "285a822aa26bfbda", "stdio": "285b6aa29a34754d", "definetest": "64ac83614c9bdbc6", "stdlib": "6c658cc728d0bbf4", "stdarg": "71e0a3ffcb3ebfad", "testcheck": "748d0424e8976fa0", "string": "928c0ff6d8c69ec9", "atom": "aa246c6e6aa30484", "platmacro": "b57252077e6b596b", "vectortest": "b777c587cc21465a", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "fileiotest": "c01b27dbcd683245", "viperio": "c9f4be41ca1cc2b4", "w32.fileio": "d137b1f3311f3a7f", "fileio": "d137b1f3311f3a7f", "stdint": "f5522571bcce7bcb", "viperlib": "f6ab8989f3545e83", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7"} \ No newline at end of file diff --git a/Test/TestProject3/output/b777c587cc21465a.deps.json b/Test/TestProject3/output/b777c587cc21465a.deps.json deleted file mode 100644 index 57634a2..0000000 --- a/Test/TestProject3/output/b777c587cc21465a.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"mpooltest": "0019c939aae7f9f1", "memhub": "04e5fe47ff2af528", "enumtest": "1b58766d38d05de3", "vector": "285a822aa26bfbda", "stdio": "285b6aa29a34754d", "definetest": "64ac83614c9bdbc6", "stdlib": "6c658cc728d0bbf4", "stdarg": "71e0a3ffcb3ebfad", "testcheck": "748d0424e8976fa0", "string": "928c0ff6d8c69ec9", "atom": "aa246c6e6aa30484", "main": "b235d6477436c524", "platmacro": "b57252077e6b596b", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "fileiotest": "c01b27dbcd683245", "viperio": "c9f4be41ca1cc2b4", "w32.fileio": "d137b1f3311f3a7f", "fileio": "d137b1f3311f3a7f", "stdint": "f5522571bcce7bcb", "viperlib": "f6ab8989f3545e83", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7"} \ No newline at end of file diff --git a/Test/TestProject3/output/c01b27dbcd683245.deps.json b/Test/TestProject3/output/c01b27dbcd683245.deps.json deleted file mode 100644 index bd79ed6..0000000 --- a/Test/TestProject3/output/c01b27dbcd683245.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"mpooltest": "0019c939aae7f9f1", "memhub": "04e5fe47ff2af528", "enumtest": "1b58766d38d05de3", "vector": "285a822aa26bfbda", "stdio": "285b6aa29a34754d", "definetest": "64ac83614c9bdbc6", "stdlib": "6c658cc728d0bbf4", "stdarg": "71e0a3ffcb3ebfad", "testcheck": "748d0424e8976fa0", "string": "928c0ff6d8c69ec9", "atom": "aa246c6e6aa30484", "main": "b235d6477436c524", "platmacro": "b57252077e6b596b", "vectortest": "b777c587cc21465a", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "viperio": "c9f4be41ca1cc2b4", "w32.fileio": "d137b1f3311f3a7f", "fileio": "d137b1f3311f3a7f", "stdint": "f5522571bcce7bcb", "viperlib": "f6ab8989f3545e83", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7"} \ No newline at end of file diff --git a/Test/TestProject3/project.json b/Test/TestProject3/project.json deleted file mode 100644 index 74f6a0a..0000000 --- a/Test/TestProject3/project.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/TermiNexus/TransPyC/main/schemas/project-schema.json", - "name": "TestProject", - "version": "1.0.0", - "source_dir": "./App", - "build_dir": "./.tpv_build", - "compiler": { - "cmd": "llc", - "flags": ["-filetype=obj", "-relocation-model=pic"] - }, - "linker": { - "cmd": "clang++", - "flags": ["-lmsvcrt", "-lucrt", "-lpthread", "-lmingwex", "-lkernel32", "-Wl,--allow-multiple-definition"], - "output": "TestProject.exe" - }, - "includes": [ - "../../includes" - ], - "target": { - "triple": "x86_64-pc-windows-gnu", - "datalayout": "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" - }, - "options": { - "slice_level": 3, - "sha1_slice_level": 1, - "target": "llvm", - "strict_mode": true - } -} diff --git a/Test/TestProject3/temp/0019c939aae7f9f1.doc.json b/Test/TestProject3/temp/0019c939aae7f9f1.doc.json deleted file mode 100644 index 9e26dfe..0000000 --- a/Test/TestProject3/temp/0019c939aae7f9f1.doc.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/Test/TestProject3/temp/0019c939aae7f9f1.vpi b/Test/TestProject3/temp/0019c939aae7f9f1.vpi deleted file mode 100644 index fcf85d8..0000000 --- a/Test/TestProject3/temp/0019c939aae7f9f1.vpi +++ /dev/null @@ -1,14 +0,0 @@ -""" -Auto-generated Python stub file from mpooltest.vp -Module: mpooltest -""" - - -import t, c -from t import CInt, CPtr, CChar -import viperlib -import viperio -import stdlib -import memhub - -def mpool_main() -> CInt: pass diff --git a/Test/TestProject3/temp/067c78e9f121dce3.vpi b/Test/TestProject3/temp/067c78e9f121dce3.vpi deleted file mode 100644 index a606126..0000000 --- a/Test/TestProject3/temp/067c78e9f121dce3.vpi +++ /dev/null @@ -1,136 +0,0 @@ -""" -Auto-generated Python stub file from w32.win32process.vp -Module: w32.win32process -""" - -import c - - -import t -from stdint import * -from w32.win32base import * - -PROCESS_TERMINATE: t.CDefine = 0x0001 -PROCESS_CREATE_THREAD: t.CDefine = 0x0002 -PROCESS_VM_OPERATION: t.CDefine = 0x0008 -PROCESS_VM_READ: t.CDefine = 0x0010 -PROCESS_VM_WRITE: t.CDefine = 0x0020 -PROCESS_QUERY_INFORMATION: t.CDefine = 0x0400 -PROCESS_ALL_ACCESS: t.CDefine = 0x001FFFFF -THREAD_TERMINATE: t.CDefine = 0x0001 -THREAD_SUSPEND_RESUME: t.CDefine = 0x0002 -THREAD_GET_CONTEXT: t.CDefine = 0x0008 -THREAD_SET_CONTEXT: t.CDefine = 0x0010 -THREAD_QUERY_INFORMATION: t.CDefine = 0x0040 -THREAD_ALL_ACCESS: t.CDefine = 0x001FFFFF -CREATE_SUSPENDED: t.CDefine = 0x00000004 -CREATE_NEW_CONSOLE: t.CDefine = 0x00000010 -CREATE_NEW_PROCESS_GROUP: t.CDefine = 0x00000200 -CREATE_NO_WINDOW: t.CDefine = 0x08000000 -DETACHED_PROCESS: t.CDefine = 0x00000008 -STARTF_USESHOWWINDOW: t.CDefine = 0x00000001 -STARTF_USESTDHANDLES: t.CDefine = 0x00000100 -SW_HIDE: t.CDefine = 0 -SW_SHOW: t.CDefine = 5 -SW_MINIMIZE: t.CDefine = 6 -NORMAL_PRIORITY_CLASS: t.CDefine = 0x00000020 -IDLE_PRIORITY_CLASS: t.CDefine = 0x00000040 -HIGH_PRIORITY_CLASS: t.CDefine = 0x00000080 -REALTIME_PRIORITY_CLASS: t.CDefine = 0x00000100 -BELOW_NORMAL_PRIORITY_CLASS: t.CDefine = 0x00004000 -ABOVE_NORMAL_PRIORITY_CLASS: t.CDefine = 0x00008000 -STILL_ACTIVE: t.CDefine = 259 - -class STARTUPINFOA: - cb: ULONG - lpReserved: CHARPTR - lpDesktop: CHARPTR - lpTitle: CHARPTR - dwX: ULONG - dwY: ULONG - dwXSize: ULONG - dwYSize: ULONG - dwXCountChars: ULONG - dwYCountChars: ULONG - dwFillAttribute: ULONG - dwFlags: ULONG - wShowWindow: WORD - cbReserved2: WORD - lpReserved2: VOIDPTR - hStdInput: HANDLE - hStdOutput: HANDLE - hStdError: HANDLE -class STARTUPINFOW: - cb: ULONG - lpReserved: WCHARPTR - lpDesktop: WCHARPTR - lpTitle: WCHARPTR - dwX: ULONG - dwY: ULONG - dwXSize: ULONG - dwYSize: ULONG - dwXCountChars: ULONG - dwYCountChars: ULONG - dwFillAttribute: ULONG - dwFlags: ULONG - wShowWindow: WORD - cbReserved2: WORD - lpReserved2: VOIDPTR - hStdInput: HANDLE - hStdOutput: HANDLE - hStdError: HANDLE -class PROCESS_INFORMATION: - hProcess: HANDLE - hThread: HANDLE - dwProcessId: ULONG - dwThreadId: ULONG - -def CreateProcessA(lpApplicationName: LPCSTR, lpCommandLine: CHARPTR, lpProcessAttributes: SECURITY_ATTRIBUTES | t.CPtr, lpThreadAttributes: SECURITY_ATTRIBUTES | t.CPtr, bInheritHandles: BOOL, dwCreationFlags: ULONG, lpEnvironment: VOIDPTR, lpCurrentDirectory: LPCSTR, lpStartupInfo: STARTUPINFOA | t.CPtr, lpProcessInformation: PROCESS_INFORMATION | t.CPtr) -> BOOL | t.State: pass - -def CreateProcessW(lpApplicationName: LPCWSTR, lpCommandLine: WCHARPTR, lpProcessAttributes: SECURITY_ATTRIBUTES | t.CPtr, lpThreadAttributes: SECURITY_ATTRIBUTES | t.CPtr, bInheritHandles: BOOL, dwCreationFlags: ULONG, lpEnvironment: VOIDPTR, lpCurrentDirectory: LPCWSTR, lpStartupInfo: STARTUPINFOW | t.CPtr, lpProcessInformation: PROCESS_INFORMATION | t.CPtr) -> BOOL | t.State: pass - -def TerminateProcess(hProcess: HANDLE, uExitCode: UINT) -> BOOL | t.State: pass - -def GetExitCodeProcess(hProcess: HANDLE, lpExitCode: ULONG | t.CPtr) -> BOOL | t.State: pass - -def GetExitCodeThread(hThread: HANDLE, lpExitCode: ULONG | t.CPtr) -> BOOL | t.State: pass - -def OpenProcess(dwDesiredAccess: ULONG, bInheritHandle: BOOL, dwProcessId: ULONG) -> HANDLE | t.State: pass - -def GetCurrentProcess() -> HANDLE | t.State: pass - -def GetCurrentProcessId() -> ULONG | t.State: pass - -def CreateThread(lpThreadAttributes: SECURITY_ATTRIBUTES | t.CPtr, dwStackSize: t.CSizeT, lpStartAddress: VOIDPTR, lpParameter: VOIDPTR, dwCreationFlags: ULONG, lpThreadId: ULONG | t.CPtr) -> HANDLE | t.State: pass - -def OpenThread(dwDesiredAccess: ULONG, bInheritHandle: BOOL, dwThreadId: ULONG) -> HANDLE | t.State: pass - -def SuspendThread(hThread: HANDLE) -> ULONG | t.State: pass - -def ResumeThread(hThread: HANDLE) -> ULONG | t.State: pass - -def TerminateThread(hThread: HANDLE, dwExitCode: ULONG) -> BOOL | t.State: pass - -def GetCurrentThread() -> HANDLE | t.State: pass - -def GetCurrentThreadId() -> ULONG | t.State: pass - -def GetThreadId(hThread: HANDLE) -> ULONG | t.State: pass - -def GetProcessId(hProcess: HANDLE) -> ULONG | t.State: pass - -def SetThreadPriority(hThread: HANDLE, nPriority: INT) -> BOOL | t.State: pass - -def GetThreadPriority(hThread: HANDLE) -> INT | t.State: pass - -def ExitProcess(uExitCode: UINT) -> VOID | t.State: pass - -def ExitThread(dwExitCode: ULONG) -> VOID | t.State: pass - -def TlsAlloc() -> ULONG | t.State: pass - -def TlsFree(dwTlsIndex: ULONG) -> BOOL | t.State: pass - -def TlsGetValue(dwTlsIndex: ULONG) -> VOIDPTR | t.State: pass - -def TlsSetValue(dwTlsIndex: ULONG, lpTlsValue: VOIDPTR) -> BOOL | t.State: pass diff --git a/Test/TestProject3/temp/06f53cc594b4ac6c.vpi b/Test/TestProject3/temp/06f53cc594b4ac6c.vpi deleted file mode 100644 index ac278f4..0000000 --- a/Test/TestProject3/temp/06f53cc594b4ac6c.vpi +++ /dev/null @@ -1,109 +0,0 @@ -""" -Auto-generated Python stub file from w32.win32sync.vp -Module: w32.win32sync -""" - -import c - - -import t -from stdint import * -from w32.win32base import * - -class CRITICAL_SECTION: - DebugInfo: VOIDPTR - LockCount: LONG - RecursionCount: LONG - OwningThread: HANDLE - LockSemaphore: HANDLE - SpinCount: QWORD - -def InitializeCriticalSection(lpCriticalSection: CRITICAL_SECTION | t.CPtr) -> VOID | t.State: pass - -def EnterCriticalSection(lpCriticalSection: CRITICAL_SECTION | t.CPtr) -> VOID | t.State: pass - -def LeaveCriticalSection(lpCriticalSection: CRITICAL_SECTION | t.CPtr) -> VOID | t.State: pass - -def DeleteCriticalSection(lpCriticalSection: CRITICAL_SECTION | t.CPtr) -> VOID | t.State: pass - -def TryEnterCriticalSection(lpCriticalSection: CRITICAL_SECTION | t.CPtr) -> BOOL | t.State: pass - -def SetCriticalSectionSpinCount(lpCriticalSection: CRITICAL_SECTION | t.CPtr, dwSpinCount: ULONG) -> ULONG | t.State: pass - -def InitializeCriticalSectionAndSpinCount(lpCriticalSection: CRITICAL_SECTION | t.CPtr, dwSpinCount: ULONG) -> BOOL | t.State: pass - -def CreateMutexA(lpMutexAttributes: SECURITY_ATTRIBUTES | t.CPtr, bInitialOwner: BOOL, lpName: LPCSTR) -> HANDLE | t.State: pass - -def CreateMutexW(lpMutexAttributes: SECURITY_ATTRIBUTES | t.CPtr, bInitialOwner: BOOL, lpName: LPCWSTR) -> HANDLE | t.State: pass - -def OpenMutexA(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCSTR) -> HANDLE | t.State: pass - -def OpenMutexW(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCWSTR) -> HANDLE | t.State: pass - -def ReleaseMutex(hMutex: HANDLE) -> BOOL | t.State: pass - -def CreateEventA(lpEventAttributes: SECURITY_ATTRIBUTES | t.CPtr, bManualReset: BOOL, bInitialState: BOOL, lpName: LPCSTR) -> HANDLE | t.State: pass - -def CreateEventW(lpEventAttributes: SECURITY_ATTRIBUTES | t.CPtr, bManualReset: BOOL, bInitialState: BOOL, lpName: LPCWSTR) -> HANDLE | t.State: pass - -def OpenEventA(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCSTR) -> HANDLE | t.State: pass - -def OpenEventW(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCWSTR) -> HANDLE | t.State: pass - -def SetEvent(hEvent: HANDLE) -> BOOL | t.State: pass - -def ResetEvent(hEvent: HANDLE) -> BOOL | t.State: pass - -def PulseEvent(hEvent: HANDLE) -> BOOL | t.State: pass - -def CreateSemaphoreA(lpSemaphoreAttributes: SECURITY_ATTRIBUTES | t.CPtr, lInitialCount: LONG, lMaximumCount: LONG, lpName: LPCSTR) -> HANDLE | t.State: pass - -def CreateSemaphoreW(lpSemaphoreAttributes: SECURITY_ATTRIBUTES | t.CPtr, lInitialCount: LONG, lMaximumCount: LONG, lpName: LPCWSTR) -> HANDLE | t.State: pass - -def OpenSemaphoreA(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCSTR) -> HANDLE | t.State: pass - -def OpenSemaphoreW(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCWSTR) -> HANDLE | t.State: pass - -def ReleaseSemaphore(hSemaphore: HANDLE, lReleaseCount: LONG, lpPreviousCount: LONG | t.CPtr) -> BOOL | t.State: pass - -def WaitForSingleObject(hHandle: HANDLE, dwMilliseconds: ULONG) -> ULONG | t.State: pass - -def WaitForSingleObjectEx(hHandle: HANDLE, dwMilliseconds: ULONG, bAlertable: BOOL) -> ULONG | t.State: pass - -def WaitForMultipleObjects(nCount: ULONG, lpHandles: VOIDPTR, bWaitAll: BOOL, dwMilliseconds: ULONG) -> ULONG | t.State: pass - -def WaitForMultipleObjectsEx(nCount: ULONG, lpHandles: VOIDPTR, bWaitAll: BOOL, dwMilliseconds: ULONG, bAlertable: BOOL) -> ULONG | t.State: pass - -def InitializeSRWLock(SRWLock: VOIDPTR) -> VOID | t.State: pass - -def AcquireSRWLockExclusive(SRWLock: VOIDPTR) -> VOID | t.State: pass - -def AcquireSRWLockShared(SRWLock: VOIDPTR) -> VOID | t.State: pass - -def ReleaseSRWLockExclusive(SRWLock: VOIDPTR) -> VOID | t.State: pass - -def ReleaseSRWLockShared(SRWLock: VOIDPTR) -> VOID | t.State: pass - - -CONDITION_VARIABLE_LOCKMODE_SHARED: t.CDefine = 0x1 - -def InitializeConditionVariable(ConditionVariable: VOIDPTR) -> VOID | t.State: pass - -def SleepConditionVariableCS(ConditionVariable: VOIDPTR, CriticalSection: CRITICAL_SECTION | t.CPtr, dwMilliseconds: ULONG) -> BOOL | t.State: pass - -def SleepConditionVariableSRW(ConditionVariable: VOIDPTR, SRWLock: VOIDPTR, dwMilliseconds: ULONG, Flags: ULONG) -> BOOL | t.State: pass - -def WakeConditionVariable(ConditionVariable: VOIDPTR) -> VOID | t.State: pass - -def WakeAllConditionVariable(ConditionVariable: VOIDPTR) -> VOID | t.State: pass - - -INIT_ONCE_STATIC_INIT: t.CDefine = 0x00000001 -INIT_ONCE_CHECK_ONLY: t.CDefine = 0x00000002 -INIT_ONCE_ASYNC: t.CDefine = 0x00000004 -INIT_ONCE_INIT_FAILED: t.CDefine = 0x00000008 - -class INIT_ONCE: - Ptr: t.CPtr - -def InitOnceExecuteOnce(InitOnce: INIT_ONCE | t.CPtr, InitFn: VOIDPTR, Parameter: VOIDPTR, Context: VOIDPTR | t.CPtr) -> BOOL | t.State: pass diff --git a/Test/TestProject3/temp/1b58766d38d05de3.doc.json b/Test/TestProject3/temp/1b58766d38d05de3.doc.json deleted file mode 100644 index 9e26dfe..0000000 --- a/Test/TestProject3/temp/1b58766d38d05de3.doc.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/Test/TestProject3/temp/1b58766d38d05de3.vpi b/Test/TestProject3/temp/1b58766d38d05de3.vpi deleted file mode 100644 index ba21b2a..0000000 --- a/Test/TestProject3/temp/1b58766d38d05de3.vpi +++ /dev/null @@ -1,35 +0,0 @@ -""" -Auto-generated Python stub file from enumtest.vp -Module: enumtest -""" - - -import t, c -from t import CInt, CPtr, CChar, CInt32T, CExport -import viperlib -import stdlib - -class Color(t.CEnum): - Red = 0 - Green = 1 - Blue = 2 -class Option(t.REnum): - class Some: - value: CInt - Empty = 1 -class Result(t.REnum): - class Ok: - value: CInt - class Err: - msg: t.CChar | CPtr -class GeoShape(t.REnum): - class GCircle: - radius: CInt - class GRect: - w: CInt - h: CInt - class GPoint: - x: CInt - y: CInt - -def enum_main() -> CInt: pass diff --git a/Test/TestProject3/temp/285a822aa26bfbda.stub.ll.dep b/Test/TestProject3/temp/285a822aa26bfbda.stub.ll.dep deleted file mode 100644 index 7df8e8d..0000000 --- a/Test/TestProject3/temp/285a822aa26bfbda.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -04e5fe47ff2af528|285b6aa29a34754d|6c658cc728d0bbf4|928c0ff6d8c69ec9|aa246c6e6aa30484|c9f4be41ca1cc2b4|f5522571bcce7bcb \ No newline at end of file diff --git a/Test/TestProject3/temp/285a822aa26bfbda.vpi b/Test/TestProject3/temp/285a822aa26bfbda.vpi deleted file mode 100644 index 102785a..0000000 --- a/Test/TestProject3/temp/285a822aa26bfbda.vpi +++ /dev/null @@ -1,24 +0,0 @@ -""" -Auto-generated Python stub file from vector.vp -Module: vector -""" - - -import t, c -from stdint import * -import memhub - -class Vector[T]: - data: t.CVoid | t.CPtr - length: t.CSizeT - capacity: t.CSizeT - elem_size: t.CSizeT - pool: memhub.MemManager | t.CPtr - def __init__(self: Vector, pool: memhub.MemManager | t.CPtr, capacity: t.CSizeT, _hint: T) -> t.CInt: pass - def push(self: Vector, value: T) -> t.CInt: pass - def _grow(self: Vector) -> t.CInt: pass - def get(self: Vector, index: t.CSizeT) -> T: pass - def set(self: Vector, index: t.CSizeT, value: T) -> t.CInt: pass - def len(self: Vector) -> t.CSizeT: pass - def clear(self: Vector) -> t.CInt: pass - def free(self: Vector) -> t.CInt: pass \ No newline at end of file diff --git a/Test/TestProject3/temp/285b6aa29a34754d.stub.ll.dep b/Test/TestProject3/temp/285b6aa29a34754d.stub.ll.dep deleted file mode 100644 index e69de29..0000000 diff --git a/Test/TestProject3/temp/285b6aa29a34754d.vpi b/Test/TestProject3/temp/285b6aa29a34754d.vpi deleted file mode 100644 index acc57c7..0000000 --- a/Test/TestProject3/temp/285b6aa29a34754d.vpi +++ /dev/null @@ -1,23 +0,0 @@ -""" -Auto-generated Python stub file from stdio.vp -Module: stdio -""" - - -import t, c - -def printf(fmt: t.CConst | str, *args) -> int | t.State: pass - -def fprintf(stream: bytes, fmt: t.CConst | str, *args) -> int | t.State: pass - -def sprintf(buf: bytes, fmt: t.CConst | str, *args) -> int | t.State: pass - -def snprintf(buf: bytes, size: t.CSizeT, fmt: t.CConst | str, *args) -> int | t.State: pass - -def puts(s: t.CConst | str) -> int | t.State: pass - -def fputs(s: t.CConst | str, stream: bytes) -> int | t.State: pass - -def fgets(buf: bytes, size: int, stream: bytes) -> bytes | t.State: pass - -def fflush(stream: bytes) -> int | t.State: pass diff --git a/Test/TestProject3/temp/6446627d4f07a1b5.vpi b/Test/TestProject3/temp/6446627d4f07a1b5.vpi deleted file mode 100644 index 55f6a1f..0000000 --- a/Test/TestProject3/temp/6446627d4f07a1b5.vpi +++ /dev/null @@ -1,86 +0,0 @@ -""" -Auto-generated Python stub file from w32.winsock2.vp -Module: w32.winsock2 -""" - - -import t, c -from stdint import * -from w32.win32base import * - -WINSOCK_VERSION: t.CDefine = 0x0202 # 2.2 -AF_INET: t.CDefine = 2 -AF_INET6: t.CDefine = 23 -SOCK_STREAM: t.CDefine = 1 # TCP -SOCK_DGRAM: t.CDefine = 2 # UDP -SOCK_RAW: t.CDefine = 3 # 原始套接字 -IPPROTO_TCP: t.CDefine = 6 -IPPROTO_UDP: t.CDefine = 17 -SOL_SOCKET: t.CDefine = 0xFFFF # WinSock2 值 -SO_RCVTIMEO: t.CDefine = 0x1006 # WinSock2 值 -SO_SNDTIMEO: t.CDefine = 0x1005 # WinSock2 值 -SO_REUSEADDR: t.CDefine = 0x0004 # WinSock2 值 -INADDR_ANY: t.CDefine = 0 -SOCKET_ERROR: t.CDefine = -1 -INVALID_SOCKET: t.CDefine = 0xFFFFFFFF # WinSock2: ~0 -MSG_NOSIGNAL: t.CDefine = 0 # Windows 不支持,设为 0 -SD_SEND: t.CDefine = 1 -SD_RECV: t.CDefine = 0 -SD_BOTH: t.CDefine = 2 - -class WSASocketAddr: - family: u16 - port: u16 - addr: u32 - zero: u64 -class WSAData: - wVersion: WORD - wHighVersion: WORD - szDescription: BYTE - szSystemStatus: BYTE - iMaxSockets: u16 - iMaxUdpDg: u16 - lpVendorInfo: CHARPTR -class WSAHostEnt: - h_name: CHARPTR - h_aliases: CHARPTR - h_addrtype: SHORT - h_length: SHORT - h_addr_list: CHARPTR -class WinTimeVal: - tv_sec: LONG - tv_usec: LONG - -def WSAStartup(wVersionRequested: WORD, lpWSAData: WSAData | t.CPtr) -> INT | t.State: pass - -def WSACleanup() -> INT | t.State: pass - -def WSAGetLastError() -> INT | t.State: pass - -def socket(family: INT, type: INT, protocol: INT) -> u64 | t.State: pass - -def closesocket(s: u64) -> INT | t.State: pass - -def connect(s: u64, name: WSASocketAddr | t.CPtr, namelen: INT) -> INT | t.State: pass - -def send(s: u64, buf: t.CVoid | t.CPtr, len: INT, flags: INT) -> INT | t.State: pass - -def recv(s: u64, buf: t.CVoid | t.CPtr, len: INT, flags: INT) -> INT | t.State: pass - -def bind(s: u64, name: WSASocketAddr | t.CPtr, namelen: INT) -> INT | t.State: pass - -def listen(s: u64, backlog: INT) -> INT | t.State: pass - -def accept(s: u64, addr: WSASocketAddr | t.CPtr, addrlen: INT | t.CPtr) -> u64 | t.State: pass - -def setsockopt(s: u64, level: INT, optname: INT, optval: t.CVoid | t.CPtr, optlen: INT) -> INT | t.State: pass - -def shutdown(s: u64, how: INT) -> INT | t.State: pass - -def gethostbyname(name: t.CChar | t.CConst | t.CPtr) -> WSAHostEnt | t.CPtr | t.State: pass - -def ntohs(netshort: u16) -> u16 | t.State: pass - -def htons(hostshort: u16) -> u16 | t.State: pass - -def inet_addr(cp: t.CChar | t.CConst | t.CPtr) -> u32 | t.State: pass diff --git a/Test/TestProject3/temp/64ac83614c9bdbc6.doc.json b/Test/TestProject3/temp/64ac83614c9bdbc6.doc.json deleted file mode 100644 index 9e26dfe..0000000 --- a/Test/TestProject3/temp/64ac83614c9bdbc6.doc.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/Test/TestProject3/temp/64ac83614c9bdbc6.vpi b/Test/TestProject3/temp/64ac83614c9bdbc6.vpi deleted file mode 100644 index d142ea9..0000000 --- a/Test/TestProject3/temp/64ac83614c9bdbc6.vpi +++ /dev/null @@ -1,85 +0,0 @@ -""" -Auto-generated Python stub file from definetest.vp -Module: definetest -""" - - -import t, c -from t import CInt, CInt32T, CUInt32T, CUInt64T, CFloat64T, CPtr, CChar, CDefine, CUInt16T -import viperlib -import stdlib -import platmacro - -MAX_SIZE: t.CDefine = 1024 -MIN_VAL: t.CDefine = 0 -MAX_VAL: t.CDefine = 100 -MASK_BYTE: t.CDefine = 0xFF -SHIFT_BITS: t.CDefine = 8 -PI_INT: t.CDefine = 3 -ENABLED: t.CDefine = 1 -DISABLED: t.CDefine = 0 -PAGE_SIZE: t.CDefine = 4096 -BUFFER_LEN: t.CDefine = 256 -CODE_SEG: t.CDefine | t.CUInt16T = 0x08 -DATA_SEG: t.CDefine | t.CUInt16T = 0x10 -STACK_SEG: t.CDefine | t.CUInt16T = 0x20 - -def MAKE_FLAG(bit: CInt32T) -> t.CDefine: - return 1 << bit - -def CLAMP(x: CInt32T, lo: CInt32T, hi: CInt32T) -> t.CDefine: - if x < lo: - return lo - if x > hi: - return hi - return x - -def test_basic_define() -> CInt: pass - -def test_define_arithmetic() -> CInt: pass - -def test_define_conditional() -> CInt: pass - -def test_define_loop() -> CInt: pass - -def test_typed_define() -> CInt: pass - -def test_define_function() -> CInt: pass - -def test_define_clamp() -> CInt: pass - -def test_define_string() -> CInt: pass - -def test_define_combined() -> CInt: pass - -def test_cif_basic() -> CInt: pass - -def test_cif_elif_else() -> CInt: pass - -def test_cifdef_cifndef() -> CInt: pass - -def test_cif_platform() -> CInt: pass - -def test_cif_nested() -> CInt: pass - -def test_cif_expr() -> CInt: pass - -def test_platmacro_platform() -> CInt: pass - -def test_platmacro_sizes() -> CInt: pass - -def test_platmacro_endian() -> CInt: pass - -def test_platmacro_features() -> CInt: pass - -def test_platmacro_align() -> CInt: pass - -def test_cifdef_cross_module() -> CInt: pass - -def test_cifdef_guard() -> CInt: pass - -def test_cifdef_undefined() -> CInt: pass - -def test_cifdef_complex() -> CInt: pass - -def define_main() -> CInt: pass diff --git a/Test/TestProject3/temp/6c658cc728d0bbf4.stub.ll.dep b/Test/TestProject3/temp/6c658cc728d0bbf4.stub.ll.dep deleted file mode 100644 index 793e7ed..0000000 --- a/Test/TestProject3/temp/6c658cc728d0bbf4.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -f5522571bcce7bcb \ No newline at end of file diff --git a/Test/TestProject3/temp/6c658cc728d0bbf4.vpi b/Test/TestProject3/temp/6c658cc728d0bbf4.vpi deleted file mode 100644 index d7c42cf..0000000 --- a/Test/TestProject3/temp/6c658cc728d0bbf4.vpi +++ /dev/null @@ -1,22 +0,0 @@ -""" -Auto-generated Python stub file from stdlib.vp -Module: stdlib -""" - -import c - - -from stdint import * -import t - -def malloc(size: t.CSizeT) -> t.CVoid | t.CPtr | t.State: pass - -def calloc(nmemb: t.CSizeT, size: t.CSizeT) -> t.CVoid | t.CPtr | t.State: pass - -def realloc(p: t.CVoid | t.CPtr, size: t.CSizeT) -> t.CVoid | t.CPtr | t.State: pass - -def free(p: t.CVoid | t.CPtr) -> t.State: pass - -def system(cmd: t.CConst | t.CChar | t.CPtr) -> INT | t.State: pass - -def exit(status: int) -> t.State: pass diff --git a/Test/TestProject3/temp/71e0a3ffcb3ebfad.stub.ll.dep b/Test/TestProject3/temp/71e0a3ffcb3ebfad.stub.ll.dep deleted file mode 100644 index e69de29..0000000 diff --git a/Test/TestProject3/temp/71e0a3ffcb3ebfad.vpi b/Test/TestProject3/temp/71e0a3ffcb3ebfad.vpi deleted file mode 100644 index f99012f..0000000 --- a/Test/TestProject3/temp/71e0a3ffcb3ebfad.vpi +++ /dev/null @@ -1,20 +0,0 @@ -""" -Auto-generated Python stub file from stdarg.vp -Module: stdarg -""" - -import c - - -import t - -def va_start(args: t.CPtr, last_arg: t.CPtr) -> t.State: pass - -def va_arg(args: t.CPtr, type: t.CPtr) -> t.CPtr | t.State: pass - -def va_end(args: t.CPtr) -> t.State | t.State: pass - - -va_list: t.CTypedef = t.CUnsignedChar | t.CPtr - -def arg(type: t.CType) -> t.State: pass diff --git a/Test/TestProject3/temp/72e2d5ccb7cedcf1.vpi b/Test/TestProject3/temp/72e2d5ccb7cedcf1.vpi deleted file mode 100644 index f85ee45..0000000 --- a/Test/TestProject3/temp/72e2d5ccb7cedcf1.vpi +++ /dev/null @@ -1,91 +0,0 @@ -""" -Auto-generated Python stub file from w32.win32memory.vp -Module: w32.win32memory -""" - -import c - - -import t -from stdint import * -from w32.win32base import * - -MEM_COMMIT: t.CDefine = 0x00001000 -MEM_RESERVE: t.CDefine = 0x00002000 -MEM_DECOMMIT: t.CDefine = 0x00004000 -MEM_RELEASE: t.CDefine = 0x00008000 -MEM_FREE: t.CDefine = 0x00010000 -MEM_RESET: t.CDefine = 0x00080000 -MEM_TOP_DOWN: t.CDefine = 0x00100000 -MEM_WRITE_WATCH: t.CDefine = 0x00200000 -MEM_PHYSICAL: t.CDefine = 0x00400000 -MEM_LARGE_PAGES: t.CDefine = 0x20000000 -PAGE_NOACCESS: t.CDefine = 0x01 -PAGE_READONLY: t.CDefine = 0x02 -PAGE_READWRITE: t.CDefine = 0x04 -PAGE_WRITECOPY: t.CDefine = 0x08 -PAGE_EXECUTE: t.CDefine = 0x10 -PAGE_EXECUTE_READ: t.CDefine = 0x20 -PAGE_EXECUTE_READWRITE: t.CDefine = 0x40 -PAGE_EXECUTE_WRITECOPY: t.CDefine = 0x80 -PAGE_GUARD: t.CDefine = 0x100 -PAGE_NOCACHE: t.CDefine = 0x200 -PAGE_WRITECOMBINE: t.CDefine = 0x400 -HEAP_NO_SERIALIZE: t.CDefine = 0x00000001 -HEAP_GROWABLE: t.CDefine = 0x00000002 -HEAP_GENERATE_EXCEPTIONS: t.CDefine = 0x00000004 -HEAP_ZERO_MEMORY: t.CDefine = 0x00000008 -HEAP_REALLOC_IN_PLACE_ONLY: t.CDefine = 0x00000010 - -class MEMORY_BASIC_INFORMATION: - BaseAddress: VOIDPTR - AllocationBase: VOIDPTR - AllocationProtect: ULONG - RegionSize: t.CSizeT - State: ULONG - Protect: ULONG - Type: ULONG - -def VirtualAlloc(lpAddress: VOIDPTR, dwSize: t.CSizeT, flAllocationType: ULONG, flProtect: ULONG) -> VOIDPTR | t.State: pass - -def VirtualFree(lpAddress: VOIDPTR, dwSize: t.CSizeT, dwFreeType: ULONG) -> BOOL | t.State: pass - -def VirtualProtect(lpAddress: VOIDPTR, dwSize: t.CSizeT, flNewProtect: ULONG, lpflOldProtect: ULONG | t.CPtr) -> BOOL | t.State: pass - -def VirtualQuery(lpAddress: t.CConst | VOIDPTR, lpBuffer: MEMORY_BASIC_INFORMATION | t.CPtr, dwLength: t.CSizeT) -> t.CSizeT | t.State: pass - -def VirtualLock(lpAddress: VOIDPTR, dwSize: t.CSizeT) -> BOOL | t.State: pass - -def VirtualUnlock(lpAddress: VOIDPTR, dwSize: t.CSizeT) -> BOOL | t.State: pass - -def GetProcessHeap() -> HANDLE | t.State: pass - -def HeapCreate(flOptions: ULONG, dwInitialSize: t.CSizeT, dwMaximumSize: t.CSizeT) -> HANDLE | t.State: pass - -def HeapDestroy(hHeap: HANDLE) -> BOOL | t.State: pass - -def HeapAlloc(hHeap: HANDLE, dwFlags: ULONG, dwBytes: t.CSizeT) -> VOIDPTR | t.State: pass - -def HeapReAlloc(hHeap: HANDLE, dwFlags: ULONG, lpMem: VOIDPTR, dwBytes: t.CSizeT) -> VOIDPTR | t.State: pass - -def HeapFree(hHeap: HANDLE, dwFlags: ULONG, lpMem: VOIDPTR) -> BOOL | t.State: pass - -def HeapSize(hHeap: HANDLE, dwFlags: ULONG, lpMem: t.CConst | VOIDPTR) -> t.CSizeT | t.State: pass - -def HeapValidate(hHeap: HANDLE, dwFlags: ULONG, lpMem: t.CConst | VOIDPTR) -> BOOL | t.State: pass - -def HeapCompact(hHeap: HANDLE, dwFlags: ULONG) -> t.CSizeT | t.State: pass - -def GlobalAlloc(uFlags: UINT, dwBytes: t.CSizeT) -> VOIDPTR | t.State: pass - -def GlobalFree(hMem: VOIDPTR) -> VOIDPTR | t.State: pass - -def GlobalLock(hMem: VOIDPTR) -> VOIDPTR | t.State: pass - -def GlobalUnlock(hMem: VOIDPTR) -> BOOL | t.State: pass - -def GlobalSize(hMem: VOIDPTR) -> t.CSizeT | t.State: pass - -def LocalAlloc(uFlags: UINT, dwBytes: t.CSizeT) -> VOIDPTR | t.State: pass - -def LocalFree(hMem: VOIDPTR) -> VOIDPTR | t.State: pass diff --git a/Test/TestProject3/temp/748d0424e8976fa0.stub.ll.dep b/Test/TestProject3/temp/748d0424e8976fa0.stub.ll.dep deleted file mode 100644 index be4eebc..0000000 --- a/Test/TestProject3/temp/748d0424e8976fa0.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -285b6aa29a34754d|bbdf3bbd4c3bc28c|f5522571bcce7bcb|fc980acec33d69a7 \ No newline at end of file diff --git a/Test/TestProject3/temp/748d0424e8976fa0.vpi b/Test/TestProject3/temp/748d0424e8976fa0.vpi deleted file mode 100644 index 5ff4850..0000000 --- a/Test/TestProject3/temp/748d0424e8976fa0.vpi +++ /dev/null @@ -1,31 +0,0 @@ -""" -Auto-generated Python stub file from testcheck.vp -Module: testcheck -""" - - -import t, c -import stdio -from w32.win32console import SetConsoleOutputCP, SetConsoleCP - -CP_UTF8: t.CDefine = 65001 -_pass_count: t.CExtern | t.CInt -_fail_count: t.CExtern | t.CInt -_total_pass: t.CExtern | t.CInt -_total_fail: t.CExtern | t.CInt - -def begin(name: str) -> t.CInt: pass - -def section(name: str) -> t.CInt: pass - -def ok(msg: str) -> t.CInt: pass - -def fail(msg: str) -> t.CInt: pass - -def check(cond: t.CInt, ok_msg: str, fail_msg: str) -> t.CInt: pass - -def info(msg: str) -> t.CInt: pass - -def end() -> t.CInt: pass - -def summary() -> t.CInt: pass diff --git a/Test/TestProject3/temp/_phase1_manifest.json b/Test/TestProject3/temp/_phase1_manifest.json deleted file mode 100644 index 98a925d..0000000 --- a/Test/TestProject3/temp/_phase1_manifest.json +++ /dev/null @@ -1 +0,0 @@ -{"d:\\Users\\TermiNexus\\Desktop\\TransPyC\\Test\\TestProject3\\App\\definetest.vp": {"sha1": "64ac83614c9bdbc6", "mtime": 1781005527.138675, "size": 9399}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\Test\\TestProject3\\App\\enumtest.vp": {"sha1": "1b58766d38d05de3", "mtime": 1781025043.7585423, "size": 2094}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\Test\\TestProject3\\App\\fileiotest.vp": {"sha1": "c01b27dbcd683245", "mtime": 1781261000.2857711, "size": 12600}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\Test\\TestProject3\\App\\main.vp": {"sha1": "b235d6477436c524", "mtime": 1782110387.1454024, "size": 15478}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\Test\\TestProject3\\App\\mpooltest.vp": {"sha1": "0019c939aae7f9f1", "mtime": 1782828388.8033123, "size": 2789}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\Test\\TestProject3\\App\\vectortest.vp": {"sha1": "b777c587cc21465a", "mtime": 1782828416.8050296, "size": 1215}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\atom.vp": {"sha1": "aa246c6e6aa30484", "mtime": 1785389628.701967, "size": 1198}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\memhub.vp": {"sha1": "04e5fe47ff2af528", "mtime": 1786093335.1900027, "size": 27855}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\platmacro.vp": {"sha1": "b57252077e6b596b", "mtime": 1785332415.2187803, "size": 1266}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\stdarg.vp": {"sha1": "71e0a3ffcb3ebfad", "mtime": 1781258888.113146, "size": 277}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\stdint.vp": {"sha1": "f5522571bcce7bcb", "mtime": 1785563642.3805652, "size": 4356}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\stdio.vp": {"sha1": "285b6aa29a34754d", "mtime": 1785332415.1829746, "size": 561}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\stdlib.vp": {"sha1": "6c658cc728d0bbf4", "mtime": 1785750602.5446548, "size": 413}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\string.vp": {"sha1": "928c0ff6d8c69ec9", "mtime": 1786032947.9330952, "size": 11557}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\testcheck.vp": {"sha1": "748d0424e8976fa0", "mtime": 1785332415.20287, "size": 1919}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\vector.vp": {"sha1": "285a822aa26bfbda", "mtime": 1784566611.8311827, "size": 2071}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\viperio.vp": {"sha1": "c9f4be41ca1cc2b4", "mtime": 1782812279.506002, "size": 1556}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\viperlib.vp": {"sha1": "f6ab8989f3545e83", "mtime": 1785882958.4542437, "size": 59045}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\fileio.vp": {"sha1": "d137b1f3311f3a7f", "mtime": 1785902648.1442463, "size": 13765}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\win32base.vp": {"sha1": "fc980acec33d69a7", "mtime": 1785332415.2228394, "size": 2653}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\win32console.vp": {"sha1": "bbdf3bbd4c3bc28c", "mtime": 1781200703.5338137, "size": 5604}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\win32file.vp": {"sha1": "f6b51804a0ba8ff0", "mtime": 1782531158.744144, "size": 8424}} \ No newline at end of file diff --git a/Test/TestProject3/temp/_sha1_map.txt b/Test/TestProject3/temp/_sha1_map.txt deleted file mode 100644 index 9eb655e..0000000 --- a/Test/TestProject3/temp/_sha1_map.txt +++ /dev/null @@ -1,22 +0,0 @@ -0019c939aae7f9f1:mpooltest.vp -04e5fe47ff2af528:includes/memhub.vp -1b58766d38d05de3:enumtest.vp -285a822aa26bfbda:includes/vector.vp -285b6aa29a34754d:includes/stdio.vp -64ac83614c9bdbc6:definetest.vp -6c658cc728d0bbf4:includes/stdlib.vp -71e0a3ffcb3ebfad:includes/stdarg.vp -748d0424e8976fa0:includes/testcheck.vp -928c0ff6d8c69ec9:includes/string.vp -aa246c6e6aa30484:includes/atom.vp -b235d6477436c524:main.vp -b57252077e6b596b:includes/platmacro.vp -b777c587cc21465a:vectortest.vp -bbdf3bbd4c3bc28c:includes/w32\win32console.vp -c01b27dbcd683245:fileiotest.vp -c9f4be41ca1cc2b4:includes/viperio.vp -d137b1f3311f3a7f:includes/w32\fileio.vp -f5522571bcce7bcb:includes/stdint.vp -f6ab8989f3545e83:includes/viperlib.vp -f6b51804a0ba8ff0:includes/w32\win32file.vp -fc980acec33d69a7:includes/w32\win32base.vp diff --git a/Test/TestProject3/temp/_shared_sym.json b/Test/TestProject3/temp/_shared_sym.json deleted file mode 100644 index a7ca883862188ae2368b0b8c0cccf2756f57de51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 584979 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

DDT_X?+J*=FNk@9VF!Xw5B#Nr3mH9}vI><_6m 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 t.CBool: pass - -def __atomic_clear(ptr: t.CUInt64T | t.CPtr, order: t.CInt) -> t.CVoid: pass - -def __atomic_thread_fence(order: t.CInt) -> t.CVoid: pass - -def __atomic_signal_fence(order: t.CInt) -> t.CVoid: pass - -def __atomic_always_lock_free(size: t.CSizeT, ptr: t.CVoid | t.CPtr) -> t.CBool: pass - -def __atomic_is_lock_free(size: t.CSizeT, ptr: t.CVoid | t.CPtr) -> t.CBool: pass diff --git a/Test/TestProject3/temp/b235d6477436c524.doc.json b/Test/TestProject3/temp/b235d6477436c524.doc.json deleted file mode 100644 index 9e26dfe..0000000 --- a/Test/TestProject3/temp/b235d6477436c524.doc.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/Test/TestProject3/temp/b235d6477436c524.vpi b/Test/TestProject3/temp/b235d6477436c524.vpi deleted file mode 100644 index 8aa4d98..0000000 --- a/Test/TestProject3/temp/b235d6477436c524.vpi +++ /dev/null @@ -1,131 +0,0 @@ -""" -Auto-generated Python stub file from main.vp -Module: main -""" - - -from stdint import * -import w32.win32console -import t, c -from t import CInt, CPtr, CChar, CInt32T, CUInt64T, CFloat64T, CExport, State -import viperlib -import stdlib -import definetest -import enumtest -import mpooltest -import vectortest -import fileiotest -import testcheck - -def add[T](a: T, b: T) -> T: pass - -def add_u64[T](a: T, b: T, c: CUInt64T) -> T: pass - -def fxi[T1, T2](a: T1, b: T2) -> T1: pass - -def fxi2[T1, T2, T3](a: T1, b: T2, c: T3) -> T1: pass - -def wrap_add[T](a: T, b: T) -> T: pass - -def double_add[T](a: T, b: T) -> T: pass - - -class A[T]: - def __init__(self: A, a: T) -> t.CInt: pass - def get_a(self: A) -> T: pass -class Pair[T1, T2]: - def __init__(self: Pair, first: T1, second: T2) -> t.CInt: pass - def get_first(self: Pair) -> T1: pass - def get_second(self: Pair) -> T2: pass -class Calculator[T]: - def __init__(self: Calculator, init_val: T) -> t.CInt: pass - def compute(self: Calculator, other: T) -> T: pass - def double_compute(self: Calculator, other: T) -> T: pass -class Container[T]: - def __init__(self: Container, v: T) -> t.CInt: pass - def get_value(self: Container) -> T: pass - def get_flag(self: Container) -> CInt32T: pass -@t.CVTable -class Shape: - def __init__(self: Shape, x: CFloat64T, y: CFloat64T) -> t.CInt: pass - def area(self: Shape) -> CFloat64T: pass - def perimeter(self: Shape) -> CFloat64T: pass - def describe(self: Shape) -> CFloat64T: pass -@t.CVTable -class Circle(Shape): - def __init__(self: Circle, x: CFloat64T, y: CFloat64T, r: CFloat64T) -> t.CInt: pass - def area(self: Circle) -> CFloat64T: pass - def perimeter(self: Circle) -> CFloat64T: pass - def scale(self: Circle, factor: CFloat64T) -> 'Circle' | CPtr: pass - def move(self: Circle, dx: CFloat64T, dy: CFloat64T) -> 'Circle' | CPtr: pass -@t.CVTable -class Rect(Shape): - def __init__(self: Rect, x: CFloat64T, y: CFloat64T, w: CFloat64T, h: CFloat64T) -> t.CInt: pass - def area(self: Rect) -> CFloat64T: pass - def perimeter(self: Rect) -> CFloat64T: pass - def scale(self: Rect, factor: CFloat64T) -> 'Rect' | CPtr: pass -class Vec2: - x: CFloat64T - y: CFloat64T - def __new__() -> 'Vec2' | CPtr: pass - def __init__(self: Vec2, x: CFloat64T, y: CFloat64T) -> t.CInt: pass - def __add__(self: Vec2, b: 'Vec2' | CPtr) -> 'Vec2' | CPtr: pass - def __sub__(self: Vec2, b: 'Vec2' | CPtr) -> 'Vec2' | CPtr: pass - def __mul__(self: Vec2, s: CFloat64T) -> 'Vec2' | CPtr: pass - def __neg__(self: Vec2) -> 'Vec2' | CPtr: pass - def dot(self: Vec2, b: 'Vec2' | CPtr) -> CFloat64T: pass - def len_sq(self: Vec2) -> CFloat64T: pass -class Vec3: - x: CFloat64T - y: CFloat64T - z: CFloat64T - def __new__() -> 'Vec3' | CPtr: pass - def __init__(self: Vec3, x: CFloat64T, y: CFloat64T, z: CFloat64T) -> t.CInt: pass - def __add__(self: Vec3, b: 'Vec3' | CPtr) -> 'Vec3' | CPtr: pass - def __sub__(self: Vec3, b: 'Vec3' | CPtr) -> 'Vec3' | CPtr: pass - def __mul__(self: Vec3, s: CFloat64T) -> 'Vec3' | CPtr: pass - def __neg__(self: Vec3) -> 'Vec3' | CPtr: pass - def dot(self: Vec3, b: 'Vec3' | CPtr) -> CFloat64T: pass - def cross(self: Vec3, b: 'Vec3' | CPtr) -> 'Vec3' | CPtr: pass - def len_sq(self: Vec3) -> CFloat64T: pass -@t.CVTable -class Dog: - def __init__(self: Dog, name_val: CInt, bark_power: CInt32T) -> t.CInt: pass - def speak(self: Dog) -> CInt: pass - def bite(self: Dog) -> CInt32T: pass - def take_damage(self: Dog, dmg: CInt32T) -> 'Dog' | CPtr: pass - def is_alive(self: Dog) -> CInt: pass -@t.CVTable -class Cat: - def __init__(self: Cat, name_val: CInt, lives: CInt32T) -> t.CInt: pass - def speak(self: Cat) -> CInt: pass - def scratch(self: Cat) -> CInt32T: pass - def take_damage(self: Cat, dmg: CInt32T) -> 'Cat' | CPtr: pass - def is_alive(self: Cat) -> CInt: pass -class Transform: - px: CFloat64T - py: CFloat64T - pz: CFloat64T - scale_x: CFloat64T - scale_y: CFloat64T - scale_z: CFloat64T - def __new__() -> 'Transform' | CPtr: pass - def __init__(self: Transform, px: CFloat64T, py: CFloat64T, pz: CFloat64T) -> t.CInt: pass - def apply_scale(self: Transform, sx: CFloat64T, sy: CFloat64T, sz: CFloat64T) -> 'Transform' | CPtr: pass - def world_position(self: Transform) -> 'Vec3' | CPtr: pass -@t.CVTable -class Vehicle: - def __init__(self: Vehicle, speed: CInt32T) -> t.CInt: pass - def move(self: Vehicle) -> CInt: pass - def is_running(self: Vehicle) -> CInt: pass -@t.CVTable -class Car(Vehicle): - def __init__(self: Car, speed: CInt32T, doors: CInt32T) -> t.CInt: pass - def honk(self: Car) -> CInt: pass -@t.CVTable -class ElectricCar(Car): - def __init__(self: ElectricCar, speed: CInt32T, doors: CInt32T, battery: CInt32T) -> t.CInt: pass - def charge(self: ElectricCar) -> t.CInt: pass - def move(self: ElectricCar) -> CInt: pass - -def main() -> CInt | CExport: pass diff --git a/Test/TestProject3/temp/b57252077e6b596b.stub.ll.dep b/Test/TestProject3/temp/b57252077e6b596b.stub.ll.dep deleted file mode 100644 index e69de29..0000000 diff --git a/Test/TestProject3/temp/b57252077e6b596b.vpi b/Test/TestProject3/temp/b57252077e6b596b.vpi deleted file mode 100644 index 32c2251..0000000 --- a/Test/TestProject3/temp/b57252077e6b596b.vpi +++ /dev/null @@ -1,53 +0,0 @@ -""" -Auto-generated Python stub file from platmacro.vp -Module: platmacro -""" - - -import t, c - -IS_WINDOWS: t.CDefine = 1 -IS_WIN64: t.CDefine = 1 -IS_X86_64: t.CDefine = 1 -IS_LP64: t.CDefine = 1 -IS_LITTLE_ENDIAN: t.CDefine = 1 -IS_LINUX: t.CDefine = 0 -IS_MACOS: t.CDefine = 0 -IS_ARM64: t.CDefine = 0 -IS_BIG_ENDIAN: t.CDefine = 0 -IS_ILP32: t.CDefine = 0 -PTR_SIZE: t.CDefine = 8 -INT_SIZE: t.CDefine = 4 -LONG_SIZE: t.CDefine = 4 -WORD_SIZE: t.CDefine = 8 -CACHE_LINE_SIZE: t.CDefine = 64 -PAGE_SIZE: t.CDefine = 4096 -STACK_ALIGN: t.CDefine = 16 -MAX_PATH_LEN: t.CDefine = 260 -PLATFORM_NAME: t.CDefine = 1 -ARCH_NAME: t.CDefine = 1 -WINVER: t.CDefine = 0x0A00 -_WIN32_WINNT: t.CDefine = 0x0A00 -NTDDI_VERSION: t.CDefine = 0x0A000006 -HAS_SSE2: t.CDefine = 1 -HAS_AVX: t.CDefine = 1 -HAS_AVX2: t.CDefine = 1 -HAS_FMA: t.CDefine = 1 -HAS_NEON: t.CDefine = 0 -ALIGNOF_INT: t.CDefine = 4 -ALIGNOF_LONG: t.CDefine = 4 -ALIGNOF_PTR: t.CDefine = 8 -ALIGNOF_DOUBLE: t.CDefine = 8 -ALIGNOF_LONG_DOUBLE: t.CDefine = 16 -SIZEOF_SHORT: t.CDefine = 2 -SIZEOF_INT: t.CDefine = 4 -SIZEOF_LONG: t.CDefine = 4 -SIZEOF_LONG_LONG: t.CDefine = 8 -SIZEOF_FLOAT: t.CDefine = 4 -SIZEOF_DOUBLE: t.CDefine = 8 -SIZEOF_LONG_DOUBLE: t.CDefine = 16 -SIZEOF_POINTER: t.CDefine = 8 -SIZEOF_SIZE_T: t.CDefine = 8 -SIZEOF_PTRDIFF_T: t.CDefine = 8 -BYTE_ORDER_LE: t.CDefine = 1 -BYTE_ORDER_BE: t.CDefine = 0 \ No newline at end of file diff --git a/Test/TestProject3/temp/b777c587cc21465a.doc.json b/Test/TestProject3/temp/b777c587cc21465a.doc.json deleted file mode 100644 index 9e26dfe..0000000 --- a/Test/TestProject3/temp/b777c587cc21465a.doc.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/Test/TestProject3/temp/b777c587cc21465a.vpi b/Test/TestProject3/temp/b777c587cc21465a.vpi deleted file mode 100644 index c1e9bd4..0000000 --- a/Test/TestProject3/temp/b777c587cc21465a.vpi +++ /dev/null @@ -1,16 +0,0 @@ -""" -Auto-generated Python stub file from vectortest.vp -Module: vectortest -""" - - -import t, c -from t import CInt, CPtr, CChar, CFloat64T -import viperlib -import stdlib -import vector -import memhub - -POOL_SIZE: t.CDefine = 4096 - -def vector_main() -> CInt: pass diff --git a/Test/TestProject3/temp/bbdf3bbd4c3bc28c.stub.ll.dep b/Test/TestProject3/temp/bbdf3bbd4c3bc28c.stub.ll.dep deleted file mode 100644 index d4b382c..0000000 --- a/Test/TestProject3/temp/bbdf3bbd4c3bc28c.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -f5522571bcce7bcb|fc980acec33d69a7 \ No newline at end of file diff --git a/Test/TestProject3/temp/bbdf3bbd4c3bc28c.vpi b/Test/TestProject3/temp/bbdf3bbd4c3bc28c.vpi deleted file mode 100644 index 4709b3e..0000000 --- a/Test/TestProject3/temp/bbdf3bbd4c3bc28c.vpi +++ /dev/null @@ -1,138 +0,0 @@ -""" -Auto-generated Python stub file from w32.win32console.vp -Module: w32.win32console -""" - -import c - - -import t -from stdint import * -from w32.win32base import * - -ENABLE_PROCESSED_INPUT: t.CDefine = 0x0001 -ENABLE_LINE_INPUT: t.CDefine = 0x0002 -ENABLE_ECHO_INPUT: t.CDefine = 0x0004 -ENABLE_WINDOW_INPUT: t.CDefine = 0x0008 -ENABLE_MOUSE_INPUT: t.CDefine = 0x0010 -ENABLE_INSERT_MODE: t.CDefine = 0x0020 -ENABLE_QUICK_EDIT_MODE: t.CDefine = 0x0040 -ENABLE_EXTENDED_FLAGS: t.CDefine = 0x0080 -ENABLE_PROCESSED_OUTPUT: t.CDefine = 0x0001 -ENABLE_WRAP_AT_EOL_OUTPUT: t.CDefine = 0x0002 -ENABLE_VIRTUAL_TERMINAL_PROCESSING: t.CDefine = 0x0004 -DISABLE_NEWLINE_AUTO_RETURN: t.CDefine = 0x0008 -ENABLE_LVB_GRID_WORLDWIDE: t.CDefine = 0x0010 -FOREGROUND_BLUE: t.CDefine = 0x0001 -FOREGROUND_GREEN: t.CDefine = 0x0002 -FOREGROUND_RED: t.CDefine = 0x0004 -FOREGROUND_INTENSITY: t.CDefine = 0x0008 -BACKGROUND_BLUE: t.CDefine = 0x0010 -BACKGROUND_GREEN: t.CDefine = 0x0020 -BACKGROUND_RED: t.CDefine = 0x0040 -BACKGROUND_INTENSITY: t.CDefine = 0x0080 -KEY_EVENT: t.CDefine = 0x0001 -MOUSE_EVENT: t.CDefine = 0x0002 -WINDOW_BUFFER_SIZE_EVENT: t.CDefine = 0x0004 -MENU_EVENT: t.CDefine = 0x0008 -FOCUS_EVENT: t.CDefine = 0x0010 - -class COORD: - X: SHORT - Y: SHORT -class SMALL_RECT: - Left: SHORT - Top: SHORT - Right: SHORT - Bottom: SHORT -class CONSOLE_SCREEN_BUFFER_INFO: - dwSize: COORD - dwCursorPosition: COORD - wAttributes: WORD - srWindow: SMALL_RECT - dwMaximumWindowSize: COORD -class CONSOLE_CURSOR_INFO: - dwSize: ULONG - bVisible: BOOL -class CHAR_INFO: - UnicodeChar: WCHAR - Attributes: WORD -class KEY_EVENT_RECORD: - bKeyDown: BOOL - wRepeatCount: WORD - wVirtualKeyCode: WORD - wVirtualScanCode: WORD - uChar: WCHAR - dwControlKeyState: ULONG -class MOUSE_EVENT_RECORD: - dwMousePosition: COORD - dwButtonState: ULONG - dwControlKeyState: ULONG - dwEventFlags: ULONG -class WINDOW_BUFFER_SIZE_RECORD: - dwSize: COORD -class INPUT_RECORD: - EventType: WORD - Event: KEY_EVENT_RECORD - -def SetConsoleOutputCP(codepage: UINT) -> BOOL | t.State: pass - -def SetConsoleCP(codepage: UINT) -> BOOL | t.State: pass - -def GetConsoleCP() -> UINT | t.State: pass - -def GetConsoleOutputCP() -> UINT | t.State: pass - -def GetConsoleScreenBufferInfo(hConsoleOutput: HANDLE, lpConsoleScreenBufferInfo: CONSOLE_SCREEN_BUFFER_INFO | t.CPtr) -> BOOL | t.State: pass - -def SetConsoleScreenBufferSize(hConsoleOutput: HANDLE, dwSize: COORD) -> BOOL | t.State: pass - -def SetConsoleCursorPosition(hConsoleOutput: HANDLE, dwCursorPosition: COORD) -> BOOL | t.State: pass - -def GetConsoleCursorInfo(hConsoleOutput: HANDLE, lpConsoleCursorInfo: CONSOLE_CURSOR_INFO | t.CPtr) -> BOOL | t.State: pass - -def SetConsoleCursorInfo(hConsoleOutput: HANDLE, lpConsoleCursorInfo: CONSOLE_CURSOR_INFO | t.CPtr) -> BOOL | t.State: pass - -def SetConsoleTextAttribute(hConsoleOutput: HANDLE, wAttributes: WORD) -> BOOL | t.State: pass - -def FillConsoleOutputCharacterA(hConsoleOutput: HANDLE, cCharacter: t.CChar, nLength: ULONG, dwWriteCoord: COORD, lpNumberOfCharsWritten: ULONG | t.CPtr) -> BOOL | t.State: pass - -def FillConsoleOutputCharacterW(hConsoleOutput: HANDLE, cCharacter: WCHAR, nLength: ULONG, dwWriteCoord: COORD, lpNumberOfCharsWritten: ULONG | t.CPtr) -> BOOL | t.State: pass - -def FillConsoleOutputAttribute(hConsoleOutput: HANDLE, wAttribute: WORD, nLength: ULONG, dwWriteCoord: COORD, lpNumberOfAttrsWritten: ULONG | t.CPtr) -> BOOL | t.State: pass - -def WriteConsoleA(hConsoleOutput: HANDLE, lpBuffer: t.CConst | VOIDPTR, nNumberOfCharsToWrite: ULONG, lpNumberOfCharsWritten: ULONG | t.CPtr, lpReserved: VOIDPTR) -> BOOL | t.State: pass - -def WriteConsoleW(hConsoleOutput: HANDLE, lpBuffer: t.CConst | VOIDPTR, nNumberOfCharsToWrite: ULONG, lpNumberOfCharsWritten: ULONG | t.CPtr, lpReserved: VOIDPTR) -> BOOL | t.State: pass - -def ReadConsoleA(hConsoleInput: HANDLE, lpBuffer: VOIDPTR, nNumberOfCharsToRead: ULONG, lpNumberOfCharsRead: ULONG | t.CPtr, pInputControl: VOIDPTR) -> BOOL | t.State: pass - -def ReadConsoleW(hConsoleInput: HANDLE, lpBuffer: VOIDPTR, nNumberOfCharsToRead: ULONG, lpNumberOfCharsRead: ULONG | t.CPtr, pInputControl: VOIDPTR) -> BOOL | t.State: pass - -def GetConsoleMode(hConsoleHandle: HANDLE, lpMode: ULONG | t.CPtr) -> BOOL | t.State: pass - -def SetConsoleMode(hConsoleHandle: HANDLE, dwMode: ULONG) -> BOOL | t.State: pass - -def ReadConsoleInputA(hConsoleInput: HANDLE, lpBuffer: INPUT_RECORD | t.CPtr, nLength: ULONG, lpNumberOfEventsRead: ULONG | t.CPtr) -> BOOL | t.State: pass - -def ReadConsoleInputW(hConsoleInput: HANDLE, lpBuffer: INPUT_RECORD | t.CPtr, nLength: ULONG, lpNumberOfEventsRead: ULONG | t.CPtr) -> BOOL | t.State: pass - -def GetNumberOfConsoleInputEvents(hConsoleInput: HANDLE, lpNumberOfEvents: ULONG | t.CPtr) -> BOOL | t.State: pass - -def FlushConsoleInputBuffer(hConsoleInput: HANDLE) -> BOOL | t.State: pass - -def SetConsoleTitleA(lpConsoleTitle: LPCSTR) -> BOOL | t.State: pass - -def SetConsoleTitleW(lpConsoleTitle: LPCWSTR) -> BOOL | t.State: pass - -def GetConsoleTitleA(lpConsoleTitle: CHARPTR, nSize: ULONG) -> ULONG | t.State: pass - -def GetConsoleTitleW(lpConsoleTitle: WCHARPTR, nSize: ULONG) -> ULONG | t.State: pass - -def AllocConsole() -> BOOL | t.State: pass - -def FreeConsole() -> BOOL | t.State: pass - -def SetConsoleWindowInfo(hConsoleOutput: HANDLE, bAbsolute: BOOL, lpConsoleWindow: SMALL_RECT | t.CPtr) -> BOOL | t.State: pass - -def ScrollConsoleScreenBufferA(hConsoleOutput: HANDLE, lpScrollRectangle: SMALL_RECT | t.CPtr, lpClipRectangle: SMALL_RECT | t.CPtr, dwDestinationOrigin: COORD, lpFill: CHAR_INFO | t.CPtr) -> BOOL | t.State: pass diff --git a/Test/TestProject3/temp/c01b27dbcd683245.doc.json b/Test/TestProject3/temp/c01b27dbcd683245.doc.json deleted file mode 100644 index 9e26dfe..0000000 --- a/Test/TestProject3/temp/c01b27dbcd683245.doc.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/Test/TestProject3/temp/c01b27dbcd683245.vpi b/Test/TestProject3/temp/c01b27dbcd683245.vpi deleted file mode 100644 index beda1a1..0000000 --- a/Test/TestProject3/temp/c01b27dbcd683245.vpi +++ /dev/null @@ -1,30 +0,0 @@ -""" -Auto-generated Python stub file from fileiotest.vp -Module: fileiotest -""" - - -import t, c -from t import CInt, CInt32T, CUInt32T, CPtr, CChar, CExport -from stdint import * -import stdlib -import viperlib -import w32.win32base -import w32.win32file -import w32.win32console -import w32.fileio -from w32.fileio import File, FileW, MODE, FRESULT, SEEK_SET, SEEK_CUR, SEEK_END - -BUF_SIZE: t.CDefine = 4096 - -def fileio_main() -> t.CInt: pass - -def fileio_with_test() -> t.CInt: pass - -def fileio_handle_test() -> t.CInt: pass - -def fileio_rw_test() -> t.CInt: pass - -def fileio_wide_test() -> t.CInt: pass - -def fileio_chinese_test() -> t.CInt: pass diff --git a/Test/TestProject3/temp/c9f4be41ca1cc2b4.stub.ll.dep b/Test/TestProject3/temp/c9f4be41ca1cc2b4.stub.ll.dep deleted file mode 100644 index 793e7ed..0000000 --- a/Test/TestProject3/temp/c9f4be41ca1cc2b4.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -f5522571bcce7bcb \ No newline at end of file diff --git a/Test/TestProject3/temp/c9f4be41ca1cc2b4.vpi b/Test/TestProject3/temp/c9f4be41ca1cc2b4.vpi deleted file mode 100644 index f7ed5fd..0000000 --- a/Test/TestProject3/temp/c9f4be41ca1cc2b4.vpi +++ /dev/null @@ -1,22 +0,0 @@ -""" -Auto-generated Python stub file from viperio.vp -Module: viperio -""" - - -import t, c -from stdint import * - -class Buf: - data: t.CChar | t.CPtr - length: t.CSizeT - capacity: t.CSizeT - owned: bool - def __init__(self: Buf, data: t.CChar | t.CPtr, capacity: t.CSizeT, length: t.CSizeT = 0, owned: bool = False) -> t.CInt: pass - def clear(self: Buf) -> t.CInt: pass - def write(self: Buf, src: t.CChar | t.CPtr, count: t.CSizeT) -> t.CSizeT: pass - def cstr(self: Buf) -> t.CChar | t.CPtr: pass - def reset(self: Buf) -> t.CInt: pass - def __enter__(self: Buf) -> 'Buf' | t.CPtr: pass - def __exit__(self: Buf) -> t.CInt: pass - def free(self: Buf) -> t.CInt: pass \ No newline at end of file diff --git a/Test/TestProject3/temp/d137b1f3311f3a7f.stub.ll.dep b/Test/TestProject3/temp/d137b1f3311f3a7f.stub.ll.dep deleted file mode 100644 index 57493dc..0000000 --- a/Test/TestProject3/temp/d137b1f3311f3a7f.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -285b6aa29a34754d|f5522571bcce7bcb|f6b51804a0ba8ff0|fc980acec33d69a7 \ No newline at end of file diff --git a/Test/TestProject3/temp/d137b1f3311f3a7f.vpi b/Test/TestProject3/temp/d137b1f3311f3a7f.vpi deleted file mode 100644 index a85310e..0000000 --- a/Test/TestProject3/temp/d137b1f3311f3a7f.vpi +++ /dev/null @@ -1,81 +0,0 @@ -""" -Auto-generated Python stub file from w32.fileio.vp -Module: w32.fileio -""" - - -import t, c -from stdint import * -import stdio -import w32.win32base -import w32.win32file - -class MODE(t.CEnum): - R = 0 - W = 1 - A = 2 - RP = 3 - WP = 4 - AP = 5 - X = 6 - XP = 7 -class FRESULT(t.CEnum): - OK = 0 - ERR = -1 - ERR_CLOSED = -2 - ERR_PERM = -3 - ERR_IO = -4 - ERR_NOTFOUND = -5 - -SEEK_SET: t.CDefine = 0 -SEEK_CUR: t.CDefine = 1 -SEEK_END: t.CDefine = 2 -INVALID_SET_FILE_POINTER: t.CDefine = -1 -SHARE_READ: t.CDefine = 0x00000001 -SHARE_WRITE: t.CDefine = 0x00000002 -SHARE_DELETE: t.CDefine = 0x00000004 - -class File: - handle: w32.win32base.HANDLE - closed: bool - can_read: bool - can_write: bool - is_append: bool - _share_mode: ULONG - def __init__(self: File, filename: str, mode: ULONG, share: ULONG = SHARE_READ) -> t.CInt: pass - def __enter__(self: File) -> 'File' | t.CPtr: pass - def __exit__(self: File) -> t.CInt: pass - def read(self: File, buf: bytes, count: ULONG) -> LONG: pass - def write(self: File, buf: bytes, count: ULONG) -> LONG: pass - def write_str(self: File, s: str) -> LONG: pass - def seek(self: File, offset: LONG, origin: ULONG) -> LONG: pass - def tell(self: File) -> LONG: pass - def close(self: File) -> LONG: pass - def flush(self: File) -> LONG: pass - def size(self: File) -> LONGLONG: pass - def readline(self: File, buf: bytes, max_count: ULONG) -> LONG: pass - def read_all(self: File, buf: bytes, max_count: ULONG) -> LONG: pass -class FileW: - handle: w32.win32base.HANDLE - closed: bool - can_read: bool - can_write: bool - is_append: bool - _share_mode: ULONG - def __init__(self: FileW, filename: w32.win32base.LPCWSTR, mode: ULONG, share: ULONG = SHARE_READ) -> t.CInt: pass - def __enter__(self: FileW) -> 'FileW' | t.CPtr: pass - def __exit__(self: FileW) -> t.CInt: pass - def read(self: FileW, buf: bytes, count: ULONG) -> LONG: pass - def write(self: FileW, buf: bytes, count: ULONG) -> LONG: pass - def write_str(self: FileW, s: str) -> LONG: pass - def seek(self: FileW, offset: LONG, origin: ULONG) -> LONG: pass - def tell(self: FileW) -> LONG: pass - def close(self: FileW) -> LONG: pass - def flush(self: FileW) -> LONG: pass - def size(self: FileW) -> LONGLONG: pass - def readline(self: FileW, buf: bytes, max_count: ULONG) -> LONG: pass - def read_all(self: FileW, buf: bytes, max_count: ULONG) -> LONG: pass - -def open(filename: str, mode: ULONG, share: ULONG = SHARE_READ) -> File | t.CPtr: pass - -def openw(filename: w32.win32base.LPCWSTR, mode: ULONG, share: ULONG = SHARE_READ) -> FileW | t.CPtr: pass diff --git a/Test/TestProject3/temp/f5522571bcce7bcb.stub.ll.dep b/Test/TestProject3/temp/f5522571bcce7bcb.stub.ll.dep deleted file mode 100644 index e69de29..0000000 diff --git a/Test/TestProject3/temp/f5522571bcce7bcb.vpi b/Test/TestProject3/temp/f5522571bcce7bcb.vpi deleted file mode 100644 index f0bc071..0000000 --- a/Test/TestProject3/temp/f5522571bcce7bcb.vpi +++ /dev/null @@ -1,100 +0,0 @@ -""" -Auto-generated Python stub file from stdint.vp -Module: stdint -""" - -import c - - -import t - -INT: t.CTypedef = t.CInt -INTPTR: t.CTypedef = t.CInt | t.CPtr -BOOL: t.CTypedef = t.CInt -UINT: t.CTypedef = t.CUnsignedInt -UINTPTR: t.CTypedef = UINT | t.CPtr -BYTE: t.CTypedef = t.CUnsignedChar -BYTEPTR: t.CTypedef = BYTE | t.CPtr -WORD: t.CTypedef = t.CUInt16T -DWORD: t.CTypedef = t.CUInt32T -QWORD: t.CTypedef = t.CUInt64T -TCHAR: t.CTypedef = t.CChar -CHARLIST: t.CTypedef = str | t.CPtr -VOID: t.CTypedef = t.CVoid -SHORT: t.CTypedef = t.CShort -SHORTPTR: t.CTypedef = t.CShort | t.CPtr -USHORT: t.CTypedef = t.CUnsignedShort -USHORTPTR: t.CTypedef = t.CUnsignedShort | t.CPtr -LONGLONG: t.CTypedef = t.CLongLong -ULONGLONG: t.CTypedef = t.CUnsignedLongLong -LONG: t.CTypedef = t.CLong -ULONG: t.CTypedef = t.CUnsignedLong -WCHAR: t.CTypedef = WORD -WCHARPTR: t.CTypedef = WORD | t.CPtr -CHARPTR: t.CTypedef = t.CChar | t.CPtr -FSIZE_t: t.CTypedef = DWORD -LBA_t: t.CTypedef = DWORD -VOIDPTR: t.CTypedef = t.CVoid | t.CPtr -FLOAT: t.CTypedef = t.CFloat -DOUBLE: t.CTypedef = t.CDouble -FLOAT8: t.CTypedef = t.CFloat8T -FLOAT16: t.CTypedef = t.CFloat16T -FLOAT32: t.CTypedef = t.CFloat32T -FLOAT64: t.CTypedef = t.CFloat64T -FLOAT128: t.CTypedef = t.CFloat128T -INT8: t.CTypedef = t.CInt8T -INT16: t.CTypedef = t.CInt16T -INT32: t.CTypedef = t.CInt32T -INT64: t.CTypedef = t.CInt64T -UINT8: t.CTypedef = t.CUInt8T -UINT16: t.CTypedef = t.CUInt16T -UINT32: t.CTypedef = t.CUInt32T -UINT64: t.CTypedef = t.CUInt64T -INT8PTR: t.CTypedef = t.CInt8T | t.CPtr -INT16PTR: t.CTypedef = t.CInt16T | t.CPtr -INT32PTR: t.CTypedef = t.CInt32T | t.CPtr -INT64PTR: t.CTypedef = t.CInt64T | t.CPtr -UINT8PTR: t.CTypedef = t.CUInt8T | t.CPtr -UINT16PTR: t.CTypedef = t.CUInt16T | t.CPtr -UINT32PTR: t.CTypedef = t.CUInt32T | t.CPtr -UINT64PTR: t.CTypedef = t.CUInt64T | t.CPtr -CHAR8: t.CTypedef = t.CChar8T -CHAR16: t.CTypedef = t.CChar16T -CHAR32: t.CTypedef = t.CChar32T -CHAR8PTR: t.CTypedef = t.CChar8T | t.CPtr -CHAR16PTR: t.CTypedef = t.CChar16T | t.CPtr -CHAR32PTR: t.CTypedef = t.CChar32T | t.CPtr -i8: t.CTypedef = t.CInt8T -i16: t.CTypedef = t.CInt16T -i32: t.CTypedef = t.CInt32T -i64: t.CTypedef = t.CInt64T -u8: t.CTypedef = t.CUInt8T -u16: t.CTypedef = t.CUInt16T -u32: t.CTypedef = t.CUInt32T -u64: t.CTypedef = t.CUInt64T -SIZE_T: t.CTypedef = t.CSizeT -SSIZE_T: t.CTypedef = t.CPtrDiffT -PTRDIFF_T: t.CTypedef = t.CPtrDiffT -int8_t: t.CTypedef = t.CInt8T -int16_t: t.CTypedef = t.CInt16T -int32_t: t.CTypedef = t.CInt32T -int64_t: t.CTypedef = t.CInt64T -uint8_t: t.CTypedef = t.CUInt8T -uint16_t: t.CTypedef = t.CUInt16T -uint32_t: t.CTypedef = t.CUInt32T -uint64_t: t.CTypedef = t.CUInt64T -size_t: t.CTypedef = t.CSizeT -ssize_t: t.CTypedef = t.CPtrDiffT -ptrdiff_t: t.CTypedef = t.CPtrDiffT -intptr_t: t.CTypedef = t.CIntPtrT -uintptr_t: t.CTypedef = t.CUIntPtrT -wchar_t: t.CTypedef = t.CWCharT -char8_t: t.CTypedef = t.CChar8T -char16_t: t.CTypedef = t.CChar16T -char32_t: t.CTypedef = t.CChar32T -float8_t: t.CTypedef = t.CFloat8T -float16_t: t.CTypedef = t.CFloat16T -float32_t: t.CTypedef = t.CFloat32T -float64_t: t.CTypedef = t.CFloat64T -float128_t: t.CTypedef = t.CFloat128T -_Bool: t.CTypedef = t.CBool \ No newline at end of file diff --git a/Test/TestProject3/temp/f6ab8989f3545e83.stub.ll.dep b/Test/TestProject3/temp/f6ab8989f3545e83.stub.ll.dep deleted file mode 100644 index bfde8ab..0000000 --- a/Test/TestProject3/temp/f6ab8989f3545e83.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -71e0a3ffcb3ebfad|c9f4be41ca1cc2b4|f5522571bcce7bcb \ No newline at end of file diff --git a/Test/TestProject3/temp/f6ab8989f3545e83.vpi b/Test/TestProject3/temp/f6ab8989f3545e83.vpi deleted file mode 100644 index d7cf9b6..0000000 --- a/Test/TestProject3/temp/f6ab8989f3545e83.vpi +++ /dev/null @@ -1,23 +0,0 @@ -""" -Auto-generated Python stub file from viperlib.vp -Module: viperlib -""" - - -import t, c -import viperio -from stdarg import arg, va_arg - -TEMP_BUF_SIZE: t.CDefine = 68 - -def get_digit_count(num: t.CUnsignedInt, base: t.CInt) -> t.CStatic | t.CInt: pass - -def sprintf(buf: t.CChar | t.CPtr, rule: str, *args) -> t.CVoid | t.CExport: pass - -def vsprintf(buf: t.CChar | t.CPtr, rule: str, *args) -> t.CInt: pass - -def snprintf(buf: t.CChar | t.CPtr, size: t.CSizeT, fmt: str, *args) -> t.CInt | t.CExport: pass - -def _check_special_float(fv: t.CDouble) -> t.CInt: pass - -def vsnprintf(buf: t.CChar | t.CPtr, size: t.CSizeT, fmt: str, ap: t.CChar | t.CPtr) -> t.CInt | t.CExport: pass diff --git a/Test/TestProject3/temp/f6b51804a0ba8ff0.stub.ll.dep b/Test/TestProject3/temp/f6b51804a0ba8ff0.stub.ll.dep deleted file mode 100644 index d4b382c..0000000 --- a/Test/TestProject3/temp/f6b51804a0ba8ff0.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -f5522571bcce7bcb|fc980acec33d69a7 \ No newline at end of file diff --git a/Test/TestProject3/temp/f6b51804a0ba8ff0.vpi b/Test/TestProject3/temp/f6b51804a0ba8ff0.vpi deleted file mode 100644 index 6ee80a6..0000000 --- a/Test/TestProject3/temp/f6b51804a0ba8ff0.vpi +++ /dev/null @@ -1,192 +0,0 @@ -""" -Auto-generated Python stub file from w32.win32file.vp -Module: w32.win32file -""" - -import c - - -import t -from stdint import * -from w32.win32base import * - -GENERIC_READ: t.CDefine = 0x80000000 -GENERIC_WRITE: t.CDefine = 0x40000000 -GENERIC_EXECUTE: t.CDefine = 0x20000000 -GENERIC_ALL: t.CDefine = 0x10000000 -FILE_SHARE_READ: t.CDefine = 0x00000001 -FILE_SHARE_WRITE: t.CDefine = 0x00000002 -FILE_SHARE_DELETE: t.CDefine = 0x00000004 -CREATE_NEW: t.CDefine = 1 -CREATE_ALWAYS: t.CDefine = 2 -OPEN_EXISTING: t.CDefine = 3 -OPEN_ALWAYS: t.CDefine = 4 -TRUNCATE_EXISTING: t.CDefine = 5 -FILE_ATTRIBUTE_READONLY: t.CDefine = 0x00000001 -FILE_ATTRIBUTE_HIDDEN: t.CDefine = 0x00000002 -FILE_ATTRIBUTE_SYSTEM: t.CDefine = 0x00000004 -FILE_ATTRIBUTE_DIRECTORY: t.CDefine = 0x00000010 -FILE_ATTRIBUTE_ARCHIVE: t.CDefine = 0x00000020 -FILE_ATTRIBUTE_NORMAL: t.CDefine = 0x00000080 -FILE_ATTRIBUTE_TEMPORARY: t.CDefine = 0x00000100 -FILE_ATTRIBUTE_COMPRESSED: t.CDefine = 0x00000800 -FILE_ATTRIBUTE_OFFLINE: t.CDefine = 0x00001000 -FILE_ATTRIBUTE_ENCRYPTED: t.CDefine = 0x00004000 -FILE_FLAG_WRITE_THROUGH: t.CDefine = 0x80000000 -FILE_FLAG_OVERLAPPED: t.CDefine = 0x40000000 -FILE_FLAG_NO_BUFFERING: t.CDefine = 0x20000000 -FILE_FLAG_RANDOM_ACCESS: t.CDefine = 0x10000000 -FILE_FLAG_SEQUENTIAL_SCAN: t.CDefine = 0x08000000 -FILE_FLAG_DELETE_ON_CLOSE: t.CDefine = 0x04000000 -FILE_FLAG_BACKUP_SEMANTICS: t.CDefine = 0x02000000 -FILE_FLAG_POSIX_SEMANTICS: t.CDefine = 0x01000000 -FILE_BEGIN: t.CDefine = 0 -FILE_CURRENT: t.CDefine = 1 -FILE_END: t.CDefine = 2 -STD_INPUT_HANDLE: t.CDefine = t.CUnsignedLong(-10) -STD_OUTPUT_HANDLE: t.CDefine = t.CUnsignedLong(-11) -STD_ERROR_HANDLE: t.CDefine = t.CUnsignedLong(-12) -MOVEFILE_REPLACE_EXISTING: t.CDefine = 0x00000001 -MOVEFILE_COPY_ALLOWED: t.CDefine = 0x00000002 -MOVEFILE_WRITE_THROUGH: t.CDefine = 0x00000008 - -class BY_HANDLE_FILE_INFORMATION: - dwFileAttributes: ULONG - ftCreationTime: FILETIME - ftLastAccessTime: FILETIME - ftLastWriteTime: FILETIME - dwVolumeSerialNumber: ULONG - nFileSizeHigh: ULONG - nFileSizeLow: ULONG - nNumberOfLinks: ULONG - nFileIndexHigh: ULONG - nFileIndexLow: ULONG -class WIN32_FIND_DATAA: - dwFileAttributes: ULONG - ftCreationTime: FILETIME - ftLastAccessTime: FILETIME - ftLastWriteTime: FILETIME - nFileSizeHigh: ULONG - nFileSizeLow: ULONG - dwReserved0: ULONG - dwReserved1: ULONG - cFileName: t.CArray[t.CChar, 260] - cAlternateFileName: t.CArray[t.CChar, 14] -class WIN32_FIND_DATAW: - dwFileAttributes: ULONG - ftCreationTime: FILETIME - ftLastAccessTime: FILETIME - ftLastWriteTime: FILETIME - nFileSizeHigh: ULONG - nFileSizeLow: ULONG - dwReserved0: ULONG - dwReserved1: ULONG - cFileName: t.CArray[t.CUInt16T, 260] - cAlternateFileName: t.CArray[t.CUInt16T, 14] - -def CreateFileA(lpFileName: LPCSTR, dwDesiredAccess: ULONG, dwShareMode: ULONG, lpSecurityAttributes: SECURITY_ATTRIBUTES | t.CPtr, dwCreationDisposition: ULONG, dwFlagsAndAttributes: ULONG, hTemplateFile: HANDLE) -> HANDLE | t.State: pass - -def CreateFileW(lpFileName: LPCWSTR, dwDesiredAccess: ULONG, dwShareMode: ULONG, lpSecurityAttributes: SECURITY_ATTRIBUTES | t.CPtr, dwCreationDisposition: ULONG, dwFlagsAndAttributes: ULONG, hTemplateFile: HANDLE) -> HANDLE | t.State: pass - -def ReadFile(hFile: HANDLE, lpBuffer: VOIDPTR, nNumberOfBytesToRead: ULONG, lpNumberOfBytesRead: ULONG | t.CPtr, lpOverlapped: OVERLAPPED | t.CPtr) -> BOOL | t.State: pass - -def WriteFile(hFile: HANDLE, lpBuffer: t.CConst | VOIDPTR, nNumberOfBytesToWrite: ULONG, lpNumberOfBytesWritten: ULONG | t.CPtr, lpOverlapped: OVERLAPPED | t.CPtr) -> BOOL | t.State: pass - -def SetFilePointer(hFile: HANDLE, lDistanceToMove: LONG, lpDistanceToMoveHigh: LONG | t.CPtr, dwMoveMethod: ULONG) -> LONG | t.State: pass - -def SetFilePointerEx(hFile: HANDLE, liDistanceToMove: LARGE_INTEGER | t.CPtr, lpNewFilePointer: LARGE_INTEGER | t.CPtr, dwMoveMethod: ULONG) -> BOOL | t.State: pass - -def GetFileSize(hFile: HANDLE, lpFileSizeHigh: ULONG | t.CPtr) -> ULONG | t.State: pass - -def GetFileSizeEx(hFile: HANDLE, lpFileSize: LARGE_INTEGER | t.CPtr) -> BOOL | t.State: pass - -def SetEndOfFile(hFile: HANDLE) -> BOOL | t.State: pass - -def FlushFileBuffers(hFile: HANDLE) -> BOOL | t.State: pass - -def GetFileType(hFile: HANDLE) -> ULONG | t.State: pass - -def GetFileAttributesA(lpFileName: LPCSTR) -> ULONG | t.State: pass - -def GetFileAttributesW(lpFileName: LPCWSTR) -> ULONG | t.State: pass - -def SetFileAttributesA(lpFileName: LPCSTR, dwFileAttributes: ULONG) -> BOOL | t.State: pass - -def SetFileAttributesW(lpFileName: LPCWSTR, dwFileAttributes: ULONG) -> BOOL | t.State: pass - -def DeleteFileA(lpFileName: LPCSTR) -> BOOL | t.State: pass - -def DeleteFileW(lpFileName: LPCWSTR) -> BOOL | t.State: pass - -def MoveFileA(lpExistingFileName: LPCSTR, lpNewFileName: LPCSTR) -> BOOL | t.State: pass - -def MoveFileW(lpExistingFileName: LPCWSTR, lpNewFileName: LPCWSTR) -> BOOL | t.State: pass - -def MoveFileExA(lpExistingFileName: LPCSTR, lpNewFileName: LPCSTR, dwFlags: ULONG) -> BOOL | t.State: pass - -def MoveFileExW(lpExistingFileName: LPCWSTR, lpNewFileName: LPCWSTR, dwFlags: ULONG) -> BOOL | t.State: pass - -def CopyFileA(lpExistingFileName: LPCSTR, lpNewFileName: LPCSTR, bFailIfExists: BOOL) -> BOOL | t.State: pass - -def CopyFileW(lpExistingFileName: LPCWSTR, lpNewFileName: LPCWSTR, bFailIfExists: BOOL) -> BOOL | t.State: pass - -def CreateDirectoryA(lpPathName: LPCSTR, lpSecurityAttributes: SECURITY_ATTRIBUTES | t.CPtr) -> BOOL | t.State: pass - -def CreateDirectoryW(lpPathName: LPCWSTR, lpSecurityAttributes: SECURITY_ATTRIBUTES | t.CPtr) -> BOOL | t.State: pass - -def RemoveDirectoryA(lpPathName: LPCSTR) -> BOOL | t.State: pass - -def RemoveDirectoryW(lpPathName: LPCWSTR) -> BOOL | t.State: pass - -def FindFirstFileA(lpFileName: LPCSTR, lpFindFileData: WIN32_FIND_DATAA | t.CPtr) -> HANDLE | t.State: pass - -def FindFirstFileW(lpFileName: LPCWSTR, lpFindFileData: WIN32_FIND_DATAW | t.CPtr) -> HANDLE | t.State: pass - -def FindNextFileA(hFindFile: HANDLE, lpFindFileData: WIN32_FIND_DATAA | t.CPtr) -> BOOL | t.State: pass - -def FindNextFileW(hFindFile: HANDLE, lpFindFileData: WIN32_FIND_DATAW | t.CPtr) -> BOOL | t.State: pass - -def FindClose(hFindFile: HANDLE) -> BOOL | t.State: pass - -def GetStdHandle(nStdHandle: ULONG) -> HANDLE | t.State: pass - -def SetStdHandle(nStdHandle: ULONG, hHandle: HANDLE) -> BOOL | t.State: pass - -def GetFileInformationByHandle(hFile: HANDLE, lpFileInformation: BY_HANDLE_FILE_INFORMATION | t.CPtr) -> BOOL | t.State: pass - -def LockFile(hFile: HANDLE, dwFileOffsetLow: ULONG, dwFileOffsetHigh: ULONG, nNumberOfBytesToLockLow: ULONG, nNumberOfBytesToLockHigh: ULONG) -> BOOL | t.State: pass - -def UnlockFile(hFile: HANDLE, dwFileOffsetLow: ULONG, dwFileOffsetHigh: ULONG, nNumberOfBytesToUnlockLow: ULONG, nNumberOfBytesToUnlockHigh: ULONG) -> BOOL | t.State: pass - -def GetTempPathA(nBufferLength: ULONG, lpBuffer: CHARPTR) -> ULONG | t.State: pass - -def GetTempPathW(nBufferLength: ULONG, lpBuffer: WCHARPTR) -> ULONG | t.State: pass - -def GetTempFileNameA(lpPathName: LPCSTR, lpPrefixString: LPCSTR, uUnique: UINT, lpTempFileName: CHARPTR) -> UINT | t.State: pass - -def GetTempFileNameW(lpPathName: LPCWSTR, lpPrefixString: LPCWSTR, uUnique: UINT, lpTempFileName: WCHARPTR) -> UINT | t.State: pass - -def GetCurrentDirectoryA(nBufferLength: ULONG, lpBuffer: CHARPTR) -> ULONG | t.State: pass - -def GetCurrentDirectoryW(nBufferLength: ULONG, lpBuffer: WCHARPTR) -> ULONG | t.State: pass - -def SetCurrentDirectoryA(lpPathName: LPCSTR) -> BOOL | t.State: pass - -def SetCurrentDirectoryW(lpPathName: LPCWSTR) -> BOOL | t.State: pass - -def GetModuleFileNameA(hModule: HANDLE, lpFilename: CHARPTR, nSize: ULONG) -> ULONG | t.State: pass - -def GetModuleFileNameW(hModule: HANDLE, lpFilename: WCHARPTR, nSize: ULONG) -> ULONG | t.State: pass - - -HANDLE_FLAG_INHERIT: t.CDefine = 0x00000001 -HANDLE_FLAG_PROTECT_FROM_CLOSE: t.CDefine = 0x00000002 - -def CreatePipe(hReadPipe: HANDLE | t.CPtr, hWritePipe: HANDLE | t.CPtr, lpPipeAttributes: SECURITY_ATTRIBUTES | t.CPtr, nSize: ULONG) -> BOOL | t.State: pass - -def SetHandleInformation(hObject: HANDLE, dwMask: ULONG, dwFlags: ULONG) -> BOOL | t.State: pass - -def DuplicateHandle(hSourceProcessHandle: HANDLE, hSourceHandle: HANDLE, hTargetProcessHandle: HANDLE, lpTargetHandle: HANDLE | t.CPtr, dwDesiredAccess: ULONG, bInheritHandle: BOOL, dwOptions: ULONG) -> BOOL | t.State: pass - - -DUPLICATE_SAME_ACCESS: t.CDefine = 0x00000002 \ No newline at end of file diff --git a/Test/TestProject3/temp/fc980acec33d69a7.stub.ll.dep b/Test/TestProject3/temp/fc980acec33d69a7.stub.ll.dep deleted file mode 100644 index 793e7ed..0000000 --- a/Test/TestProject3/temp/fc980acec33d69a7.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -f5522571bcce7bcb \ No newline at end of file diff --git a/Test/TestProject3/temp/fc980acec33d69a7.vpi b/Test/TestProject3/temp/fc980acec33d69a7.vpi deleted file mode 100644 index 3f9feff..0000000 --- a/Test/TestProject3/temp/fc980acec33d69a7.vpi +++ /dev/null @@ -1,100 +0,0 @@ -""" -Auto-generated Python stub file from w32.win32base.vp -Module: w32.win32base -""" - -import c - - -import t -from stdint import * - -HANDLE: t.CTypedef = VOIDPTR -LPCSTR: t.CTypedef = t.CConst | t.CChar | t.CPtr -LPCWSTR: t.CTypedef = t.CConst | t.CUnsignedShort | t.CPtr -INVALID_HANDLE_VALUE: t.CDefine = -1 -NULL: t.CDefine = 0 -TRUE: t.CDefine = 1 -FALSE: t.CDefine = 0 -INFINITE: t.CDefine = 0xFFFFFFFF -WAIT_FAILED: t.CDefine = 0xFFFFFFFF -WAIT_OBJECT_0: t.CDefine = 0 -WAIT_TIMEOUT: t.CDefine = 258 -WAIT_ABANDONED: t.CDefine = 0x80 -MAX_PATH: t.CDefine = 260 -ERROR_SUCCESS: t.CDefine = 0 -ERROR_FILE_NOT_FOUND: t.CDefine = 2 -ERROR_ACCESS_DENIED: t.CDefine = 5 -ERROR_INSUFFICIENT_BUFFER: t.CDefine = 122 - -class SECURITY_ATTRIBUTES: - nLength: ULONG - lpSecurityDescriptor: VOIDPTR - bInheritHandle: BOOL -class OVERLAPPED: - Internal: ULONGLONG - InternalHigh: ULONGLONG - Offset: ULONG - OffsetHigh: ULONG - hEvent: HANDLE -class FILETIME: - dwLowDateTime: DWORD - dwHighDateTime: DWORD -class SYSTEMTIME: - wYear: WORD - wMonth: WORD - wDayOfWeek: WORD - wDay: WORD - wHour: WORD - wMinute: WORD - wSecond: WORD - wMilliseconds: WORD -class GUID: - Data1: DWORD - Data2: WORD - Data3: WORD - Data4: BYTEPTR -class LARGE_INTEGER: - QuadPart: LONGLONG -class ULARGE_INTEGER: - QuadPart: ULONGLONG - -def GetLastError() -> ULONG | t.State: pass - -def SetLastError(dwErrCode: ULONG) -> t.State: pass - -def CloseHandle(hObject: HANDLE) -> BOOL | t.State: pass - -def GetProcAddress(hModule: HANDLE, lpProcName: LPCSTR) -> VOIDPTR | t.State: pass - -def GetModuleHandleA(lpModuleName: LPCSTR) -> HANDLE | t.State: pass - -def GetModuleHandleW(lpModuleName: LPCWSTR) -> HANDLE | t.State: pass - -def LoadLibraryA(lpLibFileName: LPCSTR) -> HANDLE | t.State: pass - -def LoadLibraryW(lpLibFileName: LPCWSTR) -> HANDLE | t.State: pass - -def FreeLibrary(hLibModule: HANDLE) -> BOOL | t.State: pass - -def GetSystemTime(lpSystemTime: SYSTEMTIME | t.CPtr) -> t.State: pass - -def GetLocalTime(lpSystemTime: SYSTEMTIME | t.CPtr) -> t.State: pass - -def FileTimeToSystemTime(lpFileTime: FILETIME | t.CPtr, lpSystemTime: SYSTEMTIME | t.CPtr) -> BOOL | t.State: pass - -def SystemTimeToFileTime(lpSystemTime: SYSTEMTIME | t.CPtr, lpFileTime: FILETIME | t.CPtr) -> BOOL | t.State: pass - -def QueryPerformanceCounter(lpPerformanceCount: LARGE_INTEGER | t.CPtr) -> BOOL | t.State: pass - -def QueryPerformanceFrequency(lpFrequency: LARGE_INTEGER | t.CPtr) -> BOOL | t.State: pass - -def Sleep(dwMilliseconds: ULONG) -> t.State: pass - -def SleepEx(dwMilliseconds: ULONG, bAlertable: BOOL) -> ULONG | t.State: pass - -def GetTickCount() -> ULONG | t.State: pass - -def GetTickCount64() -> ULONGLONG | t.State: pass - -def GetCommandLineA() -> CHARPTR | t.State: pass

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 BOOL | t.State: pass - -def CreateProcessW(lpApplicationName: LPCWSTR, lpCommandLine: WCHARPTR, lpProcessAttributes: SECURITY_ATTRIBUTES | t.CPtr, lpThreadAttributes: SECURITY_ATTRIBUTES | t.CPtr, bInheritHandles: BOOL, dwCreationFlags: ULONG, lpEnvironment: VOIDPTR, lpCurrentDirectory: LPCWSTR, lpStartupInfo: STARTUPINFOW | t.CPtr, lpProcessInformation: PROCESS_INFORMATION | t.CPtr) -> BOOL | t.State: pass - -def TerminateProcess(hProcess: HANDLE, uExitCode: UINT) -> BOOL | t.State: pass - -def GetExitCodeProcess(hProcess: HANDLE, lpExitCode: ULONG | t.CPtr) -> BOOL | t.State: pass - -def GetExitCodeThread(hThread: HANDLE, lpExitCode: ULONG | t.CPtr) -> BOOL | t.State: pass - -def OpenProcess(dwDesiredAccess: ULONG, bInheritHandle: BOOL, dwProcessId: ULONG) -> HANDLE | t.State: pass - -def GetCurrentProcess() -> HANDLE | t.State: pass - -def GetCurrentProcessId() -> ULONG | t.State: pass - -def CreateThread(lpThreadAttributes: SECURITY_ATTRIBUTES | t.CPtr, dwStackSize: t.CSizeT, lpStartAddress: VOIDPTR, lpParameter: VOIDPTR, dwCreationFlags: ULONG, lpThreadId: ULONG | t.CPtr) -> HANDLE | t.State: pass - -def OpenThread(dwDesiredAccess: ULONG, bInheritHandle: BOOL, dwThreadId: ULONG) -> HANDLE | t.State: pass - -def SuspendThread(hThread: HANDLE) -> ULONG | t.State: pass - -def ResumeThread(hThread: HANDLE) -> ULONG | t.State: pass - -def TerminateThread(hThread: HANDLE, dwExitCode: ULONG) -> BOOL | t.State: pass - -def GetCurrentThread() -> HANDLE | t.State: pass - -def GetCurrentThreadId() -> ULONG | t.State: pass - -def GetThreadId(hThread: HANDLE) -> ULONG | t.State: pass - -def GetProcessId(hProcess: HANDLE) -> ULONG | t.State: pass - -def SetThreadPriority(hThread: HANDLE, nPriority: INT) -> BOOL | t.State: pass - -def GetThreadPriority(hThread: HANDLE) -> INT | t.State: pass - -def ExitProcess(uExitCode: UINT) -> VOID | t.State: pass - -def ExitThread(dwExitCode: ULONG) -> VOID | t.State: pass - -def TlsAlloc() -> ULONG | t.State: pass - -def TlsFree(dwTlsIndex: ULONG) -> BOOL | t.State: pass - -def TlsGetValue(dwTlsIndex: ULONG) -> VOIDPTR | t.State: pass - -def TlsSetValue(dwTlsIndex: ULONG, lpTlsValue: VOIDPTR) -> BOOL | t.State: pass diff --git a/Test/TestProject2/temp/06f53cc594b4ac6c.vpi b/Test/TestProject2/temp/06f53cc594b4ac6c.vpi deleted file mode 100644 index ac278f4..0000000 --- a/Test/TestProject2/temp/06f53cc594b4ac6c.vpi +++ /dev/null @@ -1,109 +0,0 @@ -""" -Auto-generated Python stub file from w32.win32sync.vp -Module: w32.win32sync -""" - -import c - - -import t -from stdint import * -from w32.win32base import * - -class CRITICAL_SECTION: - DebugInfo: VOIDPTR - LockCount: LONG - RecursionCount: LONG - OwningThread: HANDLE - LockSemaphore: HANDLE - SpinCount: QWORD - -def InitializeCriticalSection(lpCriticalSection: CRITICAL_SECTION | t.CPtr) -> VOID | t.State: pass - -def EnterCriticalSection(lpCriticalSection: CRITICAL_SECTION | t.CPtr) -> VOID | t.State: pass - -def LeaveCriticalSection(lpCriticalSection: CRITICAL_SECTION | t.CPtr) -> VOID | t.State: pass - -def DeleteCriticalSection(lpCriticalSection: CRITICAL_SECTION | t.CPtr) -> VOID | t.State: pass - -def TryEnterCriticalSection(lpCriticalSection: CRITICAL_SECTION | t.CPtr) -> BOOL | t.State: pass - -def SetCriticalSectionSpinCount(lpCriticalSection: CRITICAL_SECTION | t.CPtr, dwSpinCount: ULONG) -> ULONG | t.State: pass - -def InitializeCriticalSectionAndSpinCount(lpCriticalSection: CRITICAL_SECTION | t.CPtr, dwSpinCount: ULONG) -> BOOL | t.State: pass - -def CreateMutexA(lpMutexAttributes: SECURITY_ATTRIBUTES | t.CPtr, bInitialOwner: BOOL, lpName: LPCSTR) -> HANDLE | t.State: pass - -def CreateMutexW(lpMutexAttributes: SECURITY_ATTRIBUTES | t.CPtr, bInitialOwner: BOOL, lpName: LPCWSTR) -> HANDLE | t.State: pass - -def OpenMutexA(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCSTR) -> HANDLE | t.State: pass - -def OpenMutexW(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCWSTR) -> HANDLE | t.State: pass - -def ReleaseMutex(hMutex: HANDLE) -> BOOL | t.State: pass - -def CreateEventA(lpEventAttributes: SECURITY_ATTRIBUTES | t.CPtr, bManualReset: BOOL, bInitialState: BOOL, lpName: LPCSTR) -> HANDLE | t.State: pass - -def CreateEventW(lpEventAttributes: SECURITY_ATTRIBUTES | t.CPtr, bManualReset: BOOL, bInitialState: BOOL, lpName: LPCWSTR) -> HANDLE | t.State: pass - -def OpenEventA(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCSTR) -> HANDLE | t.State: pass - -def OpenEventW(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCWSTR) -> HANDLE | t.State: pass - -def SetEvent(hEvent: HANDLE) -> BOOL | t.State: pass - -def ResetEvent(hEvent: HANDLE) -> BOOL | t.State: pass - -def PulseEvent(hEvent: HANDLE) -> BOOL | t.State: pass - -def CreateSemaphoreA(lpSemaphoreAttributes: SECURITY_ATTRIBUTES | t.CPtr, lInitialCount: LONG, lMaximumCount: LONG, lpName: LPCSTR) -> HANDLE | t.State: pass - -def CreateSemaphoreW(lpSemaphoreAttributes: SECURITY_ATTRIBUTES | t.CPtr, lInitialCount: LONG, lMaximumCount: LONG, lpName: LPCWSTR) -> HANDLE | t.State: pass - -def OpenSemaphoreA(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCSTR) -> HANDLE | t.State: pass - -def OpenSemaphoreW(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCWSTR) -> HANDLE | t.State: pass - -def ReleaseSemaphore(hSemaphore: HANDLE, lReleaseCount: LONG, lpPreviousCount: LONG | t.CPtr) -> BOOL | t.State: pass - -def WaitForSingleObject(hHandle: HANDLE, dwMilliseconds: ULONG) -> ULONG | t.State: pass - -def WaitForSingleObjectEx(hHandle: HANDLE, dwMilliseconds: ULONG, bAlertable: BOOL) -> ULONG | t.State: pass - -def WaitForMultipleObjects(nCount: ULONG, lpHandles: VOIDPTR, bWaitAll: BOOL, dwMilliseconds: ULONG) -> ULONG | t.State: pass - -def WaitForMultipleObjectsEx(nCount: ULONG, lpHandles: VOIDPTR, bWaitAll: BOOL, dwMilliseconds: ULONG, bAlertable: BOOL) -> ULONG | t.State: pass - -def InitializeSRWLock(SRWLock: VOIDPTR) -> VOID | t.State: pass - -def AcquireSRWLockExclusive(SRWLock: VOIDPTR) -> VOID | t.State: pass - -def AcquireSRWLockShared(SRWLock: VOIDPTR) -> VOID | t.State: pass - -def ReleaseSRWLockExclusive(SRWLock: VOIDPTR) -> VOID | t.State: pass - -def ReleaseSRWLockShared(SRWLock: VOIDPTR) -> VOID | t.State: pass - - -CONDITION_VARIABLE_LOCKMODE_SHARED: t.CDefine = 0x1 - -def InitializeConditionVariable(ConditionVariable: VOIDPTR) -> VOID | t.State: pass - -def SleepConditionVariableCS(ConditionVariable: VOIDPTR, CriticalSection: CRITICAL_SECTION | t.CPtr, dwMilliseconds: ULONG) -> BOOL | t.State: pass - -def SleepConditionVariableSRW(ConditionVariable: VOIDPTR, SRWLock: VOIDPTR, dwMilliseconds: ULONG, Flags: ULONG) -> BOOL | t.State: pass - -def WakeConditionVariable(ConditionVariable: VOIDPTR) -> VOID | t.State: pass - -def WakeAllConditionVariable(ConditionVariable: VOIDPTR) -> VOID | t.State: pass - - -INIT_ONCE_STATIC_INIT: t.CDefine = 0x00000001 -INIT_ONCE_CHECK_ONLY: t.CDefine = 0x00000002 -INIT_ONCE_ASYNC: t.CDefine = 0x00000004 -INIT_ONCE_INIT_FAILED: t.CDefine = 0x00000008 - -class INIT_ONCE: - Ptr: t.CPtr - -def InitOnceExecuteOnce(InitOnce: INIT_ONCE | t.CPtr, InitFn: VOIDPTR, Parameter: VOIDPTR, Context: VOIDPTR | t.CPtr) -> BOOL | t.State: pass diff --git a/Test/TestProject2/temp/0df65b8ed15664b0.stub.ll.dep b/Test/TestProject2/temp/0df65b8ed15664b0.stub.ll.dep deleted file mode 100644 index 6ac7322..0000000 --- a/Test/TestProject2/temp/0df65b8ed15664b0.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -285b6aa29a34754d|928c0ff6d8c69ec9|f5522571bcce7bcb \ No newline at end of file diff --git a/Test/TestProject2/temp/0df65b8ed15664b0.vpi b/Test/TestProject2/temp/0df65b8ed15664b0.vpi deleted file mode 100644 index 722f163..0000000 --- a/Test/TestProject2/temp/0df65b8ed15664b0.vpi +++ /dev/null @@ -1,30 +0,0 @@ -""" -Auto-generated Python stub file from hashlib.__sha1.vp -Module: hashlib.__sha1 -""" - - -import string -import t, c - -SHA1_BLOCK_LEN: t.CDefine = 64 -SHA1_DIGEST_LEN: t.CDefine = 20 - -def sha1_rotl(x: t.CUInt32T, n: t.CInt) -> t.CUInt32T: pass - -def sha1_f1(b: t.CUInt32T, c: t.CUInt32T, d: t.CUInt32T) -> t.CUInt32T: pass - -def sha1_f2(b: t.CUInt32T, c: t.CUInt32T, d: t.CUInt32T) -> t.CUInt32T: pass - -def sha1_f3(b: t.CUInt32T, c: t.CUInt32T, d: t.CUInt32T) -> t.CUInt32T: pass - - -@t.Object -class sha1: - state: t.CArray[t.CUInt32T, 5] - count: t.CUInt64T - buf: t.CArray[t.CUInt8T, SHA1_BLOCK_LEN] - def __init__(self: sha1) -> t.CInt: pass - def transform(self: sha1, block: t.CUInt8T | t.CPtr) -> t.CInt: pass - def update(self: sha1, s: str) -> t.CInt: pass - def final(self: sha1, out: t.CArray[t.CUInt8T, SHA1_DIGEST_LEN]) -> t.CInt: pass \ No newline at end of file diff --git a/Test/TestProject2/temp/19f8024d10c828e8.stub.ll.dep b/Test/TestProject2/temp/19f8024d10c828e8.stub.ll.dep deleted file mode 100644 index 6ac7322..0000000 --- a/Test/TestProject2/temp/19f8024d10c828e8.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -285b6aa29a34754d|928c0ff6d8c69ec9|f5522571bcce7bcb \ No newline at end of file diff --git a/Test/TestProject2/temp/19f8024d10c828e8.vpi b/Test/TestProject2/temp/19f8024d10c828e8.vpi deleted file mode 100644 index c187801..0000000 --- a/Test/TestProject2/temp/19f8024d10c828e8.vpi +++ /dev/null @@ -1,35 +0,0 @@ -""" -Auto-generated Python stub file from hashlib.__md5.vp -Module: hashlib.__md5 -""" - - -import string -import t, c - -MD5_BLOCK_LEN: t.CDefine = 64 # 分组块大小 -MD5_DIGEST_LEN: t.CDefine = 16 # 摘要输出长度 - -def md5_F(x: t.CUInt32T, y: t.CUInt32T, z: t.CUInt32T) -> t.CUInt32T: pass - -def md5_G(x: t.CUInt32T, y: t.CUInt32T, z: t.CUInt32T) -> t.CUInt32T: pass - -def md5_H(x: t.CUInt32T, y: t.CUInt32T, z: t.CUInt32T) -> t.CUInt32T: pass - -def md5_I(x: t.CUInt32T, y: t.CUInt32T, z: t.CUInt32T) -> t.CUInt32T: pass - -def md5_rotl(x: t.CUInt32T, n: t.CInt) -> t.CUInt32T: pass - - -md5_T: t.CExtern | t.CArray[t.CUInt32T, 64] -md5_S: t.CExtern | t.CArray[t.CInt, 64] - -@t.Object -class md5: - state: t.CArray[t.CUInt32T, 4] - count: t.CUInt64T - buf: t.CArray[t.CUInt8T, MD5_BLOCK_LEN] - def __init__(self: md5) -> t.CInt: pass - def transform(self: md5, block: t.CUInt8T | t.CPtr) -> t.CInt: pass - def update(self: md5, s: str) -> t.CInt: pass - def final(self: md5, out: t.CArray[t.CUInt8T, MD5_DIGEST_LEN]) -> t.CInt: pass \ No newline at end of file diff --git a/Test/TestProject2/temp/1f6617c02fc8899d.stub.ll.dep b/Test/TestProject2/temp/1f6617c02fc8899d.stub.ll.dep deleted file mode 100644 index 7df8e8d..0000000 --- a/Test/TestProject2/temp/1f6617c02fc8899d.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -04e5fe47ff2af528|285b6aa29a34754d|6c658cc728d0bbf4|928c0ff6d8c69ec9|aa246c6e6aa30484|c9f4be41ca1cc2b4|f5522571bcce7bcb \ No newline at end of file diff --git a/Test/TestProject2/temp/1f6617c02fc8899d.vpi b/Test/TestProject2/temp/1f6617c02fc8899d.vpi deleted file mode 100644 index 6f728b6..0000000 --- a/Test/TestProject2/temp/1f6617c02fc8899d.vpi +++ /dev/null @@ -1,66 +0,0 @@ -""" -Auto-generated Python stub file from zlib.zdef.vp -Module: zlib.zdef -""" - - -from stdint import * -import string -import stdlib -import memhub -import t, c - -ZDEFLATE_WINDOW_BITS: t.CDefine = 15 -ZDEFLATE_WINDOW_SIZE: t.CDefine = (1 << ZDEFLATE_WINDOW_BITS) -ZDEFLATE_WINDOW_MASK: t.CDefine = (ZDEFLATE_WINDOW_SIZE - 1) -ZDEFLATE_MIN_MATCH: t.CDefine = 3 -ZDEFLATE_MAX_MATCH: t.CDefine = 258 -ZDEFLATE_HASH_BITS: t.CDefine = 15 -ZDEFLATE_HASH_SIZE: t.CDefine = (1 << ZDEFLATE_HASH_BITS) -ZDEFLATE_HASH_MASK: t.CDefine = (ZDEFLATE_HASH_SIZE - 1) -ZDEFLATE_MAX_CODES: t.CDefine = 288 -ZDEFLATE_MAX_DIST_CODES: t.CDefine = 32 -ZDEFLATE_MAX_BITS: t.CDefine = 15 -ZDEFLATE_MAX_CODELEN_CODES: t.CDefine = 19 -ZDEFLATE_LIT_COUNT: t.CDefine = 286 -ZDEFLATE_DIST_COUNT: t.CDefine = 30 -ZDEFLATE_LEN_SYMBOLS_BASE: t.CDefine = 257 -ZDEFLATE_END_OF_BLOCK: t.CDefine = 256 -zdeflate_len_extra_bits: t.CExtern | t.CArray[t.CInt, 29] -zdeflate_len_base: t.CExtern | t.CArray[t.CInt, 29] -zdeflate_dist_extra_bits: t.CExtern | t.CArray[t.CInt, 30] -zdeflate_dist_base: t.CExtern | t.CArray[t.CInt, 30] -zdeflate_codelen_order: t.CExtern | t.CArray[int, 19] - -@t.Object -class zbit_writer: - pool: memhub.MemManager | t.CPtr - buf: BYTE | t.CPtr - cap: t.CSizeT - byte_pos: t.CSizeT - bit_pos: t.CInt - def __init__(self: zbit_writer, pool: memhub.MemManager | t.CPtr) -> t.CInt: pass - def ensure(self: zbit_writer, need: t.CSizeT) -> t.CInt: pass - def write_bits(self: zbit_writer, value: UINT, nbits: t.CInt) -> t.CInt: pass - def write_bits_rev(self: zbit_writer, code: UINT, nbits: t.CInt) -> t.CInt: pass - def stored_block(self: zbit_writer, data: UINT8PTR, length: t.CSizeT, final: t.CInt) -> t.CInt: pass - def write_zlib_header(self: zbit_writer, wbits: t.CInt, level: t.CInt) -> t.CInt: pass - def write_gzip_header(self: zbit_writer) -> t.CInt: pass - def align(self: zbit_writer) -> t.CInt: pass - def total(self: zbit_writer) -> t.CSizeT: pass - def free(self: zbit_writer) -> t.CInt: pass - def __del__(self: zbit_writer) -> t.CInt: pass -@t.Object -class zbit_reader: - buf: BYTE | t.CPtr - length: t.CSizeT - byte_pos: t.CSizeT - bit_pos: t.CInt - def init(self: zbit_reader, buf: BYTE | t.CPtr, length: t.CSizeT) -> t.CInt: pass - def read_bits(self: zbit_reader, nbits: t.CInt, out: UINTPTR) -> t.CInt: pass - def read_bits_rev(self: zbit_reader, nbits: t.CInt, out: UINTPTR) -> t.CInt: pass - def align(self: zbit_reader) -> t.CInt: pass - -def zdef_alloc(pool: memhub.MemManager | t.CPtr, n: t.CSizeT) -> VOIDPTR: pass - -def zdef_free(pool: memhub.MemManager | t.CPtr, p: VOIDPTR) -> t.CInt: pass diff --git a/Test/TestProject2/temp/285b6aa29a34754d.stub.ll.dep b/Test/TestProject2/temp/285b6aa29a34754d.stub.ll.dep deleted file mode 100644 index e69de29..0000000 diff --git a/Test/TestProject2/temp/285b6aa29a34754d.vpi b/Test/TestProject2/temp/285b6aa29a34754d.vpi deleted file mode 100644 index acc57c7..0000000 --- a/Test/TestProject2/temp/285b6aa29a34754d.vpi +++ /dev/null @@ -1,23 +0,0 @@ -""" -Auto-generated Python stub file from stdio.vp -Module: stdio -""" - - -import t, c - -def printf(fmt: t.CConst | str, *args) -> int | t.State: pass - -def fprintf(stream: bytes, fmt: t.CConst | str, *args) -> int | t.State: pass - -def sprintf(buf: bytes, fmt: t.CConst | str, *args) -> int | t.State: pass - -def snprintf(buf: bytes, size: t.CSizeT, fmt: t.CConst | str, *args) -> int | t.State: pass - -def puts(s: t.CConst | str) -> int | t.State: pass - -def fputs(s: t.CConst | str, stream: bytes) -> int | t.State: pass - -def fgets(buf: bytes, size: int, stream: bytes) -> bytes | t.State: pass - -def fflush(stream: bytes) -> int | t.State: pass diff --git a/Test/TestProject2/temp/3e775aa83705b119.stub.ll.dep b/Test/TestProject2/temp/3e775aa83705b119.stub.ll.dep deleted file mode 100644 index 95be735..0000000 --- a/Test/TestProject2/temp/3e775aa83705b119.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -04e5fe47ff2af528|1f6617c02fc8899d|285b6aa29a34754d|451745df21e598af|6c658cc728d0bbf4|8ebed83a7817fa0c|90921d009fdd674c|928c0ff6d8c69ec9|aa246c6e6aa30484|c9f4be41ca1cc2b4|d541ade6afb689a5|f5522571bcce7bcb \ No newline at end of file diff --git a/Test/TestProject2/temp/3e775aa83705b119.vpi b/Test/TestProject2/temp/3e775aa83705b119.vpi deleted file mode 100644 index 9e27d7b..0000000 --- a/Test/TestProject2/temp/3e775aa83705b119.vpi +++ /dev/null @@ -1,125 +0,0 @@ -""" -Auto-generated Python stub file from zlib.pyzlib.vp -Module: zlib.pyzlib -""" - - -from stdint import * -import zlib.zdeflate as zdeflate -import zlib.zinflate as zinflate -import zlib.zchecksum as zchecksum -import zlib.zdef as zdef -import zlib.zhuff as zhuff -import stdlib -import string -import memhub -import t, c - -Z_NO_COMPRESSION: t.CDefine = 0 -Z_BEST_SPEED: t.CDefine = 1 -Z_BEST_COMPRESSION: t.CDefine = 9 -Z_DEFAULT_COMPRESSION: t.CDefine = (-1) -DEFLATED: t.CDefine = 8 -Z_NO_FLUSH: t.CDefine = 0 -Z_PARTIAL_FLUSH: t.CDefine = 1 -Z_SYNC_FLUSH: t.CDefine = 2 -Z_FULL_FLUSH: t.CDefine = 3 -Z_FINISH: t.CDefine = 4 -Z_BLOCK: t.CDefine = 5 -Z_TREES: t.CDefine = 6 -Z_DEFAULT_STRATEGY: t.CDefine = 0 -Z_FILTERED: t.CDefine = 1 -Z_HUFFMAN_ONLY: t.CDefine = 2 -Z_RLE: t.CDefine = 3 -Z_FIXED: t.CDefine = 4 -Z_OK: t.CDefine = 0 -Z_STREAM_END: t.CDefine = 1 -Z_NEED_DICT: t.CDefine = 2 -Z_ERRNO: t.CDefine = (-1) -Z_STREAM_ERROR: t.CDefine = (-2) -Z_DATA_ERROR: t.CDefine = (-3) -Z_MEM_ERROR: t.CDefine = (-4) -Z_BUF_ERROR: t.CDefine = (-5) -Z_VERSION_ERROR: t.CDefine = (-6) -MAX_WBITS: t.CDefine = 15 -DEF_BUF_SIZE: t.CDefine = 16384 -DEF_MEM_LEVEL: t.CDefine = 8 -ZLIB_VERSION: t.CDefine = "1.3.2" -pyzlib_error_msg: t.CExtern | t.CArray[t.CChar, 512] -pyzlib_error_code_val: t.CExtern | t.CInt - -@t.Object -class Compress: - pool: memhub.MemManager | t.CPtr - stream: VOIDPTR - is_initialized: t.CInt - is_finished: t.CInt - level: t.CInt - method: t.CInt - wbits: t.CInt - memLevel: t.CInt - strategy: t.CInt - zdict: BYTEPTR - zdict_len: t.CSizeT - last_pos: t.CSizeT - input_buf: BYTEPTR - input_buf_len: t.CSizeT - input_buf_cap: t.CSizeT - header_written: t.CInt - def compress(self: Compress, data: BYTEPTR, data_len: t.CSizeT, out_len: t.CSizeT | t.CPtr) -> BYTEPTR: pass - def flush(self: Compress, mode: t.CInt, out_len: t.CSizeT | t.CPtr) -> BYTEPTR: pass - def copy(self: Compress) -> Compress | t.CPtr: pass - def delete(self: Compress) -> t.CInt: pass - def __del__(self: Compress) -> t.CInt: pass -@t.Object -class Decompress: - pool: memhub.MemManager | t.CPtr - stream: VOIDPTR - is_initialized: t.CInt - eof: t.CInt - wbits: t.CInt - zdict: BYTEPTR - zdict_len: t.CSizeT - _unused_data: BYTEPTR - _unused_data_len: t.CSizeT - _unused_data_cap: t.CSizeT - _unconsumed_tail: BYTEPTR - _unconsumed_tail_len: t.CSizeT - _unconsumed_tail_cap: t.CSizeT - input_buf: BYTEPTR - input_buf_len: t.CSizeT - input_buf_cap: t.CSizeT - def decompress(self: Decompress, data: BYTEPTR, data_len: t.CSizeT, max_length: t.CSizeT, out_len: t.CSizeT | t.CPtr) -> BYTEPTR: pass - def flush(self: Decompress, length: t.CSizeT, out_len: t.CSizeT | t.CPtr) -> BYTEPTR: pass - def copy(self: Decompress) -> Decompress | t.CPtr: pass - def delete(self: Decompress) -> t.CInt: pass - def unused_data(self: Decompress, length: t.CSizeT | t.CPtr) -> BYTEPTR: pass - def unconsumed_tail(self: Decompress, length: t.CSizeT | t.CPtr) -> BYTEPTR: pass - -def set_error(code: int, msg: str) -> t.CInt: pass - -def clone_bytes(pool: memhub.MemManager | t.CPtr, src: BYTEPTR, length: t.CSizeT) -> BYTEPTR: pass - -def append_bytes(pool: memhub.MemManager | t.CPtr, buf: BYTE | t.CPtr[t.CPtr], length: t.CSizeT | t.CPtr, cap: t.CSizeT | t.CPtr, data: BYTEPTR, data_len: t.CSizeT) -> t.CInt: pass - -def shrink_to_fit(pool: memhub.MemManager | t.CPtr, buf: BYTEPTR, length: t.CSizeT) -> BYTEPTR: pass - -def runtime_version() -> str: pass - -def get_error() -> str: pass - -def get_error_code() -> t.CInt: pass - -def clear_error() -> t.CInt: pass - -def compress(pool: memhub.MemManager | t.CPtr, data: BYTEPTR, data_len: t.CSizeT, level: t.CInt, wbits: t.CInt, out_len: t.CSizeT | t.CPtr) -> BYTEPTR: pass - -def decompress(pool: memhub.MemManager | t.CPtr, data: BYTEPTR, data_len: t.CSizeT, wbits: t.CInt, bufsize: t.CSizeT, out_len: t.CSizeT | t.CPtr) -> BYTEPTR: pass - -def compressobj(pool: memhub.MemManager | t.CPtr, level: t.CInt, method: t.CInt, wbits: t.CInt, memLevel: t.CInt, strategy: t.CInt, zdict: BYTEPTR, zdict_len: t.CSizeT) -> Compress | t.CPtr: pass - -def decompressobj(pool: memhub.MemManager | t.CPtr, wbits: t.CInt, zdict: BYTEPTR, zdict_len: t.CSizeT) -> Decompress | t.CPtr: pass - -def zlib_adler32(data: BYTEPTR, length: t.CSizeT, value: t.CUnsignedLong) -> t.CUnsignedLong: pass - -def zlib_crc32(data: BYTEPTR, length: t.CSizeT, value: t.CUnsignedLong) -> t.CUnsignedLong: pass diff --git a/Test/TestProject2/temp/451745df21e598af.stub.ll.dep b/Test/TestProject2/temp/451745df21e598af.stub.ll.dep deleted file mode 100644 index afe33f9..0000000 --- a/Test/TestProject2/temp/451745df21e598af.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -04e5fe47ff2af528|1f6617c02fc8899d|285b6aa29a34754d|6c658cc728d0bbf4|8ebed83a7817fa0c|928c0ff6d8c69ec9|aa246c6e6aa30484|c9f4be41ca1cc2b4|d541ade6afb689a5|f5522571bcce7bcb \ No newline at end of file diff --git a/Test/TestProject2/temp/451745df21e598af.vpi b/Test/TestProject2/temp/451745df21e598af.vpi deleted file mode 100644 index 7ca1cde..0000000 --- a/Test/TestProject2/temp/451745df21e598af.vpi +++ /dev/null @@ -1,52 +0,0 @@ -""" -Auto-generated Python stub file from zlib.zinflate.vp -Module: zlib.zinflate -""" - - -from stdint import * -import zlib.zchecksum as zchecksum -import zlib.zdef as zdef -import zlib.zhuff as zhuff -import string -import memhub -import t, c - -@t.Object -class zinflate_stream: - pool: memhub.MemManager | t.CPtr - reader: zdef.zbit_reader - window: BYTEPTR - window_pos: t.CInt - window_size: t.CInt - wbits: t.CInt - is_finished: t.CInt - is_initialized: t.CInt - header_parsed: t.CInt - is_gzip: t.CInt - adler: t.CUInt32T - crc: t.CUInt32T - output: BYTEPTR - output_len: t.CSizeT - output_cap: t.CSizeT - input_data: t.CConst | BYTEPTR - input_len: t.CSizeT - input_pos: t.CSizeT - max_length: t.CSizeT - def __init__(self: zinflate_stream) -> t.CInt: pass - def output_byte(self: zinflate_stream, byte: BYTE) -> t.CInt: pass - def parse_header(self: zinflate_stream) -> t.CInt: pass - def read_bits_from_input(self: zinflate_stream, nbits: t.CInt, out: UINTPTR) -> t.CInt: pass - def read_huffman(self: zinflate_stream, dt: zhuff.zhuff_decode_tree | t.CPtr) -> t.CInt: pass - def inflate_block_stored(self: zinflate_stream) -> t.CInt: pass - def inflate_block_fixed(self: zinflate_stream) -> t.CInt: pass - def inflate_block_dynamic(self: zinflate_stream) -> t.CInt: pass - def inflate_stream(self: zinflate_stream) -> t.CInt: pass - def decompress(self: zinflate_stream, data: UINT8PTR, length: t.CSizeT, max_length: t.CSizeT, out: t.CUInt8T | t.CPtr[t.CPtr], out_len: t.CSizeT | t.CPtr) -> t.CInt: pass - def set_dictionary(self: zinflate_stream, dict: UINT8PTR, length: t.CSizeT) -> t.CInt: pass - def copy(self: zinflate_stream) -> zinflate_stream | t.CPtr: pass - def destroy(self: zinflate_stream) -> t.CInt: pass - -def zinflate_one_shot(pool: memhub.MemManager | t.CPtr, data: UINT8PTR, length: t.CSizeT, wbits: t.CInt, bufsize: t.CSizeT, out_len: t.CSizeT | t.CPtr) -> t.CUInt8T | t.CPtr: pass - -def zinflate_create(pool: memhub.MemManager | t.CPtr, wbits: t.CInt) -> zinflate_stream | t.CPtr: pass diff --git a/Test/TestProject2/temp/541a1ed9b8be53c8.doc.json b/Test/TestProject2/temp/541a1ed9b8be53c8.doc.json deleted file mode 100644 index 9e26dfe..0000000 --- a/Test/TestProject2/temp/541a1ed9b8be53c8.doc.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/Test/TestProject2/temp/541a1ed9b8be53c8.vpi b/Test/TestProject2/temp/541a1ed9b8be53c8.vpi deleted file mode 100644 index 7261d93..0000000 --- a/Test/TestProject2/temp/541a1ed9b8be53c8.vpi +++ /dev/null @@ -1,16 +0,0 @@ -""" -Auto-generated Python stub file from main.vp -Module: main -""" - - -from stdint import * -import w32.win32console -import config -import hashlib -import binascii -import zlib.pyzlib as zp -import t, c -import testcheck - -def main() -> t.CInt | t.CExport: pass diff --git a/Test/TestProject2/temp/6446627d4f07a1b5.vpi b/Test/TestProject2/temp/6446627d4f07a1b5.vpi deleted file mode 100644 index 55f6a1f..0000000 --- a/Test/TestProject2/temp/6446627d4f07a1b5.vpi +++ /dev/null @@ -1,86 +0,0 @@ -""" -Auto-generated Python stub file from w32.winsock2.vp -Module: w32.winsock2 -""" - - -import t, c -from stdint import * -from w32.win32base import * - -WINSOCK_VERSION: t.CDefine = 0x0202 # 2.2 -AF_INET: t.CDefine = 2 -AF_INET6: t.CDefine = 23 -SOCK_STREAM: t.CDefine = 1 # TCP -SOCK_DGRAM: t.CDefine = 2 # UDP -SOCK_RAW: t.CDefine = 3 # 原始套接字 -IPPROTO_TCP: t.CDefine = 6 -IPPROTO_UDP: t.CDefine = 17 -SOL_SOCKET: t.CDefine = 0xFFFF # WinSock2 值 -SO_RCVTIMEO: t.CDefine = 0x1006 # WinSock2 值 -SO_SNDTIMEO: t.CDefine = 0x1005 # WinSock2 值 -SO_REUSEADDR: t.CDefine = 0x0004 # WinSock2 值 -INADDR_ANY: t.CDefine = 0 -SOCKET_ERROR: t.CDefine = -1 -INVALID_SOCKET: t.CDefine = 0xFFFFFFFF # WinSock2: ~0 -MSG_NOSIGNAL: t.CDefine = 0 # Windows 不支持,设为 0 -SD_SEND: t.CDefine = 1 -SD_RECV: t.CDefine = 0 -SD_BOTH: t.CDefine = 2 - -class WSASocketAddr: - family: u16 - port: u16 - addr: u32 - zero: u64 -class WSAData: - wVersion: WORD - wHighVersion: WORD - szDescription: BYTE - szSystemStatus: BYTE - iMaxSockets: u16 - iMaxUdpDg: u16 - lpVendorInfo: CHARPTR -class WSAHostEnt: - h_name: CHARPTR - h_aliases: CHARPTR - h_addrtype: SHORT - h_length: SHORT - h_addr_list: CHARPTR -class WinTimeVal: - tv_sec: LONG - tv_usec: LONG - -def WSAStartup(wVersionRequested: WORD, lpWSAData: WSAData | t.CPtr) -> INT | t.State: pass - -def WSACleanup() -> INT | t.State: pass - -def WSAGetLastError() -> INT | t.State: pass - -def socket(family: INT, type: INT, protocol: INT) -> u64 | t.State: pass - -def closesocket(s: u64) -> INT | t.State: pass - -def connect(s: u64, name: WSASocketAddr | t.CPtr, namelen: INT) -> INT | t.State: pass - -def send(s: u64, buf: t.CVoid | t.CPtr, len: INT, flags: INT) -> INT | t.State: pass - -def recv(s: u64, buf: t.CVoid | t.CPtr, len: INT, flags: INT) -> INT | t.State: pass - -def bind(s: u64, name: WSASocketAddr | t.CPtr, namelen: INT) -> INT | t.State: pass - -def listen(s: u64, backlog: INT) -> INT | t.State: pass - -def accept(s: u64, addr: WSASocketAddr | t.CPtr, addrlen: INT | t.CPtr) -> u64 | t.State: pass - -def setsockopt(s: u64, level: INT, optname: INT, optval: t.CVoid | t.CPtr, optlen: INT) -> INT | t.State: pass - -def shutdown(s: u64, how: INT) -> INT | t.State: pass - -def gethostbyname(name: t.CChar | t.CConst | t.CPtr) -> WSAHostEnt | t.CPtr | t.State: pass - -def ntohs(netshort: u16) -> u16 | t.State: pass - -def htons(hostshort: u16) -> u16 | t.State: pass - -def inet_addr(cp: t.CChar | t.CConst | t.CPtr) -> u32 | t.State: pass diff --git a/Test/TestProject2/temp/6c658cc728d0bbf4.stub.ll.dep b/Test/TestProject2/temp/6c658cc728d0bbf4.stub.ll.dep deleted file mode 100644 index 793e7ed..0000000 --- a/Test/TestProject2/temp/6c658cc728d0bbf4.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -f5522571bcce7bcb \ No newline at end of file diff --git a/Test/TestProject2/temp/6c658cc728d0bbf4.vpi b/Test/TestProject2/temp/6c658cc728d0bbf4.vpi deleted file mode 100644 index d7c42cf..0000000 --- a/Test/TestProject2/temp/6c658cc728d0bbf4.vpi +++ /dev/null @@ -1,22 +0,0 @@ -""" -Auto-generated Python stub file from stdlib.vp -Module: stdlib -""" - -import c - - -from stdint import * -import t - -def malloc(size: t.CSizeT) -> t.CVoid | t.CPtr | t.State: pass - -def calloc(nmemb: t.CSizeT, size: t.CSizeT) -> t.CVoid | t.CPtr | t.State: pass - -def realloc(p: t.CVoid | t.CPtr, size: t.CSizeT) -> t.CVoid | t.CPtr | t.State: pass - -def free(p: t.CVoid | t.CPtr) -> t.State: pass - -def system(cmd: t.CConst | t.CChar | t.CPtr) -> INT | t.State: pass - -def exit(status: int) -> t.State: pass diff --git a/Test/TestProject2/temp/6ff26590374ae6fc.stub.ll.dep b/Test/TestProject2/temp/6ff26590374ae6fc.stub.ll.dep deleted file mode 100644 index e69de29..0000000 diff --git a/Test/TestProject2/temp/6ff26590374ae6fc.vpi b/Test/TestProject2/temp/6ff26590374ae6fc.vpi deleted file mode 100644 index a9fa7be..0000000 --- a/Test/TestProject2/temp/6ff26590374ae6fc.vpi +++ /dev/null @@ -1,39 +0,0 @@ -""" -Auto-generated Python stub file from hashlib.__sha512.vp -Module: hashlib.__sha512 -""" - - -import t, c - -SHA512_BLOCK_LEN: t.CDefine = 128 -SHA512_DIGEST_LEN: t.CDefine = 64 - -def sha512_ror(x: t.CUInt64T, n: int) -> t.CUInt64T: pass - -def sha512_shr(x: t.CUInt64T, n: int) -> t.CUInt64T: pass - -def sha512_Ch(x: t.CUInt64T, y: t.CUInt64T, z: t.CUInt64T) -> t.CUInt64T: pass - -def sha512_Maj(x: t.CUInt64T, y: t.CUInt64T, z: t.CUInt64T) -> t.CUInt64T: pass - -def sha512_BigSigma0(x: t.CUInt64T) -> t.CUInt64T: pass - -def sha512_BigSigma1(x: t.CUInt64T) -> t.CUInt64T: pass - -def sha512_Sigma0(x: t.CUInt64T) -> t.CUInt64T: pass - -def sha512_Sigma1(x: t.CUInt64T) -> t.CUInt64T: pass - - -sha512_K: t.CExtern | t.CArray[t.CUInt64T, 80] - -@t.Object -class sha512: - state: t.CArray[t.CUInt64T, 8] - count: t.CArray[t.CUInt64T, 2] - buf: t.CArray[t.CUInt8T, SHA512_BLOCK_LEN] - def __init__(self: sha512) -> t.CInt: pass - def transform(self: sha512, block: t.CArray[t.CUInt8T, SHA512_BLOCK_LEN]) -> t.CInt: pass - def update(self: sha512, s: str) -> t.CInt: pass - def final(self: sha512, out: t.CArray[t.CUInt8T, SHA512_DIGEST_LEN]) -> t.CInt: pass \ No newline at end of file diff --git a/Test/TestProject2/temp/72e2d5ccb7cedcf1.vpi b/Test/TestProject2/temp/72e2d5ccb7cedcf1.vpi deleted file mode 100644 index f85ee45..0000000 --- a/Test/TestProject2/temp/72e2d5ccb7cedcf1.vpi +++ /dev/null @@ -1,91 +0,0 @@ -""" -Auto-generated Python stub file from w32.win32memory.vp -Module: w32.win32memory -""" - -import c - - -import t -from stdint import * -from w32.win32base import * - -MEM_COMMIT: t.CDefine = 0x00001000 -MEM_RESERVE: t.CDefine = 0x00002000 -MEM_DECOMMIT: t.CDefine = 0x00004000 -MEM_RELEASE: t.CDefine = 0x00008000 -MEM_FREE: t.CDefine = 0x00010000 -MEM_RESET: t.CDefine = 0x00080000 -MEM_TOP_DOWN: t.CDefine = 0x00100000 -MEM_WRITE_WATCH: t.CDefine = 0x00200000 -MEM_PHYSICAL: t.CDefine = 0x00400000 -MEM_LARGE_PAGES: t.CDefine = 0x20000000 -PAGE_NOACCESS: t.CDefine = 0x01 -PAGE_READONLY: t.CDefine = 0x02 -PAGE_READWRITE: t.CDefine = 0x04 -PAGE_WRITECOPY: t.CDefine = 0x08 -PAGE_EXECUTE: t.CDefine = 0x10 -PAGE_EXECUTE_READ: t.CDefine = 0x20 -PAGE_EXECUTE_READWRITE: t.CDefine = 0x40 -PAGE_EXECUTE_WRITECOPY: t.CDefine = 0x80 -PAGE_GUARD: t.CDefine = 0x100 -PAGE_NOCACHE: t.CDefine = 0x200 -PAGE_WRITECOMBINE: t.CDefine = 0x400 -HEAP_NO_SERIALIZE: t.CDefine = 0x00000001 -HEAP_GROWABLE: t.CDefine = 0x00000002 -HEAP_GENERATE_EXCEPTIONS: t.CDefine = 0x00000004 -HEAP_ZERO_MEMORY: t.CDefine = 0x00000008 -HEAP_REALLOC_IN_PLACE_ONLY: t.CDefine = 0x00000010 - -class MEMORY_BASIC_INFORMATION: - BaseAddress: VOIDPTR - AllocationBase: VOIDPTR - AllocationProtect: ULONG - RegionSize: t.CSizeT - State: ULONG - Protect: ULONG - Type: ULONG - -def VirtualAlloc(lpAddress: VOIDPTR, dwSize: t.CSizeT, flAllocationType: ULONG, flProtect: ULONG) -> VOIDPTR | t.State: pass - -def VirtualFree(lpAddress: VOIDPTR, dwSize: t.CSizeT, dwFreeType: ULONG) -> BOOL | t.State: pass - -def VirtualProtect(lpAddress: VOIDPTR, dwSize: t.CSizeT, flNewProtect: ULONG, lpflOldProtect: ULONG | t.CPtr) -> BOOL | t.State: pass - -def VirtualQuery(lpAddress: t.CConst | VOIDPTR, lpBuffer: MEMORY_BASIC_INFORMATION | t.CPtr, dwLength: t.CSizeT) -> t.CSizeT | t.State: pass - -def VirtualLock(lpAddress: VOIDPTR, dwSize: t.CSizeT) -> BOOL | t.State: pass - -def VirtualUnlock(lpAddress: VOIDPTR, dwSize: t.CSizeT) -> BOOL | t.State: pass - -def GetProcessHeap() -> HANDLE | t.State: pass - -def HeapCreate(flOptions: ULONG, dwInitialSize: t.CSizeT, dwMaximumSize: t.CSizeT) -> HANDLE | t.State: pass - -def HeapDestroy(hHeap: HANDLE) -> BOOL | t.State: pass - -def HeapAlloc(hHeap: HANDLE, dwFlags: ULONG, dwBytes: t.CSizeT) -> VOIDPTR | t.State: pass - -def HeapReAlloc(hHeap: HANDLE, dwFlags: ULONG, lpMem: VOIDPTR, dwBytes: t.CSizeT) -> VOIDPTR | t.State: pass - -def HeapFree(hHeap: HANDLE, dwFlags: ULONG, lpMem: VOIDPTR) -> BOOL | t.State: pass - -def HeapSize(hHeap: HANDLE, dwFlags: ULONG, lpMem: t.CConst | VOIDPTR) -> t.CSizeT | t.State: pass - -def HeapValidate(hHeap: HANDLE, dwFlags: ULONG, lpMem: t.CConst | VOIDPTR) -> BOOL | t.State: pass - -def HeapCompact(hHeap: HANDLE, dwFlags: ULONG) -> t.CSizeT | t.State: pass - -def GlobalAlloc(uFlags: UINT, dwBytes: t.CSizeT) -> VOIDPTR | t.State: pass - -def GlobalFree(hMem: VOIDPTR) -> VOIDPTR | t.State: pass - -def GlobalLock(hMem: VOIDPTR) -> VOIDPTR | t.State: pass - -def GlobalUnlock(hMem: VOIDPTR) -> BOOL | t.State: pass - -def GlobalSize(hMem: VOIDPTR) -> t.CSizeT | t.State: pass - -def LocalAlloc(uFlags: UINT, dwBytes: t.CSizeT) -> VOIDPTR | t.State: pass - -def LocalFree(hMem: VOIDPTR) -> VOIDPTR | t.State: pass diff --git a/Test/TestProject2/temp/748d0424e8976fa0.stub.ll.dep b/Test/TestProject2/temp/748d0424e8976fa0.stub.ll.dep deleted file mode 100644 index be4eebc..0000000 --- a/Test/TestProject2/temp/748d0424e8976fa0.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -285b6aa29a34754d|bbdf3bbd4c3bc28c|f5522571bcce7bcb|fc980acec33d69a7 \ No newline at end of file diff --git a/Test/TestProject2/temp/748d0424e8976fa0.vpi b/Test/TestProject2/temp/748d0424e8976fa0.vpi deleted file mode 100644 index 5ff4850..0000000 --- a/Test/TestProject2/temp/748d0424e8976fa0.vpi +++ /dev/null @@ -1,31 +0,0 @@ -""" -Auto-generated Python stub file from testcheck.vp -Module: testcheck -""" - - -import t, c -import stdio -from w32.win32console import SetConsoleOutputCP, SetConsoleCP - -CP_UTF8: t.CDefine = 65001 -_pass_count: t.CExtern | t.CInt -_fail_count: t.CExtern | t.CInt -_total_pass: t.CExtern | t.CInt -_total_fail: t.CExtern | t.CInt - -def begin(name: str) -> t.CInt: pass - -def section(name: str) -> t.CInt: pass - -def ok(msg: str) -> t.CInt: pass - -def fail(msg: str) -> t.CInt: pass - -def check(cond: t.CInt, ok_msg: str, fail_msg: str) -> t.CInt: pass - -def info(msg: str) -> t.CInt: pass - -def end() -> t.CInt: pass - -def summary() -> t.CInt: pass diff --git a/Test/TestProject2/temp/8ebed83a7817fa0c.stub.ll.dep b/Test/TestProject2/temp/8ebed83a7817fa0c.stub.ll.dep deleted file mode 100644 index 793e7ed..0000000 --- a/Test/TestProject2/temp/8ebed83a7817fa0c.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -f5522571bcce7bcb \ No newline at end of file diff --git a/Test/TestProject2/temp/8ebed83a7817fa0c.vpi b/Test/TestProject2/temp/8ebed83a7817fa0c.vpi deleted file mode 100644 index 075933e..0000000 --- a/Test/TestProject2/temp/8ebed83a7817fa0c.vpi +++ /dev/null @@ -1,15 +0,0 @@ -""" -Auto-generated Python stub file from zlib.zchecksum.vp -Module: zlib.zchecksum -""" - - -from stdint import * -import t, c - -def zchecksum_adler32(data: UINT8PTR, length: t.CSizeT, init: UINT32) -> t.CUInt32T: pass - - -crc32_table: t.CExtern | t.CArray[t.CUInt32T, 256] - -def zchecksum_crc32(data: UINT8PTR, length: t.CSizeT, init: t.CUInt32T) -> t.CUInt32T: pass diff --git a/Test/TestProject2/temp/90921d009fdd674c.stub.ll.dep b/Test/TestProject2/temp/90921d009fdd674c.stub.ll.dep deleted file mode 100644 index afe33f9..0000000 --- a/Test/TestProject2/temp/90921d009fdd674c.stub.ll.dep +++ /dev/null @@ -1 +0,0 @@ -04e5fe47ff2af528|1f6617c02fc8899d|285b6aa29a34754d|6c658cc728d0bbf4|8ebed83a7817fa0c|928c0ff6d8c69ec9|aa246c6e6aa30484|c9f4be41ca1cc2b4|d541ade6afb689a5|f5522571bcce7bcb \ No newline at end of file diff --git a/Test/TestProject2/temp/90921d009fdd674c.vpi b/Test/TestProject2/temp/90921d009fdd674c.vpi deleted file mode 100644 index 185bb63..0000000 --- a/Test/TestProject2/temp/90921d009fdd674c.vpi +++ /dev/null @@ -1,56 +0,0 @@ -""" -Auto-generated Python stub file from zlib.zdeflate.vp -Module: zlib.zdeflate -""" - - -from stdint import * -import zlib.zchecksum as zchecksum -import zlib.zhuff as zhuff -import zlib.zdef as zdef -import string -import memhub -import t, c - -@t.Object -class zdeflate_stream: - pool: memhub.MemManager | t.CPtr - writer: zdef.zbit_writer - window: BYTE | t.CPtr - window_pos: t.CInt - window_size: t.CInt - hash_head: t.CInt | t.CPtr - hash_prev: t.CInt | t.CPtr - level: t.CInt - strategy: t.CInt - wbits: t.CInt - is_finished: t.CInt - adler: t.CUInt32T - def find_match(self: zdeflate_stream, data: BYTE | t.CPtr, data_len: t.CSizeT, pos: t.CSizeT, best_dist: t.CInt | t.CPtr) -> t.CInt: pass - def update_hash(self: zdeflate_stream, data: BYTE | t.CPtr, pos: t.CSizeT) -> t.CInt: pass - def write_fixed_block(self: zdeflate_stream, data: UINT8PTR, length: t.CSizeT, final: t.CInt) -> t.CInt: pass - def encode_block_data(self: zdeflate_stream, data: UINT8PTR, length: t.CSizeT, lit_tree: zhuff.zhuff_tree | t.CPtr, dist_tree: zhuff.zhuff_tree | t.CPtr) -> t.CInt: pass - def write_dynamic_block(self: zdeflate_stream, data: UINT8PTR, length: t.CSizeT, final: t.CInt) -> t.CInt: pass - def compress_block(self: zdeflate_stream, data: UINT8PTR, length: t.CSizeT, final: t.CInt) -> t.CInt: pass - def write_stored_block(self: zdeflate_stream, data: UINT8PTR, length: t.CSizeT, final: t.CInt) -> t.CInt: pass - def compress(self: zdeflate_stream, data: UINT8PTR, length: t.CSizeT, out: t.CUInt8T | t.CPtr[t.CPtr], out_len: t.CSizeT | t.CPtr) -> t.CInt: pass - def flush(self: zdeflate_stream, mode: t.CInt, out: t.CUInt8T | t.CPtr[t.CPtr], out_len: t.CSizeT | t.CPtr) -> t.CInt: pass - def set_dictionary(self: zdeflate_stream, dict: UINT8PTR, length: t.CSizeT) -> t.CInt: pass - def copy(self: zdeflate_stream) -> zdeflate_stream | t.CPtr: pass - def destroy(self: zdeflate_stream) -> t.CInt: pass - -def zdeflate_count_freqs(lit_freqs: INTPTR, dist_freqs: INTPTR, s: zdeflate_stream | t.CPtr, data: UINT8PTR, length: t.CSizeT) -> t.CInt: pass - -def zdeflate_hash(p: BYTE | t.CPtr) -> t.CUnsignedInt: pass - -def zdeflate_len_to_symbol(length: t.CInt) -> t.CInt: pass - -def zdeflate_dist_to_symbol(dist: t.CInt) -> t.CInt: pass - -def zdeflate_count_cl_freqs(all_lengths: INTPTR, total: t.CInt, cl_freqs: INTPTR) -> t.CInt: pass - -def zdeflate_write_cl_encoded(all_lengths: INTPTR, total: t.CInt, w: zdef.zbit_writer | t.CPtr, cl_tree: zhuff.zhuff_tree | t.CPtr) -> t.CInt: pass - -def zdeflate_create(pool: memhub.MemManager | t.CPtr, level: t.CInt, wbits: t.CInt, mem_level: t.CInt, strategy: t.CInt) -> zdeflate_stream | t.CPtr: pass - -def zdeflate_one_shot(pool: memhub.MemManager | t.CPtr, data: UINT8PTR, length: t.CSizeT, level: t.CInt, wbits: t.CInt, out_len: t.CSizeT | t.CPtr) -> t.CUInt8T | t.CPtr: pass diff --git a/Test/TestProject2/temp/96837bcc64032444.stub.ll.dep b/Test/TestProject2/temp/96837bcc64032444.stub.ll.dep deleted file mode 100644 index e69de29..0000000 diff --git a/Test/TestProject2/temp/96837bcc64032444.vpi b/Test/TestProject2/temp/96837bcc64032444.vpi deleted file mode 100644 index c81f78b..0000000 --- a/Test/TestProject2/temp/96837bcc64032444.vpi +++ /dev/null @@ -1,13 +0,0 @@ -""" -Auto-generated Python stub file from hashlib.__init__.vp -Module: hashlib.__init__ -""" - -import t -import c - - -from .__md5 import md5, MD5_DIGEST_LEN -from .__sha1 import sha1, SHA1_DIGEST_LEN -from .__sha256 import sha256, SHA256_DIGEST_LEN -from .__sha512 import sha512, SHA512_DIGEST_LEN \ No newline at end of file diff --git a/Test/TestProject2/temp/_phase1_manifest.json b/Test/TestProject2/temp/_phase1_manifest.json deleted file mode 100644 index 3ba8ce4..0000000 --- a/Test/TestProject2/temp/_phase1_manifest.json +++ /dev/null @@ -1 +0,0 @@ -{"d:\\Users\\TermiNexus\\Desktop\\TransPyC\\Test\\TestProject2\\App\\main.vp": {"sha1": "541a1ed9b8be53c8", "mtime": 1782266206.092594, "size": 881}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\Test\\TestProject2\\App\\zc\\config.vp": {"sha1": "cfc83b830141b00e", "mtime": 1778402243.1661563, "size": 531}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\atom.vp": {"sha1": "aa246c6e6aa30484", "mtime": 1785389628.701967, "size": 1198}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\binascii.vp": {"sha1": "d3917d97537f703c", "mtime": 1785777664.9648058, "size": 14946}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\hashlib\\__init__.vp": {"sha1": "96837bcc64032444", "mtime": 1777902641.540433, "size": 186}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\hashlib\\__md5.vp": {"sha1": "19f8024d10c828e8", "mtime": 1784356818.7075372, "size": 5847}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\hashlib\\__sha1.vp": {"sha1": "0df65b8ed15664b0", "mtime": 1784356827.656474, "size": 4516}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\hashlib\\__sha256.vp": {"sha1": "c9d54a4158f7f5a8", "mtime": 1782266203.9352357, "size": 5332}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\hashlib\\__sha512.vp": {"sha1": "6ff26590374ae6fc", "mtime": 1782266223.3380039, "size": 7162}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\memhub.vp": {"sha1": "04e5fe47ff2af528", "mtime": 1786093335.1900027, "size": 27855}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\stdint.vp": {"sha1": "f5522571bcce7bcb", "mtime": 1785563642.3805652, "size": 4356}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\stdio.vp": {"sha1": "285b6aa29a34754d", "mtime": 1785332415.1829746, "size": 561}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\stdlib.vp": {"sha1": "6c658cc728d0bbf4", "mtime": 1785750602.5446548, "size": 413}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\string.vp": {"sha1": "928c0ff6d8c69ec9", "mtime": 1786032947.9330952, "size": 11557}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\testcheck.vp": {"sha1": "748d0424e8976fa0", "mtime": 1785332415.20287, "size": 1919}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\viperio.vp": {"sha1": "c9f4be41ca1cc2b4", "mtime": 1782812279.506002, "size": 1556}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\win32base.vp": {"sha1": "fc980acec33d69a7", "mtime": 1785332415.2228394, "size": 2653}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\win32console.vp": {"sha1": "bbdf3bbd4c3bc28c", "mtime": 1781200703.5338137, "size": 5604}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\zlib\\pyzlib.vp": {"sha1": "3e775aa83705b119", "mtime": 1785894559.67875, "size": 26187}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\zlib\\zchecksum.vp": {"sha1": "8ebed83a7817fa0c", "mtime": 1782266235.9510274, "size": 4067}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\zlib\\zdef.vp": {"sha1": "1f6617c02fc8899d", "mtime": 1785894585.5916247, "size": 8577}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\zlib\\zdeflate.vp": {"sha1": "90921d009fdd674c", "mtime": 1783538197.82992, "size": 19061}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\zlib\\zhuff.vp": {"sha1": "d541ade6afb689a5", "mtime": 1782827037.897873, "size": 13495}, "d:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\zlib\\zinflate.vp": {"sha1": "451745df21e598af", "mtime": 1782827035.992862, "size": 18078}} \ No newline at end of file diff --git a/Test/TestProject2/temp/_sha1_map.txt b/Test/TestProject2/temp/_sha1_map.txt deleted file mode 100644 index 88b3741..0000000 --- a/Test/TestProject2/temp/_sha1_map.txt +++ /dev/null @@ -1,24 +0,0 @@ -04e5fe47ff2af528:includes/memhub.vp -0df65b8ed15664b0:includes/hashlib\__sha1.vp -19f8024d10c828e8:includes/hashlib\__md5.vp -1f6617c02fc8899d:includes/zlib\zdef.vp -285b6aa29a34754d:includes/stdio.vp -3e775aa83705b119:includes/zlib\pyzlib.vp -451745df21e598af:includes/zlib\zinflate.vp -541a1ed9b8be53c8:main.vp -6c658cc728d0bbf4:includes/stdlib.vp -6ff26590374ae6fc:includes/hashlib\__sha512.vp -748d0424e8976fa0:includes/testcheck.vp -8ebed83a7817fa0c:includes/zlib\zchecksum.vp -90921d009fdd674c:includes/zlib\zdeflate.vp -928c0ff6d8c69ec9:includes/string.vp -96837bcc64032444:includes/hashlib\__init__.vp -aa246c6e6aa30484:includes/atom.vp -bbdf3bbd4c3bc28c:includes/w32\win32console.vp -c9d54a4158f7f5a8:includes/hashlib\__sha256.vp -c9f4be41ca1cc2b4:includes/viperio.vp -cfc83b830141b00e:zc/config.vp -d3917d97537f703c:includes/binascii.vp -d541ade6afb689a5:includes/zlib\zhuff.vp -f5522571bcce7bcb:includes/stdint.vp -fc980acec33d69a7:includes/w32\win32base.vp diff --git a/Test/TestProject2/temp/_shared_sym.json b/Test/TestProject2/temp/_shared_sym.json deleted file mode 100644 index f56af1afde2d014de6b02dc44f41e6ecb31b8224..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 527038 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