Created
October 5, 2020 19:55
-
-
Save grayed/4257f05f399df44753a3619ce7d18101 to your computer and use it in GitHub Desktop.
running cheat.sh tests after POSIX sh tweaks under openbsd
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(tests) 22:22 0 pers@persx240:~/cvs/cheat.sh/tests$ bash run-tests.sh | |
run-tests.sh: строка 13: realpath: команда не найдена | |
Using PYTHON 3: /home/pers/cvs/cheat.sh/tests/bin/python3 | |
Using cht.sh client at ./share/cht.sh.txt | |
Running 1: python/:list | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py python/:list | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
--- results/1 Sat Oct 3 18:10:40 2020 | |
+++ /tmp/cht.sh.tests-3Jhh4cBrygrLXP Mon Oct 5 22:22:05 2020 | |
@@ -1,21 +1,2 @@ | |
-1_Inheritance | |
-1line | |
-2_Multiple_Inheritance | |
:learn | |
:list | |
-Advanced | |
-Classes | |
-Comments | |
-Control_Flow_and_Iterables | |
-Functions | |
-Modules | |
-Primitive_Datatypes_and_Operators | |
-Variables_and_Collections | |
-doc | |
-func | |
-hello | |
-lambda | |
-list_comprehension | |
-loops | |
-recursion | |
-rosetta/ | |
FAILED: [1] python/:list | |
Running 2: ls | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py ls | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
--- results/2 Sat Oct 3 18:10:40 2020 | |
+++ /tmp/cht.sh.tests-3Jhh4cBrygrLXP Mon Oct 5 22:22:06 2020 | |
@@ -1,17 +1,7 @@ | |
-# To display everything in <dir>, excluding hidden files: | |
-ls <dir> | |
+Unknown topic. | |
+Do you mean one of these topics maybe? | |
-# To display everything in <dir>, including hidden files: | |
-ls -a <dir> | |
- | |
-# To display all files, along with the size (with unit suffixes) and timestamp | |
-ls -lh <dir> | |
- | |
-# To display files, sorted by size: | |
-ls -S <dir> | |
- | |
-# To display directories only: | |
-ls -d */ <dir> | |
- | |
-# To display directories only, include hidden: | |
-ls -d .*/ */ <dir> | |
+ * c/:list 44 | |
+ * d/:list 44 | |
+ * r/:list 44 | |
+ | |
FAILED: [2] ls | |
Running 3: ls?T | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py ls?T | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
--- results/3 Sat Oct 3 18:10:40 2020 | |
+++ /tmp/cht.sh.tests-3Jhh4cBrygrLXP Mon Oct 5 22:22:07 2020 | |
@@ -1,17 +1,7 @@ | |
-# To display everything in <dir>, excluding hidden files: | |
-ls <dir> | |
+Unknown topic. | |
+Do you mean one of these topics maybe? | |
-# To display everything in <dir>, including hidden files: | |
-ls -a <dir> | |
- | |
-# To display all files, along with the size (with unit suffixes) and timestamp | |
-ls -lh <dir> | |
- | |
-# To display files, sorted by size: | |
-ls -S <dir> | |
- | |
-# To display directories only: | |
-ls -d */ <dir> | |
- | |
-# To display directories only, include hidden: | |
-ls -d .*/ */ <dir> | |
+ * c/:list 44 | |
+ * d/:list 44 | |
+ * r/:list 44 | |
+ | |
FAILED: [3] ls?T | |
Running 4: btrfs | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py btrfs | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
--- results/4 Sat Oct 3 18:10:40 2020 | |
+++ /tmp/cht.sh.tests-3Jhh4cBrygrLXP Mon Oct 5 22:22:08 2020 | |
@@ -1,54 +1,7 @@ | |
-# Create a btrfs file system on /dev/sdb, /dev/sdc, and /dev/sdd | |
-mkfs.btrfs /dev/sdb /dev/sdc /dev/sdd | |
+Unknown topic. | |
+Do you mean one of these topics maybe? | |
-# btrfs with just one hard drive, metadata not redundant | |
-# (this is dangerous: if your metadata is lost, your data is lost as well) | |
-mkfs.btrfs -m single /dev/sdb | |
- | |
-# data to be redundant and metadata to be non-redundant: | |
-mkfs.btrfs -m raid0 -d raid1 /dev/sdb /dev/sdc /dev/sdd | |
- | |
-# both data and metadata to be redundan | |
-mkfs.btrfs -d raid1 /dev/sdb /dev/sdc /dev/sdd | |
- | |
-# To get a list of all btrfs file systems | |
-btrfs filesystem show | |
- | |
-# detailed df for a fileesystem (mounted in /mnt) | |
-btrfs filesystem df /mnt | |
- | |
-# resize btrfs online (-2g decreases, +2g increases) | |
-btrfs filesystem resize -2g /mnt | |
- | |
-# use maximum space | |
-btrfs filesystem resize max /mnt | |
- | |
-# add new device to a filesystem | |
-btrfs device add /dev/sdf /mnt | |
- | |
-# remove devices from a filesystem | |
-btrfs device delete missing /mnt | |
- | |
-# create the subvolume /mnt/sv1 in the /mnt volume | |
-btrfs subvolume create /mnt/sv1 | |
- | |
-# list subvolumes | |
-btrfs subvolume list /mnt | |
- | |
-# mount subvolume without mounting the main filesystem | |
-mount -o subvol=sv1 /dev/sdb /mnt | |
- | |
-# delete subvolume | |
-btrfs subvolume delete /mnt/sv1 | |
- | |
-# taking snapshot of a subvolume | |
-btrfs subvolume snapshot /mnt/sv1 /mnt/sv1_snapshot | |
- | |
-# taking snapshot of a file (copy file by reference) | |
-cp --reflink /mnt/sv1/test1 /mnt/sv1/test3 | |
- | |
-# convert ext3/ext4 to btrfs | |
-btrfs-convert /dev/sdb1 | |
- | |
-# convert btrfs to ext3/ext4 | |
-btrfs-convert -r /dev/sdb1 | |
+ * bf/:list 46 | |
+ * rfc/1 40 | |
+ * rfc/2 40 | |
+ | |
FAILED: [4] btrfs | |
Running 5: btrfs~volume # search on page | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py btrfs~volume | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
--- results/5 Sat Oct 3 18:10:40 2020 | |
+++ /tmp/cht.sh.tests-3Jhh4cBrygrLXP Mon Oct 5 22:22:09 2020 | |
@@ -1,15 +1 @@ | |
- btrfs | |
-# create the subvolume /mnt/sv1 in the /mnt volume | |
-btrfs subvolume create /mnt/sv1 | |
-# list subvolumes | |
-btrfs subvolume list /mnt | |
- | |
-# mount subvolume without mounting the main filesystem | |
-mount -o subvol=sv1 /dev/sdb /mnt | |
- | |
-# delete subvolume | |
-btrfs subvolume delete /mnt/sv1 | |
- | |
-# taking snapshot of a subvolume | |
-btrfs subvolume snapshot /mnt/sv1 /mnt/sv1_snapshot | |
FAILED: [5] btrfs~volume | |
Running 6: :intro | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py :intro | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
Running 7: :help | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py :help | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
Running 8: :cht.sh | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py :cht.sh | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
Running 9: cht.sh python copy file # [online] | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py python copy file | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
Running 10: python/copy+file # [online] | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py python/copy+file | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
--- results/10 Sat Oct 3 18:10:40 2020 | |
+++ /tmp/cht.sh.tests-3Jhh4cBrygrLXP Mon Oct 5 22:22:20 2020 | |
@@ -1,16 +1,14 @@ | |
-# How do I copy a file in Python? | |
-# | |
-# shutil (http://docs.python.org/3/library/shutil.html) has many methods | |
-# you can use. One of which is: | |
+. | |
+ Are you offline? | |
+ _________________ | |
+ | | ___________ |o| Though it could be theoretically possible | |
+ | | ___________ | | to use cheat.sh fully offline, | |
+ | | ___________ | | and for *the programming languages questions* too, | |
+ | | ___________ | | this very feature is not yet implemented. | |
+ | |_____________| | | |
+ | _______ | If you find it useful, please visit | |
+ | | | || https://github.com/chubin/issues/140 | |
+ | DD | | V| and drop a couple of lines to encourage | |
+ |____|_______|____| the authors to develop it as soon as possible | |
-from shutil import copyfile | |
- | |
-copyfile(src, dst) | |
- | |
-# Copy the contents of the file named src to a file named dst. The | |
-# destination location must be writable; otherwise, an IOError exception | |
-# will be raised. If dst already exists, it will be replaced. Special | |
-# files such as character or block devices and pipes cannot be copied | |
-# with this function. src and dst are path names given as strings. | |
-# | |
-# [Swati] [so/q/123198] [cc by-sa 3.0] | |
+. | |
FAILED: [10] python/copy+file | |
Running 11: python/copy+file?Q # [online] | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py python/copy+file?Q | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
Running 12: python/copy+file?QT # [online] | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py python/copy+file?QT | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
Running 13: / | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py / | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
Running 14: // | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py // | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
Running 15: python/:learn | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py python/:learn | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
Traceback (most recent call last): | |
File "../lib/standalone.py", line 65, in <module> | |
main(sys.argv[1:]) | |
File "../lib/standalone.py", line 61, in main | |
answer, _ = cheat_wrapper.cheat_wrapper(query, request_options=request_options) | |
File "/home/pers/cvs/cheat.sh/lib/cheat_wrapper.py", line 101, in cheat_wrapper | |
answers = [get_answer_dict(topic, request_options=request_options)] | |
File "/home/pers/cvs/cheat.sh/lib/routing.py", line 155, in get_answer_dict | |
answer = self._get_page_dict(topic, topic_type, request_options=request_options) | |
File "/home/pers/cvs/cheat.sh/lib/routing.py", line 110, in _get_page_dict | |
return self._adapter[topic_type]\ | |
File "/home/pers/cvs/cheat.sh/lib/adapter/adapter.py", line 140, in get_page_dict | |
answer = self._get_page(topic, request_options=request_options) | |
File "/home/pers/cvs/cheat.sh/lib/adapter/learnxiny.py", line 40, in _get_page | |
return self.adapters[lang].get_page(topic) | |
File "/home/pers/cvs/cheat.sh/lib/adapter/learnxiny.py", line 195, in get_page | |
return "\n".join(self._whole_cheatsheet) + "\n" | |
TypeError: can only join an iterable | |
--- results/15 Sat Oct 3 18:10:40 2020 | |
+++ /tmp/cht.sh.tests-3Jhh4cBrygrLXP Mon Oct 5 22:22:25 2020 | |
@@ -1,1002 +0,0 @@ | |
-# Single line comments start with a number symbol. | |
- | |
-""" Multiline strings can be written | |
- using three "s, and are often used | |
- as documentation. | |
-""" | |
- | |
-#################################################### | |
-## 1. Primitive Datatypes and Operators | |
-#################################################### | |
- | |
-# You have numbers | |
-3 # => 3 | |
- | |
-# Math is what you would expect | |
-1 + 1 # => 2 | |
-8 - 1 # => 7 | |
-10 * 2 # => 20 | |
-35 / 5 # => 7.0 | |
- | |
-# Integer division rounds down for both positive and negative numbers. | |
-5 // 3 # => 1 | |
--5 // 3 # => -2 | |
-5.0 // 3.0 # => 1.0 # works on floats too | |
--5.0 // 3.0 # => -2.0 | |
- | |
-# The result of division is always a float | |
-10.0 / 3 # => 3.3333333333333335 | |
- | |
-# Modulo operation | |
-7 % 3 # => 1 | |
- | |
-# Exponentiation (x**y, x to the yth power) | |
-2**3 # => 8 | |
- | |
-# Enforce precedence with parentheses | |
-1 + 3 * 2 # => 7 | |
-(1 + 3) * 2 # => 8 | |
- | |
-# Boolean values are primitives (Note: the capitalization) | |
-True # => True | |
-False # => False | |
- | |
-# negate with not | |
-not True # => False | |
-not False # => True | |
- | |
-# Boolean Operators | |
-# Note "and" and "or" are case-sensitive | |
-True and False # => False | |
-False or True # => True | |
- | |
-# True and False are actually 1 and 0 but with different keywords | |
-True + True # => 2 | |
-True * 8 # => 8 | |
-False - 5 # => -5 | |
- | |
-# Comparison operators look at the numerical value of True and False | |
-0 == False # => True | |
-1 == True # => True | |
-2 == True # => False | |
--5 != False # => True | |
- | |
-# Using boolean logical operators on ints casts them to booleans for evaluation, but their non-cast value is returned | |
-# Don't mix up with bool(ints) and bitwise and/or (&,|) | |
-bool(0) # => False | |
-bool(4) # => True | |
-bool(-6) # => True | |
-0 and 2 # => 0 | |
--5 or 0 # => -5 | |
- | |
-# Equality is == | |
-1 == 1 # => True | |
-2 == 1 # => False | |
- | |
-# Inequality is != | |
-1 != 1 # => False | |
-2 != 1 # => True | |
- | |
-# More comparisons | |
-1 < 10 # => True | |
-1 > 10 # => False | |
-2 <= 2 # => True | |
-2 >= 2 # => True | |
- | |
-# Seeing whether a value is in a range | |
-1 < 2 and 2 < 3 # => True | |
-2 < 3 and 3 < 2 # => False | |
-# Chaining makes this look nicer | |
-1 < 2 < 3 # => True | |
-2 < 3 < 2 # => False | |
- | |
-# (is vs. ==) is checks if two variables refer to the same object, but == checks | |
-# if the objects pointed to have the same values. | |
-a = [1, 2, 3, 4] # Point a at a new list, [1, 2, 3, 4] | |
-b = a # Point b at what a is pointing to | |
-b is a # => True, a and b refer to the same object | |
-b == a # => True, a's and b's objects are equal | |
-b = [1, 2, 3, 4] # Point b at a new list, [1, 2, 3, 4] | |
-b is a # => False, a and b do not refer to the same object | |
-b == a # => True, a's and b's objects are equal | |
- | |
-# Strings are created with " or ' | |
-"This is a string." | |
-'This is also a string.' | |
- | |
-# Strings can be added too! But try not to do this. | |
-"Hello " + "world!" # => "Hello world!" | |
-# String literals (but not variables) can be concatenated without using '+' | |
-"Hello " "world!" # => "Hello world!" | |
- | |
-# A string can be treated like a list of characters | |
-"Hello world!"[0] # => 'H' | |
- | |
-# You can find the length of a string | |
-len("This is a string") # => 16 | |
- | |
-# You can also format using f-strings or formatted string literals (in Python 3.6+) | |
-name = "Reiko" | |
-f"She said her name is {name}." # => "She said her name is Reiko" | |
-# You can basically put any Python statement inside the braces and it will be output in the string. | |
-f"{name} is {len(name)} characters long." # => "Reiko is 5 characters long." | |
- | |
- | |
-# None is an object | |
-None # => None | |
- | |
-# Don't use the equality "==" symbol to compare objects to None | |
-# Use "is" instead. This checks for equality of object identity. | |
-"etc" is None # => False | |
-None is None # => True | |
- | |
-# None, 0, and empty strings/lists/dicts/tuples all evaluate to False. | |
-# All other values are True | |
-bool(0) # => False | |
-bool("") # => False | |
-bool([]) # => False | |
-bool({}) # => False | |
-bool(()) # => False | |
- | |
-#################################################### | |
-## 2. Variables and Collections | |
-#################################################### | |
- | |
-# Python has a print function | |
-print("I'm Python. Nice to meet you!") # => I'm Python. Nice to meet you! | |
- | |
-# By default the print function also prints out a newline at the end. | |
-# Use the optional argument end to change the end string. | |
-print("Hello, World", end="!") # => Hello, World! | |
- | |
-# Simple way to get input data from console | |
-input_string_var = input("Enter some data: ") # Returns the data as a string | |
-# Note: In earlier versions of Python, input() method was named as raw_input() | |
- | |
-# There are no declarations, only assignments. | |
-# Convention is to use lower_case_with_underscores | |
-some_var = 5 | |
-some_var # => 5 | |
- | |
-# Accessing a previously unassigned variable is an exception. | |
-# See Control Flow to learn more about exception handling. | |
-some_unknown_var # Raises a NameError | |
- | |
-# if can be used as an expression | |
-# Equivalent of C's '?:' ternary operator | |
-"yay!" if 0 > 1 else "nay!" # => "nay!" | |
- | |
-# Lists store sequences | |
-li = [] | |
-# You can start with a prefilled list | |
-other_li = [4, 5, 6] | |
- | |
-# Add stuff to the end of a list with append | |
-li.append(1) # li is now [1] | |
-li.append(2) # li is now [1, 2] | |
-li.append(4) # li is now [1, 2, 4] | |
-li.append(3) # li is now [1, 2, 4, 3] | |
-# Remove from the end with pop | |
-li.pop() # => 3 and li is now [1, 2, 4] | |
-# Let's put it back | |
-li.append(3) # li is now [1, 2, 4, 3] again. | |
- | |
-# Access a list like you would any array | |
-li[0] # => 1 | |
-# Look at the last element | |
-li[-1] # => 3 | |
- | |
-# Looking out of bounds is an IndexError | |
-li[4] # Raises an IndexError | |
- | |
-# You can look at ranges with slice syntax. | |
-# The start index is included, the end index is not | |
-# (It's a closed/open range for you mathy types.) | |
-li[1:3] # Return list from index 1 to 3 => [2, 4] | |
-li[2:] # Return list starting from index 2 => [4, 3] | |
-li[:3] # Return list from beginning until index 3 => [1, 2, 4] | |
-li[::2] # Return list selecting every second entry => [1, 4] | |
-li[::-1] # Return list in reverse order => [3, 4, 2, 1] | |
-# Use any combination of these to make advanced slices | |
-# li[start:end:step] | |
- | |
-# Make a one layer deep copy using slices | |
-li2 = li[:] # => li2 = [1, 2, 4, 3] but (li2 is li) will result in false. | |
- | |
-# Remove arbitrary elements from a list with "del" | |
-del li[2] # li is now [1, 2, 3] | |
- | |
-# Remove first occurrence of a value | |
-li.remove(2) # li is now [1, 3] | |
-li.remove(2) # Raises a ValueError as 2 is not in the list | |
- | |
-# Insert an element at a specific index | |
-li.insert(1, 2) # li is now [1, 2, 3] again | |
- | |
-# Get the index of the first item found matching the argument | |
-li.index(2) # => 1 | |
-li.index(4) # Raises a ValueError as 4 is not in the list | |
- | |
-# You can add lists | |
-# Note: values for li and for other_li are not modified. | |
-li + other_li # => [1, 2, 3, 4, 5, 6] | |
- | |
-# Concatenate lists with "extend()" | |
-li.extend(other_li) # Now li is [1, 2, 3, 4, 5, 6] | |
- | |
-# Check for existence in a list with "in" | |
-1 in li # => True | |
- | |
-# Examine the length with "len()" | |
-len(li) # => 6 | |
- | |
- | |
-# Tuples are like lists but are immutable. | |
-tup = (1, 2, 3) | |
-tup[0] # => 1 | |
-tup[0] = 3 # Raises a TypeError | |
- | |
-# Note that a tuple of length one has to have a comma after the last element but | |
-# tuples of other lengths, even zero, do not. | |
-type((1)) # => <class 'int'> | |
-type((1,)) # => <class 'tuple'> | |
-type(()) # => <class 'tuple'> | |
- | |
-# You can do most of the list operations on tuples too | |
-len(tup) # => 3 | |
-tup + (4, 5, 6) # => (1, 2, 3, 4, 5, 6) | |
-tup[:2] # => (1, 2) | |
-2 in tup # => True | |
- | |
-# You can unpack tuples (or lists) into variables | |
-a, b, c = (1, 2, 3) # a is now 1, b is now 2 and c is now 3 | |
-# You can also do extended unpacking | |
-a, *b, c = (1, 2, 3, 4) # a is now 1, b is now [2, 3] and c is now 4 | |
-# Tuples are created by default if you leave out the parentheses | |
-d, e, f = 4, 5, 6 # tuple 4, 5, 6 is unpacked into variables d, e and f | |
-# respectively such that d = 4, e = 5 and f = 6 | |
-# Now look how easy it is to swap two values | |
-e, d = d, e # d is now 5 and e is now 4 | |
- | |
- | |
-# Dictionaries store mappings from keys to values | |
-empty_dict = {} | |
-# Here is a prefilled dictionary | |
-filled_dict = {"one": 1, "two": 2, "three": 3} | |
- | |
-# Note keys for dictionaries have to be immutable types. This is to ensure that | |
-# the key can be converted to a constant hash value for quick look-ups. | |
-# Immutable types include ints, floats, strings, tuples. | |
-invalid_dict = {[1,2,3]: "123"} # => Raises a TypeError: unhashable type: 'list' | |
-valid_dict = {(1,2,3):[1,2,3]} # Values can be of any type, however. | |
- | |
-# Look up values with [] | |
-filled_dict["one"] # => 1 | |
- | |
-# Get all keys as an iterable with "keys()". We need to wrap the call in list() | |
-# to turn it into a list. We'll talk about those later. Note - for Python | |
-# versions <3.7, dictionary key ordering is not guaranteed. Your results might | |
-# not match the example below exactly. However, as of Python 3.7, dictionary | |
-# items maintain the order at which they are inserted into the dictionary. | |
-list(filled_dict.keys()) # => ["three", "two", "one"] in Python <3.7 | |
-list(filled_dict.keys()) # => ["one", "two", "three"] in Python 3.7+ | |
- | |
- | |
-# Get all values as an iterable with "values()". Once again we need to wrap it | |
-# in list() to get it out of the iterable. Note - Same as above regarding key | |
-# ordering. | |
-list(filled_dict.values()) # => [3, 2, 1] in Python <3.7 | |
-list(filled_dict.values()) # => [1, 2, 3] in Python 3.7+ | |
- | |
-# Check for existence of keys in a dictionary with "in" | |
-"one" in filled_dict # => True | |
-1 in filled_dict # => False | |
- | |
-# Looking up a non-existing key is a KeyError | |
-filled_dict["four"] # KeyError | |
- | |
-# Use "get()" method to avoid the KeyError | |
-filled_dict.get("one") # => 1 | |
-filled_dict.get("four") # => None | |
-# The get method supports a default argument when the value is missing | |
-filled_dict.get("one", 4) # => 1 | |
-filled_dict.get("four", 4) # => 4 | |
- | |
-# "setdefault()" inserts into a dictionary only if the given key isn't present | |
-filled_dict.setdefault("five", 5) # filled_dict["five"] is set to 5 | |
-filled_dict.setdefault("five", 6) # filled_dict["five"] is still 5 | |
- | |
-# Adding to a dictionary | |
-filled_dict.update({"four":4}) # => {"one": 1, "two": 2, "three": 3, "four": 4} | |
-filled_dict["four"] = 4 # another way to add to dict | |
- | |
-# Remove keys from a dictionary with del | |
-del filled_dict["one"] # Removes the key "one" from filled dict | |
- | |
-# From Python 3.5 you can also use the additional unpacking options | |
-{'a': 1, **{'b': 2}} # => {'a': 1, 'b': 2} | |
-{'a': 1, **{'a': 2}} # => {'a': 2} | |
- | |
- | |
- | |
-# Sets store ... well sets | |
-empty_set = set() | |
-# Initialize a set with a bunch of values. Yeah, it looks a bit like a dict. Sorry. | |
-some_set = {1, 1, 2, 2, 3, 4} # some_set is now {1, 2, 3, 4} | |
- | |
-# Similar to keys of a dictionary, elements of a set have to be immutable. | |
-invalid_set = {[1], 1} # => Raises a TypeError: unhashable type: 'list' | |
-valid_set = {(1,), 1} | |
- | |
-# Add one more item to the set | |
-filled_set = some_set | |
-filled_set.add(5) # filled_set is now {1, 2, 3, 4, 5} | |
-# Sets do not have duplicate elements | |
-filled_set.add(5) # it remains as before {1, 2, 3, 4, 5} | |
- | |
-# Do set intersection with & | |
-other_set = {3, 4, 5, 6} | |
-filled_set & other_set # => {3, 4, 5} | |
- | |
-# Do set union with | | |
-filled_set | other_set # => {1, 2, 3, 4, 5, 6} | |
- | |
-# Do set difference with - | |
-{1, 2, 3, 4} - {2, 3, 5} # => {1, 4} | |
- | |
-# Do set symmetric difference with ^ | |
-{1, 2, 3, 4} ^ {2, 3, 5} # => {1, 4, 5} | |
- | |
-# Check if set on the left is a superset of set on the right | |
-{1, 2} >= {1, 2, 3} # => False | |
- | |
-# Check if set on the left is a subset of set on the right | |
-{1, 2} <= {1, 2, 3} # => True | |
- | |
-# Check for existence in a set with in | |
-2 in filled_set # => True | |
-10 in filled_set # => False | |
- | |
-# Make a one layer deep copy | |
-filled_set = some_set.copy() # filled_set is {1, 2, 3, 4, 5} | |
-filled_set is some_set # => False | |
- | |
- | |
-#################################################### | |
-## 3. Control Flow and Iterables | |
-#################################################### | |
- | |
-# Let's just make a variable | |
-some_var = 5 | |
- | |
-# Here is an if statement. Indentation is significant in Python! | |
-# Convention is to use four spaces, not tabs. | |
-# This prints "some_var is smaller than 10" | |
-if some_var > 10: | |
- print("some_var is totally bigger than 10.") | |
-elif some_var < 10: # This elif clause is optional. | |
- print("some_var is smaller than 10.") | |
-else: # This is optional too. | |
- print("some_var is indeed 10.") | |
- | |
- | |
-""" | |
-For loops iterate over lists | |
-prints: | |
- dog is a mammal | |
- cat is a mammal | |
- mouse is a mammal | |
-""" | |
-for animal in ["dog", "cat", "mouse"]: | |
- # You can use format() to interpolate formatted strings | |
- print("{} is a mammal".format(animal)) | |
- | |
-""" | |
-"range(number)" returns an iterable of numbers | |
-from zero to the given number | |
-prints: | |
- 0 | |
- 1 | |
- 2 | |
- 3 | |
-""" | |
-for i in range(4): | |
- print(i) | |
- | |
-""" | |
-"range(lower, upper)" returns an iterable of numbers | |
-from the lower number to the upper number | |
-prints: | |
- 4 | |
- 5 | |
- 6 | |
- 7 | |
-""" | |
-for i in range(4, 8): | |
- print(i) | |
- | |
-""" | |
-"range(lower, upper, step)" returns an iterable of numbers | |
-from the lower number to the upper number, while incrementing | |
-by step. If step is not indicated, the default value is 1. | |
-prints: | |
- 4 | |
- 6 | |
-""" | |
-for i in range(4, 8, 2): | |
- print(i) | |
- | |
-""" | |
-To loop over a list, and retrieve both the index and the value of each item in the list | |
-prints: | |
- 0 dog | |
- 1 cat | |
- 2 mouse | |
-""" | |
-animals = ["dog", "cat", "mouse"] | |
-for i, value in enumerate(animals): | |
- print(i, value) | |
- | |
-""" | |
-While loops go until a condition is no longer met. | |
-prints: | |
- 0 | |
- 1 | |
- 2 | |
- 3 | |
-""" | |
-x = 0 | |
-while x < 4: | |
- print(x) | |
- x += 1 # Shorthand for x = x + 1 | |
- | |
-# Handle exceptions with a try/except block | |
-try: | |
- # Use "raise" to raise an error | |
- raise IndexError("This is an index error") | |
-except IndexError as e: | |
- pass # Pass is just a no-op. Usually you would do recovery here. | |
-except (TypeError, NameError): | |
- pass # Multiple exceptions can be handled together, if required. | |
-else: # Optional clause to the try/except block. Must follow all except blocks | |
- print("All good!") # Runs only if the code in try raises no exceptions | |
-finally: # Execute under all circumstances | |
- print("We can clean up resources here") | |
- | |
-# Instead of try/finally to cleanup resources you can use a with statement | |
-with open("myfile.txt") as f: | |
- for line in f: | |
- print(line) | |
- | |
-# Writing to a file | |
-contents = {"aa": 12, "bb": 21} | |
-with open("myfile1.txt", "w+") as file: | |
- file.write(str(contents)) # writes a string to a file | |
- | |
-with open("myfile2.txt", "w+") as file: | |
- file.write(json.dumps(contents)) # writes an object to a file | |
- | |
-# Reading from a file | |
-with open('myfile1.txt', "r+") as file: | |
- contents = file.read() # reads a string from a file | |
-print(contents) | |
-# print: {"aa": 12, "bb": 21} | |
- | |
-with open('myfile2.txt', "r+") as file: | |
- contents = json.load(file) # reads a json object from a file | |
-print(contents) | |
-# print: {"aa": 12, "bb": 21} | |
- | |
- | |
-# Python offers a fundamental abstraction called the Iterable. | |
-# An iterable is an object that can be treated as a sequence. | |
-# The object returned by the range function, is an iterable. | |
- | |
-filled_dict = {"one": 1, "two": 2, "three": 3} | |
-our_iterable = filled_dict.keys() | |
-print(our_iterable) # => dict_keys(['one', 'two', 'three']). This is an object that implements our Iterable interface. | |
- | |
-# We can loop over it. | |
-for i in our_iterable: | |
- print(i) # Prints one, two, three | |
- | |
-# However we cannot address elements by index. | |
-our_iterable[1] # Raises a TypeError | |
- | |
-# An iterable is an object that knows how to create an iterator. | |
-our_iterator = iter(our_iterable) | |
- | |
-# Our iterator is an object that can remember the state as we traverse through it. | |
-# We get the next object with "next()". | |
-next(our_iterator) # => "one" | |
- | |
-# It maintains state as we iterate. | |
-next(our_iterator) # => "two" | |
-next(our_iterator) # => "three" | |
- | |
-# After the iterator has returned all of its data, it raises a StopIteration exception | |
-next(our_iterator) # Raises StopIteration | |
- | |
-# We can also loop over it, in fact, "for" does this implicitly! | |
-our_iterator = iter(our_iterable) | |
-for i in our_iterator: | |
- print(i) # Prints one, two, three | |
- | |
-# You can grab all the elements of an iterable or iterator by calling list() on it. | |
-list(our_iterable) # => Returns ["one", "two", "three"] | |
-list(our_iterator) # => Returns [] because state is saved | |
- | |
- | |
-#################################################### | |
-## 4. Functions | |
-#################################################### | |
- | |
-# Use "def" to create new functions | |
-def add(x, y): | |
- print("x is {} and y is {}".format(x, y)) | |
- return x + y # Return values with a return statement | |
- | |
-# Calling functions with parameters | |
-add(5, 6) # => prints out "x is 5 and y is 6" and returns 11 | |
- | |
-# Another way to call functions is with keyword arguments | |
-add(y=6, x=5) # Keyword arguments can arrive in any order. | |
- | |
-# You can define functions that take a variable number of | |
-# positional arguments | |
-def varargs(*args): | |
- return args | |
- | |
-varargs(1, 2, 3) # => (1, 2, 3) | |
- | |
-# You can define functions that take a variable number of | |
-# keyword arguments, as well | |
-def keyword_args(**kwargs): | |
- return kwargs | |
- | |
-# Let's call it to see what happens | |
-keyword_args(big="foot", loch="ness") # => {"big": "foot", "loch": "ness"} | |
- | |
- | |
-# You can do both at once, if you like | |
-def all_the_args(*args, **kwargs): | |
- print(args) | |
- print(kwargs) | |
-""" | |
-all_the_args(1, 2, a=3, b=4) prints: | |
- (1, 2) | |
- {"a": 3, "b": 4} | |
-""" | |
- | |
-# When calling functions, you can do the opposite of args/kwargs! | |
-# Use * to expand tuples and use ** to expand kwargs. | |
-args = (1, 2, 3, 4) | |
-kwargs = {"a": 3, "b": 4} | |
-all_the_args(*args) # equivalent to all_the_args(1, 2, 3, 4) | |
-all_the_args(**kwargs) # equivalent to all_the_args(a=3, b=4) | |
-all_the_args(*args, **kwargs) # equivalent to all_the_args(1, 2, 3, 4, a=3, b=4) | |
- | |
-# Returning multiple values (with tuple assignments) | |
-def swap(x, y): | |
- return y, x # Return multiple values as a tuple without the parenthesis. | |
- # (Note: parenthesis have been excluded but can be included) | |
- | |
-x = 1 | |
-y = 2 | |
-x, y = swap(x, y) # => x = 2, y = 1 | |
-# (x, y) = swap(x,y) # Again parenthesis have been excluded but can be included. | |
- | |
-# Function Scope | |
-x = 5 | |
- | |
-def set_x(num): | |
- # Local var x not the same as global variable x | |
- x = num # => 43 | |
- print(x) # => 43 | |
- | |
-def set_global_x(num): | |
- global x | |
- print(x) # => 5 | |
- x = num # global var x is now set to 6 | |
- print(x) # => 6 | |
- | |
-set_x(43) | |
-set_global_x(6) | |
- | |
- | |
-# Python has first class functions | |
-def create_adder(x): | |
- def adder(y): | |
- return x + y | |
- return adder | |
- | |
-add_10 = create_adder(10) | |
-add_10(3) # => 13 | |
- | |
-# There are also anonymous functions | |
-(lambda x: x > 2)(3) # => True | |
-(lambda x, y: x ** 2 + y ** 2)(2, 1) # => 5 | |
- | |
-# There are built-in higher order functions | |
-list(map(add_10, [1, 2, 3])) # => [11, 12, 13] | |
-list(map(max, [1, 2, 3], [4, 2, 1])) # => [4, 2, 3] | |
- | |
-list(filter(lambda x: x > 5, [3, 4, 5, 6, 7])) # => [6, 7] | |
- | |
-# We can use list comprehensions for nice maps and filters | |
-# List comprehension stores the output as a list which can itself be a nested list | |
-[add_10(i) for i in [1, 2, 3]] # => [11, 12, 13] | |
-[x for x in [3, 4, 5, 6, 7] if x > 5] # => [6, 7] | |
- | |
-# You can construct set and dict comprehensions as well. | |
-{x for x in 'abcddeef' if x not in 'abc'} # => {'d', 'e', 'f'} | |
-{x: x**2 for x in range(5)} # => {0: 0, 1: 1, 2: 4, 3: 9, 4: 16} | |
- | |
- | |
-#################################################### | |
-## 5. Modules | |
-#################################################### | |
- | |
-# You can import modules | |
-import math | |
-print(math.sqrt(16)) # => 4.0 | |
- | |
-# You can get specific functions from a module | |
-from math import ceil, floor | |
-print(ceil(3.7)) # => 4.0 | |
-print(floor(3.7)) # => 3.0 | |
- | |
-# You can import all functions from a module. | |
-# Warning: this is not recommended | |
-from math import * | |
- | |
-# You can shorten module names | |
-import math as m | |
-math.sqrt(16) == m.sqrt(16) # => True | |
- | |
-# Python modules are just ordinary Python files. You | |
-# can write your own, and import them. The name of the | |
-# module is the same as the name of the file. | |
- | |
-# You can find out which functions and attributes | |
-# are defined in a module. | |
-import math | |
-dir(math) | |
- | |
-# If you have a Python script named math.py in the same | |
-# folder as your current script, the file math.py will | |
-# be loaded instead of the built-in Python module. | |
-# This happens because the local folder has priority | |
-# over Python's built-in libraries. | |
- | |
- | |
-#################################################### | |
-## 6. Classes | |
-#################################################### | |
- | |
-# We use the "class" statement to create a class | |
-class Human: | |
- | |
- # A class attribute. It is shared by all instances of this class | |
- species = "H. sapiens" | |
- | |
- # Basic initializer, this is called when this class is instantiated. | |
- # Note that the double leading and trailing underscores denote objects | |
- # or attributes that are used by Python but that live in user-controlled | |
- # namespaces. Methods(or objects or attributes) like: __init__, __str__, | |
- # __repr__ etc. are called special methods (or sometimes called dunder methods) | |
- # You should not invent such names on your own. | |
- def __init__(self, name): | |
- # Assign the argument to the instance's name attribute | |
- self.name = name | |
- | |
- # Initialize property | |
- self._age = 0 | |
- | |
- # An instance method. All methods take "self" as the first argument | |
- def say(self, msg): | |
- print("{name}: {message}".format(name=self.name, message=msg)) | |
- | |
- # Another instance method | |
- def sing(self): | |
- return 'yo... yo... microphone check... one two... one two...' | |
- | |
- # A class method is shared among all instances | |
- # They are called with the calling class as the first argument | |
- @classmethod | |
- def get_species(cls): | |
- return cls.species | |
- | |
- # A static method is called without a class or instance reference | |
- @staticmethod | |
- def grunt(): | |
- return "*grunt*" | |
- | |
- # A property is just like a getter. | |
- # It turns the method age() into an read-only attribute of the same name. | |
- # There's no need to write trivial getters and setters in Python, though. | |
- @property | |
- def age(self): | |
- return self._age | |
- | |
- # This allows the property to be set | |
- @age.setter | |
- def age(self, age): | |
- self._age = age | |
- | |
- # This allows the property to be deleted | |
- @age.deleter | |
- def age(self): | |
- del self._age | |
- | |
- | |
-# When a Python interpreter reads a source file it executes all its code. | |
-# This __name__ check makes sure this code block is only executed when this | |
-# module is the main program. | |
-if __name__ == '__main__': | |
- # Instantiate a class | |
- i = Human(name="Ian") | |
- i.say("hi") # "Ian: hi" | |
- j = Human("Joel") | |
- j.say("hello") # "Joel: hello" | |
- # i and j are instances of type Human, or in other words: they are Human objects | |
- | |
- # Call our class method | |
- i.say(i.get_species()) # "Ian: H. sapiens" | |
- # Change the shared attribute | |
- Human.species = "H. neanderthalensis" | |
- i.say(i.get_species()) # => "Ian: H. neanderthalensis" | |
- j.say(j.get_species()) # => "Joel: H. neanderthalensis" | |
- | |
- # Call the static method | |
- print(Human.grunt()) # => "*grunt*" | |
- | |
- # Cannot call static method with instance of object | |
- # because i.grunt() will automatically put "self" (the object i) as an argument | |
- print(i.grunt()) # => TypeError: grunt() takes 0 positional arguments but 1 was given | |
- | |
- # Update the property for this instance | |
- i.age = 42 | |
- # Get the property | |
- i.say(i.age) # => "Ian: 42" | |
- j.say(j.age) # => "Joel: 0" | |
- # Delete the property | |
- del i.age | |
- # i.age # => this would raise an AttributeError | |
- | |
- | |
-#################################################### | |
-## 6.1 Inheritance | |
-#################################################### | |
- | |
-# Inheritance allows new child classes to be defined that inherit methods and | |
-# variables from their parent class. | |
- | |
-# Using the Human class defined above as the base or parent class, we can | |
-# define a child class, Superhero, which inherits the class variables like | |
-# "species", "name", and "age", as well as methods, like "sing" and "grunt" | |
-# from the Human class, but can also have its own unique properties. | |
- | |
-# To take advantage of modularization by file you could place the classes above in their own files, | |
-# say, human.py | |
- | |
-# To import functions from other files use the following format | |
-# from "filename-without-extension" import "function-or-class" | |
- | |
-from human import Human | |
- | |
- | |
-# Specify the parent class(es) as parameters to the class definition | |
-class Superhero(Human): | |
- | |
- # If the child class should inherit all of the parent's definitions without | |
- # any modifications, you can just use the "pass" keyword (and nothing else) | |
- # but in this case it is commented out to allow for a unique child class: | |
- # pass | |
- | |
- # Child classes can override their parents' attributes | |
- species = 'Superhuman' | |
- | |
- # Children automatically inherit their parent class's constructor including | |
- # its arguments, but can also define additional arguments or definitions | |
- # and override its methods such as the class constructor. | |
- # This constructor inherits the "name" argument from the "Human" class and | |
- # adds the "superpower" and "movie" arguments: | |
- def __init__(self, name, movie=False, | |
- superpowers=["super strength", "bulletproofing"]): | |
- | |
- # add additional class attributes: | |
- self.fictional = True | |
- self.movie = movie | |
- # be aware of mutable default values, since defaults are shared | |
- self.superpowers = superpowers | |
- | |
- # The "super" function lets you access the parent class's methods | |
- # that are overridden by the child, in this case, the __init__ method. | |
- # This calls the parent class constructor: | |
- super().__init__(name) | |
- | |
- # override the sing method | |
- def sing(self): | |
- return 'Dun, dun, DUN!' | |
- | |
- # add an additional instance method | |
- def boast(self): | |
- for power in self.superpowers: | |
- print("I wield the power of {pow}!".format(pow=power)) | |
- | |
- | |
-if __name__ == '__main__': | |
- sup = Superhero(name="Tick") | |
- | |
- # Instance type checks | |
- if isinstance(sup, Human): | |
- print('I am human') | |
- if type(sup) is Superhero: | |
- print('I am a superhero') | |
- | |
- # Get the Method Resolution search Order used by both getattr() and super() | |
- # This attribute is dynamic and can be updated | |
- print(Superhero.__mro__) # => (<class '__main__.Superhero'>, | |
- # => <class 'human.Human'>, <class 'object'>) | |
- | |
- # Calls parent method but uses its own class attribute | |
- print(sup.get_species()) # => Superhuman | |
- | |
- # Calls overridden method | |
- print(sup.sing()) # => Dun, dun, DUN! | |
- | |
- # Calls method from Human | |
- sup.say('Spoon') # => Tick: Spoon | |
- | |
- # Call method that exists only in Superhero | |
- sup.boast() # => I wield the power of super strength! | |
- # => I wield the power of bulletproofing! | |
- | |
- # Inherited class attribute | |
- sup.age = 31 | |
- print(sup.age) # => 31 | |
- | |
- # Attribute that only exists within Superhero | |
- print('Am I Oscar eligible? ' + str(sup.movie)) | |
- | |
-#################################################### | |
-## 6.2 Multiple Inheritance | |
-#################################################### | |
- | |
-# Another class definition | |
-# bat.py | |
-class Bat: | |
- | |
- species = 'Baty' | |
- | |
- def __init__(self, can_fly=True): | |
- self.fly = can_fly | |
- | |
- # This class also has a say method | |
- def say(self, msg): | |
- msg = '... ... ...' | |
- return msg | |
- | |
- # And its own method as well | |
- def sonar(self): | |
- return '))) ... (((' | |
- | |
-if __name__ == '__main__': | |
- b = Bat() | |
- print(b.say('hello')) | |
- print(b.fly) | |
- | |
- | |
-# And yet another class definition that inherits from Superhero and Bat | |
-# superhero.py | |
-from superhero import Superhero | |
-from bat import Bat | |
- | |
-# Define Batman as a child that inherits from both Superhero and Bat | |
-class Batman(Superhero, Bat): | |
- | |
- def __init__(self, *args, **kwargs): | |
- # Typically to inherit attributes you have to call super: | |
- # super(Batman, self).__init__(*args, **kwargs) | |
- # However we are dealing with multiple inheritance here, and super() | |
- # only works with the next base class in the MRO list. | |
- # So instead we explicitly call __init__ for all ancestors. | |
- # The use of *args and **kwargs allows for a clean way to pass arguments, | |
- # with each parent "peeling a layer of the onion". | |
- Superhero.__init__(self, 'anonymous', movie=True, | |
- superpowers=['Wealthy'], *args, **kwargs) | |
- Bat.__init__(self, *args, can_fly=False, **kwargs) | |
- # override the value for the name attribute | |
- self.name = 'Sad Affleck' | |
- | |
- def sing(self): | |
- return 'nan nan nan nan nan batman!' | |
- | |
- | |
-if __name__ == '__main__': | |
- sup = Batman() | |
- | |
- # Get the Method Resolution search Order used by both getattr() and super(). | |
- # This attribute is dynamic and can be updated | |
- print(Batman.__mro__) # => (<class '__main__.Batman'>, | |
- # => <class 'superhero.Superhero'>, | |
- # => <class 'human.Human'>, | |
- # => <class 'bat.Bat'>, <class 'object'>) | |
- | |
- # Calls parent method but uses its own class attribute | |
- print(sup.get_species()) # => Superhuman | |
- | |
- # Calls overridden method | |
- print(sup.sing()) # => nan nan nan nan nan batman! | |
- | |
- # Calls method from Human, because inheritance order matters | |
- sup.say('I agree') # => Sad Affleck: I agree | |
- | |
- # Call method that exists only in 2nd ancestor | |
- print(sup.sonar()) # => ))) ... ((( | |
- | |
- # Inherited class attribute | |
- sup.age = 100 | |
- print(sup.age) # => 100 | |
- | |
- # Inherited attribute from 2nd ancestor whose default value was overridden. | |
- print('Can I fly? ' + str(sup.fly)) # => Can I fly? False | |
- | |
- | |
- | |
-#################################################### | |
-## 7. Advanced | |
-#################################################### | |
- | |
-# Generators help you make lazy code. | |
-def double_numbers(iterable): | |
- for i in iterable: | |
- yield i + i | |
- | |
-# Generators are memory-efficient because they only load the data needed to | |
-# process the next value in the iterable. This allows them to perform | |
-# operations on otherwise prohibitively large value ranges. | |
-# NOTE: `range` replaces `xrange` in Python 3. | |
-for i in double_numbers(range(1, 900000000)): # `range` is a generator. | |
- print(i) | |
- if i >= 30: | |
- break | |
- | |
-# Just as you can create a list comprehension, you can create generator | |
-# comprehensions as well. | |
-values = (-x for x in [1,2,3,4,5]) | |
-for x in values: | |
- print(x) # prints -1 -2 -3 -4 -5 to console/terminal | |
- | |
-# You can also cast a generator comprehension directly to a list. | |
-values = (-x for x in [1,2,3,4,5]) | |
-gen_to_list = list(values) | |
-print(gen_to_list) # => [-1, -2, -3, -4, -5] | |
- | |
- | |
-# Decorators | |
-# In this example `beg` wraps `say`. If say_please is True then it | |
-# will change the returned message. | |
-from functools import wraps | |
- | |
- | |
-def beg(target_function): | |
- @wraps(target_function) | |
- def wrapper(*args, **kwargs): | |
- msg, say_please = target_function(*args, **kwargs) | |
- if say_please: | |
- return "{} {}".format(msg, "Please! I am poor :(") | |
- return msg | |
- | |
- return wrapper | |
- | |
- | |
-@beg | |
-def say(say_please=False): | |
- msg = "Can you buy me a beer?" | |
- return msg, say_please | |
- | |
- | |
-print(say()) # Can you buy me a beer? | |
-print(say(say_please=True)) # Can you buy me a beer? Please! I am poor :( | |
FAILED: [15] python/:learn | |
Running 16: latencies # [python3] | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py latencies | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
Traceback (most recent call last): | |
File "../lib/standalone.py", line 65, in <module> | |
main(sys.argv[1:]) | |
File "../lib/standalone.py", line 61, in main | |
answer, _ = cheat_wrapper.cheat_wrapper(query, request_options=request_options) | |
File "/home/pers/cvs/cheat.sh/lib/cheat_wrapper.py", line 101, in cheat_wrapper | |
answers = [get_answer_dict(topic, request_options=request_options)] | |
File "/home/pers/cvs/cheat.sh/lib/routing.py", line 155, in get_answer_dict | |
answer = self._get_page_dict(topic, topic_type, request_options=request_options) | |
File "/home/pers/cvs/cheat.sh/lib/routing.py", line 110, in _get_page_dict | |
return self._adapter[topic_type]\ | |
File "/home/pers/cvs/cheat.sh/lib/adapter/adapter.py", line 140, in get_page_dict | |
answer = self._get_page(topic, request_options=request_options) | |
File "/home/pers/cvs/cheat.sh/lib/adapter/latenz.py", line 27, in _get_page | |
import latencies | |
ModuleNotFoundError: No module named 'latencies' | |
--- results/16 Sat Oct 3 18:10:40 2020 | |
+++ /tmp/cht.sh.tests-3Jhh4cBrygrLXP Mon Oct 5 22:22:26 2020 | |
@@ -1,35 +0,0 @@ | |
-# Latency numbers every programmer should know | |
- | |
-1ns Main memory reference: Send 2,000 bytes Read 1,000,000 bytes | |
-▗▖ 100ns over commodity network: sequentially from SSD: | |
- ▗▖ 44ns 48.981us | |
-L1 cache reference: 1ns ▗ ▗ | |
-▗▖ 1.0us | |
- ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ SSD random read: 16.0us Disk seek: 2.499999ms | |
-Branch mispredict: 3ns ▗▖▗ ▗▖▗▖ | |
-▗▖▗▖▗▖ | |
- Compress 1KB wth Snappy: Read 1,000,000 bytes Read 1,000,000 bytes | |
-L2 cache reference: 4ns 2.0us sequentially from memory: sequentially from disk: | |
-▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ 2.967us 824.692us | |
- ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗ ▗ | |
-Mutex lock/unlock: 16ns | |
-▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ Round trip Packet roundtrip | |
-▗▖▗▖▗▖▗▖▗▖▗▖▗ 10.0us = ▗▖ in same datacenter: 500.0us CA to Netherlands: 150.0ms | |
- ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ | |
-100ns = ▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ | |
-▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ | |
-▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ | |
-▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ | |
-▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ | |
-▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ | |
-▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ 1.0ms = ▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ | |
-▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ | |
-▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ | |
-▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ | |
-▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ | |
- ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ | |
- ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ | |
-# [github.com/chubin/late.nz] [MIT License] ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ | |
-# Console port of "Jeff Dean's latency numbers" ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ | |
-# from [github.com/colin-scott/interactive_latencies] ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ | |
- ▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖▗▖ | |
FAILED: [16] latencies | |
Running 17: az # chubin/cheat.sheets | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py az | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
--- results/17 Sat Oct 3 18:10:40 2020 | |
+++ /tmp/cht.sh.tests-3Jhh4cBrygrLXP Mon Oct 5 22:22:28 2020 | |
@@ -1,90 +1,7 @@ | |
-# Microsoft Azure CLI 2.0 | |
-# Command-line tools for Azure | |
+Unknown topic. | |
+Do you mean one of these topics maybe? | |
-# Install Azure CLI 2.0 with one curl command. | |
-curl -L https://aka.ms/InstallAzureCli | bash | |
- | |
-# create a resource group named "MyResourceGroup" in the westus2 region of Azure | |
-az group create -n MyResourceGroup -l westus2 | |
- | |
-# create a Linux VM using the UbuntuTLS image, with two attached storage disks of 10 GB and 20 GB | |
-az vm create -n MyLinuxVM -g MyResourceGroup --ssh-key-value $HOME/.ssh/id_rsa.pub --image UbuntuLTS --data-disk-sizes-gb 10 20 | |
- | |
-# list VMs | |
-az vm list --output table | |
- | |
-# list only VMs having distinct state | |
-az vm list -d --query "[?powerState=='VM running']" --output table | |
- | |
-# delete VM (with the name MyLinuxVM in the group MyResourceGroup) | |
-az vm delete -g MyResourceGroup -n MyLinuxVM --yes | |
- | |
-# Delete all VMs in a resource group | |
-az vm delete --ids $(az vm list -g MyResourceGroup --query "[].id" -o tsv) | |
- | |
-# Create an Image based on a running VM | |
-az vm deallocate -g MyResourceGroup -n MyLinuxVM | |
-az vm generalize -g MyResourceGroup -n MyLinuxVM | |
-az image create --resource-group MyResourceGroup --name MyTestImage --source MyLinuxVM | |
- | |
-# Running VM based on a VHD | |
-az storage blob upload --account-name "${account_name}" \ | |
- --account-key "${account_key}" --container-name "${container_name}" --type page \ | |
- --file "${file}" --name "${vhd_name}" | |
-az disk create \ | |
- --resource-group ${resource_group} \ | |
- --name myManagedDisk \ | |
- --source https://${account_name}.blob.core.windows.net/${container_name}/${vhd_name} | |
- | |
-# open port | |
-az vm open-port --resource-group MyResourceGroup --name MyLinuxVM --port 443 --priority 899 | |
- | |
-# Show storage accounts | |
-az storage account list --output table | |
- | |
-# Show contaniers for an account | |
-az storage container list --account-name mystorageaccount --output table | |
- | |
-# Show blobs in a container | |
-az storage blob list --account-name mystorageaccount --container-name mycontainer --output table | |
- | |
-# list account keys | |
-az storage account keys list --account-name STORAGE_NAME --resource-group RESOURCE_GROUP | |
- | |
-# Show own images | |
-az image list --output table | |
- | |
-# Configure default storage location | |
-az configure --defaults location=eastus2 | |
- | |
-# Show disks | |
-az disk list --output table | |
- | |
-# Copy blob | |
-az storage blob copy start \ | |
- --source-uri 'https://md-ldh5nknx2rkz.blob.core.windows.net/jzwuuuzzapn0/abcd?sv=2017-04-17&sr=b&si=68041718-6828-4f5e-9e6e-a1b719975062&sig=XXX' \ | |
- --account-key XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX== \ | |
- --account-name destaccount \ | |
- --destination-container vms \ | |
- --destination-blob DESTINATION-blob.vhd | |
- | |
-# List virtual networks | |
-az network vnet list --output table | |
- | |
-# List virtual networks adapters | |
-az network nic list --output table | |
- | |
-# List public IP addresses used by the VMs | |
-az vm list-ip-addresses --output table | |
- | |
-# create snapshot | |
-az snapshot create --resource-group IC-EXASOL-001 --source vm1-disk1 -n vm1-snap1 | |
- | |
-# create SAS url for a snapshot | |
-az snapshot grant-access --resource-group IC-EXASOL-001 --name vm1-snap1 --duration-in-seconds 36000 --query '[accessSas]' -o tsv | |
- | |
-# attach disk | |
-az vm disk attach --vm-name vm1 -g RESOURCE_GROUP --disk DISK1_ID | |
- | |
-# detach disk | |
-az vm disk detach --vm-name vm1 -g RESOURCE_GROUP --name DISK1_ID | |
+ * rosetta 22 | |
+ * c/:learn 20 | |
+ * d/:learn 20 | |
+ | |
FAILED: [17] az | |
Running 18: python/rosetta/Substring # rosetta | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py python/rosetta/Substring | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
--- results/18 Sat Oct 3 18:10:40 2020 | |
+++ /tmp/cht.sh.tests-3Jhh4cBrygrLXP Mon Oct 5 22:22:29 2020 | |
@@ -1,20 +1 @@ | |
->>> s = 'abcdefgh' | |
->>> n, m, char, chars = 2, 3, 'd', 'cd' | |
->>> # starting from n=2 characters in and m=3 in length; | |
->>> s[n-1:n+m-1] | |
-'bcd' | |
->>> # starting from n characters in, up to the end of the string; | |
->>> s[n-1:] | |
-'bcdefgh' | |
->>> # whole string minus last character; | |
->>> s[:-1] | |
-'abcdefg' | |
->>> # starting from a known character char="d" within the string and of m length; | |
->>> indx = s.index(char) | |
->>> s[indx:indx+m] | |
-'def' | |
->>> # starting from a known substring chars="cd" within the string and of m length. | |
->>> indx = s.index(chars) | |
->>> s[indx:indx+m] | |
-'cde' | |
->>> | |
+ | |
FAILED: [18] python/rosetta/Substring | |
Running 19: python/rosetta/Substring?T # rosetta | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py python/rosetta/Substring?T | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
--- results/19 Sat Oct 3 18:10:40 2020 | |
+++ /tmp/cht.sh.tests-3Jhh4cBrygrLXP Mon Oct 5 22:22:30 2020 | |
@@ -1,20 +1 @@ | |
->>> s = 'abcdefgh' | |
->>> n, m, char, chars = 2, 3, 'd', 'cd' | |
->>> # starting from n=2 characters in and m=3 in length; | |
->>> s[n-1:n+m-1] | |
-'bcd' | |
->>> # starting from n characters in, up to the end of the string; | |
->>> s[n-1:] | |
-'bcdefgh' | |
->>> # whole string minus last character; | |
->>> s[:-1] | |
-'abcdefg' | |
->>> # starting from a known character char="d" within the string and of m length; | |
->>> indx = s.index(char) | |
->>> s[indx:indx+m] | |
-'def' | |
->>> # starting from a known substring chars="cd" within the string and of m length. | |
->>> indx = s.index(chars) | |
->>> s[indx:indx+m] | |
-'cde' | |
->>> | |
+ | |
FAILED: [19] python/rosetta/Substring?T | |
Running 20: python/rosetta/:list # rosetta | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py python/rosetta/:list | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
--- results/20 Sat Oct 3 18:10:40 2020 | |
+++ /tmp/cht.sh.tests-3Jhh4cBrygrLXP Mon Oct 5 22:22:31 2020 | |
@@ -1,729 +1 @@ | |
-00DESCRIPTION | |
-100-doors | |
-24-game | |
-24-game-Solve | |
-9-billion-names-of-God-the-integer | |
-99-Bottles-of-Beer | |
-A+B | |
-ABC-Problem | |
-AKS-test-for-primes | |
-Abstract-type | |
-Abundant,-deficient-and-perfect-number-classifications | |
-Accumulator-factory | |
-Ackermann-function | |
-Active-Directory-Connect | |
-Active-Directory-Search-for-a-user | |
-Active-object | |
-Add-a-variable-to-a-class-instance-at-runtime | |
-Address-of-a-variable | |
-Align-columns | |
-Aliquot-sequence-classifications | |
-Almost-prime | |
-Amb | |
-Amicable-pairs | |
-Anagrams | |
-Anagrams-Deranged-anagrams | |
-Animate-a-pendulum | |
-Animation | |
-Anonymous-recursion | |
-Append-a-record-to-the-end-of-a-text-file | |
-Apply-a-callback-to-an-array | |
-Arbitrary-precision-integers--included- | |
-Arithmetic-Complex | |
-Arithmetic-Integer | |
-Arithmetic-Rational | |
-Arithmetic-evaluation | |
-Arithmetic-geometric-mean | |
-Arithmetic-geometric-mean-Calculate-Pi | |
-Array-concatenation | |
-Arrays | |
-Assertions | |
-Associative-array-Creation | |
-Associative-array-Iteration | |
-Atomic-updates | |
-Average-loop-length | |
-Averages-Arithmetic-mean | |
-Averages-Mean-angle | |
-Averages-Mean-time-of-day | |
-Averages-Median | |
-Averages-Mode | |
-Averages-Pythagorean-means | |
-Averages-Root-mean-square | |
-Averages-Simple-moving-average | |
-Balanced-brackets | |
-Balanced-ternary | |
-Benfords-law | |
-Bernoulli-numbers | |
-Best-shuffle | |
-Binary-digits | |
-Binary-search | |
-Binary-strings | |
-Bitcoin-address-validation | |
-Bitcoin-public-point-to-address | |
-Bitmap-B-zier-curves-Cubic | |
-Bitmap-Bresenhams-line-algorithm | |
-Bitmap-Flood-fill | |
-Bitmap-Histogram | |
-Bitmap-Midpoint-circle-algorithm | |
-Bitmap-PPM-conversion-through-a-pipe | |
-Bitmap-Read-a-PPM-file | |
-Bitmap-Read-an-image-through-a-pipe | |
-Bitmap-Write-a-PPM-file | |
-Bitwise-IO | |
-Bitwise-operations | |
-Boolean-values | |
-Box-the-compass | |
-Break-OO-privacy | |
-Brownian-tree | |
-Bulls-and-cows | |
-Bulls-and-cows-Player | |
-CRC-32 | |
-CSV-data-manipulation | |
-CSV-to-HTML-translation | |
-Caesar-cipher | |
-Calendar | |
-Calendar---for-REAL-programmers | |
-Call-a-foreign-language-function | |
-Call-a-function | |
-Call-a-function-in-a-shared-library | |
-Call-an-object-method | |
-Canny-edge-detector | |
-Carmichael-3-strong-pseudoprimes | |
-Case-sensitivity-of-identifiers | |
-Casting-out-nines | |
-Catalan-numbers | |
-Catalan-numbers-Pascals-triangle | |
-Catamorphism | |
-Catmull-Clark-subdivision-surface | |
-Character-codes | |
-Chat-server | |
-Check-Machin-like-formulas | |
-Check-that-file-exists | |
-Checkpoint-synchronization | |
-Chinese-remainder-theorem | |
-Cholesky-decomposition | |
-Circles-of-given-radius-through-two-points | |
-Classes | |
-Closest-pair-problem | |
-Closures-Value-capture | |
-Collections | |
-Color-of-a-screen-pixel | |
-Color-quantization | |
-Colour-bars-Display | |
-Colour-pinstripe-Display | |
-Colour-pinstripe-Printer | |
-Combinations | |
-Combinations-and-permutations | |
-Combinations-with-repetitions | |
-Comma-quibbling | |
-Command-line-arguments | |
-Comments | |
-Compare-sorting-algorithms-performance | |
-Compound-data-type | |
-Concurrent-computing | |
-Conditional-structures | |
-Conjugate-transpose | |
-Constrained-random-points-on-a-circle | |
-Continued-fraction | |
-Continued-fraction-Arithmetic-Construct-from-rational-number | |
-Continued-fraction-Arithmetic-G-matrix-NG,-Contined-Fraction-N- | |
-Convert-decimal-number-to-rational | |
-Conways-Game-of-Life | |
-Copy-a-string | |
-Count-in-factors | |
-Count-in-octal | |
-Count-occurrences-of-a-substring | |
-Count-the-coins | |
-Create-a-file | |
-Create-a-file-on-magnetic-tape | |
-Create-a-two-dimensional-array-at-runtime | |
-Create-an-HTML-table | |
-Currying | |
-Cut-a-rectangle | |
-Date-format | |
-Date-manipulation | |
-Day-of-the-week | |
-Deal-cards-for-FreeCell | |
-Death-Star | |
-Deconvolution-1D | |
-Deconvolution-2D+ | |
-Deepcopy | |
-Define-a-primitive-data-type | |
-Delegates | |
-Delete-a-file | |
-Detect-division-by-zero | |
-Determine-if-a-string-is-numeric | |
-Determine-if-only-one-instance-is-running | |
-Digital-root | |
-Digital-root-Multiplicative-digital-root | |
-Dinesmans-multiple-dwelling-problem | |
-Dining-philosophers | |
-Discordian-date | |
-Distributed-programming | |
-Documentation | |
-Dot-product | |
-Doubly-linked-list-Element-definition | |
-Doubly-linked-list-Element-insertion | |
-Doubly-linked-list-Traversal | |
-Dragon-curve | |
-Draw-a-clock | |
-Draw-a-cuboid | |
-Draw-a-sphere | |
-Dutch-national-flag-problem | |
-Dynamic-variable-names | |
-Echo-server | |
-Element-wise-operations | |
-Empty-directory | |
-Empty-string | |
-Enforced-immutability | |
-Entropy | |
-Enumerations | |
-Environment-variables | |
-Equilibrium-index | |
-Ethiopian-multiplication | |
-Euler-method | |
-Evaluate-binomial-coefficients | |
-Even-or-odd | |
-Events | |
-Evolutionary-algorithm | |
-Exceptions | |
-Exceptions-Catch-an-exception-thrown-in-a-nested-call | |
-Executable-library | |
-Execute-SNUSP | |
-Execute-a-Markov-algorithm | |
-Execute-a-system-command | |
-Exponentiation-operator | |
-Extensible-prime-generator | |
-Extreme-floating-point-values | |
-Factorial | |
-Factors-of-a-Mersenne-number | |
-Factors-of-an-integer | |
-Fast-Fourier-transform | |
-Fibonacci-n-step-number-sequences | |
-Fibonacci-sequence | |
-Fibonacci-word | |
-Fibonacci-word-fractal | |
-File-input-output | |
-File-modification-time | |
-File-size | |
-Filter | |
-Find-common-directory-path | |
-Find-largest-left-truncatable-prime-in-a-given-base | |
-Find-limit-of-recursion | |
-Find-the-last-Sunday-of-each-month | |
-Find-the-missing-permutation | |
-First-class-environments | |
-First-class-functions | |
-First-class-functions-Use-numbers-analogously | |
-Five-weekends | |
-FizzBuzz | |
-Flatten-a-list | |
-Flipping-bits-game | |
-Flow-control-structures | |
-Floyds-triangle | |
-Forest-fire | |
-Fork | |
-Formal-power-series | |
-Formatted-numeric-output | |
-Forward-difference | |
-Four-bit-adder | |
-Fractal-tree | |
-Fractran | |
-Function-composition | |
-Function-definition | |
-Function-frequency | |
-GUI-Maximum-window-dimensions | |
-GUI-component-interaction | |
-GUI-enabling-disabling-of-controls | |
-Galton-box-animation | |
-Gamma-function | |
-Gaussian-elimination | |
-Generate-Chess960-starting-position | |
-Generate-lower-case-ASCII-alphabet | |
-Generator-Exponential | |
-Generic-swap | |
-Globally-replace-text-in-several-files | |
-Gray-code | |
-Grayscale-image | |
-Greatest-common-divisor | |
-Greatest-element-of-a-list | |
-Greatest-subsequential-sum | |
-Greyscale-bars-Display | |
-Guess-the-number | |
-Guess-the-number-With-feedback | |
-Guess-the-number-With-feedback--player- | |
-HTTP | |
-HTTPS | |
-HTTPS-Authenticated | |
-HTTPS-Client-authenticated | |
-Hailstone-sequence | |
-Hamming-numbers | |
-Handle-a-signal | |
-Happy-numbers | |
-Harshad-or-Niven-series | |
-Hash-from-two-arrays | |
-Hash-join | |
-Haversine-formula | |
-Hello-world-Graphical | |
-Hello-world-Line-printer | |
-Hello-world-Newbie | |
-Hello-world-Newline-omission | |
-Hello-world-Standard-error | |
-Hello-world-Text | |
-Hello-world-Web-server | |
-Here-document | |
-Heronian-triangles | |
-Hickerson-series-of-almost-integers | |
-Higher-order-functions | |
-History-variables | |
-Hofstadter-Conway-$10,000-sequence | |
-Hofstadter-Figure-Figure-sequences | |
-Hofstadter-Q-sequence | |
-Holidays-related-to-Easter | |
-Horizontal-sundial-calculations | |
-Horners-rule-for-polynomial-evaluation | |
-Host-introspection | |
-Hostname | |
-Hough-transform | |
-Huffman-coding | |
-I-before-E-except-after-C | |
-IBAN | |
-Identity-matrix | |
-Image-convolution | |
-Image-noise | |
-Include-a-file | |
-Increment-a-numerical-string | |
-Infinity | |
-Inheritance-Multiple | |
-Inheritance-Single | |
-Input-loop | |
-Integer-comparison | |
-Integer-overflow | |
-Integer-sequence | |
-Interactive-programming | |
-Introspection | |
-Inverted-index | |
-Inverted-syntax | |
-Iterated-digits-squaring | |
-JSON | |
-Jensens-Device | |
-Josephus-problem | |
-Joystick-position | |
-Jump-anywhere | |
-K-d-tree | |
-K-means++-clustering | |
-Kaprekar-numbers | |
-Keyboard-input-Flush-the-keyboard-buffer | |
-Keyboard-input-Keypress-check | |
-Keyboard-input-Obtain-a-Y-or-N-response | |
-Keyboard-macros | |
-Knapsack-problem-0-1 | |
-Knapsack-problem-Bounded | |
-Knapsack-problem-Continuous | |
-Knights-tour | |
-Knuth-shuffle | |
-Knuths-algorithm-S | |
-LU-decomposition | |
-LZW-compression | |
-Langtons-ant | |
-Largest-int-from-concatenated-ints | |
-Last-Friday-of-each-month | |
-Last-letter-first-letter | |
-Leap-year | |
-Least-common-multiple | |
-Left-factorials | |
-Letter-frequency | |
-Levenshtein-distance | |
-Linear-congruential-generator | |
-List-comprehensions | |
-Literals-Floating-point | |
-Literals-Integer | |
-Literals-String | |
-Logical-operations | |
-Long-multiplication | |
-Longest-common-subsequence | |
-Longest-increasing-subsequence | |
-Longest-string-challenge | |
-Look-and-say-sequence | |
-Loop-over-multiple-arrays-simultaneously | |
-Loops-Break | |
-Loops-Continue | |
-Loops-Do-while | |
-Loops-Downward-for | |
-Loops-For | |
-Loops-For-with-a-specified-step | |
-Loops-Foreach | |
-Loops-Infinite | |
-Loops-N-plus-one-half | |
-Loops-Nested | |
-Loops-While | |
-Lucas-Lehmer-test | |
-Ludic-numbers | |
-Luhn-test-of-credit-card-numbers | |
-MD4 | |
-MD5 | |
-MD5-Implementation | |
-Machine-code | |
-Mad-Libs | |
-Magic-squares-of-odd-order | |
-Main-step-of-GOST-28147-89 | |
-Make-directory-path | |
-Man-or-boy-test | |
-Mandelbrot-set | |
-Map-range | |
-Matrix-arithmetic | |
-Matrix-exponentiation-operator | |
-Matrix-multiplication | |
-Matrix-transposition | |
-Maximum-triangle-path-sum | |
-Maze-generation | |
-Maze-solving | |
-Median-filter | |
-Memory-allocation | |
-Memory-layout-of-a-data-structure | |
-Menu | |
-Metaprogramming | |
-Metered-concurrency | |
-Metronome | |
-Middle-three-digits | |
-Minesweeper-game | |
-Modular-exponentiation | |
-Modular-inverse | |
-Monte-Carlo-methods | |
-Monty-Hall-problem | |
-Morse-code | |
-Mouse-position | |
-Move-to-front-algorithm | |
-Multifactorial | |
-Multiple-distinct-objects | |
-Multiple-regression | |
-Multiplication-tables | |
-Multiplicative-order | |
-Multisplit | |
-Munching-squares | |
-Mutual-recursion | |
-N-queens-problem | |
-Named-parameters | |
-Narcissist | |
-Narcissistic-decimal-number | |
-Natural-sorting | |
-Nautical-bell | |
-Non-continuous-subsequences | |
-Non-decimal-radices-Convert | |
-Non-decimal-radices-Input | |
-Non-decimal-radices-Output | |
-Nth | |
-Nth-root | |
-Null-object | |
-Number-reversal-game | |
-Numeric-error-propagation | |
-Numerical-integration | |
-Numerical-integration-Gauss-Legendre-Quadrature | |
-OLE-Automation | |
-Object-serialization | |
-Odd-word-problem | |
-Old-lady-swallowed-a-fly | |
-One-dimensional-cellular-automata | |
-One-of-n-lines-in-a-file | |
-OpenGL | |
-Optional-parameters | |
-Order-disjoint-list-items | |
-Order-two-numerical-lists | |
-Ordered-Partitions | |
-Ordered-words | |
-Palindrome-detection | |
-Pangram-checker | |
-Paraffins | |
-Parallel-calculations | |
-Parametrized-SQL-statement | |
-Parse-an-IP-Address | |
-Parsing-RPN-calculator-algorithm | |
-Parsing-RPN-to-infix-conversion | |
-Parsing-Shunting-yard-algorithm | |
-Partial-function-application | |
-Pascals-triangle | |
-Pascals-triangle-Puzzle | |
-Penneys-game | |
-Percentage-difference-between-images | |
-Percolation-Bond-percolation | |
-Percolation-Mean-cluster-density | |
-Percolation-Mean-run-density | |
-Percolation-Site-percolation | |
-Perfect-numbers | |
-Permutation-test | |
-Permutations | |
-Permutations-Derangements | |
-Permutations-Rank-of-a-permutation | |
-Permutations-by-swapping | |
-Pernicious-numbers | |
-Phrase-reversals | |
-Pi | |
-Pick-random-element | |
-Pig-the-dice-game | |
-Pig-the-dice-game-Player | |
-Pinstripe-Display | |
-Play-recorded-sounds | |
-Playing-cards | |
-Plot-coordinate-pairs | |
-Pointers-and-references | |
-Polymorphic-copy | |
-Polymorphism | |
-Polynomial-long-division | |
-Polynomial-regression | |
-Power-set | |
-Pragmatic-directives | |
-Price-fraction | |
-Primality-by-trial-division | |
-Prime-decomposition | |
-Priority-queue | |
-Probabilistic-choice | |
-Problem-of-Apollonius | |
-Program-name | |
-Program-termination | |
-Pythagorean-triples | |
-QR-decomposition | |
-Quaternion-type | |
-Queue-Definition | |
-Queue-Usage | |
-Quickselect-algorithm | |
-Quine | |
-README | |
-RIPEMD-160 | |
-RSA-code | |
-Random-number-generator--device- | |
-Random-numbers | |
-Range-expansion | |
-Range-extraction | |
-Ranking-methods | |
-Rate-counter | |
-Ray-casting-algorithm | |
-Read-a-configuration-file | |
-Read-a-file-line-by-line | |
-Read-a-specific-line-from-a-file | |
-Read-entire-file | |
-Real-constants-and-functions | |
-Record-sound | |
-Reduced-row-echelon-form | |
-Regular-expressions | |
-Remove-duplicate-elements | |
-Remove-lines-from-a-file | |
-Rename-a-file | |
-Rep-string | |
-Repeat-a-string | |
-Resistor-mesh | |
-Respond-to-an-unknown-method-call | |
-Return-multiple-values | |
-Reverse-a-string | |
-Reverse-words-in-a-string | |
-Rock-paper-scissors | |
-Roman-numerals-Decode | |
-Roman-numerals-Encode | |
-Roots-of-a-function | |
-Roots-of-a-quadratic-function | |
-Roots-of-unity | |
-Rot-13 | |
-Run-length-encoding | |
-Runge-Kutta-method | |
-Runtime-evaluation | |
-Runtime-evaluation-In-an-environment | |
-S-Expressions | |
-SEDOLs | |
-SHA-1 | |
-SHA-256 | |
-SOAP | |
-SQL-based-authentication | |
-Safe-addition | |
-Same-Fringe | |
-Scope-modifiers | |
-Search-a-list | |
-Secure-temporary-file | |
-Self-describing-numbers | |
-Self-referential-sequence | |
-Semiprime | |
-Semordnilap | |
-Send-an-unknown-method-call | |
-Send-email | |
-Sequence-of-non-squares | |
-Sequence-of-primes-by-Trial-Division | |
-Set | |
-Set-consolidation | |
-Set-of-real-numbers | |
-Set-puzzle | |
-Seven-sided-dice-from-five-sided-dice | |
-Shell-one-liner | |
-Short-circuit-evaluation | |
-Show-the-epoch | |
-Sierpinski-carpet | |
-Sierpinski-triangle | |
-Sierpinski-triangle-Graphical | |
-Sieve-of-Eratosthenes | |
-Simple-database | |
-Simple-windowed-application | |
-Simulate-input-Keyboard | |
-Simulate-input-Mouse | |
-Singleton | |
-Singly-linked-list-Element-definition | |
-Singly-linked-list-Element-insertion | |
-Singly-linked-list-Traversal | |
-Sleep | |
-Sockets | |
-Sokoban | |
-Solve-a-Hidato-puzzle | |
-Solve-a-Holy-Knights-tour | |
-Solve-a-Hopido-puzzle | |
-Solve-a-Numbrix-puzzle | |
-Solve-the-no-connection-puzzle | |
-Sort-an-array-of-composite-structures | |
-Sort-an-integer-array | |
-Sort-disjoint-sublist | |
-Sort-using-a-custom-comparator | |
-Sorting-algorithms-Bead-sort | |
-Sorting-algorithms-Bogosort | |
-Sorting-algorithms-Bubble-sort | |
-Sorting-algorithms-Cocktail-sort | |
-Sorting-algorithms-Comb-sort | |
-Sorting-algorithms-Counting-sort | |
-Sorting-algorithms-Gnome-sort | |
-Sorting-algorithms-Heapsort | |
-Sorting-algorithms-Insertion-sort | |
-Sorting-algorithms-Merge-sort | |
-Sorting-algorithms-Pancake-sort | |
-Sorting-algorithms-Permutation-sort | |
-Sorting-algorithms-Quicksort | |
-Sorting-algorithms-Radix-sort | |
-Sorting-algorithms-Selection-sort | |
-Sorting-algorithms-Shell-sort | |
-Sorting-algorithms-Sleep-sort | |
-Sorting-algorithms-Stooge-sort | |
-Sorting-algorithms-Strand-sort | |
-Soundex | |
-Sparkline-in-unicode | |
-Special-variables | |
-Speech-synthesis | |
-Spiral-matrix | |
-Stable-marriage-problem | |
-Stack | |
-Stack-traces | |
-Stair-climbing-puzzle | |
-State-name-puzzle | |
-Statistics-Basic | |
-Stem-and-leaf-plot | |
-Stern-Brocot-sequence | |
-String-append | |
-String-case | |
-String-comparison | |
-String-concatenation | |
-String-interpolation--included- | |
-String-length | |
-String-matching | |
-String-prepend | |
-Strip-a-set-of-characters-from-a-string | |
-Strip-block-comments | |
-Strip-comments-from-a-string | |
-Strip-control-codes-and-extended-characters-from-a-string | |
-Strip-whitespace-from-a-string-Top-and-tail | |
-Substring | |
-Substring-Top-and-tail | |
-Subtractive-generator | |
-Sudoku | |
-Sum-and-product-of-an-array | |
-Sum-digits-of-an-integer | |
-Sum-multiples-of-3-and-5 | |
-Sum-of-a-series | |
-Sum-of-squares | |
-Sutherland-Hodgman-polygon-clipping | |
-Symmetric-difference | |
-Synchronous-concurrency | |
-System-time | |
-Table-creation-Postal-addresses | |
-Take-notes-on-the-command-line | |
-Temperature-conversion | |
-Terminal-control-Clear-the-screen | |
-Terminal-control-Coloured-text | |
-Terminal-control-Cursor-movement | |
-Terminal-control-Cursor-positioning | |
-Terminal-control-Dimensions | |
-Terminal-control-Display-an-extended-character | |
-Terminal-control-Hiding-the-cursor | |
-Terminal-control-Inverse-video | |
-Terminal-control-Positional-read | |
-Terminal-control-Preserve-screen | |
-Terminal-control-Ringing-the-terminal-bell | |
-Terminal-control-Unicode-output | |
-Ternary-logic | |
-Test-a-function | |
-Text-processing-1 | |
-Text-processing-2 | |
-Text-processing-Max-licenses-in-use | |
-Textonyms | |
-The-ISAAC-Cipher | |
-The-Twelve-Days-of-Christmas | |
-Thieles-interpolation-formula | |
-Tic-tac-toe | |
-Time-a-function | |
-Tokenize-a-string | |
-Top-rank-per-group | |
-Topic-variable | |
-Topological-sort | |
-Topswops | |
-Total-circles-area | |
-Towers-of-Hanoi | |
-Trabb-Pardo-Knuth-algorithm | |
-Tree-traversal | |
-Trigonometric-functions | |
-Truncate-a-file | |
-Twelve-statements | |
-URL-decoding | |
-URL-encoding | |
-Ulam-spiral--for-primes- | |
-Unbias-a-random-generator | |
-Undefined-values | |
-Unicode-strings | |
-Unicode-variable-names | |
-Universal-Turing-machine | |
-Unix-ls | |
-Update-a-configuration-file | |
-Use-another-language-to-call-a-function | |
-User-input-Graphical | |
-User-input-Text | |
-Vampire-number | |
-Van-der-Corput-sequence | |
-Variable-length-quantity | |
-Variable-size-Get | |
-Variables | |
-Variadic-function | |
-Vector-products | |
-Verify-distribution-uniformity-Chi-squared-test | |
-Verify-distribution-uniformity-Naive | |
-Video-display-modes | |
-Vigen-re-cipher | |
-Vigen-re-cipher-Cryptanalysis | |
-Visualize-a-tree | |
-Vogels-approximation-method | |
-Voronoi-diagram | |
-Walk-a-directory-Non-recursively | |
-Walk-a-directory-Recursively | |
-Web-scraping | |
-Window-creation | |
-Window-creation-X11 | |
-Window-management | |
-Wireworld | |
-Word-wrap | |
-World-Cup-group-stage | |
-Write-float-arrays-to-a-text-file | |
-Write-language-name-in-3D-ASCII | |
-Write-to-Windows-event-log | |
-XML-DOM-serialization | |
-XML-Input | |
-XML-Output | |
-XML-XPath | |
-Xiaolin-Wus-line-algorithm | |
-Y-combinator | |
-Yahoo--search-interface | |
-Yin-and-yang | |
-Zebra-puzzle | |
-Zeckendorf-arithmetic | |
-Zeckendorf-number-representation | |
-Zero-to-the-zero-power | |
-Zhang-Suen-thinning-algorithm | |
-Zig-zag-matrix | |
+ | |
FAILED: [20] python/rosetta/:list | |
Running 21: js/:learn # short names check | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py js/:learn | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
Traceback (most recent call last): | |
File "../lib/standalone.py", line 65, in <module> | |
main(sys.argv[1:]) | |
File "../lib/standalone.py", line 61, in main | |
answer, _ = cheat_wrapper.cheat_wrapper(query, request_options=request_options) | |
File "/home/pers/cvs/cheat.sh/lib/cheat_wrapper.py", line 101, in cheat_wrapper | |
answers = [get_answer_dict(topic, request_options=request_options)] | |
File "/home/pers/cvs/cheat.sh/lib/routing.py", line 155, in get_answer_dict | |
answer = self._get_page_dict(topic, topic_type, request_options=request_options) | |
File "/home/pers/cvs/cheat.sh/lib/routing.py", line 110, in _get_page_dict | |
return self._adapter[topic_type]\ | |
File "/home/pers/cvs/cheat.sh/lib/adapter/adapter.py", line 140, in get_page_dict | |
answer = self._get_page(topic, request_options=request_options) | |
File "/home/pers/cvs/cheat.sh/lib/adapter/learnxiny.py", line 40, in _get_page | |
return self.adapters[lang].get_page(topic) | |
File "/home/pers/cvs/cheat.sh/lib/adapter/learnxiny.py", line 195, in get_page | |
return "\n".join(self._whole_cheatsheet) + "\n" | |
TypeError: can only join an iterable | |
--- results/21 Sat Oct 3 18:10:40 2020 | |
+++ /tmp/cht.sh.tests-3Jhh4cBrygrLXP Mon Oct 5 22:22:31 2020 | |
@@ -1,606 +0,0 @@ | |
-// Single-line comments start with two slashes. | |
-/* Multiline comments start with slash-star, | |
- and end with star-slash */ | |
- | |
-// Statements can be terminated by ; | |
-doStuff(); | |
- | |
-// ... but they don't have to be, as semicolons are automatically inserted | |
-// wherever there's a newline, except in certain cases. | |
-doStuff() | |
- | |
-// Because those cases can cause unexpected results, we'll keep on using | |
-// semicolons in this guide. | |
- | |
-/////////////////////////////////// | |
-// 1. Numbers, Strings and Operators | |
- | |
-// JavaScript has one number type (which is a 64-bit IEEE 754 double). | |
-// Doubles have a 52-bit mantissa, which is enough to store integers | |
-// up to about 9✕10¹⁵ precisely. | |
-3; // = 3 | |
-1.5; // = 1.5 | |
- | |
-// Some basic arithmetic works as you'd expect. | |
-1 + 1; // = 2 | |
-0.1 + 0.2; // = 0.30000000000000004 | |
-8 - 1; // = 7 | |
-10 * 2; // = 20 | |
-35 / 5; // = 7 | |
- | |
-// Including uneven division. | |
-5 / 2; // = 2.5 | |
- | |
-// And modulo division. | |
-10 % 2; // = 0 | |
-30 % 4; // = 2 | |
-18.5 % 7; // = 4.5 | |
- | |
-// Bitwise operations also work; when you perform a bitwise operation your float | |
-// is converted to a signed int *up to* 32 bits. | |
-1 << 2; // = 4 | |
- | |
-// Precedence is enforced with parentheses. | |
-(1 + 3) * 2; // = 8 | |
- | |
-// There are three special not-a-real-number values: | |
-Infinity; // result of e.g. 1/0 | |
--Infinity; // result of e.g. -1/0 | |
-NaN; // result of e.g. 0/0, stands for 'Not a Number' | |
- | |
-// There's also a boolean type. | |
-true; | |
-false; | |
- | |
-// Strings are created with ' or ". | |
-'abc'; | |
-"Hello, world"; | |
- | |
-// Negation uses the ! symbol | |
-!true; // = false | |
-!false; // = true | |
- | |
-// Equality is === | |
-1 === 1; // = true | |
-2 === 1; // = false | |
- | |
-// Inequality is !== | |
-1 !== 1; // = false | |
-2 !== 1; // = true | |
- | |
-// More comparisons | |
-1 < 10; // = true | |
-1 > 10; // = false | |
-2 <= 2; // = true | |
-2 >= 2; // = true | |
- | |
-// Strings are concatenated with + | |
-"Hello " + "world!"; // = "Hello world!" | |
- | |
-// ... which works with more than just strings | |
-"1, 2, " + 3; // = "1, 2, 3" | |
-"Hello " + ["world", "!"]; // = "Hello world,!" | |
- | |
-// and are compared with < and > | |
-"a" < "b"; // = true | |
- | |
-// Type coercion is performed for comparisons with double equals... | |
-"5" == 5; // = true | |
-null == undefined; // = true | |
- | |
-// ...unless you use === | |
-"5" === 5; // = false | |
-null === undefined; // = false | |
- | |
-// ...which can result in some weird behaviour... | |
-13 + !0; // 14 | |
-"13" + !0; // '13true' | |
- | |
-// You can access characters in a string with `charAt` | |
-"This is a string".charAt(0); // = 'T' | |
- | |
-// ...or use `substring` to get larger pieces. | |
-"Hello world".substring(0, 5); // = "Hello" | |
- | |
-// `length` is a property, so don't use (). | |
-"Hello".length; // = 5 | |
- | |
-// There's also `null` and `undefined`. | |
-null; // used to indicate a deliberate non-value | |
-undefined; // used to indicate a value is not currently present (although | |
- // `undefined` is actually a value itself) | |
- | |
-// false, null, undefined, NaN, 0 and "" are falsy; everything else is truthy. | |
-// Note that 0 is falsy and "0" is truthy, even though 0 == "0". | |
- | |
-/////////////////////////////////// | |
-// 2. Variables, Arrays and Objects | |
- | |
-// Variables are declared with the `var` keyword. JavaScript is dynamically | |
-// typed, so you don't need to specify type. Assignment uses a single `=` | |
-// character. | |
-var someVar = 5; | |
- | |
-// If you leave the var keyword off, you won't get an error... | |
-someOtherVar = 10; | |
- | |
-// ...but your variable will be created in the global scope, not in the scope | |
-// you defined it in. | |
- | |
-// Variables declared without being assigned to are set to undefined. | |
-var someThirdVar; // = undefined | |
- | |
-// If you want to declare a couple of variables, then you could use a comma | |
-// separator | |
-var someFourthVar = 2, someFifthVar = 4; | |
- | |
-// There's shorthand for performing math operations on variables: | |
-someVar += 5; // equivalent to someVar = someVar + 5; someVar is 10 now | |
-someVar *= 10; // now someVar is 100 | |
- | |
-// and an even-shorter-hand for adding or subtracting 1 | |
-someVar++; // now someVar is 101 | |
-someVar--; // back to 100 | |
- | |
-// Arrays are ordered lists of values, of any type. | |
-var myArray = ["Hello", 45, true]; | |
- | |
-// Their members can be accessed using the square-brackets subscript syntax. | |
-// Array indices start at zero. | |
-myArray[1]; // = 45 | |
- | |
-// Arrays are mutable and of variable length. | |
-myArray.push("World"); | |
-myArray.length; // = 4 | |
- | |
-// Add/Modify at specific index | |
-myArray[3] = "Hello"; | |
- | |
-// Add and remove element from front or back end of an array | |
-myArray.unshift(3); // Add as the first element | |
-someVar = myArray.shift(); // Remove first element and return it | |
-myArray.push(3); // Add as the last element | |
-someVar = myArray.pop(); // Remove last element and return it | |
- | |
-// Join all elements of an array with semicolon | |
-var myArray0 = [32,false,"js",12,56,90]; | |
-myArray0.join(";"); // = "32;false;js;12;56;90" | |
- | |
-// Get subarray of elements from index 1 (include) to 4 (exclude) | |
-myArray0.slice(1,4); // = [false,"js",12] | |
- | |
-// Remove 4 elements starting from index 2, and insert there strings | |
-// "hi","wr" and "ld"; return removed subarray | |
-myArray0.splice(2,4,"hi","wr","ld"); // = ["js",12,56,90] | |
-// myArray0 === [32,false,"hi","wr","ld"] | |
- | |
-// JavaScript's objects are equivalent to "dictionaries" or "maps" in other | |
-// languages: an unordered collection of key-value pairs. | |
-var myObj = {key1: "Hello", key2: "World"}; | |
- | |
-// Keys are strings, but quotes aren't required if they're a valid | |
-// JavaScript identifier. Values can be any type. | |
-var myObj = {myKey: "myValue", "my other key": 4}; | |
- | |
-// Object attributes can also be accessed using the subscript syntax, | |
-myObj["my other key"]; // = 4 | |
- | |
-// ... or using the dot syntax, provided the key is a valid identifier. | |
-myObj.myKey; // = "myValue" | |
- | |
-// Objects are mutable; values can be changed and new keys added. | |
-myObj.myThirdKey = true; | |
- | |
-// If you try to access a value that's not yet set, you'll get undefined. | |
-myObj.myFourthKey; // = undefined | |
- | |
-/////////////////////////////////// | |
-// 3. Logic and Control Structures | |
- | |
-// The `if` structure works as you'd expect. | |
-var count = 1; | |
-if (count == 3){ | |
- // evaluated if count is 3 | |
-} else if (count == 4){ | |
- // evaluated if count is 4 | |
-} else { | |
- // evaluated if it's not either 3 or 4 | |
-} | |
- | |
-// As does `while`. | |
-while (true){ | |
- // An infinite loop! | |
-} | |
- | |
-// Do-while loops are like while loops, except they always run at least once. | |
-var input; | |
-do { | |
- input = getInput(); | |
-} while (!isValid(input)); | |
- | |
-// The `for` loop is the same as C and Java: | |
-// initialization; continue condition; iteration. | |
-for (var i = 0; i < 5; i++){ | |
- // will run 5 times | |
-} | |
- | |
-// Breaking out of labeled loops is similar to Java | |
-outer: | |
-for (var i = 0; i < 10; i++) { | |
- for (var j = 0; j < 10; j++) { | |
- if (i == 5 && j ==5) { | |
- break outer; | |
- // breaks out of outer loop instead of only the inner one | |
- } | |
- } | |
-} | |
- | |
-// The for/in statement allows iteration over properties of an object. | |
-var description = ""; | |
-var person = {fname:"Paul", lname:"Ken", age:18}; | |
-for (var x in person){ | |
- description += person[x] + " "; | |
-} // description = 'Paul Ken 18 ' | |
- | |
-// The for/of statement allows iteration over iterable objects (including the built-in String, | |
-// Array, e.g. the Array-like arguments or NodeList objects, TypedArray, Map and Set, | |
-// and user-defined iterables). | |
-var myPets = ""; | |
-var pets = ["cat", "dog", "hamster", "hedgehog"]; | |
-for (var pet of pets){ | |
- myPets += pet + " "; | |
-} // myPets = 'cat dog hamster hedgehog ' | |
- | |
-// && is logical and, || is logical or | |
-if (house.size == "big" && house.colour == "blue"){ | |
- house.contains = "bear"; | |
-} | |
-if (colour == "red" || colour == "blue"){ | |
- // colour is either red or blue | |
-} | |
- | |
-// && and || "short circuit", which is useful for setting default values. | |
-var name = otherName || "default"; | |
- | |
-// The `switch` statement checks for equality with `===`. | |
-// Use 'break' after each case | |
-// or the cases after the correct one will be executed too. | |
-grade = 'B'; | |
-switch (grade) { | |
- case 'A': | |
- console.log("Great job"); | |
- break; | |
- case 'B': | |
- console.log("OK job"); | |
- break; | |
- case 'C': | |
- console.log("You can do better"); | |
- break; | |
- default: | |
- console.log("Oy vey"); | |
- break; | |
-} | |
- | |
- | |
-/////////////////////////////////// | |
-// 4. Functions, Scope and Closures | |
- | |
-// JavaScript functions are declared with the `function` keyword. | |
-function myFunction(thing){ | |
- return thing.toUpperCase(); | |
-} | |
-myFunction("foo"); // = "FOO" | |
- | |
-// Note that the value to be returned must start on the same line as the | |
-// `return` keyword, otherwise you'll always return `undefined` due to | |
-// automatic semicolon insertion. Watch out for this when using Allman style. | |
-function myFunction(){ | |
- return // <- semicolon automatically inserted here | |
- {thisIsAn: 'object literal'}; | |
-} | |
-myFunction(); // = undefined | |
- | |
-// JavaScript functions are first class objects, so they can be reassigned to | |
-// different variable names and passed to other functions as arguments - for | |
-// example, when supplying an event handler: | |
-function myFunction(){ | |
- // this code will be called in 5 seconds' time | |
-} | |
-setTimeout(myFunction, 5000); | |
-// Note: setTimeout isn't part of the JS language, but is provided by browsers | |
-// and Node.js. | |
- | |
-// Another function provided by browsers is setInterval | |
-function myFunction(){ | |
- // this code will be called every 5 seconds | |
-} | |
-setInterval(myFunction, 5000); | |
- | |
-// Function objects don't even have to be declared with a name - you can write | |
-// an anonymous function definition directly into the arguments of another. | |
-setTimeout(function(){ | |
- // this code will be called in 5 seconds' time | |
-}, 5000); | |
- | |
-// JavaScript has function scope; functions get their own scope but other blocks | |
-// do not. | |
-if (true){ | |
- var i = 5; | |
-} | |
-i; // = 5 - not undefined as you'd expect in a block-scoped language | |
- | |
-// This has led to a common pattern of "immediately-executing anonymous | |
-// functions", which prevent temporary variables from leaking into the global | |
-// scope. | |
-(function(){ | |
- var temporary = 5; | |
- // We can access the global scope by assigning to the "global object", which | |
- // in a web browser is always `window`. The global object may have a | |
- // different name in non-browser environments such as Node.js. | |
- window.permanent = 10; | |
-})(); | |
-temporary; // raises ReferenceError | |
-permanent; // = 10 | |
- | |
-// One of JavaScript's most powerful features is closures. If a function is | |
-// defined inside another function, the inner function has access to all the | |
-// outer function's variables, even after the outer function exits. | |
-function sayHelloInFiveSeconds(name){ | |
- var prompt = "Hello, " + name + "!"; | |
- // Inner functions are put in the local scope by default, as if they were | |
- // declared with `var`. | |
- function inner(){ | |
- alert(prompt); | |
- } | |
- setTimeout(inner, 5000); | |
- // setTimeout is asynchronous, so the sayHelloInFiveSeconds function will | |
- // exit immediately, and setTimeout will call inner afterwards. However, | |
- // because inner is "closed over" sayHelloInFiveSeconds, inner still has | |
- // access to the `prompt` variable when it is finally called. | |
-} | |
-sayHelloInFiveSeconds("Adam"); // will open a popup with "Hello, Adam!" in 5s | |
- | |
-/////////////////////////////////// | |
-// 5. More about Objects; Constructors and Prototypes | |
- | |
-// Objects can contain functions. | |
-var myObj = { | |
- myFunc: function(){ | |
- return "Hello world!"; | |
- } | |
-}; | |
-myObj.myFunc(); // = "Hello world!" | |
- | |
-// When functions attached to an object are called, they can access the object | |
-// they're attached to using the `this` keyword. | |
-myObj = { | |
- myString: "Hello world!", | |
- myFunc: function(){ | |
- return this.myString; | |
- } | |
-}; | |
-myObj.myFunc(); // = "Hello world!" | |
- | |
-// What this is set to has to do with how the function is called, not where | |
-// it's defined. So, our function doesn't work if it isn't called in the | |
-// context of the object. | |
-var myFunc = myObj.myFunc; | |
-myFunc(); // = undefined | |
- | |
-// Inversely, a function can be assigned to the object and gain access to it | |
-// through `this`, even if it wasn't attached when it was defined. | |
-var myOtherFunc = function(){ | |
- return this.myString.toUpperCase(); | |
-}; | |
-myObj.myOtherFunc = myOtherFunc; | |
-myObj.myOtherFunc(); // = "HELLO WORLD!" | |
- | |
-// We can also specify a context for a function to execute in when we invoke it | |
-// using `call` or `apply`. | |
- | |
-var anotherFunc = function(s){ | |
- return this.myString + s; | |
-}; | |
-anotherFunc.call(myObj, " And Hello Moon!"); // = "Hello World! And Hello Moon!" | |
- | |
-// The `apply` function is nearly identical, but takes an array for an argument | |
-// list. | |
- | |
-anotherFunc.apply(myObj, [" And Hello Sun!"]); // = "Hello World! And Hello Sun!" | |
- | |
-// This is useful when working with a function that accepts a sequence of | |
-// arguments and you want to pass an array. | |
- | |
-Math.min(42, 6, 27); // = 6 | |
-Math.min([42, 6, 27]); // = NaN (uh-oh!) | |
-Math.min.apply(Math, [42, 6, 27]); // = 6 | |
- | |
-// But, `call` and `apply` are only temporary. When we want it to stick, we can | |
-// use `bind`. | |
- | |
-var boundFunc = anotherFunc.bind(myObj); | |
-boundFunc(" And Hello Saturn!"); // = "Hello World! And Hello Saturn!" | |
- | |
-// `bind` can also be used to partially apply (curry) a function. | |
- | |
-var product = function(a, b){ return a * b; }; | |
-var doubler = product.bind(this, 2); | |
-doubler(8); // = 16 | |
- | |
-// When you call a function with the `new` keyword, a new object is created, and | |
-// made available to the function via the `this` keyword. Functions designed to be | |
-// called like that are called constructors. | |
- | |
-var MyConstructor = function(){ | |
- this.myNumber = 5; | |
-}; | |
-myNewObj = new MyConstructor(); // = {myNumber: 5} | |
-myNewObj.myNumber; // = 5 | |
- | |
-// Unlike most other popular object-oriented languages, JavaScript has no | |
-// concept of 'instances' created from 'class' blueprints; instead, JavaScript | |
-// combines instantiation and inheritance into a single concept: a 'prototype'. | |
- | |
-// Every JavaScript object has a 'prototype'. When you go to access a property | |
-// on an object that doesn't exist on the actual object, the interpreter will | |
-// look at its prototype. | |
- | |
-// Some JS implementations let you access an object's prototype on the magic | |
-// property `__proto__`. While this is useful for explaining prototypes it's not | |
-// part of the standard; we'll get to standard ways of using prototypes later. | |
-var myObj = { | |
- myString: "Hello world!" | |
-}; | |
-var myPrototype = { | |
- meaningOfLife: 42, | |
- myFunc: function(){ | |
- return this.myString.toLowerCase(); | |
- } | |
-}; | |
- | |
-myObj.__proto__ = myPrototype; | |
-myObj.meaningOfLife; // = 42 | |
- | |
-// This works for functions, too. | |
-myObj.myFunc(); // = "hello world!" | |
- | |
-// Of course, if your property isn't on your prototype, the prototype's | |
-// prototype is searched, and so on. | |
-myPrototype.__proto__ = { | |
- myBoolean: true | |
-}; | |
-myObj.myBoolean; // = true | |
- | |
-// There's no copying involved here; each object stores a reference to its | |
-// prototype. This means we can alter the prototype and our changes will be | |
-// reflected everywhere. | |
-myPrototype.meaningOfLife = 43; | |
-myObj.meaningOfLife; // = 43 | |
- | |
-// The for/in statement allows iteration over properties of an object, | |
-// walking up the prototype chain until it sees a null prototype. | |
-for (var x in myObj){ | |
- console.log(myObj[x]); | |
-} | |
-///prints: | |
-// Hello world! | |
-// 43 | |
-// [Function: myFunc] | |
-// true | |
- | |
-// To only consider properties attached to the object itself | |
-// and not its prototypes, use the `hasOwnProperty()` check. | |
-for (var x in myObj){ | |
- if (myObj.hasOwnProperty(x)){ | |
- console.log(myObj[x]); | |
- } | |
-} | |
-///prints: | |
-// Hello world! | |
- | |
-// We mentioned that `__proto__` was non-standard, and there's no standard way to | |
-// change the prototype of an existing object. However, there are two ways to | |
-// create a new object with a given prototype. | |
- | |
-// The first is Object.create, which is a recent addition to JS, and therefore | |
-// not available in all implementations yet. | |
-var myObj = Object.create(myPrototype); | |
-myObj.meaningOfLife; // = 43 | |
- | |
-// The second way, which works anywhere, has to do with constructors. | |
-// Constructors have a property called prototype. This is *not* the prototype of | |
-// the constructor function itself; instead, it's the prototype that new objects | |
-// are given when they're created with that constructor and the new keyword. | |
-MyConstructor.prototype = { | |
- myNumber: 5, | |
- getMyNumber: function(){ | |
- return this.myNumber; | |
- } | |
-}; | |
-var myNewObj2 = new MyConstructor(); | |
-myNewObj2.getMyNumber(); // = 5 | |
-myNewObj2.myNumber = 6; | |
-myNewObj2.getMyNumber(); // = 6 | |
- | |
-// Built-in types like strings and numbers also have constructors that create | |
-// equivalent wrapper objects. | |
-var myNumber = 12; | |
-var myNumberObj = new Number(12); | |
-myNumber == myNumberObj; // = true | |
- | |
-// Except, they aren't exactly equivalent. | |
-typeof myNumber; // = 'number' | |
-typeof myNumberObj; // = 'object' | |
-myNumber === myNumberObj; // = false | |
-if (0){ | |
- // This code won't execute, because 0 is falsy. | |
-} | |
-if (new Number(0)){ | |
- // This code will execute, because wrapped numbers are objects, and objects | |
- // are always truthy. | |
-} | |
- | |
-// However, the wrapper objects and the regular builtins share a prototype, so | |
-// you can actually add functionality to a string, for instance. | |
-String.prototype.firstCharacter = function(){ | |
- return this.charAt(0); | |
-}; | |
-"abc".firstCharacter(); // = "a" | |
- | |
-// This fact is often used in "polyfilling", which is implementing newer | |
-// features of JavaScript in an older subset of JavaScript, so that they can be | |
-// used in older environments such as outdated browsers. | |
- | |
-// For instance, we mentioned that Object.create isn't yet available in all | |
-// implementations, but we can still use it with this polyfill: | |
-if (Object.create === undefined){ // don't overwrite it if it exists | |
- Object.create = function(proto){ | |
- // make a temporary constructor with the right prototype | |
- var Constructor = function(){}; | |
- Constructor.prototype = proto; | |
- // then use it to create a new, appropriately-prototyped object | |
- return new Constructor(); | |
- }; | |
-} | |
- | |
-// ES6 Additions | |
- | |
-// The "let" keyword allows you to define variables in a lexical scope, | |
-// as opposed to a block scope like the var keyword does. | |
-let name = "Billy"; | |
- | |
-// Variables defined with let can be reassigned new values. | |
-name = "William"; | |
- | |
-// The "const" keyword allows you to define a variable in a lexical scope | |
-// like with let, but you cannot reassign the value once one has been assigned. | |
- | |
-const pi = 3.14; | |
- | |
-pi = 4.13; // You cannot do this. | |
- | |
-// There is a new syntax for functions in ES6 known as "lambda syntax". | |
-// This allows functions to be defined in a lexical scope like with variables | |
-// defined by const and let. | |
- | |
-const isEven = (number) => { | |
- return number % 2 === 0; | |
-}; | |
- | |
-isEven(7); // false | |
- | |
-// The "equivalent" of this function in the traditional syntax would look like this: | |
- | |
-function isEven(number) { | |
- return number % 2 === 0; | |
-}; | |
- | |
-// I put the word "equivalent" in double quotes because a function defined | |
-// using the lambda syntax cannnot be called before the definition. | |
-// The following is an example of invalid usage: | |
- | |
-add(1, 8); | |
- | |
-const add = (firstNumber, secondNumber) => { | |
- return firstNumber + secondNumber; | |
-}; | |
FAILED: [21] js/:learn | |
Running 22: javascript/:learn # short names check | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py javascript/:learn | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
Traceback (most recent call last): | |
File "../lib/standalone.py", line 65, in <module> | |
main(sys.argv[1:]) | |
File "../lib/standalone.py", line 61, in main | |
answer, _ = cheat_wrapper.cheat_wrapper(query, request_options=request_options) | |
File "/home/pers/cvs/cheat.sh/lib/cheat_wrapper.py", line 101, in cheat_wrapper | |
answers = [get_answer_dict(topic, request_options=request_options)] | |
File "/home/pers/cvs/cheat.sh/lib/routing.py", line 155, in get_answer_dict | |
answer = self._get_page_dict(topic, topic_type, request_options=request_options) | |
File "/home/pers/cvs/cheat.sh/lib/routing.py", line 110, in _get_page_dict | |
return self._adapter[topic_type]\ | |
File "/home/pers/cvs/cheat.sh/lib/adapter/adapter.py", line 140, in get_page_dict | |
answer = self._get_page(topic, request_options=request_options) | |
File "/home/pers/cvs/cheat.sh/lib/adapter/learnxiny.py", line 40, in _get_page | |
return self.adapters[lang].get_page(topic) | |
File "/home/pers/cvs/cheat.sh/lib/adapter/learnxiny.py", line 195, in get_page | |
return "\n".join(self._whole_cheatsheet) + "\n" | |
TypeError: can only join an iterable | |
--- results/22 Sat Oct 3 18:10:40 2020 | |
+++ /tmp/cht.sh.tests-3Jhh4cBrygrLXP Mon Oct 5 22:22:33 2020 | |
@@ -1,606 +0,0 @@ | |
-// Single-line comments start with two slashes. | |
-/* Multiline comments start with slash-star, | |
- and end with star-slash */ | |
- | |
-// Statements can be terminated by ; | |
-doStuff(); | |
- | |
-// ... but they don't have to be, as semicolons are automatically inserted | |
-// wherever there's a newline, except in certain cases. | |
-doStuff() | |
- | |
-// Because those cases can cause unexpected results, we'll keep on using | |
-// semicolons in this guide. | |
- | |
-/////////////////////////////////// | |
-// 1. Numbers, Strings and Operators | |
- | |
-// JavaScript has one number type (which is a 64-bit IEEE 754 double). | |
-// Doubles have a 52-bit mantissa, which is enough to store integers | |
-// up to about 9✕10¹⁵ precisely. | |
-3; // = 3 | |
-1.5; // = 1.5 | |
- | |
-// Some basic arithmetic works as you'd expect. | |
-1 + 1; // = 2 | |
-0.1 + 0.2; // = 0.30000000000000004 | |
-8 - 1; // = 7 | |
-10 * 2; // = 20 | |
-35 / 5; // = 7 | |
- | |
-// Including uneven division. | |
-5 / 2; // = 2.5 | |
- | |
-// And modulo division. | |
-10 % 2; // = 0 | |
-30 % 4; // = 2 | |
-18.5 % 7; // = 4.5 | |
- | |
-// Bitwise operations also work; when you perform a bitwise operation your float | |
-// is converted to a signed int *up to* 32 bits. | |
-1 << 2; // = 4 | |
- | |
-// Precedence is enforced with parentheses. | |
-(1 + 3) * 2; // = 8 | |
- | |
-// There are three special not-a-real-number values: | |
-Infinity; // result of e.g. 1/0 | |
--Infinity; // result of e.g. -1/0 | |
-NaN; // result of e.g. 0/0, stands for 'Not a Number' | |
- | |
-// There's also a boolean type. | |
-true; | |
-false; | |
- | |
-// Strings are created with ' or ". | |
-'abc'; | |
-"Hello, world"; | |
- | |
-// Negation uses the ! symbol | |
-!true; // = false | |
-!false; // = true | |
- | |
-// Equality is === | |
-1 === 1; // = true | |
-2 === 1; // = false | |
- | |
-// Inequality is !== | |
-1 !== 1; // = false | |
-2 !== 1; // = true | |
- | |
-// More comparisons | |
-1 < 10; // = true | |
-1 > 10; // = false | |
-2 <= 2; // = true | |
-2 >= 2; // = true | |
- | |
-// Strings are concatenated with + | |
-"Hello " + "world!"; // = "Hello world!" | |
- | |
-// ... which works with more than just strings | |
-"1, 2, " + 3; // = "1, 2, 3" | |
-"Hello " + ["world", "!"]; // = "Hello world,!" | |
- | |
-// and are compared with < and > | |
-"a" < "b"; // = true | |
- | |
-// Type coercion is performed for comparisons with double equals... | |
-"5" == 5; // = true | |
-null == undefined; // = true | |
- | |
-// ...unless you use === | |
-"5" === 5; // = false | |
-null === undefined; // = false | |
- | |
-// ...which can result in some weird behaviour... | |
-13 + !0; // 14 | |
-"13" + !0; // '13true' | |
- | |
-// You can access characters in a string with `charAt` | |
-"This is a string".charAt(0); // = 'T' | |
- | |
-// ...or use `substring` to get larger pieces. | |
-"Hello world".substring(0, 5); // = "Hello" | |
- | |
-// `length` is a property, so don't use (). | |
-"Hello".length; // = 5 | |
- | |
-// There's also `null` and `undefined`. | |
-null; // used to indicate a deliberate non-value | |
-undefined; // used to indicate a value is not currently present (although | |
- // `undefined` is actually a value itself) | |
- | |
-// false, null, undefined, NaN, 0 and "" are falsy; everything else is truthy. | |
-// Note that 0 is falsy and "0" is truthy, even though 0 == "0". | |
- | |
-/////////////////////////////////// | |
-// 2. Variables, Arrays and Objects | |
- | |
-// Variables are declared with the `var` keyword. JavaScript is dynamically | |
-// typed, so you don't need to specify type. Assignment uses a single `=` | |
-// character. | |
-var someVar = 5; | |
- | |
-// If you leave the var keyword off, you won't get an error... | |
-someOtherVar = 10; | |
- | |
-// ...but your variable will be created in the global scope, not in the scope | |
-// you defined it in. | |
- | |
-// Variables declared without being assigned to are set to undefined. | |
-var someThirdVar; // = undefined | |
- | |
-// If you want to declare a couple of variables, then you could use a comma | |
-// separator | |
-var someFourthVar = 2, someFifthVar = 4; | |
- | |
-// There's shorthand for performing math operations on variables: | |
-someVar += 5; // equivalent to someVar = someVar + 5; someVar is 10 now | |
-someVar *= 10; // now someVar is 100 | |
- | |
-// and an even-shorter-hand for adding or subtracting 1 | |
-someVar++; // now someVar is 101 | |
-someVar--; // back to 100 | |
- | |
-// Arrays are ordered lists of values, of any type. | |
-var myArray = ["Hello", 45, true]; | |
- | |
-// Their members can be accessed using the square-brackets subscript syntax. | |
-// Array indices start at zero. | |
-myArray[1]; // = 45 | |
- | |
-// Arrays are mutable and of variable length. | |
-myArray.push("World"); | |
-myArray.length; // = 4 | |
- | |
-// Add/Modify at specific index | |
-myArray[3] = "Hello"; | |
- | |
-// Add and remove element from front or back end of an array | |
-myArray.unshift(3); // Add as the first element | |
-someVar = myArray.shift(); // Remove first element and return it | |
-myArray.push(3); // Add as the last element | |
-someVar = myArray.pop(); // Remove last element and return it | |
- | |
-// Join all elements of an array with semicolon | |
-var myArray0 = [32,false,"js",12,56,90]; | |
-myArray0.join(";"); // = "32;false;js;12;56;90" | |
- | |
-// Get subarray of elements from index 1 (include) to 4 (exclude) | |
-myArray0.slice(1,4); // = [false,"js",12] | |
- | |
-// Remove 4 elements starting from index 2, and insert there strings | |
-// "hi","wr" and "ld"; return removed subarray | |
-myArray0.splice(2,4,"hi","wr","ld"); // = ["js",12,56,90] | |
-// myArray0 === [32,false,"hi","wr","ld"] | |
- | |
-// JavaScript's objects are equivalent to "dictionaries" or "maps" in other | |
-// languages: an unordered collection of key-value pairs. | |
-var myObj = {key1: "Hello", key2: "World"}; | |
- | |
-// Keys are strings, but quotes aren't required if they're a valid | |
-// JavaScript identifier. Values can be any type. | |
-var myObj = {myKey: "myValue", "my other key": 4}; | |
- | |
-// Object attributes can also be accessed using the subscript syntax, | |
-myObj["my other key"]; // = 4 | |
- | |
-// ... or using the dot syntax, provided the key is a valid identifier. | |
-myObj.myKey; // = "myValue" | |
- | |
-// Objects are mutable; values can be changed and new keys added. | |
-myObj.myThirdKey = true; | |
- | |
-// If you try to access a value that's not yet set, you'll get undefined. | |
-myObj.myFourthKey; // = undefined | |
- | |
-/////////////////////////////////// | |
-// 3. Logic and Control Structures | |
- | |
-// The `if` structure works as you'd expect. | |
-var count = 1; | |
-if (count == 3){ | |
- // evaluated if count is 3 | |
-} else if (count == 4){ | |
- // evaluated if count is 4 | |
-} else { | |
- // evaluated if it's not either 3 or 4 | |
-} | |
- | |
-// As does `while`. | |
-while (true){ | |
- // An infinite loop! | |
-} | |
- | |
-// Do-while loops are like while loops, except they always run at least once. | |
-var input; | |
-do { | |
- input = getInput(); | |
-} while (!isValid(input)); | |
- | |
-// The `for` loop is the same as C and Java: | |
-// initialization; continue condition; iteration. | |
-for (var i = 0; i < 5; i++){ | |
- // will run 5 times | |
-} | |
- | |
-// Breaking out of labeled loops is similar to Java | |
-outer: | |
-for (var i = 0; i < 10; i++) { | |
- for (var j = 0; j < 10; j++) { | |
- if (i == 5 && j ==5) { | |
- break outer; | |
- // breaks out of outer loop instead of only the inner one | |
- } | |
- } | |
-} | |
- | |
-// The for/in statement allows iteration over properties of an object. | |
-var description = ""; | |
-var person = {fname:"Paul", lname:"Ken", age:18}; | |
-for (var x in person){ | |
- description += person[x] + " "; | |
-} // description = 'Paul Ken 18 ' | |
- | |
-// The for/of statement allows iteration over iterable objects (including the built-in String, | |
-// Array, e.g. the Array-like arguments or NodeList objects, TypedArray, Map and Set, | |
-// and user-defined iterables). | |
-var myPets = ""; | |
-var pets = ["cat", "dog", "hamster", "hedgehog"]; | |
-for (var pet of pets){ | |
- myPets += pet + " "; | |
-} // myPets = 'cat dog hamster hedgehog ' | |
- | |
-// && is logical and, || is logical or | |
-if (house.size == "big" && house.colour == "blue"){ | |
- house.contains = "bear"; | |
-} | |
-if (colour == "red" || colour == "blue"){ | |
- // colour is either red or blue | |
-} | |
- | |
-// && and || "short circuit", which is useful for setting default values. | |
-var name = otherName || "default"; | |
- | |
-// The `switch` statement checks for equality with `===`. | |
-// Use 'break' after each case | |
-// or the cases after the correct one will be executed too. | |
-grade = 'B'; | |
-switch (grade) { | |
- case 'A': | |
- console.log("Great job"); | |
- break; | |
- case 'B': | |
- console.log("OK job"); | |
- break; | |
- case 'C': | |
- console.log("You can do better"); | |
- break; | |
- default: | |
- console.log("Oy vey"); | |
- break; | |
-} | |
- | |
- | |
-/////////////////////////////////// | |
-// 4. Functions, Scope and Closures | |
- | |
-// JavaScript functions are declared with the `function` keyword. | |
-function myFunction(thing){ | |
- return thing.toUpperCase(); | |
-} | |
-myFunction("foo"); // = "FOO" | |
- | |
-// Note that the value to be returned must start on the same line as the | |
-// `return` keyword, otherwise you'll always return `undefined` due to | |
-// automatic semicolon insertion. Watch out for this when using Allman style. | |
-function myFunction(){ | |
- return // <- semicolon automatically inserted here | |
- {thisIsAn: 'object literal'}; | |
-} | |
-myFunction(); // = undefined | |
- | |
-// JavaScript functions are first class objects, so they can be reassigned to | |
-// different variable names and passed to other functions as arguments - for | |
-// example, when supplying an event handler: | |
-function myFunction(){ | |
- // this code will be called in 5 seconds' time | |
-} | |
-setTimeout(myFunction, 5000); | |
-// Note: setTimeout isn't part of the JS language, but is provided by browsers | |
-// and Node.js. | |
- | |
-// Another function provided by browsers is setInterval | |
-function myFunction(){ | |
- // this code will be called every 5 seconds | |
-} | |
-setInterval(myFunction, 5000); | |
- | |
-// Function objects don't even have to be declared with a name - you can write | |
-// an anonymous function definition directly into the arguments of another. | |
-setTimeout(function(){ | |
- // this code will be called in 5 seconds' time | |
-}, 5000); | |
- | |
-// JavaScript has function scope; functions get their own scope but other blocks | |
-// do not. | |
-if (true){ | |
- var i = 5; | |
-} | |
-i; // = 5 - not undefined as you'd expect in a block-scoped language | |
- | |
-// This has led to a common pattern of "immediately-executing anonymous | |
-// functions", which prevent temporary variables from leaking into the global | |
-// scope. | |
-(function(){ | |
- var temporary = 5; | |
- // We can access the global scope by assigning to the "global object", which | |
- // in a web browser is always `window`. The global object may have a | |
- // different name in non-browser environments such as Node.js. | |
- window.permanent = 10; | |
-})(); | |
-temporary; // raises ReferenceError | |
-permanent; // = 10 | |
- | |
-// One of JavaScript's most powerful features is closures. If a function is | |
-// defined inside another function, the inner function has access to all the | |
-// outer function's variables, even after the outer function exits. | |
-function sayHelloInFiveSeconds(name){ | |
- var prompt = "Hello, " + name + "!"; | |
- // Inner functions are put in the local scope by default, as if they were | |
- // declared with `var`. | |
- function inner(){ | |
- alert(prompt); | |
- } | |
- setTimeout(inner, 5000); | |
- // setTimeout is asynchronous, so the sayHelloInFiveSeconds function will | |
- // exit immediately, and setTimeout will call inner afterwards. However, | |
- // because inner is "closed over" sayHelloInFiveSeconds, inner still has | |
- // access to the `prompt` variable when it is finally called. | |
-} | |
-sayHelloInFiveSeconds("Adam"); // will open a popup with "Hello, Adam!" in 5s | |
- | |
-/////////////////////////////////// | |
-// 5. More about Objects; Constructors and Prototypes | |
- | |
-// Objects can contain functions. | |
-var myObj = { | |
- myFunc: function(){ | |
- return "Hello world!"; | |
- } | |
-}; | |
-myObj.myFunc(); // = "Hello world!" | |
- | |
-// When functions attached to an object are called, they can access the object | |
-// they're attached to using the `this` keyword. | |
-myObj = { | |
- myString: "Hello world!", | |
- myFunc: function(){ | |
- return this.myString; | |
- } | |
-}; | |
-myObj.myFunc(); // = "Hello world!" | |
- | |
-// What this is set to has to do with how the function is called, not where | |
-// it's defined. So, our function doesn't work if it isn't called in the | |
-// context of the object. | |
-var myFunc = myObj.myFunc; | |
-myFunc(); // = undefined | |
- | |
-// Inversely, a function can be assigned to the object and gain access to it | |
-// through `this`, even if it wasn't attached when it was defined. | |
-var myOtherFunc = function(){ | |
- return this.myString.toUpperCase(); | |
-}; | |
-myObj.myOtherFunc = myOtherFunc; | |
-myObj.myOtherFunc(); // = "HELLO WORLD!" | |
- | |
-// We can also specify a context for a function to execute in when we invoke it | |
-// using `call` or `apply`. | |
- | |
-var anotherFunc = function(s){ | |
- return this.myString + s; | |
-}; | |
-anotherFunc.call(myObj, " And Hello Moon!"); // = "Hello World! And Hello Moon!" | |
- | |
-// The `apply` function is nearly identical, but takes an array for an argument | |
-// list. | |
- | |
-anotherFunc.apply(myObj, [" And Hello Sun!"]); // = "Hello World! And Hello Sun!" | |
- | |
-// This is useful when working with a function that accepts a sequence of | |
-// arguments and you want to pass an array. | |
- | |
-Math.min(42, 6, 27); // = 6 | |
-Math.min([42, 6, 27]); // = NaN (uh-oh!) | |
-Math.min.apply(Math, [42, 6, 27]); // = 6 | |
- | |
-// But, `call` and `apply` are only temporary. When we want it to stick, we can | |
-// use `bind`. | |
- | |
-var boundFunc = anotherFunc.bind(myObj); | |
-boundFunc(" And Hello Saturn!"); // = "Hello World! And Hello Saturn!" | |
- | |
-// `bind` can also be used to partially apply (curry) a function. | |
- | |
-var product = function(a, b){ return a * b; }; | |
-var doubler = product.bind(this, 2); | |
-doubler(8); // = 16 | |
- | |
-// When you call a function with the `new` keyword, a new object is created, and | |
-// made available to the function via the `this` keyword. Functions designed to be | |
-// called like that are called constructors. | |
- | |
-var MyConstructor = function(){ | |
- this.myNumber = 5; | |
-}; | |
-myNewObj = new MyConstructor(); // = {myNumber: 5} | |
-myNewObj.myNumber; // = 5 | |
- | |
-// Unlike most other popular object-oriented languages, JavaScript has no | |
-// concept of 'instances' created from 'class' blueprints; instead, JavaScript | |
-// combines instantiation and inheritance into a single concept: a 'prototype'. | |
- | |
-// Every JavaScript object has a 'prototype'. When you go to access a property | |
-// on an object that doesn't exist on the actual object, the interpreter will | |
-// look at its prototype. | |
- | |
-// Some JS implementations let you access an object's prototype on the magic | |
-// property `__proto__`. While this is useful for explaining prototypes it's not | |
-// part of the standard; we'll get to standard ways of using prototypes later. | |
-var myObj = { | |
- myString: "Hello world!" | |
-}; | |
-var myPrototype = { | |
- meaningOfLife: 42, | |
- myFunc: function(){ | |
- return this.myString.toLowerCase(); | |
- } | |
-}; | |
- | |
-myObj.__proto__ = myPrototype; | |
-myObj.meaningOfLife; // = 42 | |
- | |
-// This works for functions, too. | |
-myObj.myFunc(); // = "hello world!" | |
- | |
-// Of course, if your property isn't on your prototype, the prototype's | |
-// prototype is searched, and so on. | |
-myPrototype.__proto__ = { | |
- myBoolean: true | |
-}; | |
-myObj.myBoolean; // = true | |
- | |
-// There's no copying involved here; each object stores a reference to its | |
-// prototype. This means we can alter the prototype and our changes will be | |
-// reflected everywhere. | |
-myPrototype.meaningOfLife = 43; | |
-myObj.meaningOfLife; // = 43 | |
- | |
-// The for/in statement allows iteration over properties of an object, | |
-// walking up the prototype chain until it sees a null prototype. | |
-for (var x in myObj){ | |
- console.log(myObj[x]); | |
-} | |
-///prints: | |
-// Hello world! | |
-// 43 | |
-// [Function: myFunc] | |
-// true | |
- | |
-// To only consider properties attached to the object itself | |
-// and not its prototypes, use the `hasOwnProperty()` check. | |
-for (var x in myObj){ | |
- if (myObj.hasOwnProperty(x)){ | |
- console.log(myObj[x]); | |
- } | |
-} | |
-///prints: | |
-// Hello world! | |
- | |
-// We mentioned that `__proto__` was non-standard, and there's no standard way to | |
-// change the prototype of an existing object. However, there are two ways to | |
-// create a new object with a given prototype. | |
- | |
-// The first is Object.create, which is a recent addition to JS, and therefore | |
-// not available in all implementations yet. | |
-var myObj = Object.create(myPrototype); | |
-myObj.meaningOfLife; // = 43 | |
- | |
-// The second way, which works anywhere, has to do with constructors. | |
-// Constructors have a property called prototype. This is *not* the prototype of | |
-// the constructor function itself; instead, it's the prototype that new objects | |
-// are given when they're created with that constructor and the new keyword. | |
-MyConstructor.prototype = { | |
- myNumber: 5, | |
- getMyNumber: function(){ | |
- return this.myNumber; | |
- } | |
-}; | |
-var myNewObj2 = new MyConstructor(); | |
-myNewObj2.getMyNumber(); // = 5 | |
-myNewObj2.myNumber = 6; | |
-myNewObj2.getMyNumber(); // = 6 | |
- | |
-// Built-in types like strings and numbers also have constructors that create | |
-// equivalent wrapper objects. | |
-var myNumber = 12; | |
-var myNumberObj = new Number(12); | |
-myNumber == myNumberObj; // = true | |
- | |
-// Except, they aren't exactly equivalent. | |
-typeof myNumber; // = 'number' | |
-typeof myNumberObj; // = 'object' | |
-myNumber === myNumberObj; // = false | |
-if (0){ | |
- // This code won't execute, because 0 is falsy. | |
-} | |
-if (new Number(0)){ | |
- // This code will execute, because wrapped numbers are objects, and objects | |
- // are always truthy. | |
-} | |
- | |
-// However, the wrapper objects and the regular builtins share a prototype, so | |
-// you can actually add functionality to a string, for instance. | |
-String.prototype.firstCharacter = function(){ | |
- return this.charAt(0); | |
-}; | |
-"abc".firstCharacter(); // = "a" | |
- | |
-// This fact is often used in "polyfilling", which is implementing newer | |
-// features of JavaScript in an older subset of JavaScript, so that they can be | |
-// used in older environments such as outdated browsers. | |
- | |
-// For instance, we mentioned that Object.create isn't yet available in all | |
-// implementations, but we can still use it with this polyfill: | |
-if (Object.create === undefined){ // don't overwrite it if it exists | |
- Object.create = function(proto){ | |
- // make a temporary constructor with the right prototype | |
- var Constructor = function(){}; | |
- Constructor.prototype = proto; | |
- // then use it to create a new, appropriately-prototyped object | |
- return new Constructor(); | |
- }; | |
-} | |
- | |
-// ES6 Additions | |
- | |
-// The "let" keyword allows you to define variables in a lexical scope, | |
-// as opposed to a block scope like the var keyword does. | |
-let name = "Billy"; | |
- | |
-// Variables defined with let can be reassigned new values. | |
-name = "William"; | |
- | |
-// The "const" keyword allows you to define a variable in a lexical scope | |
-// like with let, but you cannot reassign the value once one has been assigned. | |
- | |
-const pi = 3.14; | |
- | |
-pi = 4.13; // You cannot do this. | |
- | |
-// There is a new syntax for functions in ES6 known as "lambda syntax". | |
-// This allows functions to be defined in a lexical scope like with variables | |
-// defined by const and let. | |
- | |
-const isEven = (number) => { | |
- return number % 2 === 0; | |
-}; | |
- | |
-isEven(7); // false | |
- | |
-// The "equivalent" of this function in the traditional syntax would look like this: | |
- | |
-function isEven(number) { | |
- return number % 2 === 0; | |
-}; | |
- | |
-// I put the word "equivalent" in double quotes because a function defined | |
-// using the lambda syntax cannnot be called before the definition. | |
-// The following is an example of invalid usage: | |
- | |
-add(1, 8); | |
- | |
-const add = (firstNumber, secondNumber) => { | |
- return firstNumber + secondNumber; | |
-}; | |
FAILED: [22] javascript/:learn | |
Running 23: emacs:go-mode/:list # special editor names | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py emacs:go-mode/:list | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
--- results/23 Sat Oct 3 18:10:40 2020 | |
+++ /tmp/cht.sh.tests-3Jhh4cBrygrLXP Mon Oct 5 22:22:35 2020 | |
@@ -1,26 +1,2 @@ | |
:learn | |
:list | |
-Arrays | |
-Axioms | |
-Channels | |
-Declarations | |
-Embedding | |
-Errors | |
-Interfaces | |
-Maps | |
-Operators | |
-Pointers | |
-Structs | |
-for | |
-func | |
-go | |
-hello | |
-http | |
-if | |
-packages | |
-range | |
-rosetta/ | |
-slices | |
-switch | |
-types | |
FAILED: [23] emacs:go-mode/:list | |
Running 24: mkffs.ffatt # unknown | |
/home/pers/cvs/cheat.sh/tests/bin/python3 ../lib/standalone.py mkffs.ffatt | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
<frozen importlib._bootstrap>:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject | |
--- results/24 Sat Oct 3 18:10:40 2020 | |
+++ /tmp/cht.sh.tests-3Jhh4cBrygrLXP Mon Oct 5 22:22:36 2020 | |
@@ -1,7 +1,7 @@ | |
Unknown topic. | |
Do you mean one of these topics maybe? | |
- * mkfs.fat 84 | |
- * mkfs.vfat 80 | |
- * mkfs.exfat 76 | |
+ * cmake/:list 36 | |
+ * swift/:list 36 | |
+ * cmake/:learn 34 | |
FAILED: [24] mkffs.ffatt | |
Running 25: latencies # [python2] | |
25 is for Python 2; skipping | |
TESTS/OK/FAILED 24/8/16 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment