diff options
Diffstat (limited to 'desiredata/extra/pureunity')
56 files changed, 2279 insertions, 0 deletions
diff --git a/desiredata/extra/pureunity/2times.pd b/desiredata/extra/pureunity/2times.pd new file mode 100644 index 00000000..5f3eeecd --- /dev/null +++ b/desiredata/extra/pureunity/2times.pd @@ -0,0 +1,31 @@ +#N canvas 330 193 379 266 10; +#X obj 20 16 inlet; +#X obj 69 108 inlet; +#X obj 108 108 inlet; +#X obj 85 54 t a a; +#X obj 20 35 route bang; +#X obj 20 54 t b b; +#X obj 118 211 pack s s; +#X obj 46 209 pack 0 0; +#X obj 46 241 outlet; +#X obj 46 130 \$1 \$2; +#X obj 85 130 \$1 \$3; +#X obj 85 170 route float; +#X obj 46 190 route float; +#X connect 0 0 4 0; +#X connect 1 0 9 1; +#X connect 2 0 10 1; +#X connect 3 0 9 0; +#X connect 3 1 10 0; +#X connect 4 0 5 0; +#X connect 4 1 3 0; +#X connect 5 0 9 0; +#X connect 5 1 10 0; +#X connect 6 0 8 0; +#X connect 7 0 8 0; +#X connect 9 0 12 0; +#X connect 10 0 11 0; +#X connect 11 0 7 1; +#X connect 11 1 6 1; +#X connect 12 0 7 0; +#X connect 12 1 6 0; diff --git a/desiredata/extra/pureunity/3times.pd b/desiredata/extra/pureunity/3times.pd new file mode 100644 index 00000000..706d41db --- /dev/null +++ b/desiredata/extra/pureunity/3times.pd @@ -0,0 +1,40 @@ +#N canvas 330 193 379 266 10; +#X obj 20 16 inlet; +#X obj 69 108 inlet; +#X obj 108 108 inlet; +#X obj 20 35 route bang; +#X obj 46 241 outlet; +#X obj 46 130 \$1 \$2; +#X obj 85 130 \$1 \$3; +#X obj 85 170 route float; +#X obj 46 190 route float; +#X obj 20 54 t b b b; +#X obj 147 108 inlet; +#X obj 124 130 \$1 \$4; +#X obj 124 150 route float; +#X obj 118 211 pack s s s; +#X obj 46 209 pack 0 0 0; +#X obj 85 54 t a a a; +#X connect 0 0 3 0; +#X connect 1 0 5 1; +#X connect 2 0 6 1; +#X connect 3 0 9 0; +#X connect 3 1 15 0; +#X connect 5 0 8 0; +#X connect 6 0 7 0; +#X connect 7 0 14 1; +#X connect 7 1 13 1; +#X connect 8 0 14 0; +#X connect 8 1 13 0; +#X connect 9 0 5 0; +#X connect 9 1 6 0; +#X connect 9 2 11 0; +#X connect 10 0 11 1; +#X connect 11 0 12 0; +#X connect 12 0 14 2; +#X connect 12 1 13 2; +#X connect 13 0 4 0; +#X connect 14 0 4 0; +#X connect 15 0 5 0; +#X connect 15 1 6 0; +#X connect 15 2 11 0; diff --git a/desiredata/extra/pureunity/4times.pd b/desiredata/extra/pureunity/4times.pd new file mode 100644 index 00000000..ed5f3f41 --- /dev/null +++ b/desiredata/extra/pureunity/4times.pd @@ -0,0 +1,49 @@ +#N canvas 330 193 381 323 10; +#X obj 20 16 inlet; +#X obj 69 108 inlet; +#X obj 108 108 inlet; +#X obj 20 35 route bang; +#X obj 46 261 outlet; +#X obj 46 130 \$1 \$2; +#X obj 85 130 \$1 \$3; +#X obj 85 190 route float; +#X obj 46 210 route float; +#X obj 147 108 inlet; +#X obj 124 130 \$1 \$4; +#X obj 124 170 route float; +#X obj 20 54 t b b b b; +#X obj 85 54 t a a a a; +#X obj 187 108 inlet; +#X obj 164 130 \$1 \$5; +#X obj 134 229 pack s s s s; +#X obj 46 229 pack 0 0 0 0; +#X obj 164 150 route float; +#X connect 0 0 3 0; +#X connect 1 0 5 1; +#X connect 2 0 6 1; +#X connect 3 0 12 0; +#X connect 3 1 13 0; +#X connect 5 0 8 0; +#X connect 6 0 7 0; +#X connect 7 0 17 1; +#X connect 7 1 16 1; +#X connect 8 0 17 0; +#X connect 8 1 16 0; +#X connect 9 0 10 1; +#X connect 10 0 11 0; +#X connect 11 0 17 2; +#X connect 11 1 16 2; +#X connect 12 0 5 0; +#X connect 12 1 6 0; +#X connect 12 2 10 0; +#X connect 12 3 15 0; +#X connect 13 0 5 0; +#X connect 13 1 6 0; +#X connect 13 2 10 0; +#X connect 13 3 15 0; +#X connect 14 0 15 1; +#X connect 15 0 18 0; +#X connect 16 0 4 0; +#X connect 17 0 4 0; +#X connect 18 0 17 3; +#X connect 18 1 16 3; diff --git a/desiredata/extra/pureunity/COPYING b/desiredata/extra/pureunity/COPYING new file mode 100644 index 00000000..eeb586b3 --- /dev/null +++ b/desiredata/extra/pureunity/COPYING @@ -0,0 +1,340 @@ + 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/desiredata/extra/pureunity/ChangeLog b/desiredata/extra/pureunity/ChangeLog new file mode 100644 index 00000000..3f7bfd54 --- /dev/null +++ b/desiredata/extra/pureunity/ChangeLog @@ -0,0 +1,23 @@ +$Id: ChangeLog,v 1.1.2.2 2007-01-05 02:21:13 matju Exp $ + +version 0.40.pre6 (2007.01.04): + * requires 0.40 + * goes into DesireData pre6 + * swap the order in the name of class templates + + +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/desiredata/extra/pureunity/Makefile b/desiredata/extra/pureunity/Makefile new file mode 100644 index 00000000..a9e9ec88 --- /dev/null +++ b/desiredata/extra/pureunity/Makefile @@ -0,0 +1,19 @@ +# 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 +#PD ?= desire +PDFLAGS = -lib pureunity -noaudio +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/desiredata/extra/pureunity/README b/desiredata/extra/pureunity/README new file mode 100644 index 00000000..a3990537 --- /dev/null +++ b/desiredata/extra/pureunity/README @@ -0,0 +1,624 @@ +$Id: README,v 1.1.2.2 2007-06-01 16:31:54 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. This includes stack overflow. + + * 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): + L listpointer (still trying to figure out whether this will really happen) + 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) + #t grid of Tcl_Object or t_atom or I don't know what. + +for a type prefix to be considered implemented, it has to +have the following class set: + + metaabstraction for floats for signals for grids + [inlet.$1] [inlet] [inlet~] [inlet] + [outlet.$1] [outlet] [outlet~] [outlet] + [op2.$1 $2 $3] [$2 $3] [$2~ $3] [# $2 $3] + [taa.$1] [t a a] noop [t a a] + [swap.$1] [swap] noop TODO + [norm.$1] [abs] [env~] [# sq]->[#ravel]->[#fold +]->[#export]->[sqrt] + [packunpack3.$1] pack,unpack noop TODO + [rand.$1] .................................. + +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 to pd-list 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. + + ++-+-+--+---+-----+--------+-------------+---------------------+ +From matju@artengine.ca to pd-dev on Jan 2, 2007 + +PureUnity will now require pd 0.40. This will make things easier, as for +example the aliases [f.inlet], [~.inlet] can be renamed to [inlet.f] and +[inlet.~], which makes those class-templates sortable alphabetically, and +readable as "inlet of float" and "inlet of signal" or maybe "inlet for +floats" and "inlet for signals"... likewise for all other existing +templates of PureUnity (do,norm,outlet,packunpack3,rand,swap,taa). + +(here, "template" means "parametrized classname" as in C++, and not t_template) + ++-+-+--+---+-----+--------+-------------+---------------------+ +Old pre-DesireData ChangeLog for PureUnity: + +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/desiredata/extra/pureunity/^.pd b/desiredata/extra/pureunity/^.pd new file mode 100644 index 00000000..5050174f --- /dev/null +++ b/desiredata/extra/pureunity/^.pd @@ -0,0 +1,25 @@ +#N canvas 0 0 361 237 10; +#X obj 55 14 inlet; +#X obj 55 154 outlet; +#X obj 55 60 |; +#X obj 85 60 &; +#X obj 85 79 * -1; +#X obj 85 98 + -1; +#X obj 55 98 &; +#X text 103 155 x or y but not both; +#X text 112 61 both; +#X text 118 89 not; +#X text 30 98 but; +#X text 9 61 either; +#X obj 101 33 inlet; +#X obj 55 33 t a a; +#X connect 0 0 13 0; +#X connect 2 0 6 0; +#X connect 3 0 4 0; +#X connect 4 0 5 0; +#X connect 5 0 6 1; +#X connect 6 0 1 0; +#X connect 12 0 3 1; +#X connect 12 0 2 1; +#X connect 13 0 2 0; +#X connect 13 1 3 0; diff --git a/desiredata/extra/pureunity/antireflexive-test.pd b/desiredata/extra/pureunity/antireflexive-test.pd new file mode 100644 index 00000000..7353dc64 --- /dev/null +++ b/desiredata/extra/pureunity/antireflexive-test.pd @@ -0,0 +1,13 @@ +#N canvas 0 0 450 164 10; +#X obj 12 18 inlet; +#X obj 12 118 outlet; +#X obj 12 80 \$2; +#X msg 12 37 2 2; +#X obj 12 56 t a a; +#X obj 12 99 == 0; +#X connect 0 0 3 0; +#X connect 2 0 5 0; +#X connect 3 0 4 0; +#X connect 4 0 2 0; +#X connect 4 1 2 1; +#X connect 5 0 1 0; diff --git a/desiredata/extra/pureunity/antisymmetric-test.pd b/desiredata/extra/pureunity/antisymmetric-test.pd new file mode 100644 index 00000000..0788ad61 --- /dev/null +++ b/desiredata/extra/pureunity/antisymmetric-test.pd @@ -0,0 +1,4 @@ +#N canvas 0 0 450 300 10; +#X obj 12 18 inlet; +#X obj 12 48 outlet; +#X connect 0 0 1 0; diff --git a/desiredata/extra/pureunity/arith-test.pd b/desiredata/extra/pureunity/arith-test.pd new file mode 100644 index 00000000..6be56ea2 --- /dev/null +++ b/desiredata/extra/pureunity/arith-test.pd @@ -0,0 +1,76 @@ +#N canvas 69 22 726 501 10; +#X text 78 136 Abelian Groups:; +#X text 80 229 Abelian Monoids:; +#X text 79 349 Rings (incl Fields):; +#X obj 134 87 r \$0-b; +#X obj 309 87 r \$0-b; +#X obj 460 87 r \$0-b; +#X obj 26 69 s \$0-b; +#X obj 26 50 inlet bang; +#X obj 14 464 r \$0-r; +#X obj 14 483 outlet reports; +#X obj 134 456 s \$0-r; +#X obj 309 456 s \$0-r; +#X obj 460 456 s \$0-r; +#X obj 134 157 commutative-test \$1 +; +#X obj 134 367 distributive-test \$1 + *; +#X obj 134 177 commutative-test \$1 *; +#X obj 134 197 commutative-test \$1 ^; +#X obj 134 247 commutative-test \$1 &; +#X obj 134 267 commutative-test \$1 |; +#X obj 309 157 associative-test \$1 +; +#X obj 460 157 invertible-test \$1 + -; +#X text 17 11 This is the testclass for + \, - \, * \, / \, div \, +pow \, % \, mod; +#X obj 134 296 commutative-test \$1 min; +#X obj 134 317 commutative-test \$1 max; +#X text 18 25 And also for & \, | \, ^ \, min \, max; +#X obj 134 387 distributive-test \$1 ^ &; +#X obj 309 177 associative-test \$1 *; +#X obj 309 247 associative-test \$1 &; +#X obj 309 267 associative-test \$1 |; +#X obj 309 197 associative-test \$1 ^; +#X obj 309 296 associative-test \$1 min; +#X obj 309 316 associative-test \$1 max; +#X obj 460 177 invertible-test \$1 * /; +#X obj 460 197 invertible-test \$1 ^ ^; +#X connect 3 0 13 0; +#X connect 3 0 14 0; +#X connect 3 0 15 0; +#X connect 3 0 16 0; +#X connect 3 0 17 0; +#X connect 3 0 18 0; +#X connect 3 0 22 0; +#X connect 3 0 23 0; +#X connect 3 0 25 0; +#X connect 4 0 19 0; +#X connect 4 0 26 0; +#X connect 4 0 27 0; +#X connect 4 0 28 0; +#X connect 4 0 29 0; +#X connect 4 0 30 0; +#X connect 4 0 31 0; +#X connect 5 0 20 0; +#X connect 5 0 32 0; +#X connect 5 0 33 0; +#X connect 7 0 6 0; +#X connect 8 0 9 0; +#X connect 13 0 10 0; +#X connect 14 0 10 0; +#X connect 15 0 10 0; +#X connect 16 0 10 0; +#X connect 17 0 10 0; +#X connect 18 0 10 0; +#X connect 19 0 11 0; +#X connect 20 0 12 0; +#X connect 22 0 10 0; +#X connect 23 0 10 0; +#X connect 25 0 10 0; +#X connect 26 0 11 0; +#X connect 27 0 11 0; +#X connect 28 0 11 0; +#X connect 29 0 11 0; +#X connect 30 0 11 0; +#X connect 31 0 11 0; +#X connect 32 0 12 0; +#X connect 33 0 12 0; diff --git a/desiredata/extra/pureunity/associative-test.pd b/desiredata/extra/pureunity/associative-test.pd new file mode 100644 index 00000000..80e3e0c5 --- /dev/null +++ b/desiredata/extra/pureunity/associative-test.pd @@ -0,0 +1,32 @@ +#N canvas 736 151 452 434 10; +#X obj 40 15 inlet bang; +#X obj 40 150 /; +#X obj 40 169 t a a; +#X text 167 24 with tolerance 0; +#X obj 40 188 <= 0; +#X text 167 9 This test verifies that (1+2)+3=1+(2+3); +#X msg 40 34 1 2 3; +#X obj 40 74 unpack 0 0 0; +#X obj 40 245 outlet; +#X obj 40 131 * 2; +#X obj 40 93 associator \$1 \$2; +#X obj 40 226 list append associative \$1 \$2; +#X obj 40 207 pack 0 0 -1; +#X obj 40 112 norm.\$1; +#X obj 147 112 norm.\$1; +#X connect 0 0 6 0; +#X connect 1 0 2 0; +#X connect 2 0 4 0; +#X connect 2 1 12 1; +#X connect 4 0 12 0; +#X connect 6 0 7 0; +#X connect 7 0 10 0; +#X connect 7 1 10 1; +#X connect 7 2 10 2; +#X connect 9 0 1 0; +#X connect 10 0 13 0; +#X connect 10 1 14 0; +#X connect 11 0 8 0; +#X connect 12 0 11 0; +#X connect 13 0 9 0; +#X connect 14 0 1 1; diff --git a/desiredata/extra/pureunity/associator.pd b/desiredata/extra/pureunity/associator.pd new file mode 100644 index 00000000..f6592029 --- /dev/null +++ b/desiredata/extra/pureunity/associator.pd @@ -0,0 +1,38 @@ +#N canvas 574 54 580 317 10; +#X text 245 40 when the associator is 0 the rule is respected.; +#X text 245 63 see associative-test.pd; +#X text 16 219 associator; +#X text 166 219 antiassociator; +#X text 244 25 (a*b)*c - a*(b*c) = 0; +#X text 244 11 associativity rule for operator *=\$2 is:; +#X obj 18 19 inlet.\$1 a; +#X obj 91 19 inlet.\$1 b; +#X obj 164 19 inlet.\$1 c; +#X obj 18 61 packunpack3.\$1; +#X obj 18 104 op2.\$1 \$2; +#X obj 18 123 op2.\$1 \$2; +#X obj 102 108 op2.\$1 \$2; +#X obj 102 134 op2.\$1 \$2; +#X obj 18 153 taa.\$1; +#X obj 18 182 op2.\$1 -; +#X obj 168 182 op2.\$1 +; +#X obj 168 201 outlet.\$1 (ab)c+a(bc); +#X obj 18 201 outlet.\$1 (ab)c-a(bc); +#X connect 6 0 9 0; +#X connect 7 0 9 1; +#X connect 8 0 9 2; +#X connect 9 0 10 0; +#X connect 9 0 13 0; +#X connect 9 1 10 1; +#X connect 9 1 12 0; +#X connect 9 2 11 1; +#X connect 9 2 12 1; +#X connect 10 0 11 0; +#X connect 11 0 14 0; +#X connect 12 0 13 1; +#X connect 13 0 15 1; +#X connect 13 0 16 1; +#X connect 14 0 15 0; +#X connect 14 1 16 0; +#X connect 15 0 18 0; +#X connect 16 0 17 0; diff --git a/desiredata/extra/pureunity/commutative-test.pd b/desiredata/extra/pureunity/commutative-test.pd new file mode 100644 index 00000000..1b4cb22e --- /dev/null +++ b/desiredata/extra/pureunity/commutative-test.pd @@ -0,0 +1,39 @@ +#N canvas 555 5 452 322 10; +#X obj 40 15 inlet bang; +#X obj 101 102 unpack 0 0; +#X obj 101 183 /; +#X msg 40 34 1 3; +#X text 216 9 This test verifies that 1+3=3+1; +#X obj 101 202 t a a; +#X obj 101 278 outlet; +#X text 217 44 with tolerance 0; +#X obj 101 221 <= 0; +#X text 218 23 and 1*3=3*1 and...; +#X obj 101 164 * 2; +#X obj 101 126 commutator \$1 \$2; +#X obj 41 53 t b l b; +#X obj 43 95 realtime; +#X floatatom 44 125 5 0 0 0 - - -; +#X obj 101 259 list append commutative \$1 \$2; +#X obj 101 240 pack 0 0 -1; +#X obj 101 145 norm.\$1; +#X obj 208 145 norm.\$1; +#X connect 0 0 3 0; +#X connect 1 0 11 0; +#X connect 1 1 11 1; +#X connect 2 0 5 0; +#X connect 3 0 12 0; +#X connect 5 0 8 0; +#X connect 5 1 16 1; +#X connect 8 0 16 0; +#X connect 10 0 2 0; +#X connect 11 0 17 0; +#X connect 11 1 18 0; +#X connect 12 0 13 1; +#X connect 12 1 1 0; +#X connect 12 2 13 0; +#X connect 13 0 14 0; +#X connect 15 0 6 0; +#X connect 16 0 15 0; +#X connect 17 0 10 0; +#X connect 18 0 2 1; diff --git a/desiredata/extra/pureunity/commutator.pd b/desiredata/extra/pureunity/commutator.pd new file mode 100644 index 00000000..27a8e35e --- /dev/null +++ b/desiredata/extra/pureunity/commutator.pd @@ -0,0 +1,41 @@ +#N canvas 394 81 620 407 10; +#X text 90 114 ba; +#X text 33 93 ab; +#X text 220 113 however \, this thing i call commutator is more general +; +#X text 219 132 see commutative-test.pd; +#X text 127 217 anticommutator; +#X text 19 217 commutator; +#X text 218 15 Say operator \$2 is *. Then the commutativity rule is: +; +#X text 218 32 a*b=b*a which is also a*b-b*a = 0; +#X text 218 48 the commutator is a*b - b*a; +#X text 219 72 when \$2=+ this is also known as a "group commutator" +; +#X text 219 92 when \$2=* this is also known as a "ring commutator" +; +#X obj 18 19 inlet.\$1 a; +#X obj 93 19 inlet.\$1 b; +#X obj 18 38 taa.\$1; +#X obj 18 74 op2.\$1 \$2; +#X obj 80 98 op2.\$1 \$2; +#X obj 80 74 swap.\$1; +#X obj 18 180 op2.\$1 -; +#X obj 127 180 op2.\$1 +; +#X obj 18 199 outlet.\$1 ab-ba; +#X obj 127 199 outlet.\$1 ab+ba; +#X obj 18 121 taa.\$1; +#X connect 11 0 13 0; +#X connect 12 0 14 1; +#X connect 12 0 16 1; +#X connect 13 0 14 0; +#X connect 13 1 16 0; +#X connect 14 0 21 0; +#X connect 15 0 17 1; +#X connect 15 0 18 0; +#X connect 16 0 15 0; +#X connect 16 1 15 1; +#X connect 17 0 19 0; +#X connect 18 0 20 0; +#X connect 21 0 17 0; +#X connect 21 1 18 1; diff --git a/desiredata/extra/pureunity/comparators-test.pd b/desiredata/extra/pureunity/comparators-test.pd new file mode 100644 index 00000000..f8b569ae --- /dev/null +++ b/desiredata/extra/pureunity/comparators-test.pd @@ -0,0 +1,65 @@ +#N canvas 365 120 687 494 10; +#X obj 134 87 r \$0-b; +#X obj 329 87 r \$0-b; +#X obj 26 69 s \$0-b; +#X obj 26 50 inlet bang; +#X obj 14 414 r \$0-r; +#X obj 14 433 outlet reports; +#X obj 134 406 s \$0-r; +#X obj 329 406 s \$0-r; +#X text 17 11 This is the testclass for == \, != \, < \, > \, <= \, +>= \, && \, ||; +#X obj 329 157 equivalence-test \$1 ==; +#X obj 329 257 totalordereq-test \$1 == >=; +#X obj 329 237 totalordereq-test \$1 == <=; +#X obj 329 217 totalorder-test \$1 == >; +#X obj 329 197 totalorder-test \$1 == <; +#X obj 134 157 commutative-test \$1 ==; +#X obj 134 177 commutative-test \$1 !=; +#X obj 134 297 commutative-test \$1 &&; +#X obj 134 317 commutative-test \$1 ||; +#X obj 134 197 antisymmetric-test \$1 <; +#X obj 134 217 antisymmetric-test \$1 >; +#X obj 134 237 antisymmetric-test \$1 <=; +#X obj 134 257 antisymmetric-test \$1 >=; +#X obj 467 418 nbx 12 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 +10 -262144 -1 -1 0 256; +#X obj 467 382 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 329 297 associative-test \$1 &&; +#X obj 329 317 associative-test \$1 ||; +#X obj 467 399 rand.\$1; +#X connect 0 0 14 0; +#X connect 0 0 15 0; +#X connect 0 0 16 0; +#X connect 0 0 17 0; +#X connect 0 0 18 0; +#X connect 0 0 19 0; +#X connect 0 0 20 0; +#X connect 0 0 21 0; +#X connect 1 0 9 0; +#X connect 1 0 10 0; +#X connect 1 0 11 0; +#X connect 1 0 12 0; +#X connect 1 0 13 0; +#X connect 1 0 24 0; +#X connect 1 0 25 0; +#X connect 3 0 2 0; +#X connect 4 0 5 0; +#X connect 9 0 7 0; +#X connect 10 0 7 0; +#X connect 11 0 7 0; +#X connect 12 0 7 0; +#X connect 13 0 7 0; +#X connect 14 0 6 0; +#X connect 15 0 6 0; +#X connect 16 0 6 0; +#X connect 17 0 6 0; +#X connect 18 0 6 0; +#X connect 19 0 6 0; +#X connect 20 0 6 0; +#X connect 21 0 6 0; +#X connect 23 0 26 0; +#X connect 24 0 7 0; +#X connect 25 0 7 0; +#X connect 26 0 22 0; diff --git a/desiredata/extra/pureunity/distributive-test.pd b/desiredata/extra/pureunity/distributive-test.pd new file mode 100644 index 00000000..fd1e11d8 --- /dev/null +++ b/desiredata/extra/pureunity/distributive-test.pd @@ -0,0 +1,32 @@ +#N canvas 665 86 471 430 10; +#X obj 40 15 inlet bang; +#X obj 37 160 /; +#X obj 37 179 t a a; +#X text 157 24 with tolerance 0; +#X obj 37 198 <= 0; +#X text 156 9 This test verifies that 3*(4+5)=3*4+3*5; +#X msg 40 34 3 4 5; +#X obj 40 82 unpack 0 0 0; +#X obj 37 255 outlet; +#X obj 37 141 * 2; +#X obj 37 103 distributor \$1 \$2 \$3; +#X obj 37 236 list append distributive \$1 \$2 \$3; +#X obj 37 217 pack 0 0 -1; +#X obj 37 122 norm.\$1; +#X obj 172 122 norm.\$1; +#X connect 0 0 6 0; +#X connect 1 0 2 0; +#X connect 2 0 4 0; +#X connect 2 1 12 1; +#X connect 4 0 12 0; +#X connect 6 0 7 0; +#X connect 7 0 10 0; +#X connect 7 1 10 1; +#X connect 7 2 10 2; +#X connect 9 0 1 0; +#X connect 10 0 13 0; +#X connect 10 1 14 0; +#X connect 11 0 8 0; +#X connect 12 0 11 0; +#X connect 13 0 9 0; +#X connect 14 0 1 1; diff --git a/desiredata/extra/pureunity/distributor.pd b/desiredata/extra/pureunity/distributor.pd new file mode 100644 index 00000000..b7cf2b3d --- /dev/null +++ b/desiredata/extra/pureunity/distributor.pd @@ -0,0 +1,46 @@ +#N canvas 414 247 580 318 10; +#X text 183 92 see distributive-test.pd; +#X text 183 69 when the distributor is 0 the rule is respected.; +#X text 16 269 distributor; +#X text 180 269 antidistributor; +#X text 182 40 distributivity rule for operator \$3 over operator \$2 +is:; +#X text 182 54 a \$3 (b \$2 c) - ((a \$3 b) \$2 (a \$3 c)) = 0; +#X obj 18 19 inlet.\$1 a; +#X obj 91 19 inlet.\$1 b; +#X obj 164 19 inlet.\$1 c; +#X obj 18 61 packunpack3.\$1; +#X obj 18 80 taa.\$1; +#X obj 55 99 taa.\$1; +#X obj 25 146 op2.\$1 \$2; +#X obj 18 169 op2.\$1 \$3; +#X obj 18 193 taa.\$1; +#X obj 18 232 op2.\$1 -; +#X obj 18 251 outlet.\$1 a(bc)-(ab+ac); +#X obj 182 251 outlet.\$1 a(bc)+(ab+ac); +#X obj 182 232 op2.\$1 +; +#X obj 184 184 op2.\$1 \$3; +#X obj 124 165 op2.\$1 \$3; +#X obj 124 184 op2.\$1 \$2; +#X connect 6 0 9 0; +#X connect 7 0 9 1; +#X connect 8 0 9 2; +#X connect 9 0 10 0; +#X connect 9 1 12 0; +#X connect 9 1 20 1; +#X connect 9 2 12 1; +#X connect 9 2 19 1; +#X connect 10 0 13 0; +#X connect 10 1 11 0; +#X connect 11 0 20 0; +#X connect 11 1 19 0; +#X connect 12 0 13 1; +#X connect 13 0 14 0; +#X connect 14 0 15 0; +#X connect 14 1 18 0; +#X connect 15 0 16 0; +#X connect 18 0 17 0; +#X connect 19 0 21 1; +#X connect 20 0 21 0; +#X connect 21 0 15 1; +#X connect 21 0 18 1; diff --git a/desiredata/extra/pureunity/equivalence-test.pd b/desiredata/extra/pureunity/equivalence-test.pd new file mode 100644 index 00000000..d824510e --- /dev/null +++ b/desiredata/extra/pureunity/equivalence-test.pd @@ -0,0 +1,14 @@ +#N canvas 0 0 450 161 10; +#X obj 13 21 inlet; +#X obj 13 121 outlet; +#X obj 13 97 commutative-test \$1 \$2; +#X obj 35 78 transitive-test \$1 \$2; +#X obj 57 59 reflexive-test \$1 \$2; +#X obj 13 40 t b b b; +#X connect 0 0 5 0; +#X connect 2 0 1 0; +#X connect 3 0 1 0; +#X connect 4 0 1 0; +#X connect 5 0 2 0; +#X connect 5 1 3 0; +#X connect 5 2 4 0; diff --git a/desiredata/extra/pureunity/glue-test.pd b/desiredata/extra/pureunity/glue-test.pd new file mode 100644 index 00000000..7d3fa2aa --- /dev/null +++ b/desiredata/extra/pureunity/glue-test.pd @@ -0,0 +1,15 @@ +#N canvas 185 138 665 479 10; +#X obj 26 69 s \$0-b; +#X obj 26 50 inlet bang; +#X obj 14 414 r \$0-r; +#X obj 14 433 outlet reports; +#X obj 176 111 func2-test float; +#X obj 176 131 func2-test symbol; +#X obj 176 151 func2-test int; +#X obj 176 91 func1-test bang; +#X text 346 19 todo: send \, receive \, select \, route; +#X text 346 32 todo: pack \, unpack \, trigger \, spigot; +#X text 346 45 todo: moses \, until \, print \, makefilename; +#X text 346 58 todo: change \, swap \, value; +#X connect 1 0 0 0; +#X connect 2 0 3 0; diff --git a/desiredata/extra/pureunity/invertible-test.pd b/desiredata/extra/pureunity/invertible-test.pd new file mode 100644 index 00000000..95703461 --- /dev/null +++ b/desiredata/extra/pureunity/invertible-test.pd @@ -0,0 +1,31 @@ +#N canvas 665 86 452 291 10; +#X obj 40 15 inlet bang; +#X obj 40 79 unpack 0 0; +#X obj 33 160 /; +#X msg 40 34 1 3; +#X obj 33 179 t a a; +#X text 217 24 with tolerance 0; +#X obj 33 198 <= 0; +#X text 215 9 This test verifies that 1+3-3=1; +#X obj 33 255 outlet; +#X obj 33 141 * 2; +#X obj 33 103 invertor \$1 \$2 \$3; +#X obj 33 236 list append invertible \$1 \$2 \$3; +#X obj 33 217 pack 0 0 -1; +#X obj 33 122 norm.\$1; +#X obj 147 123 norm.\$1; +#X connect 0 0 3 0; +#X connect 1 0 10 0; +#X connect 1 1 10 1; +#X connect 2 0 4 0; +#X connect 3 0 1 0; +#X connect 4 0 6 0; +#X connect 4 1 12 1; +#X connect 6 0 12 0; +#X connect 9 0 2 0; +#X connect 10 0 13 0; +#X connect 10 1 14 0; +#X connect 11 0 8 0; +#X connect 12 0 11 0; +#X connect 13 0 9 0; +#X connect 14 0 2 1; diff --git a/desiredata/extra/pureunity/invertor.pd b/desiredata/extra/pureunity/invertor.pd new file mode 100644 index 00000000..4ee54548 --- /dev/null +++ b/desiredata/extra/pureunity/invertor.pd @@ -0,0 +1,30 @@ +#N canvas 336 387 602 199 10; +#X text 185 60 when the invertor is 0 the rule is respected.; +#X text 185 83 see invertible-test.pd; +#X text 19 174 invertor; +#X text 149 174 antiinvertor; +#X text 184 11 invertibility rule for operator \$2 with (presumed) +right-inverse \$3 is:; +#X text 184 45 (a \$2 b) \$3 b - a = 0; +#X obj 18 19 inlet.\$1 a; +#X obj 101 19 inlet.\$1 b; +#X obj 18 39 taa.\$1; +#X obj 18 65 op2.\$1 \$2; +#X obj 18 91 op2.\$1 \$3; +#X obj 18 115 taa.\$1; +#X obj 18 137 op2.\$1 -; +#X obj 18 156 outlet.\$1 (ab)/b-a; +#X obj 148 156 outlet.\$1 (ab)/b+a; +#X obj 148 137 op2.\$1 +; +#X connect 6 0 8 0; +#X connect 7 0 9 1; +#X connect 7 0 10 1; +#X connect 8 0 9 0; +#X connect 8 1 12 1; +#X connect 8 1 15 1; +#X connect 9 0 10 0; +#X connect 10 0 11 0; +#X connect 11 0 12 0; +#X connect 11 1 15 0; +#X connect 12 0 13 0; +#X connect 15 0 14 0; diff --git a/desiredata/extra/pureunity/locale/english.tcl b/desiredata/extra/pureunity/locale/english.tcl new file mode 100644 index 00000000..8dca411d --- /dev/null +++ b/desiredata/extra/pureunity/locale/english.tcl @@ -0,0 +1,56 @@ + +say_namespace summary { + foreach {x y} { + f "floating-point" + ~ "signal" + \# "grid" + } { + say_category basic<$x> + say $x.do " ($y)" + say $x.norm " ($y)" + say $x.packunpack3 " ($y)" + say $x.swap " ($y)" + say $x.taa " ($y)" + } + + say_category interfaces + proc pu_say {} { + } + + pu_say antireflexive {t } "" + pu_say reflexive {t } "" + + pu_say commutative {t } "" + pu_say anticommutative {t } "" + pu_say antisymmetric {t } "" + + pu_say associative {t } "" + pu_say distributive {t } "" + pu_say invertible {t } "" + + pu_say partialorder {t } "partial order (open)" + pu_say partialordereq {t } "partial order (closed)" + pu_say totalorder {t } "total order (open)" + pu_say totalordereq {t } "total order (closed)" + pu_say equivalence {t } "equivalence relation" + + pu_say transitive {t } "transitive: " + pu_say trichotomy {t } "trichotomy: either equal or less or greater" + pu_say operator1 {t } "1-input operator" + pu_say operator2 {t } "2-input operator" + + say_category cancellators + say associator "(ab)c-a(bc)" + say commutator "ab-ba" + say distributor "a&(b^c)-(ab^ac)" + say invertor "ab/b-a" + + say_category misc + say twice "" + say 3times "" + say 4times "" + say ^ "xor" + say error "" + say protocols-tree "" + say tree "" +} diff --git a/desiredata/extra/pureunity/main.pd b/desiredata/extra/pureunity/main.pd new file mode 100644 index 00000000..fb8f27ee --- /dev/null +++ b/desiredata/extra/pureunity/main.pd @@ -0,0 +1,90 @@ +#N canvas 732 0 490 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 2times 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 345 56 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 7 cnv 15 500 40 empty empty PureUnity 8 20 1 18 -34345 -68160 +0; +#X text 130 7 TM; +#X obj 15 35 cnv 1 480 1 empty empty Copyright_2006-2007_by_Mathieu_Bouchard +150 -5 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 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 text 209 96 type in the name of an interface; +#X obj 284 149 protocols-tree; +#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 33 0; +#X connect 27 1 32 0; +#X connect 27 2 26 0; +#X connect 30 0 35 0; +#X connect 31 0 30 0; +#X connect 32 0 8 0; +#X connect 33 0 8 0; +#X connect 35 0 29 0; diff --git a/desiredata/extra/pureunity/norm.#.pd b/desiredata/extra/pureunity/norm.#.pd new file mode 100644 index 00000000..d4fc6cef --- /dev/null +++ b/desiredata/extra/pureunity/norm.#.pd @@ -0,0 +1,8 @@ +#N canvas 0 0 450 300 10; +#X obj 21 24 inlet; +#X obj 20 50 # sq; +#X obj 20 80 #ravel; +#X obj 21 111 #fold +; +#X obj 21 139 #export; +#X obj 22 170 sqrt; +#X obj 22 201 outlet; diff --git a/desiredata/extra/pureunity/norm.f.pd b/desiredata/extra/pureunity/norm.f.pd new file mode 100644 index 00000000..305f4ac1 --- /dev/null +++ b/desiredata/extra/pureunity/norm.f.pd @@ -0,0 +1,8 @@ +#N canvas 462 350 544 148 10; +#X obj 23 20 inlet f; +#X obj 23 58 outlet f; +#X text 101 18 \$1.norm takes a value of type \$1 and produces a nonnegative +float \, normally using L2-norm formulas; +#X obj 23 39 abs; +#X connect 0 0 3 0; +#X connect 3 0 1 0; diff --git a/desiredata/extra/pureunity/norm.~.pd b/desiredata/extra/pureunity/norm.~.pd new file mode 100644 index 00000000..d429fc17 --- /dev/null +++ b/desiredata/extra/pureunity/norm.~.pd @@ -0,0 +1,8 @@ +#N canvas 462 350 544 148 10; +#X obj 23 20 inlet~ f; +#X obj 23 58 outlet f; +#X text 101 18 \$1.norm takes a value of type \$1 and produces a nonnegative +float \, normally using L2-norm formulas; +#X obj 23 39 env~; +#X connect 0 0 3 0; +#X connect 3 0 1 0; diff --git a/desiredata/extra/pureunity/op2.#.pd b/desiredata/extra/pureunity/op2.#.pd new file mode 100644 index 00000000..ee1ce083 --- /dev/null +++ b/desiredata/extra/pureunity/op2.#.pd @@ -0,0 +1,8 @@ +#N canvas 385 252 450 129 10; +#X obj 21 34 inlet; +#X obj 61 34 inlet; +#X obj 21 82 outlet; +#X obj 21 59 # \$1 \$2; +#X connect 0 0 3 0; +#X connect 1 0 3 1; +#X connect 3 0 2 0; diff --git a/desiredata/extra/pureunity/op2.f.pd b/desiredata/extra/pureunity/op2.f.pd new file mode 100644 index 00000000..7e01d641 --- /dev/null +++ b/desiredata/extra/pureunity/op2.f.pd @@ -0,0 +1,8 @@ +#N canvas 324 321 451 124 10; +#X obj 19 18 inlet; +#X obj 69 18 inlet; +#X obj 19 50 \$1 \$2; +#X obj 19 84 outlet; +#X connect 0 0 2 0; +#X connect 1 0 2 1; +#X connect 2 0 3 0; diff --git a/desiredata/extra/pureunity/op2.~.pd b/desiredata/extra/pureunity/op2.~.pd new file mode 100644 index 00000000..97c09c7f --- /dev/null +++ b/desiredata/extra/pureunity/op2.~.pd @@ -0,0 +1,8 @@ +#N canvas 338 329 450 125 10; +#X obj 19 50 \$1~ \$2; +#X obj 19 18 inlet~; +#X obj 69 18 inlet~; +#X obj 19 84 outlet~; +#X connect 0 0 3 0; +#X connect 1 0 0 0; +#X connect 2 0 0 1; diff --git a/desiredata/extra/pureunity/operator1-rule.pd b/desiredata/extra/pureunity/operator1-rule.pd new file mode 100644 index 00000000..f9d91e03 --- /dev/null +++ b/desiredata/extra/pureunity/operator1-rule.pd @@ -0,0 +1,11 @@ +#N canvas 0 0 450 142 10; +#X obj 15 16 inlet; +#X obj 37 104 outlet; +#X text 57 17 Test that one input gives one output; +#X obj 37 84 \$1; +#X obj 87 104 outlet; +#X obj 15 55 t b a b; +#X obj 242 63 error; +#X connect 0 0 5 0; +#X connect 3 0 1 0; +#X connect 5 1 3 0; diff --git a/desiredata/extra/pureunity/operator1-test.pd b/desiredata/extra/pureunity/operator1-test.pd new file mode 100644 index 00000000..ed7f0fb4 --- /dev/null +++ b/desiredata/extra/pureunity/operator1-test.pd @@ -0,0 +1,5 @@ +#N canvas 0 0 450 142 10; +#X obj 15 16 inlet; +#X obj 15 94 outlet; +#X text 57 17 Test that one input gives one output; +#X connect 0 0 1 0; diff --git a/desiredata/extra/pureunity/operator2-rule.pd b/desiredata/extra/pureunity/operator2-rule.pd new file mode 100644 index 00000000..8ef1f7f1 --- /dev/null +++ b/desiredata/extra/pureunity/operator2-rule.pd @@ -0,0 +1,10 @@ +#N canvas 248 186 450 162 10; +#X obj 15 16 inlet; +#X obj 15 94 outlet; +#X obj 54 35 func1-test \$1 \$2; +#X text 74 55 And test that one right input gives zero output; +#X obj 15 35 t a a; +#X connect 0 0 4 0; +#X connect 2 0 1 0; +#X connect 4 0 1 0; +#X connect 4 1 2 0; diff --git a/desiredata/extra/pureunity/operator2-test.pd b/desiredata/extra/pureunity/operator2-test.pd new file mode 100644 index 00000000..8ef1f7f1 --- /dev/null +++ b/desiredata/extra/pureunity/operator2-test.pd @@ -0,0 +1,10 @@ +#N canvas 248 186 450 162 10; +#X obj 15 16 inlet; +#X obj 15 94 outlet; +#X obj 54 35 func1-test \$1 \$2; +#X text 74 55 And test that one right input gives zero output; +#X obj 15 35 t a a; +#X connect 0 0 4 0; +#X connect 2 0 1 0; +#X connect 4 0 1 0; +#X connect 4 1 2 0; diff --git a/desiredata/extra/pureunity/packunpack3.#.pd b/desiredata/extra/pureunity/packunpack3.#.pd new file mode 100644 index 00000000..3c182771 --- /dev/null +++ b/desiredata/extra/pureunity/packunpack3.#.pd @@ -0,0 +1,18 @@ +#N canvas 622 298 449 167 10; +#X obj 105 127 outlet; +#X obj 115 14 inlet; +#X obj 69 14 inlet; +#X obj 59 127 outlet; +#X obj 13 127 outlet; +#X obj 13 14 inlet; +#X obj 84 64 #store; +#X obj 38 64 #store; +#X obj 13 33 t a b b; +#X connect 1 0 6 1; +#X connect 2 0 7 1; +#X connect 5 0 8 0; +#X connect 6 0 0 0; +#X connect 7 0 3 0; +#X connect 8 0 4 0; +#X connect 8 1 7 0; +#X connect 8 2 6 0; diff --git a/desiredata/extra/pureunity/packunpack3.f.pd b/desiredata/extra/pureunity/packunpack3.f.pd new file mode 100644 index 00000000..7343d5f3 --- /dev/null +++ b/desiredata/extra/pureunity/packunpack3.f.pd @@ -0,0 +1,16 @@ +#N canvas 285 202 449 125 10; +#X obj 106 87 outlet; +#X obj 105 14 inlet; +#X obj 59 14 inlet; +#X obj 60 87 outlet; +#X obj 14 87 outlet; +#X obj 13 14 inlet; +#X obj 27 41 pack 0 0 0; +#X obj 27 60 unpack 0 0 0; +#X connect 1 0 6 2; +#X connect 2 0 6 1; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 4 0; +#X connect 7 1 3 0; +#X connect 7 2 0 0; diff --git a/desiredata/extra/pureunity/packunpack3.~.pd b/desiredata/extra/pureunity/packunpack3.~.pd new file mode 100644 index 00000000..7171a98e --- /dev/null +++ b/desiredata/extra/pureunity/packunpack3.~.pd @@ -0,0 +1,10 @@ +#N canvas 285 202 449 67 10; +#X obj 13 14 inlet~; +#X obj 13 34 outlet~; +#X obj 73 14 inlet~; +#X obj 73 34 outlet~; +#X obj 133 14 inlet~; +#X obj 133 34 outlet~; +#X connect 0 0 1 0; +#X connect 2 0 3 0; +#X connect 4 0 5 0; diff --git a/desiredata/extra/pureunity/partialorder-test.pd b/desiredata/extra/pureunity/partialorder-test.pd new file mode 100644 index 00000000..65aff88c --- /dev/null +++ b/desiredata/extra/pureunity/partialorder-test.pd @@ -0,0 +1,14 @@ +#N canvas 118 56 450 189 10; +#X obj 13 21 inlet; +#X obj 13 141 outlet; +#X obj 35 87 transitive-test \$1 \$2; +#X obj 13 107 antisymmetric-test \$1 \$2; +#X obj 57 67 antireflexive-test \$1 \$2; +#X obj 13 41 t b b b; +#X connect 0 0 5 0; +#X connect 2 0 1 0; +#X connect 3 0 1 0; +#X connect 4 0 1 0; +#X connect 5 0 3 0; +#X connect 5 1 2 0; +#X connect 5 2 4 0; diff --git a/desiredata/extra/pureunity/partialordereq-test.pd b/desiredata/extra/pureunity/partialordereq-test.pd new file mode 100644 index 00000000..39de970a --- /dev/null +++ b/desiredata/extra/pureunity/partialordereq-test.pd @@ -0,0 +1,14 @@ +#N canvas 118 56 450 182 10; +#X obj 13 21 inlet; +#X obj 13 131 outlet; +#X obj 35 79 transitive-test \$1 \$2; +#X obj 57 60 reflexive-test \$1 \$2; +#X obj 13 98 antisymmetric-test \$1 \$2; +#X obj 13 40 t b b b; +#X connect 0 0 5 0; +#X connect 2 0 1 0; +#X connect 3 0 1 0; +#X connect 4 0 1 0; +#X connect 5 0 4 0; +#X connect 5 1 2 0; +#X connect 5 2 3 0; diff --git a/desiredata/extra/pureunity/protocols-tree.pd b/desiredata/extra/pureunity/protocols-tree.pd new file mode 100644 index 00000000..0d0bba9e --- /dev/null +++ b/desiredata/extra/pureunity/protocols-tree.pd @@ -0,0 +1,65 @@ +#N canvas 132 109 813 546 10; +#X obj 13 466 r \$0-out; +#X obj 13 485 outlet; +#X text 20 15 the direction of flow indicates "inherits from"; +#X obj 208 110 tree \$0 commutative; +#X obj 13 390 makefilename \$0-%s; +#X obj 13 371 inlet symbol; +#X text 7 508 output is a sequence of begin \$1 and end \$1 messages +that indicate a hierarchy.; +#X text 36 447 send to a certain tree object; +#X obj 13 409 t b s; +#X obj 13 447 s; +#X obj 13 428 symbol \$0-out; +#X obj 423 157 tree \$0 reflexive; +#X obj 594 157 tree \$0 antireflexive; +#X obj 423 135 tree \$0 partialorder; +#X obj 594 135 tree \$0 partialordereq; +#X obj 423 90 tree \$0 totalorder; +#X obj 594 81 tree \$0 totalordereq; +#X obj 380 54 tree \$0 equivalence; +#X obj 458 455 tree \$0 associative; +#X obj 486 355 tree \$0 distributive; +#X obj 474 409 tree \$0 invertible; +#X obj 512 115 tree \$0 trichotomy; +#X obj 380 220 tree \$0 transitive; +#X obj 458 436 tree \$0 semigroup ?; +#X obj 458 381 tree \$0 group ?; +#X obj 622 184 tree \$0 antisymmetric2 ?; +#X obj 480 330 tree \$0 ring ?; +#X obj 432 185 tree \$0 antisymmetric ?; +#X obj 208 130 tree \$0 anticommutative; +#X obj 480 310 tree \$0 field ?; +#X obj 423 276 tree \$0 relation; +#X obj 662 288 tree \$0 unpacklike; +#X obj 662 311 tree \$0 packlike; +#X obj 667 348 tree \$0 operator1; +#X obj 667 368 tree \$0 operator2; +#X connect 0 0 1 0; +#X connect 4 0 8 0; +#X connect 5 0 4 0; +#X connect 8 0 10 0; +#X connect 8 1 9 1; +#X connect 10 0 9 0; +#X connect 11 0 30 0; +#X connect 12 0 25 0; +#X connect 12 0 30 0; +#X connect 13 0 11 0; +#X connect 13 0 22 0; +#X connect 13 0 27 0; +#X connect 14 0 12 0; +#X connect 14 0 22 0; +#X connect 15 0 13 0; +#X connect 15 0 21 0; +#X connect 16 0 14 0; +#X connect 16 0 21 0; +#X connect 17 0 3 0; +#X connect 17 0 11 0; +#X connect 17 0 22 0; +#X connect 22 0 30 0; +#X connect 23 0 18 0; +#X connect 24 0 20 0; +#X connect 24 0 23 0; +#X connect 26 0 19 0; +#X connect 26 0 24 0; +#X connect 29 0 26 0; diff --git a/desiredata/extra/pureunity/pureunity.c b/desiredata/extra/pureunity/pureunity.c new file mode 100644 index 00000000..2c7e2fcf --- /dev/null +++ b/desiredata/extra/pureunity/pureunity.c @@ -0,0 +1,37 @@ +/* + $Id: pureunity.c,v 1.1.2.3 2007-06-28 03:21:16 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 "../../src/m_pd.h" +#define ALIAS(y,x) class_addcreator((t_newmethod)getfn(m,gensym(x)),gensym(y),A_GIMME,0); + +void pureunity_setup() { + t_pd *m = &pd_objectmaker; + ALIAS( "inlet.f","inlet" ); + ALIAS( "inlet.#","inlet" ); + ALIAS( "inlet.~","inlet~" ); + ALIAS("outlet.f","outlet" ); + ALIAS("outlet.#","outlet" ); + ALIAS("outlet.~","outlet~"); + ALIAS( "f.swap","swap" ); +} + diff --git a/desiredata/extra/pureunity/rand.#.pd b/desiredata/extra/pureunity/rand.#.pd new file mode 100644 index 00000000..ce3d3c91 --- /dev/null +++ b/desiredata/extra/pureunity/rand.#.pd @@ -0,0 +1,42 @@ +#N canvas 0 0 450 300 10; +#X obj 21 34 inlet; +#X obj 21 223 *; +#X obj 73 95 random 256; +#X obj 183 87 random; +#X msg 220 39 1; +#X obj 220 20 loadbang; +#X obj 220 58 << 23; +#X obj 183 106 +; +#X obj 21 53 t b b b; +#X obj 21 136 random 2; +#X obj 21 174 - 1; +#X obj 73 114 - 150; +#X obj 43 114 pow; +#X obj 21 242 outlet; +#X obj 43 76 t b b; +#X msg 43 95 2; +#X obj 21 199 *; +#X obj 21 155 * 2; +#X text 125 205 Should this actually produce a grid or not?...; +#X text 126 221 Whatever does the job...; +#X connect 0 0 8 0; +#X connect 1 0 13 0; +#X connect 2 0 11 0; +#X connect 3 0 7 0; +#X connect 4 0 6 0; +#X connect 5 0 4 0; +#X connect 6 0 3 1; +#X connect 6 0 7 1; +#X connect 7 0 16 1; +#X connect 8 0 9 0; +#X connect 8 1 14 0; +#X connect 8 2 3 0; +#X connect 9 0 17 0; +#X connect 10 0 16 0; +#X connect 11 0 12 1; +#X connect 12 0 1 1; +#X connect 14 0 15 0; +#X connect 14 1 2 0; +#X connect 15 0 12 0; +#X connect 16 0 1 0; +#X connect 17 0 10 0; diff --git a/desiredata/extra/pureunity/rand.f.pd b/desiredata/extra/pureunity/rand.f.pd new file mode 100644 index 00000000..f4372dc0 --- /dev/null +++ b/desiredata/extra/pureunity/rand.f.pd @@ -0,0 +1,40 @@ +#N canvas 0 0 450 300 10; +#X obj 11 14 inlet; +#X obj 11 192 *; +#X obj 63 75 random 256; +#X obj 183 87 random; +#X msg 220 39 1; +#X obj 220 20 loadbang; +#X obj 220 58 << 23; +#X obj 183 106 +; +#X obj 11 33 t b b b; +#X obj 11 116 random 2; +#X obj 11 154 - 1; +#X obj 63 94 - 150; +#X obj 33 94 pow; +#X obj 11 211 outlet; +#X obj 33 56 t b b; +#X msg 33 75 2; +#X obj 11 173 *; +#X obj 11 135 * 2; +#X connect 0 0 8 0; +#X connect 1 0 13 0; +#X connect 2 0 11 0; +#X connect 3 0 7 0; +#X connect 4 0 6 0; +#X connect 5 0 4 0; +#X connect 6 0 3 1; +#X connect 6 0 7 1; +#X connect 7 0 16 1; +#X connect 8 0 9 0; +#X connect 8 1 14 0; +#X connect 8 2 3 0; +#X connect 9 0 17 0; +#X connect 10 0 16 0; +#X connect 11 0 12 1; +#X connect 12 0 1 1; +#X connect 14 0 15 0; +#X connect 14 1 2 0; +#X connect 15 0 12 0; +#X connect 16 0 1 0; +#X connect 17 0 10 0; diff --git a/desiredata/extra/pureunity/rand.~.pd b/desiredata/extra/pureunity/rand.~.pd new file mode 100644 index 00000000..cb1bf37b --- /dev/null +++ b/desiredata/extra/pureunity/rand.~.pd @@ -0,0 +1,22 @@ +#N canvas 339 187 450 177 10; +#X obj 105 118 pow; +#X obj 105 80 t b b; +#X msg 105 99 2; +#X obj 22 98 env~; +#X obj 11 14 inlet; +#X obj 10 143 outlet~; +#X text 52 14 banging the inlet does nothing for signals.; +#X obj 37 62 noise~; +#X obj 135 99 random 64; +#X obj 135 118 - 64; +#X obj 11 62 *~; +#X connect 0 0 10 0; +#X connect 1 0 2 0; +#X connect 1 1 8 0; +#X connect 2 0 0 0; +#X connect 3 0 1 0; +#X connect 7 0 10 1; +#X connect 8 0 9 0; +#X connect 9 0 0 1; +#X connect 10 0 5 0; +#X connect 10 0 3 0; diff --git a/desiredata/extra/pureunity/reflexive-test.pd b/desiredata/extra/pureunity/reflexive-test.pd new file mode 100644 index 00000000..1ae836d0 --- /dev/null +++ b/desiredata/extra/pureunity/reflexive-test.pd @@ -0,0 +1,13 @@ +#N canvas 0 0 450 161 10; +#X obj 12 18 inlet; +#X obj 12 120 outlet; +#X obj 12 56 t a a; +#X msg 12 37 2 2; +#X obj 12 82 \$2; +#X obj 12 101 == 1; +#X connect 0 0 3 0; +#X connect 2 0 4 0; +#X connect 2 1 4 1; +#X connect 3 0 2 0; +#X connect 4 0 5 0; +#X connect 5 0 1 0; diff --git a/desiredata/extra/pureunity/swap.#.pd b/desiredata/extra/pureunity/swap.#.pd new file mode 100644 index 00000000..2865b5a3 --- /dev/null +++ b/desiredata/extra/pureunity/swap.#.pd @@ -0,0 +1,14 @@ +#N canvas 0 0 450 125 10; +#X obj 12 72 #store; +#X obj 12 34 t a a; +#X obj 12 53 #finished; +#X obj 12 15 inlet a; +#X obj 58 72 inlet b; +#X obj 12 91 outlet b; +#X obj 51 34 outlet a; +#X connect 0 0 5 0; +#X connect 1 0 2 0; +#X connect 1 1 6 0; +#X connect 2 0 0 0; +#X connect 3 0 1 0; +#X connect 4 0 0 1; diff --git a/desiredata/extra/pureunity/swap.f.pd b/desiredata/extra/pureunity/swap.f.pd new file mode 100644 index 00000000..1215b477 --- /dev/null +++ b/desiredata/extra/pureunity/swap.f.pd @@ -0,0 +1,10 @@ +#N canvas 218 156 450 98 10; +#X obj 14 11 inlet~; +#X obj 74 11 inlet~; +#X obj 14 61 outlet~; +#X obj 74 61 outlet~; +#X obj 14 37 swap; +#X connect 0 0 4 0; +#X connect 1 0 4 1; +#X connect 4 0 2 0; +#X connect 4 1 3 0; diff --git a/desiredata/extra/pureunity/swap.~.pd b/desiredata/extra/pureunity/swap.~.pd new file mode 100644 index 00000000..8055ea0c --- /dev/null +++ b/desiredata/extra/pureunity/swap.~.pd @@ -0,0 +1,7 @@ +#N canvas 218 156 450 98 10; +#X obj 14 11 inlet~; +#X obj 74 11 inlet~; +#X obj 14 61 outlet~; +#X obj 74 61 outlet~; +#X connect 0 0 3 0; +#X connect 1 0 2 0; diff --git a/desiredata/extra/pureunity/taa.#.pd b/desiredata/extra/pureunity/taa.#.pd new file mode 100644 index 00000000..ae3b4b1c --- /dev/null +++ b/desiredata/extra/pureunity/taa.#.pd @@ -0,0 +1,8 @@ +#N canvas 353 249 367 122 10; +#X obj 19 14 inlet; +#X obj 19 71 outlet; +#X obj 19 33 t a a; +#X obj 49 52 outlet; +#X connect 0 0 2 0; +#X connect 2 0 1 0; +#X connect 2 1 3 0; diff --git a/desiredata/extra/pureunity/taa.f.pd b/desiredata/extra/pureunity/taa.f.pd new file mode 100644 index 00000000..ae3b4b1c --- /dev/null +++ b/desiredata/extra/pureunity/taa.f.pd @@ -0,0 +1,8 @@ +#N canvas 353 249 367 122 10; +#X obj 19 14 inlet; +#X obj 19 71 outlet; +#X obj 19 33 t a a; +#X obj 49 52 outlet; +#X connect 0 0 2 0; +#X connect 2 0 1 0; +#X connect 2 1 3 0; diff --git a/desiredata/extra/pureunity/taa.~.pd b/desiredata/extra/pureunity/taa.~.pd new file mode 100644 index 00000000..7f52b01a --- /dev/null +++ b/desiredata/extra/pureunity/taa.~.pd @@ -0,0 +1,6 @@ +#N canvas 353 249 367 122 10; +#X obj 19 14 inlet~; +#X obj 49 52 outlet~; +#X obj 19 71 outlet~; +#X connect 0 0 1 0; +#X connect 0 0 2 0; diff --git a/desiredata/extra/pureunity/totalorder-test.pd b/desiredata/extra/pureunity/totalorder-test.pd new file mode 100644 index 00000000..9aa72fce --- /dev/null +++ b/desiredata/extra/pureunity/totalorder-test.pd @@ -0,0 +1,11 @@ +#N canvas 118 56 418 157 10; +#X obj 13 21 inlet; +#X obj 13 101 outlet; +#X obj 43 59 partialorder-test \$1 \$2; +#X obj 13 78 trichotomy-test \$1 \$2; +#X obj 13 40 t b b; +#X connect 0 0 4 0; +#X connect 2 0 1 0; +#X connect 3 0 1 0; +#X connect 4 0 3 0; +#X connect 4 1 2 0; diff --git a/desiredata/extra/pureunity/totalordereq-test.pd b/desiredata/extra/pureunity/totalordereq-test.pd new file mode 100644 index 00000000..4c7372d6 --- /dev/null +++ b/desiredata/extra/pureunity/totalordereq-test.pd @@ -0,0 +1,11 @@ +#N canvas 349 136 450 153 10; +#X obj 13 21 inlet; +#X obj 13 97 outlet; +#X obj 13 78 trichotomy-test \$1 \$2; +#X obj 43 59 partialordereq-test \$1 \$2; +#X obj 13 40 t b b; +#X connect 0 0 4 0; +#X connect 2 0 1 0; +#X connect 3 0 1 0; +#X connect 4 0 2 0; +#X connect 4 1 3 0; diff --git a/desiredata/extra/pureunity/transitive-test.pd b/desiredata/extra/pureunity/transitive-test.pd new file mode 100644 index 00000000..0788ad61 --- /dev/null +++ b/desiredata/extra/pureunity/transitive-test.pd @@ -0,0 +1,4 @@ +#N canvas 0 0 450 300 10; +#X obj 12 18 inlet; +#X obj 12 48 outlet; +#X connect 0 0 1 0; diff --git a/desiredata/extra/pureunity/tree.pd b/desiredata/extra/pureunity/tree.pd new file mode 100644 index 00000000..ae9d3d89 --- /dev/null +++ b/desiredata/extra/pureunity/tree.pd @@ -0,0 +1,20 @@ +#N canvas 415 303 474 293 10; +#X obj 51 61 symbol \$2; +#X obj 74 194 s; +#X obj 19 4 inlet bang; +#X obj 77 23 r \$1-\$2; +#X msg 51 80 begin \$1; +#X msg 19 134 end \$1; +#X obj 35 42 outlet; +#X obj 19 23 t b s b s; +#X obj 19 115 symbol \$2; +#X connect 0 0 4 0; +#X connect 2 0 7 0; +#X connect 3 0 7 0; +#X connect 4 0 1 0; +#X connect 5 0 1 0; +#X connect 7 0 8 0; +#X connect 7 1 6 0; +#X connect 7 2 0 0; +#X connect 7 3 1 1; +#X connect 8 0 5 0; diff --git a/desiredata/extra/pureunity/trichotomy-test.pd b/desiredata/extra/pureunity/trichotomy-test.pd new file mode 100644 index 00000000..49aa8e76 --- /dev/null +++ b/desiredata/extra/pureunity/trichotomy-test.pd @@ -0,0 +1,32 @@ +#N canvas 174 185 553 302 10; +#X obj 13 21 inlet; +#X obj 13 255 outlet; +#X msg 13 40 1 2 \, 2 2 \, 2 1; +#X msg 38 78 \$2 \$1; +#X obj 13 117 +; +#X obj 13 59 t a a a; +#X obj 13 97 \$3; +#X obj 38 97 \$3; +#X obj 91 100 \$2; +#X obj 38 117 +; +#X obj 13 136 - 1; +#X obj 13 155 t a a; +#X obj 13 174 == 0; +#X obj 13 236 list append trichotomy \$1 \$2; +#X obj 13 217 pack 0 0 -1; +#X connect 0 0 2 0; +#X connect 2 0 5 0; +#X connect 3 0 7 0; +#X connect 4 0 10 0; +#X connect 5 0 6 0; +#X connect 5 1 3 0; +#X connect 5 2 8 0; +#X connect 6 0 4 0; +#X connect 7 0 9 0; +#X connect 8 0 9 1; +#X connect 9 0 4 1; +#X connect 11 0 12 0; +#X connect 11 1 14 1; +#X connect 12 0 14 0; +#X connect 13 0 1 0; +#X connect 14 0 13 0; |