aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorN.N <matju@users.sourceforge.net>2007-01-05 00:08:25 +0000
committerIOhannes m zmölnig <zmoelnig@iem.at>2015-10-14 14:51:43 +0200
commitd437ba346010c12f6d1e579bf753eceb226a98df (patch)
tree8c43799ede819e9936237280dcc7a61a44a23f27
parent6e50639172500cd2185934ad69512cc3345550c6 (diff)
bye. (see you in DesireData)
svn path=/trunk/externals/pureunity/; revision=7193
-rw-r--r--COPYING340
-rw-r--r--ChangeLog20
-rw-r--r--Makefile18
-rw-r--r--README594
-rw-r--r--TODO13
-rw-r--r--main.pd89
-rw-r--r--pureunity.c64
7 files changed, 0 insertions, 1138 deletions
diff --git a/COPYING b/COPYING
deleted file mode 100644
index eeb586b..0000000
--- a/COPYING
+++ /dev/null
@@ -1,340 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) 19yy <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) 19yy name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/ChangeLog b/ChangeLog
deleted file mode 100644
index 8fcebd6..0000000
--- a/ChangeLog
+++ /dev/null
@@ -1,20 +0,0 @@
-$Id: ChangeLog,v 1.1 2006-01-09 05:04:19 matju Exp $
-
-version 0.1 (2006.01.??):
- *
-
-version 0.0 (2006.01.06):
- * LICENSE is GPL
- * doc is in README
- * new object classes:
- * [commutator], [commutative-test]
- * [associator], [associative-test]
- * [invertor], [invertible-test]
- * [distributor], [distributive-test]
- * [trichotomy-test], ...
- * [twice], [3times], [4times], [^]
- * [tree], [protocols-tree]
- * [rtimer]
- * for $1 in f,~ and some of #:
- [$1.norm], [$1.taa], [$1.do], [$1.packunpack3], [$1.swap]
- [$1.inlet], [$1.outlet]
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 8383862..0000000
--- a/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-# if you don't want the standard pd, set the PD-variable before doing "make"
-# e.g. "PD=/home/matju/pd_devel_0_39_und/bin/pd make"
-PD ?= pd
-PDFLAGS = -lib pureunity -noaudio -path generics -path specifics
-PDFLAGS += -lib gridflow
-CFLAGS = -Wall
-
-test:: built
- $(PD) $(PDFLAGS) main.pd
-
-built: Makefile pureunity.pd_linux
- echo > built
-
-generic/%~.pd: generic/%.pd
-
-pureunity.pd_linux: pureunity.c Makefile
- $(CC) $(CFLAGS) -shared -o pureunity.pd_linux pureunity.c
-
diff --git a/README b/README
deleted file mode 100644
index 930c0a7..0000000
--- a/README
+++ /dev/null
@@ -1,594 +0,0 @@
-$Id: README,v 1.3 2007-01-03 00:44:28 matju Exp $
-
-PureUnity
-
-Copyright 2006 by Mathieu Bouchard <matju à artengine point ca>
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-See file ./COPYING for further informations on licensing terms.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-+-+-+--+---+-----+--------+-------------+---------------------+
-GOALS
-
- 1. To provide a unit-test framework, which also provide benchmarking
- features, all made in Pd for use in Pd.
-
- 2. To provide tests for functionality in internals, externals, abstractions,
- etc., in a modularized way, in a DRY/OAOO fashion, thus abstracting out
- common features so that many objects share the same test patch for the
- features that they have in common.
-
-+-+-+--+---+-----+--------+-------------+---------------------+
-REQUIREMENTS
-
- 1. Pd 0.39 (PureMSP or Devel)
-
-+-+-+--+---+-----+--------+-------------+---------------------+
-TEST PROTOCOL
-
- new:
- create common (reusable) fixtures.
-
- inlet 0:
- bang:
- run all available tests in that class. individual tests don't have
- to be available through individual methods but may. If they do, the
- names of the methods must match those given in the test results.
-
- each test should build its own non-reusable fixtures and reinitialize
- common fixtures, not assuming that the previous tests have left the
- common fixtures in a normal state.
-
- outlet 0:
- test results. a sequence of lists like:
- list $passed? $accuracy $elapsed $name1 ...
-
- where:
- $passed? is either 0 for failure or 1 for success
- $accuracy is a float proportional to relative error on math
- (if not applicable, use 0)
- $elapsed is a nonnegative float, the time elapsed in milliseconds
- or it is any negative float meaning the time hasn't been measured.
- $name1 and the rest are symbols and/or floats identifying the test
-
- for example:
- list 1 0 -1 commutative f + *
-
- Which means that the 1st test about commutativity passed ($2=1) because it
- was perfectly accurate ($3==0) and that we didn't measure the time ($4=-).
-
-+-+-+--+---+-----+--------+-------------+---------------------+
-SEVERITIES (in decreasing order)
-
- * crash: Segmentation Fault, Bus Error, Illegal Instruction, Infinite Loop,
- etc. You can't deal with those errors at the level of the tests. Maybe there
- should be a way to tell a test object to skip certain tests, by name, in
- order to be able to perform as many tests as possible while waiting for a
- fix. It could become possible to rescue from some of those crashes if Pd
- supported exceptions (stack-unwinding).
-
- * corruption: this may cause future crashes and failures on innocent
- objects/features. I have no solution for this except to be careful.
-
- * post(),error(),pd_error(): Gets printed in the console. The problem is that
- those can't be handled by the test objects, so someone has to read them and
- interpret them. Also they prevent test objects to ensure that error
- conditions produce error messages.
-
- * pd_error2(): I wish this would exist. It would be sort of like pd_error()
- but it would produce a pd message instead, whose selector would be an
- error code, designed to be both localizable and [route]able. By default, that
- message would be sent to the console, but there would be an internal class
- designed to catch those messages. (If stack-unwinding were possible, it would
- be disabled by default on pd_error2 and could be enabled explicitly
- by-selector).
-
- * failure: a test object reports a problem through outlet 0.
-
- * dropout: a failure in realtimeness... difficult for an object to detect.
-
- * inaccuracy: a test more or less succeeds but the test detected that the
- epsilon sucks.
-
-+-+-+--+---+-----+--------+-------------+---------------------+
-PROTOCOL FOR [error]
-
-new:
- optional argument which would either be a float
- (e.g. the $0 of the enclosing abstraction) or a pointer.
-
-inlet 0:
- set $scapegoat:
- replaces the originator of the message by $scapegoat, which can be a
- float or a pointer
-
- error $1 ...:
- causes its arguments to be concatenated, space-separated (may include
- floats), and then sent through pd_error using the appropriate
- originator (scapegoat).
-
- list $1 ...:
- for future use. would use pd_error2() (see README or previous mail).
- $1 has to be a symbol.
-
-+-+-+--+---+-----+--------+-------------+---------------------+
-ACCURACY AND ERROR (in math-related unit tests)
-
-The "absolute error" between a practical result and the expected value
-is considered to be the distance between the two value. That is the
-absolute value of the difference.
-
-In the case of positions in 2D, 3D, etc., use the L2-Norm which is
-a generalized Pythagoras' Theorem: dist^2 = x^2 + y^2 + z^2 + ...
-A norm is a distance between something and zero.
-
-Sometimes you have several practical results for one expected value
-and must extract a single absolute error out of that. Then you should pick
-the largest of the individual absolute errors.
-
-Sometimes you don't have an expected value, you just have several
-practical results that you expect to be quite the same. In that case,
-the absolute error is the "diameter" of those results. The meaning
-of diameter here is: the largest distance between any two results.
-
-If in a single test you must compare 2D errors with 3D errors and 1D
-errors, etc., you may have to adjust them by dividing the error by
-the square root of N (N is the number of dimensions). In that case,
-the resulting value is called a RMS (Root-Mean-Square).
-
-The maximum error introduced by just representing a number as a float
-(instead of an exact value) is at most proportional to the magnitude
-of the number (e.g. usually 16 million times smaller: about 6 decimals).
-Also, often we are only interested in relative error, which is absolute
-error divided by the norm of the expected result, because small absolute
-errors don't matter much with large results. This is the reason floats
-exist in the first place. By default, use relative error as the $accuracy
-in Pd tests.
-
-If you don't have an expected result, then compute the relative error as
-being the absolute error divided by the norm of the average of practical
-results.
-
-In the RMS case of relative error, the norms of expected results should also
-be adjusted, but both adjustments cancel because they get divided by each
-other. That means: don't divide by the sqrt(N) at all and you'll get an
-appropriate result.
-
-+-+-+--+---+-----+--------+-------------+---------------------+
-TYPE PREFIXES
-
-Those have to be prefixes in order to be honored by DOLLSYM:
-[$1norm] should expand to [fnorm], [lfnorm], [#norm], etc.
-
-Those prefixes are necessary in order to achieve polymorphism through
-abstraction arguments.
-
-CURRENT:
- f float
- ~ signal
-
-FUTURE (from PureData):
- s symbol
- p gpointer
- a anything
- l list (of whatever)
- lf list of floats
- ls list of symbols
- lp list of pointers
-
-FUTURE (from DesireData):
- t stringpointer
- L listpointer
- v varpointer (instance symbol)
-
-FUTURE (from GridFlow):
- # grid (of whatever)
- #b grid of bytes (uint8)
- #s grid of shorts (int16)
- #i grid of ints (int32)
- #l grid of longs (int64)
- #f grid of floats (float32)
- #d grid of doubles (float64)
- #r grid of rubies (VALUE*)
-
-for a type prefix to be considered implemented, it has to
-have the following class set:
-
- metaabstraction for floats for signals for grids
- [$1.inlet] [inlet] [inlet~] [inlet]
- [$1.outlet] [outlet] [outlet~] [outlet]
- [$1.do $2 $3] [$2 $3] [$2~ $3] [# $2 $3]
- [$1.taa] [t a a] noop [t a a]
- [$1.swap] [swap] noop TODO
- [$1.norm] [abs] [env~] [# sq]->[#ravel]->[#fold +]->[#export]->[sqrt]
- [$1.packunpack3] pack,unpack noop TODO
-
-The first two cannot be implemented as abstractions and instead must be
-defined as aliases in pureunity.c.
-
-extra metaabstractions:
- [$1.rand] [f.rand] [~.rand]TODO [#.rand]TODO
-
-+-+-+--+---+-----+--------+-------------+---------------------+
-OTHER PROTOCOLS
-
-Those four classes are operators that give verify algebraic properties
-of other operators. The more their outputs are close to zero, the more
-those other operators are faithful to an algebraic property.
-
-(here, supported $types are f and ~)
-
-[commutator $type $class] (2 inlets) ab-ba
-[associator $type $class] (2 inlets) (ab)c-a(bc)
-[distributor $type $class1 $class2] (3 inlets) a&(b^c)-(a&b^a&c)
-[invertor $type $class1 $class2] (2 inlets) ab/b-a
-
-+-+-+--+---+-----+--------+-------------+---------------------+
-TESTS AND RULES
-
-For each class, a test file's name is the class name followed by "-test.pd",
-and a rule file's name is the class name followed by "-rule.pd",
-in the same way as it is for help files.
-
-for a class called $foo, the protocol (aka interface aka rule) $foo is the
-set of behaviours expected from the $foo class; the class called $foo-rule
-must repect the $foo protocol as well, plus it should test that the inputs
-are valid, and if they are, it should test for one or several results and
-report any errors.
-
-(((To report errors and inaccuracies, output them through the properties outlet at the right. If there is no
-properties outlet in $foo (curently almost nothing in Pd has one),
-then $foo-rule must have one more outlet than $foo.)))
-
-(((Float messages coming out of the properties outlet of $foo-rule report
-accuracy. Named error messages come out with selector "error" followed by
-an error-symbol and then its arguments.)))
-
-(((In the case of true/false logic, a value of 0 means that a test has passed
-and a 1 means that a test has failed. Those values represent failure and not
-success. The reason is so that it matches with accuracy levels, where 0 is
-perfectly accurate, but any inaccuracy shows up as a relative error fraction.
-Any finite nonnegative value is allowed for accuracy, because it is expected
-to be the result of a norm))).
-
-(((In standard math, "Discrete Metric" is when there are only two possible
-distances between objects: together=0 and apart=1)))
-
-+-+-+--+---+-----+--------+-------------+---------------------+
-RANDOMIZERS (?)
-
-+-+-+--+---+-----+--------+-------------+---------------------+
-ETC
-
-
-(write me!)
-
-
-
-
-If +-test.pd tests [+], it can test for hotness, coldness, it can test
-that only one result is produced per hot message, that all results are
-float, that a few example additions work, and that with random inputs it
-respects commutativity, associativity, invertibility, within appropriate
-relative-error bounds, etc.
-
-However +-test.pd can't test that errormessages aren't printed during the
-testing. This may be something that we want to check for, and currently
-the best way to handle it is to search the console for error messages, and
-if there are any, restart the tests in verbose mode and see where the
-error happens exactly.
-
-[...]
-
-Floating-point is the scientific notation for numbers that we all
-learned on paper in school. Rounding and inaccuracy are two sides
-of the same coin. They are required when it is stupid to have perfect
-results, that is, when it would mean too many computations for little
-gain.
-
-However sometimes we want to make sure that our math is accurate enough.
-Many algorithms are data-recursive: each computation uses previous
-results. Many of those algorithms have chaotic and/or unstable
-behaviours, which means that the inaccuracies may skyrocket instead of
-fading out.
-
-+-+-+--+---+-----+--------+-------------+---------------------+
-
-Date: Fri, 13 Jan 2006 04:07:59 +0900
-From: Mathieu Bouchard <matju@artengine.ca>
-Reply-To: ruby-core@ruby-lang.org
-To: ruby-core@ruby-lang.org
-Subject: Re: Design contracts and refactoring (was Re: mathn: ugly warnings)
-
-On Fri, 13 Jan 2006, mathew wrote:
-
-> *Dean Wampler *<deanwampler gmail.com> writes:
-> > Let me suggest an XP-style alternative; make thorough unit tests
-> > required and make sure they "document" - and test! - the design
-> > "contract".
-> Unit tests are not an alternative. They are an additional requirement.
-
-I find unit-tests to be often decomposable like this. Start with something
-like this:
-
- raise if Blah.new(666) != Blah.new(666)
- raise if Blah.new(747) != Blah.new(747)
- raise if Blah.new(242) != Blah.new(242)
- raise if Blah.new(69) != Blah.new(69)
- raise if Blah.new(37) != Blah.new(37)
-
-then generalize it ("equality is defined based on the arg of .new"):
-
- for x in [666,747,242,69,37] do
- raise if Blah.new(x) != Blah.new(x)
- end
-
-then extract a contract from it:
-
- class CheckedBlah < Blah
- def self.new(x)
- r = super(x)
- raise if r != super(x)
- r
- end
- end
-
-so now all Blah object creation may be checked throughout actual uses of a
-program and not just unit tests. The unit test now reduces to:
-
- for x in [666,747,242,69,37] do Blah.new(x) end
-
-so for many unit tests, all you have to do is just do things and discard
-the results, and the contract will do the job of checking.
-
- _ _ __ ___ _____ ________ _____________ _____________________ ...
-| Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju
-| Freelance Digital Arts Engineer, Montréal QC Canada
-
-+-+-+--+---+-----+--------+-------------+---------------------+
-
-Date: Fri, 13 Jan 2006 05:05:19 +0900
-From: Mathieu Bouchard <matju@artengine.ca>
-Reply-To: ruby-core@ruby-lang.org
-To: ruby-core@ruby-lang.org
-Subject: Re: Design contracts and refactoring (was Re: mathn: ugly warnings)
-
-On Fri, 13 Jan 2006, mathew wrote:
-
-> For example, consider a simple vector addition routine in a 3D library.
-> The unit tests might test its behavior with Float and Integer vectors,
-> since that's why it was written.
-
-Here's another way to factor unit-tests that I haven't mentioned in the
-last mail.
-
-suppose you test for + using:
-
- class IntegerTest
- def test; 2+2==4 or raise; end
- end
- class FloatTest
- def test; 2.0+2.0==4.0 or raise; end
- end
- class RationalTest
- def test; Rational(2,1)+Rational(2,1)==Rational(4,1) or raise; end
- end
-
-you can refactor those tests like this:
-
- class NumericTest
- def initialize nt; @nt; end
- def make x; raise "abstract class" end
- def test; make(2)+make(2)==make(4) or raise; end
- end
- class IntegerTest; def make x; Integer(x) end end
- class FloatTest; def make x; Float(x) end end
- class RationalTest; def make x; Rational(x,1) end end
-
-> However, to do that you need to know whether the feature of supporting
-> (say) Complex vectors or BigDecimal vectors is intended or not. The unit
-> tests won't tell you this.
-
-[...]
-
-> > One limitation of documentation is that it has no enforcement power,
-> > so you have to write tests anyway to test conformance.
-> Unit tests have no enforcement power either, because you can just change the
-> test. Indeed, I've already had to do this once when it turned out that the
-> unit test was wrong. (In net/ftp.)
-
-That was a pretty bad case of strawman argument. Dean was assuming that
-your documentation was not executable when you had quite clearly stated
-that it was the contracts that acted as documentation!
-
-[...]
-
-+-+-+--+---+-----+--------+-------------+---------------------+
-
-Date: Fri, 13 Jan 2006 07:36:36 +0900
-From: Mathieu Bouchard <matju@artengine.ca>
-Reply-To: ruby-core@ruby-lang.org
-To: ruby-core@ruby-lang.org
-Subject: Re: Design contracts and refactoring (was Re: mathn: ugly warnings)
-
-On Fri, 13 Jan 2006, mathew wrote:
-
-> > The XP view is
-> > that you should eliminate the redundancy.
-> Except it's not redundancy.
-> Unit tests define a set of functionality that is required. Documentation tells
-> you the functionality that is supported, which is generally a superset of the
-> functionality required by the unit tests.
-
-Let's follow the argument of both of you to the end.
-
-1. Unit-tests often match inputs with outputs on a case-by-case basis.
-
-2. Redundancy should be eliminated.
-
-(1) suggests that there is a shorter way to express the unit-tests.
-Suppose you are able to find a formula for generating output-validators
-from inputs. Then that formula is a postcondition of a contract, and the
-explicit output-validators of the unit-tests are redundant.
-
-(2) because part of the unit-tests are redundant, part of the unit-tests
-should be eliminated. This causes the postconditions to become an
-essential part of unit-testing.
-
-Unit-tests vs contracts is a false debate.
-
- _ _ __ ___ _____ ________ _____________ _____________________ ...
-| Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju
-| Freelance Digital Arts Engineer, Montréal QC Canada
-
-
-+-+-+--+---+-----+--------+-------------+---------------------+
-Date: Fri, 13 Jan 2006 17:19:41 +0900
-From: Mathieu Bouchard <matju@artengine.ca>
-Reply-To: ruby-core@ruby-lang.org
-To: ruby-core@ruby-lang.org
-Subject: Re: Design contracts and refactoring (was Re: mathn: ugly warnings)
-
-[...]
-
-In order to entrench the tests-as-documentation habit firmly in the Ruby
-community, we need a catchy acronym. Like RTFUT = Read the Fabulous Unit
-Tests!
-
-+-+-+--+---+-----+--------+-------------+---------------------+
-http://lists.puredata.info/pipermail/pd-dev/2006-01/005920.html
-Date: Fri, 20 Jan 2006 23:52:22 -0500 (EST)
-From: Mathieu Bouchard <matju@artengine.ca>
-To: pd-dev <pd-dev@iem.at>
-Subject: macros and such (was: pd-lib, SIMD)
-
-[...]
-
-I think that the Pd source doesn't use nearly enough macros or other
-code-reducing tricks.
-
-The reduction of code isn't so much about making things use less RAM: the
-RAM excuse is quickly evaporating as even the tiniest computers come with
-plenty of RAM and even the faster kinds of RAM come in ever more copious
-amounts (big caches).
-
-The reduction of code is programmer-oriented. I'm not talking about length
-of identifiers here (this is a separate issue). Every line of code should
-do something interesting by itself. Code should read like a good story and
-not like a car. Ever tried to read a car? It's boring. The same damn
-piston copy-pasted 12 times.
-
-The reduction of code is also documentation-oriented. Once the programmer
-has been contaminated with the wisdom required to make small code or
-understand small code, then why wouldn't the programmer explain it to his
-students in higher-level terms instead of chanting 12 times the same
-piston as if it were a marathon of Hail-Marys ?
-
-This is why Pd needs a taxonomy of object classes. If I don't get that
-taxonomy in Pd itself nor in its help files, at least I'll have it in its
-unit tests.
-
-Once and only once.
-Once and only once.
-Once and only once.
-Three strikes and you refactor.
-for x in [1,2,3] say: Once and only once
-
-http://c2.com/cgi/wiki/?ThreeStrikesAndYouRefactor
-
-BTW I'm not talking about only inheritance of implementations. The most
-important thing to me is inheritance of expectations, so that if I name
-100 classes that obey the rule "Operator2", then you have just learned
-something common about 100 classes.
-
-Operator2 means right-inlet is cold, left-inlet is hot, there is a "set"
-method for using left-inlet as cold, there is a "bang" for explicitly
-activating the main computation. The main computation only produces one
-message. That's what "Operator2" means in my taxonomy, and it's that much
-that hasn't to be stated explicitly in each help patch.
-
-Help patches can be abstractions to be used to by other help patches. Just
-put a [operator2-help] object in your help patch to indicate that the
-currently documented class obeys the standard operator2 rules.
-
-Who's against it?
-
-+-+-+--+---+-----+--------+-------------+---------------------+
-http://lists.puredata.info/pipermail/pd-list/2006-02/035169.html
-Date: Sat Feb 4 21:22:29 CET 2006
-From: Mathieu Bouchard <matju@artengine.ca>
-To: pd-list
-
- * Previous message: [PD] dealing with arguments and inlets
- * Next message: [PD] Re: [PD-announce] A new version of FFTease is now available for Pd
- * Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
-
-On Fri, 3 Feb 2006, Hans-Christoph Steiner wrote:
-
-> The way I have been thinking is that the first inlet is the general
-> inlet, and it can accept many types of messages. Then the second inlet
-> lines up with the first argument, the third inlet to the second
-> argument, etc.
-
-I agree. Many objects obey the rule that the k'th inlet matches argument
-$k for several arguments in a row, usually all of them.
-
-> I think this is pretty clean and flexible, and I think
-> it would be nice to have some kind of standard for this.
-
-And the best way to make sure people are following a standard is to make
-it so easy to follow that it's harder to not follow it than to follow it.
-Of course I don't mean adding hurdles to doing it otherwise, but rather
-make a shortcut for those who follow the standard. Short of this, people
-who make abstractions/externals can get a friendly reminder, from someone
-who cares, that it would be better if they followed the standard.
-
-> Obviously, it doesn't work for all objects, but I think it would be good to
-> standardize on objects it does work for.
-
-PureUnity's goal (when I work on it) is to design a taxonomy that
-separates objects that obey certain properties, from those that don't,
-because that's a way to reuse tests, but also because certainly it doesn't
-hurt documentation either, and it's even better if it can influence how
-abstractions are made.
-
- _ _ __ ___ _____ ________ _____________ _____________________ ...
-| Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju
-| Freelance Digital Arts Engineer, Montréal QC Canada
-
-+-+-+--+---+-----+--------+-------------+---------------------+
-From matju@artengine.ca on Dec 18, 2006
-
-I thought up some kind of classification of type systems, avoiding to call
-them strong/weak or static/dynamic because those words are confusing.
-
-1. Typed expressions: each piece of code that can give a value, has a
-type that can be figured out at compile-time.
-
-2. Typed variables/parameters: declarations allow runtime checks but not
-compile-time checks.
-
-3. Typed values: variables don't have types, they can contain any value,
-but every value has a type.
-
-4. Typed uses: values don't have types, a type is a way of using a value.
-
-Strictness, in the sense of forbidding things to the user, is not on that
-scale, it's another aspect. A well-balanced strictness allows one to
-bypass the system whenever needed, but without being too error-prone.
-
-However it's difficult to say what it means to "bypass the system" for all
-four typing categories at once, or even within one category.
diff --git a/TODO b/TODO
deleted file mode 100644
index 126a2c1..0000000
--- a/TODO
+++ /dev/null
@@ -1,13 +0,0 @@
-$Id: TODO,v 1.1 2006-01-09 05:04:19 matju Exp $
-
-TODO:
- * benchmark
- * signals
- * grids
-
- * transitive, antisymmetric, predicate
- * contracts : *-rule.pd
-
- * tests for the frameworks' own components?
-
-
diff --git a/main.pd b/main.pd
deleted file mode 100644
index fe34a76..0000000
--- a/main.pd
+++ /dev/null
@@ -1,89 +0,0 @@
-#N canvas 841 0 408 486 10;
-#X obj 19 65 loadbang;
-#X obj 28 87 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 41 373 print;
-#N canvas 509 382 450 300 other 0;
-#X obj 20 38 twice symbol foo bar;
-#X obj 20 21 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 20 57 print;
-#X obj 20 81 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 20 117 print;
-#X obj 20 98 3times symbol foo bar baz;
-#X obj 20 141 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 20 177 print;
-#X obj 20 158 4times symbol foo bar baz fnord;
-#X connect 0 0 2 0;
-#X connect 1 0 0 0;
-#X connect 3 0 5 0;
-#X connect 5 0 4 0;
-#X connect 6 0 8 0;
-#X connect 8 0 7 0;
-#X restore 323 80 pd other;
-#X obj 19 111 t b b b;
-#X obj 71 354 +;
-#X msg 121 354 0;
-#X msg 71 316 float \$1;
-#X obj 41 297 t a a;
-#X obj 96 354 t f;
-#X obj 19 346 f;
-#X obj 71 335 == 0;
-#X obj 19 392 print total_failures;
-#X obj 226 251 sel 0;
-#X obj 234 312 bng 100 250 50 0 empty empty empty 0 -6 0 8 -258699
--1 -262144;
-#X msg 234 293 color \$1 \, bang;
-#X msg 226 270 16;
-#X msg 256 270 13;
-#X text 24 437 This does not count errors not reported by the tests
-;
-#X text 25 464 Consult the console for more information;
-#X obj 4 6 cnv 15 400 40 empty empty PureUnity 8 20 1 18 -34345 -68160
-0;
-#X text 130 7 TM;
-#X obj 15 35 cnv 1 380 1 empty empty Copyright_2006_by_Mathieu_Bouchard
-150 -4 1 9 -258699 -262144 0;
-#X text 25 450 Such as Syntax Error \, Class Not Found \, etc.;
-#X text 297 253 Green: PASS;
-#X text 311 265 Red: FAIL;
-#X obj 85 150 glue-test;
-#X obj 41 131 t b b b;
-#X text 6 48 from the bit rot prevention department;
-#X obj 284 149 protocols-tree;
-#X obj 284 168 print;
-#X symbolatom 284 133 10 0 0 0 - - -;
-#X msg 284 114 symbol field;
-#X obj 63 169 arith-test f;
-#X obj 41 188 comparators-test f;
-#X connect 0 0 4 0;
-#X connect 1 0 4 0;
-#X connect 4 0 10 0;
-#X connect 4 1 27 0;
-#X connect 4 2 6 0;
-#X connect 5 0 9 0;
-#X connect 5 0 10 1;
-#X connect 6 0 5 1;
-#X connect 7 0 11 0;
-#X connect 8 0 2 0;
-#X connect 8 1 7 0;
-#X connect 9 0 5 1;
-#X connect 10 0 12 0;
-#X connect 10 0 13 0;
-#X connect 11 0 5 0;
-#X connect 13 0 16 0;
-#X connect 13 1 17 0;
-#X connect 15 0 14 0;
-#X connect 16 0 15 0;
-#X connect 17 0 15 0;
-#X connect 26 0 8 0;
-#X connect 27 0 34 0;
-#X connect 27 1 33 0;
-#X connect 27 2 26 0;
-#X connect 29 0 30 0;
-#X connect 31 0 29 0;
-#X connect 32 0 31 0;
-#X connect 33 0 8 0;
-#X connect 34 0 8 0;
diff --git a/pureunity.c b/pureunity.c
deleted file mode 100644
index f010533..0000000
--- a/pureunity.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- $Id: pureunity.c,v 1.1 2006-01-09 05:04:19 matju Exp $
- PureUnity
- Copyright 2006 by Mathieu Bouchard <matju à artengine point ca>
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
-
- See file ./COPYING for further informations on licensing terms.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include <sys/time.h>
-/*#include <m_pd.h>*/
-#include "../../pd/src/m_pd.h"
-#define ALIAS(y,x) class_addcreator((t_newmethod)getfn(m,gensym(x)),gensym(y),A_GIMME,0);
-
-typedef struct {
- t_text o;
- struct timeval t0;
-} t_rtimer;
-
-t_class *rtimer_class;
-void rtimer_reset(t_rtimer *self) {gettimeofday(&self->t0,0);}
-void *rtimer_new(t_symbol *s) {
- t_rtimer *self = (t_rtimer *)pd_new(rtimer_class);
- inlet_new((t_text *)self, (t_pd *)self, gensym("bang"), gensym("1_bang"));
- outlet_new((t_text *)self, gensym("float"));
- rtimer_reset(self);
- return self;
-}
-
-void rtimer_1_bang(t_rtimer *self) {
- struct timeval t1;
- gettimeofday(&t1,0);
- outlet_float(self->o.ob_outlet,
- (t1.tv_sec -self->t0.tv_sec )*1000.0 +
- (t1.tv_usec-self->t0.tv_usec)/1000.0);
-}
-
-void pureunity_setup() {
- t_pd *m = &pd_objectmaker;
- ALIAS( "f.inlet","inlet" );
- ALIAS( "#.inlet","inlet" );
- ALIAS( "~.inlet","inlet~" );
- ALIAS("f.outlet","outlet" );
- ALIAS("#.outlet","outlet" );
- ALIAS("~.outlet","outlet~");
- ALIAS( "f.swap","swap" );
- rtimer_class = class_new(gensym("rtimer"),(t_newmethod)rtimer_new,0,sizeof(t_rtimer),0,0);
- class_addbang(rtimer_class,rtimer_reset);
- class_addmethod(rtimer_class, (t_method)rtimer_1_bang, gensym("1_bang"), 0);
-}
-