Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
21bc15b7
Commit
21bc15b7
authored
Apr 10, 1995
by
Guido van Rossum
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
commit -- why not...
parent
f4449def
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
238 additions
and
0 deletions
+238
-0
Demo/comparisons/README
Demo/comparisons/README
+60
-0
Demo/comparisons/patterns
Demo/comparisons/patterns
+4
-0
Demo/comparisons/regextest.py
Demo/comparisons/regextest.py
+50
-0
Demo/comparisons/sortingtest.py
Demo/comparisons/sortingtest.py
+50
-0
Demo/comparisons/systemtest.py
Demo/comparisons/systemtest.py
+74
-0
No files found.
Demo/comparisons/README
0 → 100644
View file @
21bc15b7
Subject: Re: What language would you use?
From: Tom Christiansen <tchrist@mox.perl.com>
Date: 6 Nov 1994 15:14:51 GMT
Newsgroups: comp.lang.python,comp.lang.tcl,comp.lang.scheme,comp.lang.misc,comp.lang.perl
Message-Id: <39irtb$3t4@csnews.cs.Colorado.EDU>
References: <39b7ha$j9v@zeno.nscf.org> <39hhjp$lgn@csnews.cs.Colorado.EDU> <39hvsu$dus@mathserv.mps.ohio-state.edu>
[...]
If you're really into benchmarks, I'd love it if someone were to code up
the following problems in tcl, python, and scheme (and whatever else you'd
like). Separate versions (one optimized for speed, one for beauty :-) are
ok. Post your code so we can time it on our own systems.
0) Factorial Test (numerics and function calls)
(we did this already)
1) Regular Expressions Test
Read a file of (extended per egrep) regular expressions (one per line),
and apply those to all files whose names are listed on the command line.
Basically, an 'egrep -f' simulator. Test it with 20 "vt100" patterns
against a five /etc/termcap files. Tests using more elaborate patters
would also be interesting. Your code should not break if given hundreds
of regular expressions or binary files to scan.
2) Sorting Test
Sort an input file that consists of lines like this
var1=23 other=14 ditto=23 fred=2
such that each output line is sorted WRT to the number. Order
of output lines does not change. Resolve collisions using the
variable name. e.g.
fred=2 other=14 ditto=23 var1=23
Lines may be up to several kilobytes in length and contain
zillions of variables.
3) System Test
Given a list of directories, report any bogus symbolic links contained
anywhere in those subtrees. A bogus symbolic link is one that cannot
be resolved because it points to a nonexistent or otherwise
unresolvable file. Do *not* use an external find executable.
Directories may be very very deep. Print a warning immediately if the
system you're running on doesn't support symbolic links.
I'll post perl solutions if people post the others.
--tom
--
Tom Christiansen Perl Consultant, Gamer, Hiker tchrist@mox.perl.com
"But Billy! A *small* allowance prepares you for a lifetime of small
salaries and for your Social Security payments." --Family Circus
Demo/comparisons/patterns
0 → 100755
View file @
21bc15b7
^def
^class
^import
^from
Demo/comparisons/regextest.py
0 → 100755
View file @
21bc15b7
#! /usr/local/bin/python
# 1) Regular Expressions Test
#
# Read a file of (extended per egrep) regular expressions (one per line),
# and apply those to all files whose names are listed on the command line.
# Basically, an 'egrep -f' simulator. Test it with 20 "vt100" patterns
# against a five /etc/termcap files. Tests using more elaborate patters
# would also be interesting. Your code should not break if given hundreds
# of regular expressions or binary files to scan.
# This implementation:
# - combines all patterns into a single one using ( ... | ... | ... )
# - reads patterns from stdin, scans files given as command line arguments
# - produces output in the format <file>:<lineno>:<line>
# - is only about 2.5 times as slow as egrep (though I couldn't run
# Tom's test -- this system, a vanilla SGI, only has /etc/terminfo)
import
string
import
sys
import
regex
from
regex_syntax
import
*
regex
.
set_syntax
(
RE_SYNTAX_EGREP
)
def
main
():
pats
=
map
(
chomp
,
sys
.
stdin
.
readlines
())
bigpat
=
'('
+
string
.
joinfields
(
pats
,
'|'
)
+
')'
prog
=
regex
.
compile
(
bigpat
)
for
file
in
sys
.
argv
[
1
:]:
try
:
fp
=
open
(
file
,
'r'
)
except
IOError
,
msg
:
print
"%s: %s"
%
(
file
,
msg
)
continue
lineno
=
0
while
1
:
line
=
fp
.
readline
()
if
not
line
:
break
lineno
=
lineno
+
1
if
prog
.
search
(
line
)
>=
0
:
print
"%s:%s:%s"
%
(
file
,
lineno
,
line
),
def
chomp
(
s
):
if
s
[
-
1
:]
==
'
\
n
'
:
return
s
[:
-
1
]
else
:
return
s
main
()
Demo/comparisons/sortingtest.py
0 → 100755
View file @
21bc15b7
#! /usr/local/bin/python
# 2) Sorting Test
#
# Sort an input file that consists of lines like this
#
# var1=23 other=14 ditto=23 fred=2
#
# such that each output line is sorted WRT to the number. Order
# of output lines does not change. Resolve collisions using the
# variable name. e.g.
#
# fred=2 other=14 ditto=23 var1=23
#
# Lines may be up to several kilobytes in length and contain
# zillions of variables.
# This implementation:
# - Reads stdin, writes stdout
# - Uses any amount of whitespace to separate fields
# - Allows signed numbers
# - Treats illegally formatted fields as field=0
# - Outputs the sorted fields with exactly one space between them
# - Handles blank input lines correctly
import
regex
import
string
import
sys
def
main
():
prog
=
regex
.
compile
(
'^
\
(.*
\
)=
\
([-+]?[
0
-9]+
\
)
'
)
def makekey(item, prog=prog):
if prog.match(item) >= 0:
var, num = prog.group(1, 2)
return string.atoi(num), var
else:
# Bad input -- pretend it'
s
a
var
with
value
0
return
0
,
item
while
1
:
line
=
sys
.
stdin
.
readline
()
if
not
line
:
break
items
=
string
.
split
(
line
)
items
=
map
(
makekey
,
items
)
items
.
sort
()
for
num
,
var
in
items
:
print
"%s=%s"
%
(
var
,
num
),
print
main
()
Demo/comparisons/systemtest.py
0 → 100755
View file @
21bc15b7
#! /usr/local/bin/python
# 3) System Test
#
# Given a list of directories, report any bogus symbolic links contained
# anywhere in those subtrees. A bogus symbolic link is one that cannot
# be resolved because it points to a nonexistent or otherwise
# unresolvable file. Do *not* use an external find executable.
# Directories may be very very deep. Print a warning immediately if the
# system you're running on doesn't support symbolic links.
# This implementation:
# - takes one optional argument, using the current directory as default
# - uses chdir to increase performance
# - sorts the names per directory
# - prints output lines of the form "path1 -> path2" as it goes
# - prints error messages about directories it can't list or chdir into
import
os
import
sys
from
stat
import
*
def
main
():
try
:
# Note: can't test for presence of lstat -- it's always there
dummy
=
os
.
readlink
except
AttributeError
:
print
"This system doesn't have symbolic links"
sys
.
exit
(
0
)
if
sys
.
argv
[
1
:]:
prefix
=
sys
.
argv
[
1
]
else
:
prefix
=
''
if
prefix
:
os
.
chdir
(
prefix
)
if
prefix
[
-
1
:]
!=
'/'
:
prefix
=
prefix
+
'/'
reportboguslinks
(
prefix
)
else
:
reportboguslinks
(
''
)
def
reportboguslinks
(
prefix
):
try
:
names
=
os
.
listdir
(
'.'
)
except
os
.
error
,
msg
:
print
"%s%s: can't list: %s"
%
(
prefix
,
'.'
,
msg
)
return
names
.
sort
()
for
name
in
names
:
if
name
==
os
.
curdir
or
name
==
os
.
pardir
:
continue
try
:
mode
=
os
.
lstat
(
name
)[
ST_MODE
]
except
os
.
error
:
print
"%s%s: can't stat: %s"
%
(
prefix
,
name
,
msg
)
continue
if
S_ISLNK
(
mode
):
try
:
os
.
stat
(
name
)
except
os
.
error
:
print
"%s%s -> %s"
%
\
(
prefix
,
name
,
os
.
readlink
(
name
))
elif
S_ISDIR
(
mode
):
try
:
os
.
chdir
(
name
)
except
os
.
error
,
msg
:
print
"%s%s: can't chdir: %s"
%
\
(
prefix
,
name
,
msg
)
continue
try
:
reportboguslinks
(
prefix
+
name
+
'/'
)
finally
:
os
.
chdir
(
'..'
)
main
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment