summary refs log blame commit diff stats
path: root/test4.py
blob: b2390a036b1229ea4a19e55c1f9a0061dfe790f2 (plain) (tree)



































                                                                       
import random, time

class DelValue():
	def a(d):
		return dict((k, v) for k, v in d.items() if v is not 0)

	def b(d):
		for k, v in d.copy().items():
			if v == 0: del d[k]
		return d

	def c(d):
		for k in tuple(d.keys()):
			if d[k] == 0: del d[k]
		return d

	def d(d):
		for k, v in tuple(d.items()):
			if v == 0: del d[k]
		return d


basedict = {}
for i in range(200):
	basedict[i] = random.randint(0, 1)

expected = DelValue.a(basedict.copy())

for algo in ['a', 'b', 'c', 'd']:
	copy = basedict.copy()
	t = time.time()
	for i in range(100):
		assert DelValue.__dict__[algo](copy) == expected
	print("algorithm %s: %f" % (algo, time.time() - t))

# c it is, although b is faster with smaller dictionaries
span class="p">; } .PreProc { color: #c000c0; } .LineNr { } .muRegEsi { color: #005faf; } .Constant { color: #008787; } .muRegEdi { color: #00af00; } .CommentedCode { color: #8a8a8a; } .Delimiter { color: #c000c0; } .muFunction { color: #af5f00; text-decoration: underline; } .Special { color: #ff6060; } --> </style> <script type='text/javascript'> <!-- /* function to open any folds containing a jumped-to line before jumping to it */ function JumpToLine() { var lineNum; lineNum = window.location.hash; lineNum = lineNum.substr(1); /* strip off '#' */ if (lineNum.indexOf('L') == -1) { lineNum = 'L'+lineNum; } var lineElem = document.getElementById(lineNum); /* Always jump to new location even if the line was hidden inside a fold, or * we corrected the raw number to a line ID. */ if (lineElem) { lineElem.scrollIntoView(true); } return true; } if ('onhashchange' in window) { window.onhashchange = JumpToLine; } --> </script> </head> <body onload='JumpToLine();'> <a href='https://github.com/akkartik/mu/blob/main/linux/410file.mu'>https://github.com/akkartik/mu/blob/main/linux/410file.mu</a> <pre id='vimCodeElement'> <span id="L1" class="LineNr"> 1 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='410file.mu.html#L1'>read-lines</a></span> in: (addr buffered-file), out: (addr handle array (handle array byte)) <span class="Delimiter">{</span> <span id="L2" class="LineNr"> 2 </span> <span class="PreProc">var</span> stream: (stream (handle array byte) <span class="Constant">0x10</span>) <span id="L3" class="LineNr"> 3 </span> <span class="PreProc">var</span> stream-a/<span class="muRegEdi">edi</span>: (addr stream (handle array byte)) <span class="Special">&lt;-</span> address stream <span id="L4" class="LineNr"> 4 </span> <span class="PreProc">var</span> line: (stream byte <span class="Constant">0x10</span>) <span id="L5" class="LineNr"> 5 </span> <span class="PreProc">var</span> line-a/<span class="muRegEsi">esi</span>: (addr stream byte) <span class="Special">&lt;-</span> address line <span id="L6" class="LineNr"> 6 </span> <span class="Delimiter">{</span> <span id="L7" class="LineNr"> 7 </span> <a href='106stream.subx.html#L17'>clear-stream</a> line-a <span id="L8" class="LineNr"> 8 </span> <a href='122read-line.subx.html#L9'>read-line-buffered</a> in, line-a <span id="L9" class="LineNr"> 9 </span> <span class="PreProc">var</span> done?/eax: boolean <span class="Special">&lt;-</span> <a href='309stream.subx.html#L6'>stream-empty?</a> line-a <span id="L10" class="LineNr">10 </span> compare done?, <span class="Constant">0</span>/false <span id="L11" class="LineNr">11 </span> <span class="PreProc">break-if-!=</span> <span id="L12" class="LineNr">12 </span><span class="CommentedCode">#? print-string 0, &quot;AAA\n&quot;</span> <span id="L13" class="LineNr">13 </span> <span class="PreProc">var</span> h: (handle array byte) <span id="L14" class="LineNr">14 </span> <span class="PreProc">var</span> ah/eax: (addr handle array byte) <span class="Special">&lt;-</span> address h <span id="L15" class="LineNr">15 </span> <a href='310copy-bytes.subx.html#L60'>stream-to-array</a> line-a, ah <span id="L16" class="LineNr">16 </span> <a href='309stream.subx.html#L54'>write-to-stream</a> stream-a, ah <span id="L17" class="LineNr">17 </span> <span class="PreProc">loop</span> <span id="L18" class="LineNr">18 </span> <span class="Delimiter">}</span> <span id="L19" class="LineNr">19 </span> <a href='310copy-bytes.subx.html#L60'>stream-to-array</a> stream-a, out <span id="L20" class="LineNr">20 </span><span class="Delimiter">}</span> </pre> </body> </html> <!-- vim: set foldmethod=manual : -->