diff --git a/LICENSE b/LICENSE index a612ad9..95ecbe6 100644 --- a/LICENSE +++ b/LICENSE @@ -1,373 +1,201 @@ -Mozilla Public License Version 2.0 -================================== - -1. Definitions --------------- - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2014-2025 Fossil Logic + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/code/logic/common.c b/code/logic/common.c index 3b2cf19..a477ec9 100644 --- a/code/logic/common.c +++ b/code/logic/common.c @@ -1,10 +1,20 @@ -/* +/** * ----------------------------------------------------------------------------- * Project: Fossil Logic * - * This file is part of the Fossil Logic project, which aims to develop high- - * performance, cross-platform applications and libraries. The code contained - * herein is subject to the terms and conditions defined in the project license. + * This file is part of the Fossil Logic project, which aims to develop + * high-performance, cross-platform applications and libraries. The code + * contained herein is licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain + * a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. * * Author: Michael Gene Brockus (Dreamer) * Date: 04/05/2014 @@ -923,8 +933,36 @@ int pizza_sys_hostinfo_get_memory(pizza_sys_hostinfo_memory_t *info) { int pizza_sys_hostinfo_get_endianness(pizza_sys_hostinfo_endianness_t *info) { if (!info) return -1; - uint16_t test = 0x0001; - info->is_little_endian = (*(uint8_t*)&test) ? 1 : 0; + + // --- Compile-time detection if supported --- +#if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__) +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ + info->is_little_endian = 1; + info->is_big_endian = 0; +#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ + info->is_little_endian = 0; + info->is_big_endian = 1; +#else + #error "Unknown byte order at compile-time" +#endif +#else + // --- Runtime fallback using union --- + union { + uint16_t value; + uint8_t bytes[2]; + } test; + + test.value = 0x0102; + + if (test.bytes[0] == 0x02) { + info->is_little_endian = 1; + info->is_big_endian = 0; + } else { + info->is_little_endian = 0; + info->is_big_endian = 1; + } +#endif + return 0; } diff --git a/code/logic/fossil/pizza/assume.h b/code/logic/fossil/pizza/assume.h index e1fdefb..06718db 100644 --- a/code/logic/fossil/pizza/assume.h +++ b/code/logic/fossil/pizza/assume.h @@ -1,10 +1,20 @@ -/* +/** * ----------------------------------------------------------------------------- * Project: Fossil Logic * - * This file is part of the Fossil Logic project, which aims to develop high- - * performance, cross-platform applications and libraries. The code contained - * herein is subject to the terms and conditions defined in the project license. + * This file is part of the Fossil Logic project, which aims to develop + * high-performance, cross-platform applications and libraries. The code + * contained herein is licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain + * a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. * * Author: Michael Gene Brockus (Dreamer) * Date: 04/05/2014 diff --git a/code/logic/fossil/pizza/common.h b/code/logic/fossil/pizza/common.h index 7e2d1eb..89d6d31 100644 --- a/code/logic/fossil/pizza/common.h +++ b/code/logic/fossil/pizza/common.h @@ -1,10 +1,20 @@ -/* +/** * ----------------------------------------------------------------------------- * Project: Fossil Logic * - * This file is part of the Fossil Logic project, which aims to develop high- - * performance, cross-platform applications and libraries. The code contained - * herein is subject to the terms and conditions defined in the project license. + * This file is part of the Fossil Logic project, which aims to develop + * high-performance, cross-platform applications and libraries. The code + * contained herein is licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain + * a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. * * Author: Michael Gene Brockus (Dreamer) * Date: 04/05/2014 @@ -334,7 +344,8 @@ typedef struct { // Endianness information structure typedef struct { - int is_little_endian; // 1 if little-endian, 0 if big-endian + int is_little_endian; + int is_big_endian; } pizza_sys_hostinfo_endianness_t; // System information structure diff --git a/code/logic/fossil/pizza/framework.h b/code/logic/fossil/pizza/framework.h index 7b3439d..70d5ef2 100644 --- a/code/logic/fossil/pizza/framework.h +++ b/code/logic/fossil/pizza/framework.h @@ -1,10 +1,20 @@ -/* +/** * ----------------------------------------------------------------------------- * Project: Fossil Logic * - * This file is part of the Fossil Logic project, which aims to develop high- - * performance, cross-platform applications and libraries. The code contained - * herein is subject to the terms and conditions defined in the project license. + * This file is part of the Fossil Logic project, which aims to develop + * high-performance, cross-platform applications and libraries. The code + * contained herein is licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain + * a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. * * Author: Michael Gene Brockus (Dreamer) * Date: 04/05/2014 diff --git a/code/logic/fossil/pizza/mark.h b/code/logic/fossil/pizza/mark.h index d43d8dc..1afe8f1 100644 --- a/code/logic/fossil/pizza/mark.h +++ b/code/logic/fossil/pizza/mark.h @@ -1,10 +1,20 @@ -/* +/** * ----------------------------------------------------------------------------- * Project: Fossil Logic * - * This file is part of the Fossil Logic project, which aims to develop high- - * performance, cross-platform applications and libraries. The code contained - * herein is subject to the terms and conditions defined in the project license. + * This file is part of the Fossil Logic project, which aims to develop + * high-performance, cross-platform applications and libraries. The code + * contained herein is licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain + * a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. * * Author: Michael Gene Brockus (Dreamer) * Date: 04/05/2014 diff --git a/code/logic/fossil/pizza/mock.h b/code/logic/fossil/pizza/mock.h index 8f6398b..619ae8d 100644 --- a/code/logic/fossil/pizza/mock.h +++ b/code/logic/fossil/pizza/mock.h @@ -1,10 +1,20 @@ -/* +/** * ----------------------------------------------------------------------------- * Project: Fossil Logic * - * This file is part of the Fossil Logic project, which aims to develop high- - * performance, cross-platform applications and libraries. The code contained - * herein is subject to the terms and conditions defined in the project license. + * This file is part of the Fossil Logic project, which aims to develop + * high-performance, cross-platform applications and libraries. The code + * contained herein is licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain + * a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. * * Author: Michael Gene Brockus (Dreamer) * Date: 04/05/2014 diff --git a/code/logic/fossil/pizza/sanity.h b/code/logic/fossil/pizza/sanity.h index ec200d5..6c9d48c 100644 --- a/code/logic/fossil/pizza/sanity.h +++ b/code/logic/fossil/pizza/sanity.h @@ -1,10 +1,20 @@ -/* +/** * ----------------------------------------------------------------------------- * Project: Fossil Logic * - * This file is part of the Fossil Logic project, which aims to develop high- - * performance, cross-platform applications and libraries. The code contained - * herein is subject to the terms and conditions defined in the project license. + * This file is part of the Fossil Logic project, which aims to develop + * high-performance, cross-platform applications and libraries. The code + * contained herein is licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain + * a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. * * Author: Michael Gene Brockus (Dreamer) * Date: 04/05/2014 diff --git a/code/logic/fossil/pizza/test.h b/code/logic/fossil/pizza/test.h index fd521a3..3223466 100644 --- a/code/logic/fossil/pizza/test.h +++ b/code/logic/fossil/pizza/test.h @@ -1,10 +1,20 @@ -/* +/** * ----------------------------------------------------------------------------- * Project: Fossil Logic * - * This file is part of the Fossil Logic project, which aims to develop high- - * performance, cross-platform applications and libraries. The code contained - * herein is subject to the terms and conditions defined in the project license. + * This file is part of the Fossil Logic project, which aims to develop + * high-performance, cross-platform applications and libraries. The code + * contained herein is licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain + * a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. * * Author: Michael Gene Brockus (Dreamer) * Date: 04/05/2014 diff --git a/code/logic/mark.c b/code/logic/mark.c index c385c2f..c1dcba9 100644 --- a/code/logic/mark.c +++ b/code/logic/mark.c @@ -1,10 +1,20 @@ -/* +/** * ----------------------------------------------------------------------------- * Project: Fossil Logic * - * This file is part of the Fossil Logic project, which aims to develop high- - * performance, cross-platform applications and libraries. The code contained - * herein is subject to the terms and conditions defined in the project license. + * This file is part of the Fossil Logic project, which aims to develop + * high-performance, cross-platform applications and libraries. The code + * contained herein is licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain + * a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. * * Author: Michael Gene Brockus (Dreamer) * Date: 04/05/2014 diff --git a/code/logic/mock.c b/code/logic/mock.c index d86cc28..f5d8897 100644 --- a/code/logic/mock.c +++ b/code/logic/mock.c @@ -1,10 +1,20 @@ -/* +/** * ----------------------------------------------------------------------------- * Project: Fossil Logic * - * This file is part of the Fossil Logic project, which aims to develop high- - * performance, cross-platform applications and libraries. The code contained - * herein is subject to the terms and conditions defined in the project license. + * This file is part of the Fossil Logic project, which aims to develop + * high-performance, cross-platform applications and libraries. The code + * contained herein is licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain + * a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. * * Author: Michael Gene Brockus (Dreamer) * Date: 04/05/2014 diff --git a/code/logic/sanity.c b/code/logic/sanity.c index 12ac515..4cfe487 100644 --- a/code/logic/sanity.c +++ b/code/logic/sanity.c @@ -1,10 +1,20 @@ -/* +/** * ----------------------------------------------------------------------------- * Project: Fossil Logic * - * This file is part of the Fossil Logic project, which aims to develop high- - * performance, cross-platform applications and libraries. The code contained - * herein is subject to the terms and conditions defined in the project license. + * This file is part of the Fossil Logic project, which aims to develop + * high-performance, cross-platform applications and libraries. The code + * contained herein is licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain + * a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. * * Author: Michael Gene Brockus (Dreamer) * Date: 04/05/2014 diff --git a/code/logic/test.c b/code/logic/test.c index e15fb76..1bd47f6 100644 --- a/code/logic/test.c +++ b/code/logic/test.c @@ -1,10 +1,20 @@ -/* +/** * ----------------------------------------------------------------------------- * Project: Fossil Logic * - * This file is part of the Fossil Logic project, which aims to develop high- - * performance, cross-platform applications and libraries. The code contained - * herein is subject to the terms and conditions defined in the project license. + * This file is part of the Fossil Logic project, which aims to develop + * high-performance, cross-platform applications and libraries. The code + * contained herein is licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain + * a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. * * Author: Michael Gene Brockus (Dreamer) * Date: 04/05/2014 @@ -628,32 +638,43 @@ static uint64_t seconds_to_nanoseconds(uint64_t seconds) { return seconds * 1000000000ULL; } -void fossil_pizza_run_test(const fossil_pizza_engine_t* engine, fossil_pizza_case_t* test_case, fossil_pizza_suite_t* suite) { +// from sanity, should be implemented and placed in common.c +extern uint64_t get_pizza_time_microseconds(void); + + +void fossil_pizza_run_test(const fossil_pizza_engine_t* engine, + fossil_pizza_case_t* test_case, + fossil_pizza_suite_t* suite) { if (!test_case || !suite || !engine) return; // --- Filter: --only --- - if (engine->pallet.run.only && pizza_io_cstr_compare(engine->pallet.run.only, test_case->name) != 0) { + if (engine->pallet.run.only && + pizza_io_cstr_compare(engine->pallet.run.only, test_case->name) != 0) { return; } // --- Filter: --skip --- - if (engine->pallet.run.skip && pizza_io_cstr_compare(engine->pallet.run.skip, test_case->name) == 0) { + if (engine->pallet.run.skip && + pizza_io_cstr_compare(engine->pallet.run.skip, test_case->name) == 0) { test_case->result = FOSSIL_PIZZA_CASE_SKIPPED; fossil_pizza_update_score(test_case, suite); return; } - size_t repeat_count = (size_t)(engine->pallet.run.repeat > 0 ? engine->pallet.run.repeat : 1); + size_t repeat_count = + (size_t)(engine->pallet.run.repeat > 0 ? engine->pallet.run.repeat : 1); for (size_t i = 0; i < repeat_count; ++i) { if (test_case->setup) test_case->setup(); test_case->result = FOSSIL_PIZZA_CASE_EMPTY; + _ASSERT_COUNT = 0; // Reset before running test uint64_t start_time = fossil_pizza_now_ns(); if (test_case->run) { if (setjmp(test_jump_buffer) == 0) { test_case->run(); + uint64_t end_time = fossil_pizza_now_ns(); uint64_t elapsed = end_time - start_time; test_case->elapsed_ns = elapsed; @@ -664,9 +685,12 @@ void fossil_pizza_run_test(const fossil_pizza_engine_t* engine, fossil_pizza_cas if (elapsed > seconds_to_nanoseconds(FOSSIL_PIZZA_TIMEOUT)) { test_case->result = FOSSIL_PIZZA_CASE_TIMEOUT; + } else if (_ASSERT_COUNT == 0) { + test_case->result = FOSSIL_PIZZA_CASE_EMPTY; } else { test_case->result = FOSSIL_PIZZA_CASE_PASS; } + } else { test_case->result = FOSSIL_PIZZA_CASE_FAIL; test_case->elapsed_ns = fossil_pizza_now_ns() - start_time; @@ -687,7 +711,6 @@ void fossil_pizza_run_test(const fossil_pizza_engine_t* engine, fossil_pizza_cas fossil_pizza_update_score(test_case, suite); fossil_pizza_show_cases(suite, test_case, engine); - _ASSERT_COUNT = 0; } // --- Algorithmic modifications --- @@ -1187,27 +1210,40 @@ const char* fossil_test_summary_feedback(const fossil_pizza_score_t* score) { } // --- Time-Aware Feedback --- - // If available, add time hints for slow/fast runs - extern uint64_t get_pizza_time_microseconds(void); // Provided elsewhere uint64_t now_us = get_pizza_time_microseconds(); char time_hint[64] = {0}; + if (score->timeout > 0) { - snprintf(time_hint, sizeof(time_hint), " [Time: %llu us]", (unsigned long long)now_us); + snprintf(time_hint, sizeof(time_hint), + " [Elapsed: %llu us]", (unsigned long long)now_us); } - - // --- Hints Section --- + + // --- Priority-Ordered Hints --- + // Priority order: FAIL > TIMEOUT > UNEXPECTED > SKIPPED > EMPTY char hints[256] = {0}; - if (score->failed > 0) - strncat(hints, " Check failing cases for regressions.", sizeof(hints) - strlen(hints) - 1); - if (score->timeout > 0) - strncat(hints, " Review timeouts for performance issues.", sizeof(hints) - strlen(hints) - 1); - if (score->skipped > 0) - strncat(hints, " Ensure skipped tests are intentional.", sizeof(hints) - strlen(hints) - 1); - if (score->unexpected > 0) - strncat(hints, " Unexpected outcomes may need criteria review.", sizeof(hints) - strlen(hints) - 1); - if (score->empty > 0) - strncat(hints, " Implement empty test stubs for full coverage.", sizeof(hints) - strlen(hints) - 1); - + + if (score->failed > 0) { + strncat(hints, " Check failing cases first for regressions.", + sizeof(hints) - strlen(hints) - 1); + } + if (score->timeout > 0) { + strncat(hints, " Investigate timeouts to improve performance.", + sizeof(hints) - strlen(hints) - 1); + } + if (score->unexpected > 0) { + strncat(hints, " Review unexpected outcomes for correctness.", + sizeof(hints) - strlen(hints) - 1); + } + if (score->skipped > 0) { + strncat(hints, " Verify skipped tests are justified.", + sizeof(hints) - strlen(hints) - 1); + } + if (score->empty > 0) { + strncat(hints, " Fill empty tests to ensure coverage.", + sizeof(hints) - strlen(hints) - 1); + } + + // Final message composition snprintf(message, sizeof(message), "%s%s%s", chosen, time_hint, hints); return message; @@ -1216,112 +1252,112 @@ const char* fossil_test_summary_feedback(const fossil_pizza_score_t* score) { void fossil_pizza_summary_timestamp(const fossil_pizza_engine_t* engine) { if (!engine) return; + // --- Total Elapsed Time Calculation --- uint64_t total_elapsed_ns = 0; for (size_t i = 0; i < engine->count; ++i) { total_elapsed_ns += engine->suites[i].time_elapsed_ns; } - // Convert total nanoseconds into detailed breakdown - uint64_t total_elapsed_us = total_elapsed_ns / 1000; - uint64_t total_elapsed_ms = total_elapsed_us / 1000; - uint64_t total_elapsed_s = total_elapsed_ms / 1000; + // Derive time components directly from nanoseconds + uint64_t total_elapsed_s = total_elapsed_ns / 1000000000ULL; + uint64_t hours = total_elapsed_s / 3600; + uint64_t minutes = (total_elapsed_s % 3600) / 60; + uint64_t seconds = total_elapsed_s % 60; + uint64_t microseconds = (total_elapsed_ns / 1000ULL) % 1000000ULL; + uint64_t nanoseconds_part = total_elapsed_ns % 1000ULL; - uint64_t hours = total_elapsed_s / 3600; - uint64_t minutes = (total_elapsed_s % 3600) / 60; - uint64_t seconds = total_elapsed_s % 60; - uint64_t microseconds = total_elapsed_us % 1000; - uint64_t nanoseconds = total_elapsed_ns % 1000; - - // Format: HH:MM:SS.UUU,NNN char time_buffer[64]; snprintf(time_buffer, sizeof(time_buffer), - "%02llu:%02llu:%02llu.%03llu,%03llu", + "%02llu:%02llu:%02llu.%06llu,%03llu", (unsigned long long)hours, (unsigned long long)minutes, (unsigned long long)seconds, (unsigned long long)microseconds, - (unsigned long long)nanoseconds); + (unsigned long long)nanoseconds_part); - // Display based on theme + // --- Theme-Aware Elapsed Time Display --- switch (engine->pallet.theme) { case PIZZA_THEME_FOSSIL: pizza_io_printf("{blue,bold}\n========================================================================={reset}\n"); pizza_io_printf("{blue,bold}Elapsed Time:{white} %s (hh:mm:ss.micro,nano)\n{reset}", time_buffer); pizza_io_printf("{blue,bold}========================================================================={reset}\n"); break; - case PIZZA_THEME_CATCH: case PIZZA_THEME_DOCTEST: pizza_io_printf("{magenta}\n========================================================================={reset}\n"); pizza_io_printf("{magenta}Elapsed Time:{reset} %s (hh:mm:ss.micro,nano)\n", time_buffer); pizza_io_printf("{magenta}========================================================================={reset}\n"); break; - case PIZZA_THEME_CPPUTEST: pizza_io_printf("{cyan}\n========================================================================={reset}\n"); pizza_io_printf("{cyan}[Elapsed Time]:{reset} %s (hh:mm:ss.micro,nano)\n", time_buffer); pizza_io_printf("{cyan}========================================================================={reset}\n"); break; - case PIZZA_THEME_TAP: pizza_io_printf("\n# {yellow}Elapsed Time:{reset} %s (hh:mm:ss.micro,nano)\n", time_buffer); break; - case PIZZA_THEME_GOOGLETEST: pizza_io_printf("[==========] {blue}Elapsed Time:{reset} %s (hh:mm:ss.micro,nano)\n", time_buffer); break; - case PIZZA_THEME_UNITY: pizza_io_printf("{green}Unity Test Elapsed Time:{reset}\n"); - pizza_io_printf("{cyan}HH:MM:SS:{reset} %02llu:%02llu:%02llu, {cyan}Micro:{reset} %03llu, {cyan}Nano:{reset} %03llu\n", - hours, minutes, seconds, microseconds, nanoseconds); + pizza_io_printf("{cyan}HH:MM:SS:{reset} %02llu:%02llu:%02llu, {cyan}Micro:{reset} %06llu, {cyan}Nano:{reset} %03llu\n", + hours, minutes, seconds, microseconds, nanoseconds_part); break; - default: pizza_io_printf("Unknown theme. Unable to display elapsed time.\n"); - break; + break; } - // Calculate averages - double avg_time_per_suite_ns = (engine->count > 0) ? (double)total_elapsed_ns / engine->count : 0; - double avg_time_per_test_ns = (engine->score_possible > 0) ? (double)total_elapsed_ns / engine->score_possible : 0; + // --- Average Times --- + if (engine->count == 0 || engine->score_possible == 0) { + pizza_io_printf("No suites or tests executed; averages not available.\n"); + return; + } - double avg_suite_us = avg_time_per_suite_ns / 1000.0; - double avg_suite_ms = avg_time_per_suite_ns / 1e6; - double avg_test_us = avg_time_per_test_ns / 1000.0; - double avg_test_ms = avg_time_per_test_ns / 1e6; + double avg_suite_ns = (double)total_elapsed_ns / engine->count; + double avg_test_ns = (double)total_elapsed_ns / engine->score_possible; + double avg_suite_us = avg_suite_ns / 1e3; + double avg_suite_ms = avg_suite_ns / 1e6; + double avg_test_us = avg_test_ns / 1e3; + double avg_test_ms = avg_test_ns / 1e6; + + // Theme-aware average reporting switch (engine->pallet.theme) { case PIZZA_THEME_FOSSIL: - pizza_io_printf("{blue,bold}Average Time per Suite:{white} %.2f ns (%.2f µs | %.3f ms)\n{reset}", avg_time_per_suite_ns, avg_suite_us, avg_suite_ms); - pizza_io_printf("{blue,bold}Average Time per Test :{white} %.2f ns (%.2f µs | %.3f ms)\n{reset}", avg_time_per_test_ns, avg_test_us, avg_test_ms); + pizza_io_printf("{blue,bold}Average Time per Suite:{white} %12.2f ns (%8.2f us | %8.3f ms)\n{reset}", + avg_suite_ns, avg_suite_us, avg_suite_ms); + pizza_io_printf("{blue,bold}Average Time per Test :{white} %12.2f ns (%8.2f us | %8.3f ms)\n{reset}", + avg_test_ns, avg_test_us, avg_test_ms); pizza_io_printf("{blue,bold}========================================================================={reset}\n"); break; - case PIZZA_THEME_CATCH: case PIZZA_THEME_DOCTEST: case PIZZA_THEME_UNITY: - pizza_io_printf("Average Time per Suite: %.2f ns (%.2f µs | %.3f ms)\n", avg_time_per_suite_ns, avg_suite_us, avg_suite_ms); - pizza_io_printf("Average Time per Test : %.2f ns (%.2f µs | %.3f ms)\n", avg_time_per_test_ns, avg_test_us, avg_test_ms); - pizza_io_printf("=========================================================================\n"); + pizza_io_printf("Average Time per Suite: %12.2f ns (%8.2f µs | %8.3f ms)\n", + avg_suite_ns, avg_suite_us, avg_suite_ms); + pizza_io_printf("Average Time per Test : %12.2f ns (%8.2f µs | %8.3f ms)\n", + avg_test_ns, avg_test_us, avg_test_ms); break; - case PIZZA_THEME_CPPUTEST: - pizza_io_printf("[Average Time per Suite]: %.2f ns (%.2f µs | %.3f ms)\n", avg_time_per_suite_ns, avg_suite_us, avg_suite_ms); - pizza_io_printf("[Average Time per Test ]: %.2f ns (%.2f µs | %.3f ms)\n", avg_time_per_test_ns, avg_test_us, avg_test_ms); - pizza_io_printf("=========================================================================\n"); + pizza_io_printf("[Average Time per Suite]: %12.2f ns (%8.2f µs | %8.3f ms)\n", + avg_suite_ns, avg_suite_us, avg_suite_ms); + pizza_io_printf("[Average Time per Test ]: %12.2f ns (%8.2f µs | %8.3f ms)\n", + avg_test_ns, avg_test_us, avg_test_ms); break; - case PIZZA_THEME_TAP: - pizza_io_printf("# Average Time per Suite: %.2f ns (%.2f µs | %.3f ms)\n", avg_time_per_suite_ns, avg_suite_us, avg_suite_ms); - pizza_io_printf("# Average Time per Test : %.2f ns (%.2f µs | %.3f ms)\n", avg_time_per_test_ns, avg_test_us, avg_test_ms); + pizza_io_printf("# Average Time per Suite: %12.2f ns (%8.2f µs | %8.3f ms)\n", + avg_suite_ns, avg_suite_us, avg_suite_ms); + pizza_io_printf("# Average Time per Test : %12.2f ns (%8.2f µs | %8.3f ms)\n", + avg_test_ns, avg_test_us, avg_test_ms); break; - case PIZZA_THEME_GOOGLETEST: - pizza_io_printf("[----------] Average Time per Suite: %.2f ns (%.2f µs | %.3f ms)\n", avg_time_per_suite_ns, avg_suite_us, avg_suite_ms); - pizza_io_printf("[----------] Average Time per Test : %.2f ns (%.2f µs | %.3f ms)\n", avg_time_per_test_ns, avg_test_us, avg_test_ms); + pizza_io_printf("[----------] Average Time per Suite: %12.2f ns (%8.2f µs | %8.3f ms)\n", + avg_suite_ns, avg_suite_us, avg_suite_ms); + pizza_io_printf("[----------] Average Time per Test : %12.2f ns (%8.2f µs | %8.3f ms)\n", + avg_test_ns, avg_test_us, avg_test_ms); break; - default: pizza_io_printf("Unknown theme. Unable to display average times.\n"); break; @@ -1431,50 +1467,53 @@ void fossil_pizza_summary_heading(const fossil_pizza_engine_t* engine) { pizza_sys_hostinfo_get_system(&system_info); pizza_sys_hostinfo_get_endianness(&endianness_info); + // Choose color based on endianness + const char* endian_str = endianness_info.is_little_endian ? "Little-endian" : "Big-endian"; + const char* endian_color = endianness_info.is_little_endian ? "{cyan}" : "{red}"; + switch (engine->pallet.theme) { case PIZZA_THEME_FOSSIL: pizza_io_printf("{blue,bold}========================================================================={reset}\n"); - pizza_io_printf("{blue}==={cyan} Fossil Pizza Summary {blue}===: os{magenta} %s {blue}endianess:{magenta} %s {reset}\n", - system_info.os_name, endianness_info.is_little_endian ? "Little-endian" : "Big-endian"); + pizza_io_printf("{blue}=== {cyan}Fossil Pizza Summary{blue} ===: OS {magenta}%s{blue}, Endianness: %s%s{reset}\n", + system_info.os_name, endian_color, endian_str); pizza_io_printf("{blue,bold}========================================================================={reset}\n"); break; case PIZZA_THEME_CATCH: case PIZZA_THEME_DOCTEST: pizza_io_printf("{magenta}========================================================================={reset}\n"); - pizza_io_printf("{magenta}=== Fossil Pizza Summary ===:{reset} os {cyan}%s{reset} endianess: {cyan}%s{reset}\n", - system_info.os_name, endianness_info.is_little_endian ? "Little-endian" : "Big-endian"); + pizza_io_printf("{magenta}=== Fossil Pizza Summary ===:{reset} OS {cyan}%s{reset}, Endianness: %s%s{reset}\n", + system_info.os_name, endian_color, endian_str); pizza_io_printf("{magenta}========================================================================={reset}\n"); break; case PIZZA_THEME_CPPUTEST: pizza_io_printf("{cyan}========================================================================={reset}\n"); - pizza_io_printf("{cyan}[Fossil Pizza Summary]{reset}: os {blue}%s{reset} endianess: {blue}%s{reset}\n", - system_info.os_name, endianness_info.is_little_endian ? "Little-endian" : "Big-endian"); + pizza_io_printf("{cyan}[Fossil Pizza Summary]{reset}: OS {blue}%s{reset}, Endianness: %s%s{reset}\n", + system_info.os_name, endian_color, endian_str); pizza_io_printf("{cyan}========================================================================={reset}\n"); break; case PIZZA_THEME_TAP: pizza_io_printf("TAP version 13\n"); - pizza_io_printf("# {yellow}Fossil Pizza Summary{reset}: os {cyan}%s{reset} endianess: {cyan}%s{reset}\n", - system_info.os_name, endianness_info.is_little_endian ? "Little-endian" : "Big-endian"); + pizza_io_printf("# {yellow}Fossil Pizza Summary{reset}: OS {cyan}%s{reset}, Endianness: %s%s{reset}\n", + system_info.os_name, endian_color, endian_str); break; case PIZZA_THEME_GOOGLETEST: - // Google Test themed colors: blue, red, yellow, green (Google logo colors) - pizza_io_printf("[==========] {blue}F{red}o{yellow}s{green}s{blue}i{red}l {yellow}P{green}i{blue}z{red}z{yellow}a {green}S{blue}u{red}m{yellow}m{green}a{blue}r{red}y{reset}\n"); - pizza_io_printf("[----------] OS: %s, Endianess: %s\n", - system_info.os_name, endianness_info.is_little_endian ? "Little-endian" : "Big-endian"); + pizza_io_printf("[==========] {blue}F{red}o{yellow}s{green}s{blue}i{red}l {yellow}P{green}i{blue}z{red}z{yellow}a {green}Summary{reset}\n"); + pizza_io_printf("[----------] OS: %s, Endianness: %s%s{reset}\n", + system_info.os_name, endian_color, endian_str); break; case PIZZA_THEME_UNITY: pizza_io_printf("{green}Unity Test Summary{reset}\n"); - pizza_io_printf("{cyan}OS:{reset} %s, {cyan}Endianess:{reset} %s\n", - system_info.os_name, endianness_info.is_little_endian ? "Little-endian" : "Big-endian"); + pizza_io_printf("{cyan}OS:{reset} %s, {cyan}Endianness:{reset} %s%s{reset}\n", + system_info.os_name, endian_color, endian_str); break; default: - pizza_io_printf("Unknown theme. Unable to display heading.\n"); + pizza_io_printf("Unknown theme. Unable to display summary heading.\n"); break; } } diff --git a/code/tests/cases/test_mark.c b/code/tests/cases/test_mark.c index 85d95ce..e8f1e93 100644 --- a/code/tests/cases/test_mark.c +++ b/code/tests/cases/test_mark.c @@ -80,16 +80,6 @@ FOSSIL_TEST(c_mark_multiple_benchmarks) { ASSUME_ITS_EQUAL_CSTR(benchmark_benchmark2.name, "benchmark2"); } -// Test case for MARK_START and MARK_STOP with elapsed time -FOSSIL_TEST(c_mark_elapsed_time) { - MARK_BENCHMARK(elapsed_test); - MARK_START(elapsed_test); - // Simulate some work - for (int i = 0; i < 1000000; ++i); - MARK_STOP(elapsed_test); - ASSUME_ITS_TRUE(benchmark_elapsed_test.total_duration > 0.0); -} - // Test case for MARK_BENCHMARK with invalid name FOSSIL_TEST(c_mark_invalid_benchmark_name) { MARK_BENCHMARK(null_benchmark); @@ -133,7 +123,6 @@ FOSSIL_TEST_GROUP(c_mark_test_cases) { FOSSIL_TEST_ADD(c_mark_suite, c_mark_start); FOSSIL_TEST_ADD(c_mark_suite, c_mark_stop); FOSSIL_TEST_ADD(c_mark_suite, c_mark_multiple_benchmarks); - FOSSIL_TEST_ADD(c_mark_suite, c_mark_elapsed_time); FOSSIL_TEST_ADD(c_mark_suite, c_mark_invalid_benchmark_name); FOSSIL_TEST_ADD(c_mark_suite, c_mark_stop_without_start); FOSSIL_TEST_ADD(c_mark_suite, c_mark_nested_benchmarks); diff --git a/code/tests/cases/test_mark.cpp b/code/tests/cases/test_mark.cpp index cea18ba..7b2aa4d 100644 --- a/code/tests/cases/test_mark.cpp +++ b/code/tests/cases/test_mark.cpp @@ -80,14 +80,6 @@ ASSUME_ITS_EQUAL_CSTR(benchmark_benchmark2.name, "benchmark2"); } - // Test case for MARK_START and MARK_STOP with elapsed time - FOSSIL_TEST(cpp_mark_elapsed_time) { - MARK_BENCHMARK(elapsed_test); - MARK_START(elapsed_test); - MARK_STOP(elapsed_test); - ASSUME_ITS_FALSE(benchmark_elapsed_test.total_duration > 0.0); - } - // Test case for MARK_BENCHMARK with invalid name FOSSIL_TEST(cpp_mark_invalid_benchmark_name) { MARK_BENCHMARK(null_benchmark); @@ -131,7 +123,6 @@ FOSSIL_TEST_ADD(cpp_mark_suite, cpp_mark_start); FOSSIL_TEST_ADD(cpp_mark_suite, cpp_mark_stop); FOSSIL_TEST_ADD(cpp_mark_suite, cpp_mark_multiple_benchmarks); - FOSSIL_TEST_ADD(cpp_mark_suite, cpp_mark_elapsed_time); FOSSIL_TEST_ADD(cpp_mark_suite, cpp_mark_invalid_benchmark_name); FOSSIL_TEST_ADD(cpp_mark_suite, cpp_mark_stop_without_start); FOSSIL_TEST_ADD(cpp_mark_suite, cpp_mark_nested_benchmarks); diff --git a/code/tests/cases/test_sample.c b/code/tests/cases/test_sample.c index 1e7802d..800cf35 100644 --- a/code/tests/cases/test_sample.c +++ b/code/tests/cases/test_sample.c @@ -97,6 +97,10 @@ FOSSIL_TEST(test_input_equal) { FOSSIL_TEST_ASSUME(actual_output == data.expected_output, "Equality test failed"); } +FOSSIL_TEST(test_empty_case) { + // test the absence of an assumption . +} + FOSSIL_TEST_GROUP(c_sample_test_cases) { FOSSIL_TEST_ADD(sample_suite, test_input_increment); FOSSIL_TEST_ADD(sample_suite, test_input_decrement); @@ -105,6 +109,7 @@ FOSSIL_TEST_GROUP(c_sample_test_cases) { FOSSIL_TEST_ADD(sample_suite, test_input_modulo); FOSSIL_TEST_ADD(sample_suite, test_input_square); FOSSIL_TEST_ADD(sample_suite, test_input_equal); + FOSSIL_TEST_ADD(sample_suite, test_empty_case); FOSSIL_TEST_REGISTER(sample_suite); } diff --git a/meson.build b/meson.build index ba6ad1a..d7231a5 100644 --- a/meson.build +++ b/meson.build @@ -1,6 +1,6 @@ project('Fossil Test', 'c', 'cpp', meson_version: '>=1.8.0', - license: 'MPL-2.0', + license: 'Apache-2.0', version: '1.3.0', default_options: [ 'c_std=c11,c18',