primeiro commit com exercicios de Exercism realizados até esta data
This commit is contained in:
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"authors": [
|
||||||
|
"JacobMikkelsen"
|
||||||
|
],
|
||||||
|
"contributors": [
|
||||||
|
"bcc32",
|
||||||
|
"benkelaar",
|
||||||
|
"gea-migration",
|
||||||
|
"h-3-0",
|
||||||
|
"kytrinyx",
|
||||||
|
"patricksjackson",
|
||||||
|
"QLaille",
|
||||||
|
"RealBarrettBrown",
|
||||||
|
"ryanplusplus",
|
||||||
|
"siebenschlaefer",
|
||||||
|
"wolf99"
|
||||||
|
],
|
||||||
|
"files": {
|
||||||
|
"solution": [
|
||||||
|
"hello_world.c",
|
||||||
|
"hello_world.h"
|
||||||
|
],
|
||||||
|
"test": [
|
||||||
|
"test_hello_world.c"
|
||||||
|
],
|
||||||
|
"example": [
|
||||||
|
".meta/example.c"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"blurb": "Exercism's classic introductory exercise. Just say \"Hello, World!\".",
|
||||||
|
"source": "This is an exercise to introduce users to using Exercism",
|
||||||
|
"source_url": "https://en.wikipedia.org/wiki/%22Hello,_world!%22_program"
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"track":"c","exercise":"hello-world","id":"952ad4b82fec40d7b8ac31a38e72f9a6","url":"https://exercism.org/tracks/c/exercises/hello-world","handle":"sanctushck","is_requester":true,"auto_approve":false}
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
# Help
|
||||||
|
|
||||||
|
## Running the tests
|
||||||
|
|
||||||
|
Get the first test compiling, linking and passing by following the [three rules of test-driven development][3-tdd-rules].
|
||||||
|
|
||||||
|
The included makefile can be used to create and run the tests using the `test` task.
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ make test
|
||||||
|
```
|
||||||
|
|
||||||
|
Create just the functions you need to satisfy any compiler errors and get the test to fail.
|
||||||
|
Then write just enough code to get the test to pass.
|
||||||
|
Once you've done that, move onto the next test.
|
||||||
|
|
||||||
|
As you progress through the tests, take the time to refactor your implementation for readability and expressiveness and then go on to the next test.
|
||||||
|
|
||||||
|
Try to use standard C99 facilities in preference to writing your own low-level algorithms or facilities by hand.
|
||||||
|
|
||||||
|
## Checking for memory leaks
|
||||||
|
|
||||||
|
The makefile comes also with a build that checks some common mistakes regarding memory leaks and out of bound access to arrays.
|
||||||
|
To run these checks, use the following at the command line:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ make memcheck
|
||||||
|
```
|
||||||
|
|
||||||
|
[3-tdd-rules]: https://blog.cleancoder.com/uncle-bob/2014/12/17/TheCyclesOfTDD.html
|
||||||
|
|
||||||
|
## Submitting your solution
|
||||||
|
|
||||||
|
You can submit your solution using the `exercism submit hello_world.c hello_world.h` command.
|
||||||
|
This command will upload your solution to the Exercism website and print the solution page's URL.
|
||||||
|
|
||||||
|
It's possible to submit an incomplete solution which allows you to:
|
||||||
|
|
||||||
|
- See how others have completed the exercise
|
||||||
|
- Request help from a mentor
|
||||||
|
|
||||||
|
## Need to get help?
|
||||||
|
|
||||||
|
If you'd like help solving the exercise, check the following pages:
|
||||||
|
|
||||||
|
- The [C track's documentation](https://exercism.org/docs/tracks/c)
|
||||||
|
- The [C track's programming category on the forum](https://forum.exercism.org/c/programming/c)
|
||||||
|
- [Exercism's programming category on the forum](https://forum.exercism.org/c/programming/5)
|
||||||
|
- The [Frequently Asked Questions](https://exercism.org/docs/using/faqs)
|
||||||
|
|
||||||
|
Should those resources not suffice, you could submit your (incomplete) solution to request mentoring.
|
||||||
|
|
||||||
|
Make sure you have read the [C track-specific documentation][c-track] on the Exercism site.
|
||||||
|
This covers the basic information on setting up the development environment expected by the exercises.
|
||||||
|
|
||||||
|
## Submitting Incomplete Solutions
|
||||||
|
|
||||||
|
If you are struggling with a particular exercise, it is possible to submit an incomplete solution so you can see how others have completed the exercise.
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
To get help if having trouble, you can use the following resources:
|
||||||
|
|
||||||
|
- [StackOverflow][] can be used to search for your problem and see if it has been answered already. You can also ask and answer questions.
|
||||||
|
- [CPPReference][] can be used to look up information on C concepts, operators, types, standard library functions and more.
|
||||||
|
- [TutorialsPoint][] has similar content as CPPReference in its C programming section.
|
||||||
|
- [The C Programming][K&R] book by K&R is the original source of the language and is still useful today.
|
||||||
|
|
||||||
|
[c-track]: https://exercism.org/docs/tracks/c
|
||||||
|
[stackoverflow]: http://stackoverflow.com/questions/tagged/c
|
||||||
|
[cppreference]: https://en.cppreference.com/w/c
|
||||||
|
[tutorialspoint]: https://www.tutorialspoint.com/cprogramming/
|
||||||
|
[K&R]: https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628/
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
# Hello World
|
||||||
|
|
||||||
|
Welcome to Hello World on Exercism's C Track.
|
||||||
|
If you need help running the tests or submitting your code, check out `HELP.md`.
|
||||||
|
|
||||||
|
## Instructions
|
||||||
|
|
||||||
|
The classical introductory exercise.
|
||||||
|
Just say "Hello, World!".
|
||||||
|
|
||||||
|
["Hello, World!"][hello-world] is the traditional first program for beginning programming in a new language or environment.
|
||||||
|
|
||||||
|
The objectives are simple:
|
||||||
|
|
||||||
|
- Modify the provided code so that it produces the string "Hello, World!".
|
||||||
|
- Run the test suite and make sure that it succeeds.
|
||||||
|
- Submit your solution and check it at the website.
|
||||||
|
|
||||||
|
If everything goes well, you will be ready to fetch your first real exercise.
|
||||||
|
|
||||||
|
[hello-world]: https://en.wikipedia.org/wiki/%22Hello,_world!%22_program
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
### Created by
|
||||||
|
|
||||||
|
- @JacobMikkelsen
|
||||||
|
|
||||||
|
### Contributed to by
|
||||||
|
|
||||||
|
- @bcc32
|
||||||
|
- @benkelaar
|
||||||
|
- @gea-migration
|
||||||
|
- @h-3-0
|
||||||
|
- @kytrinyx
|
||||||
|
- @patricksjackson
|
||||||
|
- @QLaille
|
||||||
|
- @RealBarrettBrown
|
||||||
|
- @ryanplusplus
|
||||||
|
- @siebenschlaefer
|
||||||
|
- @wolf99
|
||||||
|
|
||||||
|
### Based on
|
||||||
|
|
||||||
|
This is an exercise to introduce users to using Exercism - https://en.wikipedia.org/wiki/%22Hello,_world!%22_program
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
#include "hello_world.h"
|
||||||
|
|
||||||
|
// Define the function itself.
|
||||||
|
const char *hello(void) { return "Hello, World!"; }
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
// This is called an include guard, which ensures that the header is only
|
||||||
|
// included once. You could alternatively use '#pragma once'. See
|
||||||
|
// https://en.wikipedia.org/wiki/Include_guard.
|
||||||
|
#ifndef HELLO_WORLD_H
|
||||||
|
#define HELLO_WORLD_H
|
||||||
|
|
||||||
|
// Declare the 'hello()' function, which takes no arguments and returns a
|
||||||
|
// 'const char *', i.e. a pointer to a character (in this case the first
|
||||||
|
// character in a string). The function itself is defined in the hello_world.c
|
||||||
|
// source file. This function is called by the test case(s) in the test source
|
||||||
|
// file test_hello_world.c.
|
||||||
|
const char *hello(void);
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
### If you wish to use extra libraries (math.h for instance),
|
||||||
|
### add their flags here (-lm in our case) in the "LIBS" variable.
|
||||||
|
|
||||||
|
LIBS = -lm
|
||||||
|
|
||||||
|
###
|
||||||
|
CFLAGS = -std=c99
|
||||||
|
CFLAGS += -g
|
||||||
|
CFLAGS += -Wall
|
||||||
|
CFLAGS += -Wextra
|
||||||
|
CFLAGS += -pedantic
|
||||||
|
CFLAGS += -Werror
|
||||||
|
CFLAGS += -Wmissing-declarations
|
||||||
|
CFLAGS += -DUNITY_SUPPORT_64 -DUNITY_OUTPUT_COLOR
|
||||||
|
|
||||||
|
ASANFLAGS = -fsanitize=address
|
||||||
|
ASANFLAGS += -fno-common
|
||||||
|
ASANFLAGS += -fno-omit-frame-pointer
|
||||||
|
|
||||||
|
.PHONY: test
|
||||||
|
test: tests.out
|
||||||
|
@./tests.out
|
||||||
|
|
||||||
|
.PHONY: memcheck
|
||||||
|
memcheck: ./*.c ./*.h
|
||||||
|
@echo Compiling $@
|
||||||
|
@$(CC) $(ASANFLAGS) $(CFLAGS) test-framework/unity.c ./*.c -o memcheck.out $(LIBS)
|
||||||
|
@./memcheck.out
|
||||||
|
@echo "Memory check passed"
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
rm -rf *.o *.out *.out.dSYM
|
||||||
|
|
||||||
|
tests.out: ./*.c ./*.h
|
||||||
|
@echo Compiling $@
|
||||||
|
@$(CC) $(CFLAGS) test-framework/unity.c ./*.c -o tests.out $(LIBS)
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,661 @@
|
|||||||
|
/* ==========================================
|
||||||
|
Unity Project - A Test Framework for C
|
||||||
|
Copyright (c) 2007-21 Mike Karlesky, Mark VanderVoord, Greg Williams
|
||||||
|
[Released under MIT License. Please refer to license.txt for details]
|
||||||
|
========================================== */
|
||||||
|
|
||||||
|
#ifndef UNITY_FRAMEWORK_H
|
||||||
|
#define UNITY_FRAMEWORK_H
|
||||||
|
#define UNITY
|
||||||
|
|
||||||
|
#define UNITY_VERSION_MAJOR 2
|
||||||
|
#define UNITY_VERSION_MINOR 5
|
||||||
|
#define UNITY_VERSION_BUILD 2
|
||||||
|
#define UNITY_VERSION ((UNITY_VERSION_MAJOR << 16) | (UNITY_VERSION_MINOR << 8) | UNITY_VERSION_BUILD)
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "unity_internals.h"
|
||||||
|
|
||||||
|
/*-------------------------------------------------------
|
||||||
|
* Test Setup / Teardown
|
||||||
|
*-------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* These functions are intended to be called before and after each test.
|
||||||
|
* If using unity directly, these will need to be provided for each test
|
||||||
|
* executable built. If you are using the test runner generator and/or
|
||||||
|
* Ceedling, these are optional. */
|
||||||
|
void setUp(void);
|
||||||
|
void tearDown(void);
|
||||||
|
|
||||||
|
/* These functions are intended to be called at the beginning and end of an
|
||||||
|
* entire test suite. suiteTearDown() is passed the number of tests that
|
||||||
|
* failed, and its return value becomes the exit code of main(). If using
|
||||||
|
* Unity directly, you're in charge of calling these if they are desired.
|
||||||
|
* If using Ceedling or the test runner generator, these will be called
|
||||||
|
* automatically if they exist. */
|
||||||
|
void suiteSetUp(void);
|
||||||
|
int suiteTearDown(int num_failures);
|
||||||
|
|
||||||
|
/*-------------------------------------------------------
|
||||||
|
* Test Reset and Verify
|
||||||
|
*-------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* These functions are intended to be called before during tests in order
|
||||||
|
* to support complex test loops, etc. Both are NOT built into Unity. Instead
|
||||||
|
* the test runner generator will create them. resetTest will run teardown and
|
||||||
|
* setup again, verifying any end-of-test needs between. verifyTest will only
|
||||||
|
* run the verification. */
|
||||||
|
void resetTest(void);
|
||||||
|
void verifyTest(void);
|
||||||
|
|
||||||
|
/*-------------------------------------------------------
|
||||||
|
* Configuration Options
|
||||||
|
*-------------------------------------------------------
|
||||||
|
* All options described below should be passed as a compiler flag to all files using Unity. If you must add #defines, place them BEFORE the #include above.
|
||||||
|
|
||||||
|
* Integers/longs/pointers
|
||||||
|
* - Unity attempts to automatically discover your integer sizes
|
||||||
|
* - define UNITY_EXCLUDE_STDINT_H to stop attempting to look in <stdint.h>
|
||||||
|
* - define UNITY_EXCLUDE_LIMITS_H to stop attempting to look in <limits.h>
|
||||||
|
* - If you cannot use the automatic methods above, you can force Unity by using these options:
|
||||||
|
* - define UNITY_SUPPORT_64
|
||||||
|
* - set UNITY_INT_WIDTH
|
||||||
|
* - set UNITY_LONG_WIDTH
|
||||||
|
* - set UNITY_POINTER_WIDTH
|
||||||
|
|
||||||
|
* Floats
|
||||||
|
* - define UNITY_EXCLUDE_FLOAT to disallow floating point comparisons
|
||||||
|
* - define UNITY_FLOAT_PRECISION to specify the precision to use when doing TEST_ASSERT_EQUAL_FLOAT
|
||||||
|
* - define UNITY_FLOAT_TYPE to specify doubles instead of single precision floats
|
||||||
|
* - define UNITY_INCLUDE_DOUBLE to allow double floating point comparisons
|
||||||
|
* - define UNITY_EXCLUDE_DOUBLE to disallow double floating point comparisons (default)
|
||||||
|
* - define UNITY_DOUBLE_PRECISION to specify the precision to use when doing TEST_ASSERT_EQUAL_DOUBLE
|
||||||
|
* - define UNITY_DOUBLE_TYPE to specify something other than double
|
||||||
|
* - define UNITY_EXCLUDE_FLOAT_PRINT to trim binary size, won't print floating point values in errors
|
||||||
|
|
||||||
|
* Output
|
||||||
|
* - by default, Unity prints to standard out with putchar. define UNITY_OUTPUT_CHAR(a) with a different function if desired
|
||||||
|
* - define UNITY_DIFFERENTIATE_FINAL_FAIL to print FAILED (vs. FAIL) at test end summary - for automated search for failure
|
||||||
|
|
||||||
|
* Optimization
|
||||||
|
* - by default, line numbers are stored in unsigned shorts. Define UNITY_LINE_TYPE with a different type if your files are huge
|
||||||
|
* - by default, test and failure counters are unsigned shorts. Define UNITY_COUNTER_TYPE with a different type if you want to save space or have more than 65535 Tests.
|
||||||
|
|
||||||
|
* Test Cases
|
||||||
|
* - define UNITY_SUPPORT_TEST_CASES to include the TEST_CASE macro, though really it's mostly about the runner generator script
|
||||||
|
|
||||||
|
* Parameterized Tests
|
||||||
|
* - you'll want to create a define of TEST_CASE(...) which basically evaluates to nothing
|
||||||
|
|
||||||
|
* Tests with Arguments
|
||||||
|
* - you'll want to define UNITY_USE_COMMAND_LINE_ARGS if you have the test runner passing arguments to Unity
|
||||||
|
|
||||||
|
*-------------------------------------------------------
|
||||||
|
* Basic Fail and Ignore
|
||||||
|
*-------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define TEST_FAIL_MESSAGE(message) UNITY_TEST_FAIL(__LINE__, (message))
|
||||||
|
#define TEST_FAIL() UNITY_TEST_FAIL(__LINE__, NULL)
|
||||||
|
#define TEST_IGNORE_MESSAGE(message) UNITY_TEST_IGNORE(__LINE__, (message))
|
||||||
|
#define TEST_IGNORE() UNITY_TEST_IGNORE(__LINE__, NULL)
|
||||||
|
#define TEST_MESSAGE(message) UnityMessage((message), __LINE__)
|
||||||
|
#define TEST_ONLY()
|
||||||
|
#ifdef UNITY_INCLUDE_PRINT_FORMATTED
|
||||||
|
#define TEST_PRINTF(message, ...) UnityPrintF(__LINE__, (message), __VA_ARGS__)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* It is not necessary for you to call PASS. A PASS condition is assumed if nothing fails.
|
||||||
|
* This method allows you to abort a test immediately with a PASS state, ignoring the remainder of the test. */
|
||||||
|
#define TEST_PASS() TEST_ABORT()
|
||||||
|
#define TEST_PASS_MESSAGE(message) do { UnityMessage((message), __LINE__); TEST_ABORT(); } while(0)
|
||||||
|
|
||||||
|
/* This macro does nothing, but it is useful for build tools (like Ceedling) to make use of this to figure out
|
||||||
|
* which files should be linked to in order to perform a test. Use it like TEST_FILE("sandwiches.c") */
|
||||||
|
#define TEST_FILE(a)
|
||||||
|
|
||||||
|
/*-------------------------------------------------------
|
||||||
|
* Test Asserts (simple)
|
||||||
|
*-------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Boolean */
|
||||||
|
#define TEST_ASSERT(condition) UNITY_TEST_ASSERT( (condition), __LINE__, " Expression Evaluated To FALSE")
|
||||||
|
#define TEST_ASSERT_TRUE(condition) UNITY_TEST_ASSERT( (condition), __LINE__, " Expected TRUE Was FALSE")
|
||||||
|
#define TEST_ASSERT_UNLESS(condition) UNITY_TEST_ASSERT( !(condition), __LINE__, " Expression Evaluated To TRUE")
|
||||||
|
#define TEST_ASSERT_FALSE(condition) UNITY_TEST_ASSERT( !(condition), __LINE__, " Expected FALSE Was TRUE")
|
||||||
|
#define TEST_ASSERT_NULL(pointer) UNITY_TEST_ASSERT_NULL( (pointer), __LINE__, " Expected NULL")
|
||||||
|
#define TEST_ASSERT_NOT_NULL(pointer) UNITY_TEST_ASSERT_NOT_NULL((pointer), __LINE__, " Expected Non-NULL")
|
||||||
|
#define TEST_ASSERT_EMPTY(pointer) UNITY_TEST_ASSERT_EMPTY( (pointer), __LINE__, " Expected Empty")
|
||||||
|
#define TEST_ASSERT_NOT_EMPTY(pointer) UNITY_TEST_ASSERT_NOT_EMPTY((pointer), __LINE__, " Expected Non-Empty")
|
||||||
|
|
||||||
|
/* Integers (of all sizes) */
|
||||||
|
#define TEST_ASSERT_EQUAL_INT(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_INT8(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT8((expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_INT16(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT16((expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_INT32(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT32((expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_INT64(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT64((expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_UINT(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT( (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_UINT8(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT8( (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_UINT16(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT16( (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_UINT32(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT32( (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_UINT64(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT64( (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_size_t(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT((expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_HEX(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_HEX8(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX8( (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_HEX16(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX16((expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_HEX32(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_HEX64(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX64((expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_CHAR(expected, actual) UNITY_TEST_ASSERT_EQUAL_CHAR((expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_BITS(mask, expected, actual) UNITY_TEST_ASSERT_BITS((mask), (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_BITS_HIGH(mask, actual) UNITY_TEST_ASSERT_BITS((mask), (UNITY_UINT)(-1), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_BITS_LOW(mask, actual) UNITY_TEST_ASSERT_BITS((mask), (UNITY_UINT)(0), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_BIT_HIGH(bit, actual) UNITY_TEST_ASSERT_BITS(((UNITY_UINT)1 << (bit)), (UNITY_UINT)(-1), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_BIT_LOW(bit, actual) UNITY_TEST_ASSERT_BITS(((UNITY_UINT)1 << (bit)), (UNITY_UINT)(0), (actual), __LINE__, NULL)
|
||||||
|
|
||||||
|
/* Integer Not Equal To (of all sizes) */
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_INT(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_INT((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_INT8(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_INT8((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_INT16(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_INT16((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_INT32(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_INT32((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_INT64(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_INT64((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_UINT(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_UINT((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_UINT8(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_UINT8((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_UINT16(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_UINT16((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_UINT32(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_UINT32((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_UINT64(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_UINT64((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_size_t(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_UINT((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_HEX8(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_HEX8((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_HEX16(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_HEX16((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_HEX32(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_HEX32((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_HEX64(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_HEX64((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_CHAR(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_CHAR((threshold), (actual), __LINE__, NULL)
|
||||||
|
|
||||||
|
/* Integer Greater Than/ Less Than (of all sizes) */
|
||||||
|
#define TEST_ASSERT_GREATER_THAN(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_INT((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_INT(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_INT((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_INT8(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_INT8((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_INT16(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_INT16((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_INT32(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_INT32((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_INT64(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_INT64((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_UINT(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_UINT((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_UINT8(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_UINT8((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_UINT16(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_UINT16((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_UINT32(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_UINT32((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_UINT64(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_UINT64((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_size_t(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_UINT((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_HEX8(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_HEX8((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_HEX16(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_HEX16((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_HEX32(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_HEX32((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_HEX64(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_HEX64((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_CHAR(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_CHAR((threshold), (actual), __LINE__, NULL)
|
||||||
|
|
||||||
|
#define TEST_ASSERT_LESS_THAN(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_INT((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_THAN_INT(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_INT((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_THAN_INT8(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_INT8((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_THAN_INT16(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_INT16((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_THAN_INT32(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_INT32((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_THAN_INT64(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_INT64((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_THAN_UINT(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_UINT((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_THAN_UINT8(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_UINT8((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_THAN_UINT16(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_UINT16((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_THAN_UINT32(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_UINT32((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_THAN_UINT64(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_UINT64((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_THAN_size_t(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_UINT((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_THAN_HEX8(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_HEX8((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_THAN_HEX16(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_HEX16((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_THAN_HEX32(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_HEX32((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_THAN_HEX64(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_HEX64((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_THAN_CHAR(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_CHAR((threshold), (actual), __LINE__, NULL)
|
||||||
|
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_INT(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_INT8(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT8((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_INT16(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT16((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_INT32(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT32((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_INT64(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT64((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_UINT(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_UINT8(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT8((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_UINT16(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT16((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_UINT32(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT32((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_UINT64(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT64((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_size_t(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_HEX8(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX8((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_HEX16(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX16((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_HEX32(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX32((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_HEX64(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX64((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_CHAR(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_CHAR((threshold), (actual), __LINE__, NULL)
|
||||||
|
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_INT(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_INT8(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT8((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_INT16(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT16((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_INT32(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT32((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_INT64(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT64((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_UINT(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_UINT8(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT8((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_UINT16(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT16((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_UINT32(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT32((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_UINT64(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT64((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_size_t(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_HEX8(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX8((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_HEX16(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX16((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_HEX32(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX32((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_HEX64(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX64((threshold), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_CHAR(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_CHAR((threshold), (actual), __LINE__, NULL)
|
||||||
|
|
||||||
|
/* Integer Ranges (of all sizes) */
|
||||||
|
#define TEST_ASSERT_INT_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT_WITHIN((delta), (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_INT8_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT8_WITHIN((delta), (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_INT16_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT16_WITHIN((delta), (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_INT32_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT32_WITHIN((delta), (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_INT64_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT64_WITHIN((delta), (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_UINT_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT_WITHIN((delta), (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_UINT8_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT8_WITHIN((delta), (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_UINT16_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT16_WITHIN((delta), (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_UINT32_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT32_WITHIN((delta), (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_UINT64_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT64_WITHIN((delta), (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_size_t_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT_WITHIN((delta), (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_HEX_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_HEX8_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX8_WITHIN((delta), (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_HEX16_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX16_WITHIN((delta), (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_HEX32_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_HEX64_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX64_WITHIN((delta), (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_CHAR_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_CHAR_WITHIN((delta), (expected), (actual), __LINE__, NULL)
|
||||||
|
|
||||||
|
/* Integer Array Ranges (of all sizes) */
|
||||||
|
#define TEST_ASSERT_INT_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_INT_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_INT8_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_INT8_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_INT16_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_INT16_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_INT32_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_INT32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_INT64_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_INT64_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_UINT_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_UINT_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_UINT8_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_UINT8_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_UINT16_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_UINT16_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_UINT32_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_UINT32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_UINT64_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_UINT64_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_size_t_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_UINT_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_HEX_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_HEX32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_HEX8_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_HEX8_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_HEX16_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_HEX16_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_HEX32_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_HEX32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_HEX64_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_HEX64_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_CHAR_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_CHAR_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
|
||||||
|
|
||||||
|
|
||||||
|
/* Structs and Strings */
|
||||||
|
#define TEST_ASSERT_EQUAL_PTR(expected, actual) UNITY_TEST_ASSERT_EQUAL_PTR((expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_STRING(expected, actual) UNITY_TEST_ASSERT_EQUAL_STRING((expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_STRING_LEN(expected, actual, len) UNITY_TEST_ASSERT_EQUAL_STRING_LEN((expected), (actual), (len), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_MEMORY(expected, actual, len) UNITY_TEST_ASSERT_EQUAL_MEMORY((expected), (actual), (len), __LINE__, NULL)
|
||||||
|
|
||||||
|
/* Arrays */
|
||||||
|
#define TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_INT8_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT8_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_INT16_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT16_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_INT32_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_UINT_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_UINT8_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT8_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_UINT16_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_UINT32_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_size_t_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_HEX_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_HEX8_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX8_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_HEX16_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX16_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_HEX32_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_PTR_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_PTR_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_STRING_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_MEMORY_ARRAY(expected, actual, len, num_elements) UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY((expected), (actual), (len), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_CHAR_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_CHAR_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
|
||||||
|
/* Arrays Compared To Single Value */
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_INT(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_INT((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_INT8(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_INT8((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_INT16(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_INT16((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_INT32(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_INT32((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_INT64(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_INT64((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_UINT(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_UINT((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_UINT8(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_UINT8((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_UINT16(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_UINT16((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_UINT32(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_UINT32((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_UINT64(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_UINT64((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_size_t(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_UINT((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_HEX(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_HEX32((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_HEX8(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_HEX8((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_HEX16(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_HEX16((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_HEX32(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_HEX32((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_HEX64(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_HEX64((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_PTR(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_PTR((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_STRING(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_STRING((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_MEMORY(expected, actual, len, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_MEMORY((expected), (actual), (len), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_CHAR(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_CHAR((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
|
||||||
|
/* Floating Point (If Enabled) */
|
||||||
|
#define TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_FLOAT_WITHIN((delta), (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_FLOAT(expected, actual) UNITY_TEST_ASSERT_EQUAL_FLOAT((expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_FLOAT(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_FLOAT((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_FLOAT_IS_INF(actual) UNITY_TEST_ASSERT_FLOAT_IS_INF((actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_FLOAT_IS_NEG_INF(actual) UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF((actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_FLOAT_IS_NAN(actual) UNITY_TEST_ASSERT_FLOAT_IS_NAN((actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_FLOAT_IS_DETERMINATE(actual) UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE((actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_FLOAT_IS_NOT_INF(actual) UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF((actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(actual) UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF((actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_FLOAT_IS_NOT_NAN(actual) UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN((actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(actual) UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE((actual), __LINE__, NULL)
|
||||||
|
|
||||||
|
/* Double (If Enabled) */
|
||||||
|
#define TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_DOUBLE_WITHIN((delta), (expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_DOUBLE(expected, actual) UNITY_TEST_ASSERT_EQUAL_DOUBLE((expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_DOUBLE(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_DOUBLE((expected), (actual), (num_elements), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_DOUBLE_IS_INF(actual) UNITY_TEST_ASSERT_DOUBLE_IS_INF((actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_DOUBLE_IS_NEG_INF(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF((actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_DOUBLE_IS_NAN(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NAN((actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_DOUBLE_IS_DETERMINATE(actual) UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE((actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_DOUBLE_IS_NOT_INF(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF((actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF((actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN((actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE((actual), __LINE__, NULL)
|
||||||
|
|
||||||
|
/* Shorthand */
|
||||||
|
#ifdef UNITY_SHORTHAND_AS_OLD
|
||||||
|
#define TEST_ASSERT_EQUAL(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL(expected, actual) UNITY_TEST_ASSERT(((expected) != (actual)), __LINE__, " Expected Not-Equal")
|
||||||
|
#endif
|
||||||
|
#ifdef UNITY_SHORTHAND_AS_INT
|
||||||
|
#define TEST_ASSERT_EQUAL(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL(expected, actual) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand)
|
||||||
|
#endif
|
||||||
|
#ifdef UNITY_SHORTHAND_AS_MEM
|
||||||
|
#define TEST_ASSERT_EQUAL(expected, actual) UNITY_TEST_ASSERT_EQUAL_MEMORY((&expected), (&actual), sizeof(expected), __LINE__, NULL)
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL(expected, actual) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand)
|
||||||
|
#endif
|
||||||
|
#ifdef UNITY_SHORTHAND_AS_RAW
|
||||||
|
#define TEST_ASSERT_EQUAL(expected, actual) UNITY_TEST_ASSERT(((expected) == (actual)), __LINE__, " Expected Equal")
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL(expected, actual) UNITY_TEST_ASSERT(((expected) != (actual)), __LINE__, " Expected Not-Equal")
|
||||||
|
#endif
|
||||||
|
#ifdef UNITY_SHORTHAND_AS_NONE
|
||||||
|
#define TEST_ASSERT_EQUAL(expected, actual) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand)
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL(expected, actual) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*-------------------------------------------------------
|
||||||
|
* Test Asserts (with additional messages)
|
||||||
|
*-------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Boolean */
|
||||||
|
#define TEST_ASSERT_MESSAGE(condition, message) UNITY_TEST_ASSERT( (condition), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_TRUE_MESSAGE(condition, message) UNITY_TEST_ASSERT( (condition), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_UNLESS_MESSAGE(condition, message) UNITY_TEST_ASSERT( !(condition), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_FALSE_MESSAGE(condition, message) UNITY_TEST_ASSERT( !(condition), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_NULL_MESSAGE(pointer, message) UNITY_TEST_ASSERT_NULL( (pointer), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_NOT_NULL_MESSAGE(pointer, message) UNITY_TEST_ASSERT_NOT_NULL((pointer), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EMPTY_MESSAGE(pointer, message) UNITY_TEST_ASSERT_EMPTY( (pointer), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_NOT_EMPTY_MESSAGE(pointer, message) UNITY_TEST_ASSERT_NOT_EMPTY((pointer), __LINE__, (message))
|
||||||
|
|
||||||
|
/* Integers (of all sizes) */
|
||||||
|
#define TEST_ASSERT_EQUAL_INT_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_INT8_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT8((expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_INT16_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT16((expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_INT32_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT32((expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_INT64_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT64((expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_UINT_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT( (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_UINT8_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT8( (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_UINT16_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT16( (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_UINT32_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT32( (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_UINT64_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT64( (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_size_t_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT( (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_HEX_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_HEX8_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX8( (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_HEX16_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX16((expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_HEX32_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_HEX64_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX64((expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_BITS_MESSAGE(mask, expected, actual, message) UNITY_TEST_ASSERT_BITS((mask), (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_BITS_HIGH_MESSAGE(mask, actual, message) UNITY_TEST_ASSERT_BITS((mask), (UNITY_UINT32)(-1), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_BITS_LOW_MESSAGE(mask, actual, message) UNITY_TEST_ASSERT_BITS((mask), (UNITY_UINT32)(0), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_BIT_HIGH_MESSAGE(bit, actual, message) UNITY_TEST_ASSERT_BITS(((UNITY_UINT32)1 << (bit)), (UNITY_UINT32)(-1), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_BIT_LOW_MESSAGE(bit, actual, message) UNITY_TEST_ASSERT_BITS(((UNITY_UINT32)1 << (bit)), (UNITY_UINT32)(0), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_CHAR_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_CHAR((expected), (actual), __LINE__, (message))
|
||||||
|
|
||||||
|
/* Integer Not Equal To (of all sizes) */
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_INT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_INT((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_INT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_INT8((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_INT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_INT16((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_INT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_INT32((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_INT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_INT64((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_UINT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_UINT((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_UINT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_UINT8((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_UINT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_UINT16((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_UINT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_UINT32((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_UINT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_UINT64((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_size_t_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_UINT((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_HEX8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_HEX8((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_HEX16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_HEX16((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_HEX32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_HEX32((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_HEX64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_HEX64((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_CHAR_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_CHAR((threshold), (actual), __LINE__, (message))
|
||||||
|
|
||||||
|
|
||||||
|
/* Integer Greater Than/ Less Than (of all sizes) */
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_INT((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_INT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_INT((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_INT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_INT8((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_INT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_INT16((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_INT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_INT32((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_INT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_INT64((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_UINT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_UINT((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_UINT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_UINT8((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_UINT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_UINT16((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_UINT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_UINT32((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_UINT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_UINT64((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_size_t_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_UINT((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_HEX8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_HEX8((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_HEX16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_HEX16((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_HEX32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_HEX32((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_HEX64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_HEX64((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_THAN_CHAR_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_CHAR((threshold), (actual), __LINE__, (message))
|
||||||
|
|
||||||
|
#define TEST_ASSERT_LESS_THAN_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_INT((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_THAN_INT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_INT((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_THAN_INT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_INT8((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_THAN_INT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_INT16((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_THAN_INT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_INT32((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_THAN_INT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_INT64((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_THAN_UINT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_UINT((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_THAN_UINT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_UINT8((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_THAN_UINT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_UINT16((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_THAN_UINT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_UINT32((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_THAN_UINT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_UINT64((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_THAN_size_t_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_UINT((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_THAN_HEX8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_HEX8((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_THAN_HEX16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_HEX16((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_THAN_HEX32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_HEX32((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_THAN_HEX64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_HEX64((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_THAN_CHAR_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_CHAR((threshold), (actual), __LINE__, (message))
|
||||||
|
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_INT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_INT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT8((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_INT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT16((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_INT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT32((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_INT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT64((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_UINT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_UINT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT8((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_UINT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT16((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_UINT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT32((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_UINT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT64((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_size_t_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_HEX8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX8((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_HEX16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX16((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_HEX32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX32((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_HEX64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX64((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_GREATER_OR_EQUAL_CHAR_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_CHAR((threshold), (actual), __LINE__, (message))
|
||||||
|
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_INT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_INT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT8((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_INT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT16((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_INT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT32((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_INT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT64((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_UINT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_UINT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT8((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_UINT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT16((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_UINT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT32((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_UINT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT64((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_size_t_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_HEX8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX8((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_HEX16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX16((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_HEX32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX32((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_HEX64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX64((threshold), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_LESS_OR_EQUAL_CHAR_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_CHAR((threshold), (actual), __LINE__, (message))
|
||||||
|
|
||||||
|
/* Integer Ranges (of all sizes) */
|
||||||
|
#define TEST_ASSERT_INT_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT_WITHIN((delta), (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_INT8_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT8_WITHIN((delta), (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_INT16_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT16_WITHIN((delta), (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_INT32_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT32_WITHIN((delta), (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_INT64_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT64_WITHIN((delta), (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_UINT_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT_WITHIN((delta), (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_UINT8_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT8_WITHIN((delta), (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_UINT16_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT16_WITHIN((delta), (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_UINT32_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT32_WITHIN((delta), (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_UINT64_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT64_WITHIN((delta), (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_size_t_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT_WITHIN((delta), (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_HEX_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_HEX8_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX8_WITHIN((delta), (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_HEX16_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX16_WITHIN((delta), (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_HEX32_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_HEX64_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX64_WITHIN((delta), (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_CHAR_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_CHAR_WITHIN((delta), (expected), (actual), __LINE__, (message))
|
||||||
|
|
||||||
|
/* Integer Array Ranges (of all sizes) */
|
||||||
|
#define TEST_ASSERT_INT_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_INT_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_INT8_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_INT8_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_INT16_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_INT16_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_INT32_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_INT32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_INT64_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_INT64_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_UINT_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_UINT_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_UINT8_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_UINT8_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_UINT16_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_UINT16_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_UINT32_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_UINT32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_UINT64_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_UINT64_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_size_t_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_UINT_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_HEX_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_HEX32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_HEX8_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_HEX8_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_HEX16_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_HEX16_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_HEX32_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_HEX32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_HEX64_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_HEX64_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_CHAR_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_CHAR_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
|
||||||
|
|
||||||
|
|
||||||
|
/* Structs and Strings */
|
||||||
|
#define TEST_ASSERT_EQUAL_PTR_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_PTR((expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_STRING_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_STRING((expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_STRING_LEN_MESSAGE(expected, actual, len, message) UNITY_TEST_ASSERT_EQUAL_STRING_LEN((expected), (actual), (len), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_MEMORY_MESSAGE(expected, actual, len, message) UNITY_TEST_ASSERT_EQUAL_MEMORY((expected), (actual), (len), __LINE__, (message))
|
||||||
|
|
||||||
|
/* Arrays */
|
||||||
|
#define TEST_ASSERT_EQUAL_INT_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_INT8_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT8_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_INT16_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT16_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_INT32_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT32_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_INT64_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_UINT_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_UINT8_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT8_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_UINT16_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_UINT32_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT32_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_UINT64_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_size_t_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_HEX_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_HEX8_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX8_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_HEX16_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX16_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_HEX32_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_HEX64_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_PTR_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_PTR_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_STRING_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_MEMORY_ARRAY_MESSAGE(expected, actual, len, num_elements, message) UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY((expected), (actual), (len), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_CHAR_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_CHAR_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
|
||||||
|
/* Arrays Compared To Single Value*/
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_INT_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_INT((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_INT8_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_INT8((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_INT16_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_INT16((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_INT32_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_INT32((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_INT64_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_INT64((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_UINT_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_UINT((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_UINT8_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_UINT8((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_UINT16_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_UINT16((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_UINT32_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_UINT32((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_UINT64_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_UINT64((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_size_t_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_UINT((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_HEX_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_HEX32((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_HEX8_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_HEX8((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_HEX16_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_HEX16((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_HEX32_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_HEX32((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_HEX64_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_HEX64((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_PTR_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_PTR((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_STRING_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_STRING((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_MEMORY_MESSAGE(expected, actual, len, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_MEMORY((expected), (actual), (len), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_CHAR_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_CHAR((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
|
||||||
|
/* Floating Point (If Enabled) */
|
||||||
|
#define TEST_ASSERT_FLOAT_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_FLOAT_WITHIN((delta), (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_FLOAT_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_FLOAT((expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_FLOAT_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_FLOAT_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_FLOAT((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_FLOAT_IS_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_INF((actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_FLOAT_IS_NEG_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF((actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_FLOAT_IS_NAN_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NAN((actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_FLOAT_IS_DETERMINATE_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE((actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_FLOAT_IS_NOT_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF((actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_FLOAT_IS_NOT_NEG_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF((actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_FLOAT_IS_NOT_NAN_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN((actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE((actual), __LINE__, (message))
|
||||||
|
|
||||||
|
/* Double (If Enabled) */
|
||||||
|
#define TEST_ASSERT_DOUBLE_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_DOUBLE_WITHIN((delta), (expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_DOUBLE_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_DOUBLE((expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EQUAL_DOUBLE_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_EACH_EQUAL_DOUBLE_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_DOUBLE((expected), (actual), (num_elements), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_DOUBLE_IS_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_INF((actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_DOUBLE_IS_NEG_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF((actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_DOUBLE_IS_NAN_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NAN((actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_DOUBLE_IS_DETERMINATE_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE((actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_DOUBLE_IS_NOT_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF((actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF((actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_DOUBLE_IS_NOT_NAN_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN((actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE((actual), __LINE__, (message))
|
||||||
|
|
||||||
|
/* Shorthand */
|
||||||
|
#ifdef UNITY_SHORTHAND_AS_OLD
|
||||||
|
#define TEST_ASSERT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, (message))
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT(((expected) != (actual)), __LINE__, (message))
|
||||||
|
#endif
|
||||||
|
#ifdef UNITY_SHORTHAND_AS_INT
|
||||||
|
#define TEST_ASSERT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, message)
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand)
|
||||||
|
#endif
|
||||||
|
#ifdef UNITY_SHORTHAND_AS_MEM
|
||||||
|
#define TEST_ASSERT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_MEMORY((&expected), (&actual), sizeof(expected), __LINE__, message)
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand)
|
||||||
|
#endif
|
||||||
|
#ifdef UNITY_SHORTHAND_AS_RAW
|
||||||
|
#define TEST_ASSERT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT(((expected) == (actual)), __LINE__, message)
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT(((expected) != (actual)), __LINE__, message)
|
||||||
|
#endif
|
||||||
|
#ifdef UNITY_SHORTHAND_AS_NONE
|
||||||
|
#define TEST_ASSERT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand)
|
||||||
|
#define TEST_ASSERT_NOT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* end of UNITY_FRAMEWORK_H */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,35 @@
|
|||||||
|
// Include the test framework.
|
||||||
|
#include "test-framework/unity.h"
|
||||||
|
|
||||||
|
// Include the header file with the declarations of the functions you create.
|
||||||
|
#include "hello_world.h"
|
||||||
|
|
||||||
|
// Runs before every test.
|
||||||
|
void setUp(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// Runs after every test.
|
||||||
|
void tearDown(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// Defines a single test.
|
||||||
|
static void test_say_hi(void)
|
||||||
|
{
|
||||||
|
// Check if the 'hello()' function returns "Hello, World!"
|
||||||
|
// This test is expected to fail after first downloading this exercise.
|
||||||
|
// To make this test pass, fix the 'hello()' function definition in the
|
||||||
|
// source file hello_world.c.
|
||||||
|
TEST_ASSERT_EQUAL_STRING("Hello, World!", hello());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Runs the test(s)
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
UNITY_BEGIN();
|
||||||
|
|
||||||
|
RUN_TEST(test_say_hi);
|
||||||
|
|
||||||
|
return UNITY_END();
|
||||||
|
}
|
||||||
Executable
BIN
Binary file not shown.
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"authors": [
|
||||||
|
"SuperPaintman"
|
||||||
|
],
|
||||||
|
"contributors": [
|
||||||
|
"rafaelalvessa",
|
||||||
|
"Stargator"
|
||||||
|
],
|
||||||
|
"files": {
|
||||||
|
"solution": [
|
||||||
|
"lib/hello_world.dart"
|
||||||
|
],
|
||||||
|
"test": [
|
||||||
|
"test/hello_world_test.dart"
|
||||||
|
],
|
||||||
|
"example": [
|
||||||
|
".meta/lib/example.dart"
|
||||||
|
],
|
||||||
|
"invalidator": [
|
||||||
|
"pubspec.yaml"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"blurb": "Exercism's classic introductory exercise. Just say \"Hello, World!\".",
|
||||||
|
"source": "This is an exercise to introduce users to using Exercism",
|
||||||
|
"source_url": "https://en.wikipedia.org/wiki/%22Hello,_world!%22_program"
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"track":"dart","exercise":"hello-world","id":"3416a5e62e344dd3ab25a1455c84721e","url":"https://exercism.org/tracks/dart/exercises/hello-world","handle":"sanctushck","is_requester":true,"auto_approve":false}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# Help
|
||||||
|
|
||||||
|
## Running the tests
|
||||||
|
|
||||||
|
To run the tests:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ dart test
|
||||||
|
```
|
||||||
|
|
||||||
|
## Submitting your solution
|
||||||
|
|
||||||
|
You can submit your solution using the `exercism submit lib/hello_world.dart` command.
|
||||||
|
This command will upload your solution to the Exercism website and print the solution page's URL.
|
||||||
|
|
||||||
|
It's possible to submit an incomplete solution which allows you to:
|
||||||
|
|
||||||
|
- See how others have completed the exercise
|
||||||
|
- Request help from a mentor
|
||||||
|
|
||||||
|
## Need to get help?
|
||||||
|
|
||||||
|
If you'd like help solving the exercise, check the following pages:
|
||||||
|
|
||||||
|
- The [Dart track's documentation](https://exercism.org/docs/tracks/dart)
|
||||||
|
- The [Dart track's programming category on the forum](https://forum.exercism.org/c/programming/dart)
|
||||||
|
- [Exercism's programming category on the forum](https://forum.exercism.org/c/programming/5)
|
||||||
|
- The [Frequently Asked Questions](https://exercism.org/docs/using/faqs)
|
||||||
|
|
||||||
|
Should those resources not suffice, you could submit your (incomplete) solution to request mentoring.
|
||||||
|
|
||||||
|
To get help if you're having trouble, you can use one of the following resources:
|
||||||
|
|
||||||
|
- [Dart API Documentation](https://api.dart.dev/)
|
||||||
|
- [Dart Gitter Chat](https://gitter.im/dart-lang/home)
|
||||||
|
- [Community Information](https://www.dart.dev/community)
|
||||||
|
- [/r/dartlang](https://www.reddit.com/r/dartlang) is the Dart subreddit.
|
||||||
|
- [StackOverflow](https://stackoverflow.com/questions/tagged/dart) can be used to search for your problem and see if it has been answered already. You can also ask and answer questions.
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
# Hello World
|
||||||
|
|
||||||
|
Welcome to Hello World on Exercism's Dart Track.
|
||||||
|
If you need help running the tests or submitting your code, check out `HELP.md`.
|
||||||
|
|
||||||
|
## Instructions
|
||||||
|
|
||||||
|
The classical introductory exercise.
|
||||||
|
Just say "Hello, World!".
|
||||||
|
|
||||||
|
["Hello, World!"][hello-world] is the traditional first program for beginning programming in a new language or environment.
|
||||||
|
|
||||||
|
The objectives are simple:
|
||||||
|
|
||||||
|
- Modify the provided code so that it produces the string "Hello, World!".
|
||||||
|
- Run the test suite and make sure that it succeeds.
|
||||||
|
- Submit your solution and check it at the website.
|
||||||
|
|
||||||
|
If everything goes well, you will be ready to fetch your first real exercise.
|
||||||
|
|
||||||
|
[hello-world]: https://en.wikipedia.org/wiki/%22Hello,_world!%22_program
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
### Created by
|
||||||
|
|
||||||
|
- @SuperPaintman
|
||||||
|
|
||||||
|
### Contributed to by
|
||||||
|
|
||||||
|
- @rafaelalvessa
|
||||||
|
- @Stargator
|
||||||
|
|
||||||
|
### Based on
|
||||||
|
|
||||||
|
This is an exercise to introduce users to using Exercism - https://en.wikipedia.org/wiki/%22Hello,_world!%22_program
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
analyzer:
|
||||||
|
exclude:
|
||||||
|
- lib/hello_world.dart
|
||||||
|
strong-mode:
|
||||||
|
implicit-casts: false
|
||||||
|
implicit-dynamic: false
|
||||||
|
errors:
|
||||||
|
unused_element: error
|
||||||
|
unused_import: error
|
||||||
|
unused_local_variable: error
|
||||||
|
dead_code: error
|
||||||
|
|
||||||
|
linter:
|
||||||
|
rules:
|
||||||
|
# Error Rules
|
||||||
|
- avoid_relative_lib_imports
|
||||||
|
- avoid_types_as_parameter_names
|
||||||
|
- literal_only_boolean_expressions
|
||||||
|
- no_adjacent_strings_in_list
|
||||||
|
- valid_regexps
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
class HelloWorld {
|
||||||
|
String hello() {
|
||||||
|
return "Hello, World!";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
name: 'hello_world'
|
||||||
|
environment:
|
||||||
|
sdk: '>=3.2.0 <4.0.0'
|
||||||
|
dev_dependencies:
|
||||||
|
test: '<2.0.0'
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
import 'package:hello_world/hello_world.dart';
|
||||||
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
test('Say Hi!', () {
|
||||||
|
expect(HelloWorld().hello(), equals('Hello, World!'));
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -0,0 +1,298 @@
|
|||||||
|
{
|
||||||
|
"configVersion": 2,
|
||||||
|
"packages": [
|
||||||
|
{
|
||||||
|
"name": "_fe_analyzer_shared",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/_fe_analyzer_shared-100.0.0",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.11"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "analyzer",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/analyzer-13.0.0",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "args",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/args-2.7.0",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "async",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/async-2.13.1",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "boolean_selector",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/boolean_selector-2.1.2",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "cli_config",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/cli_config-0.2.0",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "collection",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/collection-1.19.1",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "convert",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/convert-3.1.2",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "coverage",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/coverage-1.15.0",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "crypto",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/crypto-3.0.7",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "file",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/file-7.0.1",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "frontend_server_client",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/frontend_server_client-4.0.0",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "glob",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/glob-2.1.3",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "http_multi_server",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/http_multi_server-3.2.2",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "http_parser",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/http_parser-4.1.2",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "io",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/io-1.0.5",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "logging",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/logging-1.3.0",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "matcher",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/matcher-0.12.20",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.10"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "meta",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/meta-1.18.2",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mime",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/mime-2.0.0",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "node_preamble",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/node_preamble-2.0.2",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "2.12"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "package_config",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/package_config-2.2.0",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "path",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/path-1.9.1",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pool",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/pool-1.5.2",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pub_semver",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/pub_semver-2.2.0",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "shelf",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/shelf-1.4.2",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "shelf_packages_handler",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/shelf_packages_handler-3.0.2",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "2.17"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "shelf_static",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/shelf_static-1.1.3",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "shelf_web_socket",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/shelf_web_socket-3.0.0",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "source_map_stack_trace",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/source_map_stack_trace-2.1.2",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "source_maps",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/source_maps-0.10.13",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "source_span",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/source_span-1.10.2",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stack_trace",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/stack_trace-1.12.1",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stream_channel",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/stream_channel-2.1.4",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "string_scanner",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/string_scanner-1.4.1",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "term_glyph",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/term_glyph-1.2.2",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "test",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/test-1.31.1",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.10"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "test_api",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/test_api-0.7.12",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.10"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "test_core",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/test_core-0.6.18",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.10"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "typed_data",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/typed_data-1.4.0",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "vm_service",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/vm_service-15.1.0",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "watcher",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/watcher-1.2.1",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "web",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/web-1.1.1",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "web_socket",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/web_socket-1.0.1",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "web_socket_channel",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/web_socket_channel-3.0.3",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "webkit_inspection_protocol",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/webkit_inspection_protocol-1.2.1",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "yaml",
|
||||||
|
"rootUri": "file:///home/sanctus/.pub-cache/hosted/pub.dev/yaml-3.1.3",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "two_fer",
|
||||||
|
"rootUri": "../",
|
||||||
|
"packageUri": "lib/",
|
||||||
|
"languageVersion": "3.2"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"generator": "pub",
|
||||||
|
"generatorVersion": "3.11.0",
|
||||||
|
"flutterRoot": "file:///home/sanctus/flutter",
|
||||||
|
"flutterVersion": "3.41.2",
|
||||||
|
"pubCache": "file:///home/sanctus/.pub-cache"
|
||||||
|
}
|
||||||
@@ -0,0 +1,442 @@
|
|||||||
|
{
|
||||||
|
"roots": [
|
||||||
|
"two_fer"
|
||||||
|
],
|
||||||
|
"packages": [
|
||||||
|
{
|
||||||
|
"name": "two_fer",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"dependencies": [],
|
||||||
|
"devDependencies": [
|
||||||
|
"test"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "test",
|
||||||
|
"version": "1.31.1",
|
||||||
|
"dependencies": [
|
||||||
|
"analyzer",
|
||||||
|
"async",
|
||||||
|
"boolean_selector",
|
||||||
|
"collection",
|
||||||
|
"coverage",
|
||||||
|
"http_multi_server",
|
||||||
|
"io",
|
||||||
|
"matcher",
|
||||||
|
"node_preamble",
|
||||||
|
"package_config",
|
||||||
|
"path",
|
||||||
|
"pool",
|
||||||
|
"shelf",
|
||||||
|
"shelf_packages_handler",
|
||||||
|
"shelf_static",
|
||||||
|
"shelf_web_socket",
|
||||||
|
"source_span",
|
||||||
|
"stack_trace",
|
||||||
|
"stream_channel",
|
||||||
|
"test_api",
|
||||||
|
"test_core",
|
||||||
|
"typed_data",
|
||||||
|
"web_socket_channel",
|
||||||
|
"webkit_inspection_protocol",
|
||||||
|
"yaml"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "test_core",
|
||||||
|
"version": "0.6.18",
|
||||||
|
"dependencies": [
|
||||||
|
"analyzer",
|
||||||
|
"args",
|
||||||
|
"async",
|
||||||
|
"boolean_selector",
|
||||||
|
"collection",
|
||||||
|
"coverage",
|
||||||
|
"frontend_server_client",
|
||||||
|
"glob",
|
||||||
|
"io",
|
||||||
|
"meta",
|
||||||
|
"package_config",
|
||||||
|
"path",
|
||||||
|
"pool",
|
||||||
|
"source_map_stack_trace",
|
||||||
|
"source_maps",
|
||||||
|
"source_span",
|
||||||
|
"stack_trace",
|
||||||
|
"stream_channel",
|
||||||
|
"test_api",
|
||||||
|
"vm_service",
|
||||||
|
"yaml"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "test_api",
|
||||||
|
"version": "0.7.12",
|
||||||
|
"dependencies": [
|
||||||
|
"async",
|
||||||
|
"boolean_selector",
|
||||||
|
"collection",
|
||||||
|
"meta",
|
||||||
|
"source_span",
|
||||||
|
"stack_trace",
|
||||||
|
"stream_channel",
|
||||||
|
"string_scanner",
|
||||||
|
"term_glyph"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "coverage",
|
||||||
|
"version": "1.15.0",
|
||||||
|
"dependencies": [
|
||||||
|
"args",
|
||||||
|
"cli_config",
|
||||||
|
"glob",
|
||||||
|
"logging",
|
||||||
|
"meta",
|
||||||
|
"package_config",
|
||||||
|
"path",
|
||||||
|
"source_maps",
|
||||||
|
"stack_trace",
|
||||||
|
"vm_service",
|
||||||
|
"yaml"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "yaml",
|
||||||
|
"version": "3.1.3",
|
||||||
|
"dependencies": [
|
||||||
|
"collection",
|
||||||
|
"source_span",
|
||||||
|
"string_scanner"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "cli_config",
|
||||||
|
"version": "0.2.0",
|
||||||
|
"dependencies": [
|
||||||
|
"args",
|
||||||
|
"yaml"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "glob",
|
||||||
|
"version": "2.1.3",
|
||||||
|
"dependencies": [
|
||||||
|
"async",
|
||||||
|
"collection",
|
||||||
|
"file",
|
||||||
|
"path",
|
||||||
|
"string_scanner"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "frontend_server_client",
|
||||||
|
"version": "4.0.0",
|
||||||
|
"dependencies": [
|
||||||
|
"async",
|
||||||
|
"path"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "shelf_packages_handler",
|
||||||
|
"version": "3.0.2",
|
||||||
|
"dependencies": [
|
||||||
|
"path",
|
||||||
|
"shelf",
|
||||||
|
"shelf_static"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pool",
|
||||||
|
"version": "1.5.2",
|
||||||
|
"dependencies": [
|
||||||
|
"async",
|
||||||
|
"stack_trace"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "node_preamble",
|
||||||
|
"version": "2.0.2",
|
||||||
|
"dependencies": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "boolean_selector",
|
||||||
|
"version": "2.1.2",
|
||||||
|
"dependencies": [
|
||||||
|
"source_span",
|
||||||
|
"string_scanner"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "source_map_stack_trace",
|
||||||
|
"version": "2.1.2",
|
||||||
|
"dependencies": [
|
||||||
|
"path",
|
||||||
|
"source_maps",
|
||||||
|
"stack_trace"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "term_glyph",
|
||||||
|
"version": "1.2.2",
|
||||||
|
"dependencies": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "typed_data",
|
||||||
|
"version": "1.4.0",
|
||||||
|
"dependencies": [
|
||||||
|
"collection"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "source_maps",
|
||||||
|
"version": "0.10.13",
|
||||||
|
"dependencies": [
|
||||||
|
"source_span"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "string_scanner",
|
||||||
|
"version": "1.4.1",
|
||||||
|
"dependencies": [
|
||||||
|
"source_span"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "file",
|
||||||
|
"version": "7.0.1",
|
||||||
|
"dependencies": [
|
||||||
|
"meta",
|
||||||
|
"path"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "path",
|
||||||
|
"version": "1.9.1",
|
||||||
|
"dependencies": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "webkit_inspection_protocol",
|
||||||
|
"version": "1.2.1",
|
||||||
|
"dependencies": [
|
||||||
|
"logging"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stream_channel",
|
||||||
|
"version": "2.1.4",
|
||||||
|
"dependencies": [
|
||||||
|
"async"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stack_trace",
|
||||||
|
"version": "1.12.1",
|
||||||
|
"dependencies": [
|
||||||
|
"path"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "shelf_static",
|
||||||
|
"version": "1.1.3",
|
||||||
|
"dependencies": [
|
||||||
|
"convert",
|
||||||
|
"http_parser",
|
||||||
|
"mime",
|
||||||
|
"path",
|
||||||
|
"shelf"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "package_config",
|
||||||
|
"version": "2.2.0",
|
||||||
|
"dependencies": [
|
||||||
|
"path"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "io",
|
||||||
|
"version": "1.0.5",
|
||||||
|
"dependencies": [
|
||||||
|
"meta",
|
||||||
|
"path",
|
||||||
|
"string_scanner"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "http_multi_server",
|
||||||
|
"version": "3.2.2",
|
||||||
|
"dependencies": [
|
||||||
|
"async"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "meta",
|
||||||
|
"version": "1.18.2",
|
||||||
|
"dependencies": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "matcher",
|
||||||
|
"version": "0.12.20",
|
||||||
|
"dependencies": [
|
||||||
|
"async",
|
||||||
|
"meta",
|
||||||
|
"stack_trace",
|
||||||
|
"term_glyph",
|
||||||
|
"test_api"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "async",
|
||||||
|
"version": "2.13.1",
|
||||||
|
"dependencies": [
|
||||||
|
"collection",
|
||||||
|
"meta"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "args",
|
||||||
|
"version": "2.7.0",
|
||||||
|
"dependencies": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "http_parser",
|
||||||
|
"version": "4.1.2",
|
||||||
|
"dependencies": [
|
||||||
|
"collection",
|
||||||
|
"source_span",
|
||||||
|
"string_scanner",
|
||||||
|
"typed_data"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "collection",
|
||||||
|
"version": "1.19.1",
|
||||||
|
"dependencies": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "convert",
|
||||||
|
"version": "3.1.2",
|
||||||
|
"dependencies": [
|
||||||
|
"typed_data"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "logging",
|
||||||
|
"version": "1.3.0",
|
||||||
|
"dependencies": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "source_span",
|
||||||
|
"version": "1.10.2",
|
||||||
|
"dependencies": [
|
||||||
|
"collection",
|
||||||
|
"path",
|
||||||
|
"term_glyph"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "shelf_web_socket",
|
||||||
|
"version": "3.0.0",
|
||||||
|
"dependencies": [
|
||||||
|
"shelf",
|
||||||
|
"stream_channel",
|
||||||
|
"web_socket_channel"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mime",
|
||||||
|
"version": "2.0.0",
|
||||||
|
"dependencies": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "shelf",
|
||||||
|
"version": "1.4.2",
|
||||||
|
"dependencies": [
|
||||||
|
"async",
|
||||||
|
"collection",
|
||||||
|
"http_parser",
|
||||||
|
"path",
|
||||||
|
"stack_trace",
|
||||||
|
"stream_channel"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "web_socket_channel",
|
||||||
|
"version": "3.0.3",
|
||||||
|
"dependencies": [
|
||||||
|
"async",
|
||||||
|
"crypto",
|
||||||
|
"stream_channel",
|
||||||
|
"web",
|
||||||
|
"web_socket"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "web_socket",
|
||||||
|
"version": "1.0.1",
|
||||||
|
"dependencies": [
|
||||||
|
"web"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "web",
|
||||||
|
"version": "1.1.1",
|
||||||
|
"dependencies": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "crypto",
|
||||||
|
"version": "3.0.7",
|
||||||
|
"dependencies": [
|
||||||
|
"typed_data"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "vm_service",
|
||||||
|
"version": "15.1.0",
|
||||||
|
"dependencies": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "analyzer",
|
||||||
|
"version": "13.0.0",
|
||||||
|
"dependencies": [
|
||||||
|
"_fe_analyzer_shared",
|
||||||
|
"collection",
|
||||||
|
"convert",
|
||||||
|
"crypto",
|
||||||
|
"glob",
|
||||||
|
"meta",
|
||||||
|
"package_config",
|
||||||
|
"path",
|
||||||
|
"pub_semver",
|
||||||
|
"source_span",
|
||||||
|
"watcher",
|
||||||
|
"yaml"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "_fe_analyzer_shared",
|
||||||
|
"version": "100.0.0",
|
||||||
|
"dependencies": [
|
||||||
|
"meta",
|
||||||
|
"source_span"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pub_semver",
|
||||||
|
"version": "2.2.0",
|
||||||
|
"dependencies": [
|
||||||
|
"collection"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "watcher",
|
||||||
|
"version": "1.2.1",
|
||||||
|
"dependencies": [
|
||||||
|
"async",
|
||||||
|
"path"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configVersion": 1
|
||||||
|
}
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"authors": [
|
||||||
|
"amscotti"
|
||||||
|
],
|
||||||
|
"contributors": [
|
||||||
|
"Stargator",
|
||||||
|
"kytrinyx"
|
||||||
|
],
|
||||||
|
"files": {
|
||||||
|
"solution": [
|
||||||
|
"lib/two_fer.dart"
|
||||||
|
],
|
||||||
|
"test": [
|
||||||
|
"test/two_fer_test.dart"
|
||||||
|
],
|
||||||
|
"example": [
|
||||||
|
".meta/lib/example.dart"
|
||||||
|
],
|
||||||
|
"invalidator": [
|
||||||
|
"pubspec.yaml"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"blurb": "Create a sentence of the form \"One for X, one for me.\".",
|
||||||
|
"source_url": "https://github.com/exercism/problem-specifications/issues/757"
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"track":"dart","exercise":"two-fer","id":"1a2c804be07e4a0f96162c56700f7827","url":"https://exercism.org/tracks/dart/exercises/two-fer","handle":"sanctushck","is_requester":true,"auto_approve":false}
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
# Help
|
||||||
|
|
||||||
|
## Running the tests
|
||||||
|
|
||||||
|
Install dependencies.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
dart pub get
|
||||||
|
```
|
||||||
|
|
||||||
|
Run the tests.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
dart test
|
||||||
|
```
|
||||||
|
|
||||||
|
For more detailed per-test output, use the expanded reporter.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
dart test -r expanded
|
||||||
|
```
|
||||||
|
|
||||||
|
Most exercises have multiple tests, with all but the first skipped by default.
|
||||||
|
To work through tests one at a time, change `skip: true` to `skip: false` on each test as you go.
|
||||||
|
|
||||||
|
Alternatively, run all tests at once without editing the file.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
dart test --run-skipped
|
||||||
|
```
|
||||||
|
|
||||||
|
All tests are run by the online test runner on submission, including skipped ones.
|
||||||
|
|
||||||
|
## Submitting your solution
|
||||||
|
|
||||||
|
You can submit your solution using the `exercism submit lib/two_fer.dart` command.
|
||||||
|
This command will upload your solution to the Exercism website and print the solution page's URL.
|
||||||
|
|
||||||
|
It's possible to submit an incomplete solution which allows you to:
|
||||||
|
|
||||||
|
- See how others have completed the exercise
|
||||||
|
- Request help from a mentor
|
||||||
|
|
||||||
|
## Need to get help?
|
||||||
|
|
||||||
|
If you'd like help solving the exercise, check the following pages:
|
||||||
|
|
||||||
|
- The [Dart track's documentation](https://exercism.org/docs/tracks/dart)
|
||||||
|
- The [Dart track's programming category on the forum](https://forum.exercism.org/c/programming/dart)
|
||||||
|
- [Exercism's programming category on the forum](https://forum.exercism.org/c/programming/5)
|
||||||
|
- The [Frequently Asked Questions](https://exercism.org/docs/using/faqs)
|
||||||
|
|
||||||
|
Should those resources not suffice, you could submit your (incomplete) solution to request mentoring.
|
||||||
|
|
||||||
|
To get help if you're having trouble, you can use one of the following resources:
|
||||||
|
|
||||||
|
- [Dart API Documentation](https://api.dart.dev/)
|
||||||
|
- [Dart Gitter Chat](https://gitter.im/dart-lang/home)
|
||||||
|
- [Community Information](https://www.dart.dev/community)
|
||||||
|
- [/r/dartlang](https://www.reddit.com/r/dartlang) is the Dart subreddit.
|
||||||
|
- [StackOverflow](https://stackoverflow.com/questions/tagged/dart) can be used to search for your problem and see if it has been answered already. You can also ask and answer questions.
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
# Two Fer
|
||||||
|
|
||||||
|
Welcome to Two Fer on Exercism's Dart Track.
|
||||||
|
If you need help running the tests or submitting your code, check out `HELP.md`.
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
In some English accents, when you say "two for" quickly, it sounds like "two fer".
|
||||||
|
Two-for-one is a way of saying that if you buy one, you also get one for free.
|
||||||
|
So the phrase "two-fer" often implies a two-for-one offer.
|
||||||
|
|
||||||
|
Imagine a bakery that has a holiday offer where you can buy two cookies for the price of one ("two-fer one!").
|
||||||
|
You take the offer and (very generously) decide to give the extra cookie to someone else in the queue.
|
||||||
|
|
||||||
|
## Instructions
|
||||||
|
|
||||||
|
Your task is to determine what you will say as you give away the extra cookie.
|
||||||
|
|
||||||
|
If you know the person's name (e.g. if they're named Do-yun), then you will say:
|
||||||
|
|
||||||
|
```text
|
||||||
|
One for Do-yun, one for me.
|
||||||
|
```
|
||||||
|
|
||||||
|
If you don't know the person's name, you will say _you_ instead.
|
||||||
|
|
||||||
|
```text
|
||||||
|
One for you, one for me.
|
||||||
|
```
|
||||||
|
|
||||||
|
Here are some examples:
|
||||||
|
|
||||||
|
| Name | Dialogue |
|
||||||
|
| :----- | :-------------------------- |
|
||||||
|
| Alice | One for Alice, one for me. |
|
||||||
|
| Bohdan | One for Bohdan, one for me. |
|
||||||
|
| | One for you, one for me. |
|
||||||
|
| Zaphod | One for Zaphod, one for me. |
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
### Created by
|
||||||
|
|
||||||
|
- @amscotti
|
||||||
|
|
||||||
|
### Contributed to by
|
||||||
|
|
||||||
|
- @Stargator
|
||||||
|
- @kytrinyx
|
||||||
|
|
||||||
|
### Based on
|
||||||
|
|
||||||
|
https://github.com/exercism/problem-specifications/issues/757
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
analyzer:
|
||||||
|
strong-mode:
|
||||||
|
implicit-casts: false
|
||||||
|
implicit-dynamic: false
|
||||||
|
errors:
|
||||||
|
unused_element: error
|
||||||
|
unused_import: error
|
||||||
|
unused_local_variable: error
|
||||||
|
dead_code: error
|
||||||
|
|
||||||
|
linter:
|
||||||
|
rules:
|
||||||
|
# Error Rules
|
||||||
|
- avoid_relative_lib_imports
|
||||||
|
- avoid_types_as_parameter_names
|
||||||
|
- literal_only_boolean_expressions
|
||||||
|
- no_adjacent_strings_in_list
|
||||||
|
- valid_regexps
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
String twoFer([String? name]) {
|
||||||
|
if (name == null) {
|
||||||
|
name = 'you';
|
||||||
|
}
|
||||||
|
return 'One for $name, one for me.';
|
||||||
|
}
|
||||||
@@ -0,0 +1,381 @@
|
|||||||
|
# Generated by pub
|
||||||
|
# See https://dart.dev/tools/pub/glossary#lockfile
|
||||||
|
packages:
|
||||||
|
_fe_analyzer_shared:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: _fe_analyzer_shared
|
||||||
|
sha256: cd6add6f846f35fb79f3c315296703c1a24f3cfd7f4739d91a74961c1c7e9f1b
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "100.0.0"
|
||||||
|
analyzer:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: analyzer
|
||||||
|
sha256: "6ba98576948803398b69e3a444df24eacdbe12ed699c7014e120ea38552debbf"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "13.0.0"
|
||||||
|
args:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: args
|
||||||
|
sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.7.0"
|
||||||
|
async:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: async
|
||||||
|
sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.13.1"
|
||||||
|
boolean_selector:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: boolean_selector
|
||||||
|
sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.2"
|
||||||
|
cli_config:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: cli_config
|
||||||
|
sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.2.0"
|
||||||
|
collection:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: collection
|
||||||
|
sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.19.1"
|
||||||
|
convert:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: convert
|
||||||
|
sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.1.2"
|
||||||
|
coverage:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: coverage
|
||||||
|
sha256: "5da775aa218eaf2151c721b16c01c7676fbfdd99cebba2bf64e8b807a28ff94d"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.15.0"
|
||||||
|
crypto:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: crypto
|
||||||
|
sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.7"
|
||||||
|
file:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: file
|
||||||
|
sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "7.0.1"
|
||||||
|
frontend_server_client:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: frontend_server_client
|
||||||
|
sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "4.0.0"
|
||||||
|
glob:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: glob
|
||||||
|
sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.3"
|
||||||
|
http_multi_server:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: http_multi_server
|
||||||
|
sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.2.2"
|
||||||
|
http_parser:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: http_parser
|
||||||
|
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "4.1.2"
|
||||||
|
io:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: io
|
||||||
|
sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.5"
|
||||||
|
logging:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: logging
|
||||||
|
sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.3.0"
|
||||||
|
matcher:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: matcher
|
||||||
|
sha256: "31bd099b47c10cd1aeb55146a2d46ce0277630ecef3f7dae54ad7873f36696cd"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.12.20"
|
||||||
|
meta:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: meta
|
||||||
|
sha256: df0c643f44ad098eb37988027a8e2b2b5a031fd3977f06bbfd3a76637e8df739
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.18.2"
|
||||||
|
mime:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: mime
|
||||||
|
sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.0"
|
||||||
|
node_preamble:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: node_preamble
|
||||||
|
sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.2"
|
||||||
|
package_config:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: package_config
|
||||||
|
sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.2.0"
|
||||||
|
path:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path
|
||||||
|
sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.9.1"
|
||||||
|
pool:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: pool
|
||||||
|
sha256: "978783255c543aa3586a1b3c21f6e9d720eb315376a915872c61ef8b5c20177d"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.5.2"
|
||||||
|
pub_semver:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: pub_semver
|
||||||
|
sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.2.0"
|
||||||
|
shelf:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shelf
|
||||||
|
sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.4.2"
|
||||||
|
shelf_packages_handler:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shelf_packages_handler
|
||||||
|
sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.2"
|
||||||
|
shelf_static:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shelf_static
|
||||||
|
sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.3"
|
||||||
|
shelf_web_socket:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shelf_web_socket
|
||||||
|
sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.0"
|
||||||
|
source_map_stack_trace:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: source_map_stack_trace
|
||||||
|
sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.2"
|
||||||
|
source_maps:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: source_maps
|
||||||
|
sha256: "190222579a448b03896e0ca6eca5998fa810fda630c1d65e2f78b3f638f54812"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.10.13"
|
||||||
|
source_span:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: source_span
|
||||||
|
sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.10.2"
|
||||||
|
stack_trace:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: stack_trace
|
||||||
|
sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.12.1"
|
||||||
|
stream_channel:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: stream_channel
|
||||||
|
sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.4"
|
||||||
|
string_scanner:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: string_scanner
|
||||||
|
sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.4.1"
|
||||||
|
term_glyph:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: term_glyph
|
||||||
|
sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.2.2"
|
||||||
|
test:
|
||||||
|
dependency: "direct dev"
|
||||||
|
description:
|
||||||
|
name: test
|
||||||
|
sha256: ca578dc12bb8b2f40b67b7d3bd2fac4f31c01a6ff7130a14e2597b919934507f
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.31.1"
|
||||||
|
test_api:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: test_api
|
||||||
|
sha256: "2a122cbe059f8b610d3a5415f42e255b6c17b1f21eee1d960f31080237fb4f11"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.7.12"
|
||||||
|
test_core:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: test_core
|
||||||
|
sha256: d2e98ec12998368dc59ddd47ab709f2cd55acd6b66dc7db764455a44082f4bc5
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.6.18"
|
||||||
|
typed_data:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: typed_data
|
||||||
|
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.4.0"
|
||||||
|
vm_service:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: vm_service
|
||||||
|
sha256: "046d3928e16fa4dc46e8350415661755ab759d9fc97fc21b5ab295f71e4f0499"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "15.1.0"
|
||||||
|
watcher:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: watcher
|
||||||
|
sha256: "1398c9f081a753f9226febe8900fce8f7d0a67163334e1c94a2438339d79d635"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.2.1"
|
||||||
|
web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: web
|
||||||
|
sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.1"
|
||||||
|
web_socket:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: web_socket
|
||||||
|
sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.1"
|
||||||
|
web_socket_channel:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: web_socket_channel
|
||||||
|
sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.3"
|
||||||
|
webkit_inspection_protocol:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: webkit_inspection_protocol
|
||||||
|
sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.2.1"
|
||||||
|
yaml:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: yaml
|
||||||
|
sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.1.3"
|
||||||
|
sdks:
|
||||||
|
dart: ">=3.11.0 <4.0.0"
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
name: 'two_fer'
|
||||||
|
environment:
|
||||||
|
sdk: '>=3.2.0 <4.0.0'
|
||||||
|
dev_dependencies:
|
||||||
|
test: '<2.0.0'
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
import 'package:test/test.dart';
|
||||||
|
import 'package:two_fer/two_fer.dart';
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
group('TwoFer', () {
|
||||||
|
test('no name given', () {
|
||||||
|
final result = twoFer();
|
||||||
|
expect(result, equals('One for you, one for me.'));
|
||||||
|
}, skip: false);
|
||||||
|
|
||||||
|
test('a name given', () {
|
||||||
|
final result = twoFer('Alice');
|
||||||
|
expect(result, equals('One for Alice, one for me.'));
|
||||||
|
}, skip: true);
|
||||||
|
|
||||||
|
test('another name given', () {
|
||||||
|
final result = twoFer('Bob');
|
||||||
|
expect(result, equals('One for Bob, one for me.'));
|
||||||
|
}, skip: true);
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"authors": [
|
||||||
|
"oanaOM"
|
||||||
|
],
|
||||||
|
"files": {
|
||||||
|
"solution": [
|
||||||
|
"annalyns_infiltration.go"
|
||||||
|
],
|
||||||
|
"test": [
|
||||||
|
"annalyns_infiltration_test.go"
|
||||||
|
],
|
||||||
|
"exemplar": [
|
||||||
|
".meta/exemplar.go"
|
||||||
|
],
|
||||||
|
"invalidator": [
|
||||||
|
"go.mod"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"forked_from": [
|
||||||
|
"csharp/annalyns-infiltration"
|
||||||
|
],
|
||||||
|
"blurb": "Learn about booleans by helping Annalyn free her best friend.",
|
||||||
|
"custom": {
|
||||||
|
"taskIdsEnabled": true
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"track":"go","exercise":"annalyns-infiltration","id":"7a1da8b9a1844d21a3cc71aca4ee5f0b","url":"https://exercism.org/tracks/go/exercises/annalyns-infiltration","handle":"sanctushck","is_requester":true,"auto_approve":false}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# Help
|
||||||
|
|
||||||
|
## Running the tests
|
||||||
|
|
||||||
|
To run the tests run the command `go test` from within the exercise directory.
|
||||||
|
|
||||||
|
If the test suite contains benchmarks, you can run these with the `--bench` and `--benchmem`
|
||||||
|
flags:
|
||||||
|
|
||||||
|
go test -v --bench . --benchmem
|
||||||
|
|
||||||
|
Keep in mind that each reviewer will run benchmarks on a different machine, with
|
||||||
|
different specs, so the results from these benchmark tests may vary.
|
||||||
|
|
||||||
|
## Submitting your solution
|
||||||
|
|
||||||
|
You can submit your solution using the `exercism submit annalyns_infiltration.go` command.
|
||||||
|
This command will upload your solution to the Exercism website and print the solution page's URL.
|
||||||
|
|
||||||
|
It's possible to submit an incomplete solution which allows you to:
|
||||||
|
|
||||||
|
- See how others have completed the exercise
|
||||||
|
- Request help from a mentor
|
||||||
|
|
||||||
|
## Need to get help?
|
||||||
|
|
||||||
|
If you'd like help solving the exercise, check the following pages:
|
||||||
|
|
||||||
|
- The [Go track's documentation](https://exercism.org/docs/tracks/go)
|
||||||
|
- The [Go track's programming category on the forum](https://forum.exercism.org/c/programming/go)
|
||||||
|
- [Exercism's programming category on the forum](https://forum.exercism.org/c/programming/5)
|
||||||
|
- The [Frequently Asked Questions](https://exercism.org/docs/using/faqs)
|
||||||
|
|
||||||
|
Should those resources not suffice, you could submit your (incomplete) solution to request mentoring.
|
||||||
|
|
||||||
|
To get help if you're having trouble, you can use one of the following resources:
|
||||||
|
|
||||||
|
- [How to Write Go Code](https://golang.org/doc/code.html)
|
||||||
|
- [Effective Go](https://golang.org/doc/effective_go.html)
|
||||||
|
- [Go Resources](http://golang.org/help)
|
||||||
|
- [StackOverflow](http://stackoverflow.com/questions/tagged/go)
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
# Hints
|
||||||
|
|
||||||
|
## General
|
||||||
|
|
||||||
|
- There are three [boolean operators][logical operators] to work with boolean values.
|
||||||
|
- Multiple operators can be combined in a single expression.
|
||||||
|
|
||||||
|
## 1. Check if a fast attack can be made
|
||||||
|
|
||||||
|
- The logical NOT operator (`!`) can be placed before an expression to negate its value.
|
||||||
|
|
||||||
|
## 2. Check if the group can be spied upon
|
||||||
|
|
||||||
|
- Logical operators are typically used to evaluate whether two or more expressions are true or not true.
|
||||||
|
|
||||||
|
## 3. Check if the prisoner can be signaled
|
||||||
|
|
||||||
|
- Logical operators execute in the order of their precedence (from highest to lowest): `!`, `&&`, `||`.
|
||||||
|
- For more details check out the Operator Precedence section on the [official golang documentation][operators] and the [truth table][truth table].
|
||||||
|
|
||||||
|
[logical operators]: https://golang.org/ref/spec#Logical_operators
|
||||||
|
[operators]: https://golang.org/ref/spec#Operators
|
||||||
|
[truth table]: https://www.digitalocean.com/community/tutorials/understanding-boolean-logic-in-go
|
||||||
@@ -0,0 +1,111 @@
|
|||||||
|
# Annalyn's Infiltration
|
||||||
|
|
||||||
|
Welcome to Annalyn's Infiltration on Exercism's Go Track.
|
||||||
|
If you need help running the tests or submitting your code, check out `HELP.md`.
|
||||||
|
If you get stuck on the exercise, check out `HINTS.md`, but try and solve it without using those first :)
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
Booleans in Go are represented by the predeclared boolean type `bool`, which values can be either `true` or `false`.
|
||||||
|
It's a defined type.
|
||||||
|
|
||||||
|
```go
|
||||||
|
var closed bool // boolean variable 'closed' implicitly initialized with 'false'
|
||||||
|
speeding := true // boolean variable 'speeding' initialized with 'true'
|
||||||
|
hasError := false // boolean variable 'hasError' initialized with 'false'
|
||||||
|
```
|
||||||
|
|
||||||
|
Go supports three logical operators that can evaluate expressions down to Boolean values, returning either `true` or `false`.
|
||||||
|
|
||||||
|
| Operator | What it means |
|
||||||
|
| ----------- | --------------------------------------------- |
|
||||||
|
| `&&` (and) | It is true if both statements are true. |
|
||||||
|
| `\|\|` (or) | It is true if at least one statement is true. |
|
||||||
|
| `!` (not) | It is true only if the statement is false. |
|
||||||
|
|
||||||
|
## Instructions
|
||||||
|
|
||||||
|
In this exercise, you'll be implementing the quest logic for a new RPG game a friend is developing.
|
||||||
|
The game's main character is Annalyn, a brave girl with a fierce and loyal pet dog.
|
||||||
|
Unfortunately, disaster strikes, as her best friend was kidnapped while searching for berries in the forest.
|
||||||
|
Annalyn will try to find and free her best friend, optionally taking her dog with her on this quest.
|
||||||
|
|
||||||
|
After some time spent following her best friend's trail, she finds the camp in which her best friend is imprisoned.
|
||||||
|
It turns out there are two kidnappers: a mighty knight and a cunning archer.
|
||||||
|
|
||||||
|
Having found the kidnappers, Annalyn considers which of the following actions she can engage in:
|
||||||
|
|
||||||
|
- _Fast attack_: a fast attack can be made if the knight is sleeping, as it takes time for him to get his armor on, so he will be vulnerable.
|
||||||
|
- _Spy_: the group can be spied upon if at least one of them is awake.
|
||||||
|
Otherwise, spying is a waste of time.
|
||||||
|
- _Signal prisoner_: the prisoner can be signaled using bird sounds if the prisoner is awake and the archer is sleeping, as archers are trained in bird signaling so they could intercept the message.
|
||||||
|
- _Free prisoner_: Annalyn can try sneaking into the camp to free the prisoner.
|
||||||
|
This is a risky thing to do and can only succeed in one of two ways:
|
||||||
|
- If Annalyn has her pet dog with her she can rescue the prisoner if the archer is asleep.
|
||||||
|
The knight is scared of the dog and the archer will not have time to get ready before Annalyn and the prisoner can escape.
|
||||||
|
- If Annalyn does not have her dog then she and the prisoner must be very sneaky!
|
||||||
|
Annalyn can free the prisoner if the prisoner is awake and the knight and archer are both sleeping, but if the prisoner is sleeping they can't be rescued: the prisoner would be startled by Annalyn's sudden appearance and wake up the knight and archer.
|
||||||
|
|
||||||
|
You have four tasks: to implement the logic for determining if the above actions are available based on the state of the three characters found in the forest and whether Annalyn's pet dog is present or not.
|
||||||
|
|
||||||
|
## 1. Check if a fast attack can be made
|
||||||
|
|
||||||
|
Define the `CanFastAttack()` function that takes a boolean value that indicates if the knight is awake.
|
||||||
|
This function returns `true` if a fast attack can be made based on the state of the knight.
|
||||||
|
Otherwise, returns `false`:
|
||||||
|
|
||||||
|
```go
|
||||||
|
var knightIsAwake = true
|
||||||
|
fmt.Println(CanFastAttack(knightIsAwake))
|
||||||
|
// Output: false
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2. Check if the group can be spied upon
|
||||||
|
|
||||||
|
Define the `CanSpy()` function that takes three boolean values, indicating if the knight, archer and the prisoner, respectively, are awake.
|
||||||
|
The function returns `true` if the group can be spied upon, based on the state of the three characters.
|
||||||
|
Otherwise, returns `false`:
|
||||||
|
|
||||||
|
```go
|
||||||
|
var knightIsAwake = false
|
||||||
|
var archerIsAwake = true
|
||||||
|
var prisonerIsAwake = false
|
||||||
|
fmt.Println(CanSpy(knightIsAwake, archerIsAwake, prisonerIsAwake))
|
||||||
|
// Output: true
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3. Check if the prisoner can be signaled
|
||||||
|
|
||||||
|
Define the `CanSignalPrisoner()` function that takes two boolean values, indicating if the archer and the prisoner, respectively, are awake.
|
||||||
|
The function returns `true` if the prisoner can be signaled, based on the state of the two characters.
|
||||||
|
Otherwise, returns `false`:
|
||||||
|
|
||||||
|
```go
|
||||||
|
var archerIsAwake = false
|
||||||
|
var prisonerIsAwake = true
|
||||||
|
fmt.Println(CanSignalPrisoner(archerIsAwake, prisonerIsAwake))
|
||||||
|
// Output: true
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4. Check if the prisoner can be freed
|
||||||
|
|
||||||
|
Define the `CanFreePrisoner()` function that takes four boolean values.
|
||||||
|
The first three parameters indicate if the knight, archer and the prisoner, respectively, are awake.
|
||||||
|
The last parameter indicates if Annalyn's pet dog is present.
|
||||||
|
The function returns `true` if the prisoner can be freed based on the state of the three characters and Annalyn's pet dog presence.
|
||||||
|
Otherwise, it returns `false`:
|
||||||
|
|
||||||
|
```go
|
||||||
|
var knightIsAwake = false
|
||||||
|
var archerIsAwake = true
|
||||||
|
var prisonerIsAwake = false
|
||||||
|
var petDogIsPresent = false
|
||||||
|
fmt.Println(CanFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent))
|
||||||
|
// Output: false
|
||||||
|
```
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
### Created by
|
||||||
|
|
||||||
|
- @oanaOM
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package annalyn
|
||||||
|
|
||||||
|
// CanFastAttack can be executed only when the knight is sleeping.
|
||||||
|
func CanFastAttack(knightIsAwake bool) bool {
|
||||||
|
return !knightIsAwake
|
||||||
|
}
|
||||||
|
|
||||||
|
// CanSpy can be executed if at least one of the characters is awake.
|
||||||
|
func CanSpy(knightIsAwake, archerIsAwake, prisonerIsAwake bool) bool {
|
||||||
|
return knightIsAwake || archerIsAwake || prisonerIsAwake
|
||||||
|
}
|
||||||
|
|
||||||
|
// CanSignalPrisoner can be executed if the prisoner is awake and the archer is sleeping.
|
||||||
|
func CanSignalPrisoner(archerIsAwake, prisonerIsAwake bool) bool {
|
||||||
|
return !archerIsAwake && prisonerIsAwake
|
||||||
|
}
|
||||||
|
|
||||||
|
// CanFreePrisoner can be executed if the prisoner is awake and the other 2 characters are asleep
|
||||||
|
// or if Annalyn's pet dog is with her and the archer is sleeping.
|
||||||
|
func CanFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent bool) bool {
|
||||||
|
return (prisonerIsAwake && (!knightIsAwake && !archerIsAwake)) || (!archerIsAwake && petDogIsPresent)
|
||||||
|
}
|
||||||
@@ -0,0 +1,286 @@
|
|||||||
|
package annalyn
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
type charactersState struct {
|
||||||
|
desc string
|
||||||
|
knightIsAwake bool
|
||||||
|
archerIsAwake bool
|
||||||
|
prisonerIsAwake bool
|
||||||
|
dogIsPresent bool
|
||||||
|
expected bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCanFastAttack(t *testing.T) {
|
||||||
|
tests := []charactersState{
|
||||||
|
{
|
||||||
|
desc: "Knight is awake",
|
||||||
|
knightIsAwake: true,
|
||||||
|
expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Knight is sleeping",
|
||||||
|
knightIsAwake: false,
|
||||||
|
expected: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tc := range tests {
|
||||||
|
t.Run(tc.desc, func(t *testing.T) {
|
||||||
|
if got := CanFastAttack(tc.knightIsAwake); got != tc.expected {
|
||||||
|
t.Errorf("CanFastAttack(%v) = %v; want %v", tc.knightIsAwake, got, tc.expected)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCanSpy(t *testing.T) {
|
||||||
|
tests := []charactersState{
|
||||||
|
{
|
||||||
|
desc: "All characters are sleeping",
|
||||||
|
knightIsAwake: false,
|
||||||
|
archerIsAwake: false,
|
||||||
|
prisonerIsAwake: false,
|
||||||
|
expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Knight is awake, archer and prisoner are sleeping",
|
||||||
|
knightIsAwake: true,
|
||||||
|
archerIsAwake: false,
|
||||||
|
prisonerIsAwake: false,
|
||||||
|
expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Knight and archer are awake, prisoner is sleeping",
|
||||||
|
knightIsAwake: true,
|
||||||
|
archerIsAwake: true,
|
||||||
|
prisonerIsAwake: false,
|
||||||
|
expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Knight and prisoner are awake, archer is sleeping",
|
||||||
|
knightIsAwake: true,
|
||||||
|
archerIsAwake: false,
|
||||||
|
prisonerIsAwake: true,
|
||||||
|
expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Archer is awake, knight and prisoner are sleeping",
|
||||||
|
knightIsAwake: false,
|
||||||
|
archerIsAwake: true,
|
||||||
|
prisonerIsAwake: false,
|
||||||
|
expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Archer and prisoner are awake, knight is sleeping",
|
||||||
|
knightIsAwake: false,
|
||||||
|
archerIsAwake: true,
|
||||||
|
prisonerIsAwake: true,
|
||||||
|
expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Prisoner is awake, knight and archer are sleeping",
|
||||||
|
knightIsAwake: false,
|
||||||
|
archerIsAwake: false,
|
||||||
|
prisonerIsAwake: true,
|
||||||
|
expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "All characters are awake",
|
||||||
|
knightIsAwake: true,
|
||||||
|
archerIsAwake: true,
|
||||||
|
prisonerIsAwake: true,
|
||||||
|
expected: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tc := range tests {
|
||||||
|
t.Run(tc.desc, func(t *testing.T) {
|
||||||
|
if got := CanSpy(tc.knightIsAwake, tc.archerIsAwake, tc.prisonerIsAwake); got != tc.expected {
|
||||||
|
t.Errorf("CanSpy(%v, %v, %v) = %v; want %v", tc.knightIsAwake, tc.archerIsAwake, tc.prisonerIsAwake, got, tc.expected)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCanSignalPrisoner(t *testing.T) {
|
||||||
|
tests := []charactersState{
|
||||||
|
{
|
||||||
|
desc: "All characters are sleeping",
|
||||||
|
archerIsAwake: false,
|
||||||
|
prisonerIsAwake: false,
|
||||||
|
expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Archer is sleeping, prisoner is awake",
|
||||||
|
archerIsAwake: false,
|
||||||
|
prisonerIsAwake: true,
|
||||||
|
expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Archer is awake, prisoner is sleeping",
|
||||||
|
archerIsAwake: true,
|
||||||
|
prisonerIsAwake: false,
|
||||||
|
expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "All characters are awake",
|
||||||
|
archerIsAwake: true,
|
||||||
|
prisonerIsAwake: true,
|
||||||
|
expected: false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tc := range tests {
|
||||||
|
t.Run(tc.desc, func(t *testing.T) {
|
||||||
|
if got := CanSignalPrisoner(tc.archerIsAwake, tc.prisonerIsAwake); got != tc.expected {
|
||||||
|
t.Errorf("CanSignalPrisoner(%v, %v) = %v; want %v", tc.archerIsAwake, tc.prisonerIsAwake, got, tc.expected)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCanFreePrisoner(t *testing.T) {
|
||||||
|
tests := []charactersState{
|
||||||
|
{
|
||||||
|
desc: "All characters are sleeping. Dog is not present.",
|
||||||
|
knightIsAwake: false,
|
||||||
|
archerIsAwake: false,
|
||||||
|
prisonerIsAwake: false,
|
||||||
|
dogIsPresent: false,
|
||||||
|
expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "All characters are sleeping. Dog is present.",
|
||||||
|
knightIsAwake: false,
|
||||||
|
archerIsAwake: false,
|
||||||
|
prisonerIsAwake: false,
|
||||||
|
dogIsPresent: true,
|
||||||
|
expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Knight and archer are sleeping. Prisoner is awake. Dog is not present.",
|
||||||
|
knightIsAwake: false,
|
||||||
|
archerIsAwake: false,
|
||||||
|
prisonerIsAwake: true,
|
||||||
|
dogIsPresent: false,
|
||||||
|
expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Knight and archer are sleeping. Prisoner is awake. Dog is present.",
|
||||||
|
knightIsAwake: false,
|
||||||
|
archerIsAwake: false,
|
||||||
|
prisonerIsAwake: true,
|
||||||
|
dogIsPresent: true,
|
||||||
|
expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Knight is sleeping. Archer is awake. Prisoner is sleeping. Dog is not present.",
|
||||||
|
knightIsAwake: false,
|
||||||
|
archerIsAwake: true,
|
||||||
|
prisonerIsAwake: false,
|
||||||
|
dogIsPresent: false,
|
||||||
|
expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Knight is sleeping. Archer is awake. Prisoner is sleeping. Dog is present.",
|
||||||
|
knightIsAwake: false,
|
||||||
|
archerIsAwake: true,
|
||||||
|
prisonerIsAwake: false,
|
||||||
|
dogIsPresent: true,
|
||||||
|
expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Knight is sleeping. Archer is awake. Prisoner is awake. Dog is not present.",
|
||||||
|
knightIsAwake: false,
|
||||||
|
archerIsAwake: true,
|
||||||
|
prisonerIsAwake: true,
|
||||||
|
dogIsPresent: false,
|
||||||
|
expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Knight is sleeping. Archer is awake. Prisoner is awake. Dog is present.",
|
||||||
|
knightIsAwake: false,
|
||||||
|
archerIsAwake: true,
|
||||||
|
prisonerIsAwake: true,
|
||||||
|
dogIsPresent: true,
|
||||||
|
expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Knight is awake. Archer is sleeping. Prisoner is sleeping. Dog is not present.",
|
||||||
|
knightIsAwake: true,
|
||||||
|
archerIsAwake: false,
|
||||||
|
prisonerIsAwake: false,
|
||||||
|
dogIsPresent: false,
|
||||||
|
expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Knight is awake. Archer is sleeping. Prisoner is sleeping. Dog is present.",
|
||||||
|
knightIsAwake: true,
|
||||||
|
archerIsAwake: false,
|
||||||
|
prisonerIsAwake: false,
|
||||||
|
dogIsPresent: true,
|
||||||
|
expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Knight is awake. Archer is sleeping. Prisoner is awake. Dog is not present",
|
||||||
|
knightIsAwake: true,
|
||||||
|
archerIsAwake: false,
|
||||||
|
prisonerIsAwake: true,
|
||||||
|
dogIsPresent: false,
|
||||||
|
expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Knight is awake. Archer is sleeping. Prisoner is awake. Dog is present",
|
||||||
|
knightIsAwake: true,
|
||||||
|
archerIsAwake: false,
|
||||||
|
prisonerIsAwake: true,
|
||||||
|
dogIsPresent: true,
|
||||||
|
expected: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Knight and archer are awake. Prisoner is sleeping. Dog is not present",
|
||||||
|
knightIsAwake: true,
|
||||||
|
archerIsAwake: true,
|
||||||
|
prisonerIsAwake: false,
|
||||||
|
dogIsPresent: false,
|
||||||
|
expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Knight and archer are awake. Prisoner is sleeping. Dog is present",
|
||||||
|
knightIsAwake: true,
|
||||||
|
archerIsAwake: true,
|
||||||
|
prisonerIsAwake: false,
|
||||||
|
dogIsPresent: true,
|
||||||
|
expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Knight and archer are awake. Prisoner is awake. Dog is not present",
|
||||||
|
knightIsAwake: true,
|
||||||
|
archerIsAwake: true,
|
||||||
|
prisonerIsAwake: true,
|
||||||
|
dogIsPresent: false,
|
||||||
|
expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Knight and archer are awake. Prisoner is awake. Dog is present",
|
||||||
|
knightIsAwake: true,
|
||||||
|
archerIsAwake: true,
|
||||||
|
prisonerIsAwake: true,
|
||||||
|
dogIsPresent: true,
|
||||||
|
expected: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Everyone is sleeping. Dog is not present",
|
||||||
|
knightIsAwake: false,
|
||||||
|
archerIsAwake: false,
|
||||||
|
prisonerIsAwake: false,
|
||||||
|
dogIsPresent: false,
|
||||||
|
expected: false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tc := range tests {
|
||||||
|
t.Run(tc.desc, func(t *testing.T) {
|
||||||
|
if got := CanFreePrisoner(tc.knightIsAwake, tc.archerIsAwake, tc.prisonerIsAwake, tc.dogIsPresent); got != tc.expected {
|
||||||
|
t.Errorf("CanFreePrisoner(%v,%v,%v,%v) = %v; want %v", tc.knightIsAwake, tc.archerIsAwake, tc.prisonerIsAwake, tc.dogIsPresent, got, tc.expected)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
module annalyn
|
||||||
|
|
||||||
|
go 1.26
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"authors": [
|
||||||
|
"DavyJ0nes",
|
||||||
|
"kahgoh"
|
||||||
|
],
|
||||||
|
"contributors": [
|
||||||
|
"tehsphinx",
|
||||||
|
"andrerfcsantos"
|
||||||
|
],
|
||||||
|
"files": {
|
||||||
|
"solution": [
|
||||||
|
"cars_assemble.go"
|
||||||
|
],
|
||||||
|
"test": [
|
||||||
|
"cars_assemble_test.go"
|
||||||
|
],
|
||||||
|
"exemplar": [
|
||||||
|
".meta/exemplar.go"
|
||||||
|
],
|
||||||
|
"invalidator": [
|
||||||
|
"go.mod"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"blurb": "Learn about numbers and type conversion by analyzing an assembly line in a car factory.",
|
||||||
|
"custom": {
|
||||||
|
"taskIdsEnabled": true
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"track":"go","exercise":"cars-assemble","id":"4fa36f30c78743439e2f50df93aeb7bb","url":"https://exercism.org/tracks/go/exercises/cars-assemble","handle":"sanctushck","is_requester":true,"auto_approve":false}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# Help
|
||||||
|
|
||||||
|
## Running the tests
|
||||||
|
|
||||||
|
To run the tests run the command `go test` from within the exercise directory.
|
||||||
|
|
||||||
|
If the test suite contains benchmarks, you can run these with the `--bench` and `--benchmem`
|
||||||
|
flags:
|
||||||
|
|
||||||
|
go test -v --bench . --benchmem
|
||||||
|
|
||||||
|
Keep in mind that each reviewer will run benchmarks on a different machine, with
|
||||||
|
different specs, so the results from these benchmark tests may vary.
|
||||||
|
|
||||||
|
## Submitting your solution
|
||||||
|
|
||||||
|
You can submit your solution using the `exercism submit cars_assemble.go` command.
|
||||||
|
This command will upload your solution to the Exercism website and print the solution page's URL.
|
||||||
|
|
||||||
|
It's possible to submit an incomplete solution which allows you to:
|
||||||
|
|
||||||
|
- See how others have completed the exercise
|
||||||
|
- Request help from a mentor
|
||||||
|
|
||||||
|
## Need to get help?
|
||||||
|
|
||||||
|
If you'd like help solving the exercise, check the following pages:
|
||||||
|
|
||||||
|
- The [Go track's documentation](https://exercism.org/docs/tracks/go)
|
||||||
|
- The [Go track's programming category on the forum](https://forum.exercism.org/c/programming/go)
|
||||||
|
- [Exercism's programming category on the forum](https://forum.exercism.org/c/programming/5)
|
||||||
|
- The [Frequently Asked Questions](https://exercism.org/docs/using/faqs)
|
||||||
|
|
||||||
|
Should those resources not suffice, you could submit your (incomplete) solution to request mentoring.
|
||||||
|
|
||||||
|
To get help if you're having trouble, you can use one of the following resources:
|
||||||
|
|
||||||
|
- [How to Write Go Code](https://golang.org/doc/code.html)
|
||||||
|
- [Effective Go](https://golang.org/doc/effective_go.html)
|
||||||
|
- [Go Resources](http://golang.org/help)
|
||||||
|
- [StackOverflow](http://stackoverflow.com/questions/tagged/go)
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
# Hints
|
||||||
|
|
||||||
|
## General
|
||||||
|
|
||||||
|
- To learn more about types in Go, check [Tour of Go: Basic Types][basic types].
|
||||||
|
- To learn more about type conversions in Go, check [Tour of Go: Type Conversions][type conversions].
|
||||||
|
|
||||||
|
## 1. Calculate the number of working cars produced per hour
|
||||||
|
|
||||||
|
- The percentage (passed as an argument) is a number between 0-100. To make this percentage a bit easier to work with, start by dividing it by 100.
|
||||||
|
- To compute the number of cars produced successfully, multiply the percentage (divided by 100) by the number of cars produced.
|
||||||
|
- When multiplying two numbers together, they both need to be of the same type.
|
||||||
|
Use [type conversions][type conversions] if needed.
|
||||||
|
|
||||||
|
## 2. Calculate the number of working cars produced per minute
|
||||||
|
|
||||||
|
- Start by calculating the production of successful cars per hour.
|
||||||
|
For this, you can use the `CalculateProductionRatePerHour` function you made from the previous step.
|
||||||
|
- Knowing the production per hour of cars, you can get the production per minute by dividing the production per hour by 60 (the number of minutes in an hour).
|
||||||
|
- Remember to cast the result to an `int`.
|
||||||
|
|
||||||
|
## 3. Calculate the cost of production
|
||||||
|
|
||||||
|
- Start by working out how many groups of 10 cars there are.
|
||||||
|
You can do this by dividing the number of cars by 10.
|
||||||
|
- Then work out how many cars are remaining (the [modulo operator][modulo operator] is useful for this).
|
||||||
|
- To arrive at the cost, multiply the number of groups by the cost to produce 10 cars and then multiply the number of cars remaining by the cost to produce each individual car.
|
||||||
|
Then sum the results of the multiplication together.
|
||||||
|
|
||||||
|
[basic types]: https://tour.golang.org/basics/11
|
||||||
|
[type conversions]: https://tour.golang.org/basics/13
|
||||||
|
[modulo operator]: https://golangbyexamples.com/remainder-modulus-go-golang/
|
||||||
@@ -0,0 +1,138 @@
|
|||||||
|
# Cars Assemble
|
||||||
|
|
||||||
|
Welcome to Cars Assemble on Exercism's Go Track.
|
||||||
|
If you need help running the tests or submitting your code, check out `HELP.md`.
|
||||||
|
If you get stuck on the exercise, check out `HINTS.md`, but try and solve it without using those first :)
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
## Numbers
|
||||||
|
|
||||||
|
Go contains basic numeric types that can represent sets of either integer or floating-point values.
|
||||||
|
There are different types depending on the size of value you require and the architecture of the computer where the application is running (e.g. 32-bit and 64-bit).
|
||||||
|
|
||||||
|
For the sake of this exercise you will only be dealing with:
|
||||||
|
|
||||||
|
- `int`: e.g. `0`, `255`, `2147483647`.
|
||||||
|
A signed integer that is at least 32 bits in size (value range of: -2147483648 through 2147483647).
|
||||||
|
But this will depend on the systems architecture.
|
||||||
|
Most modern computers are 64 bit, therefore `int` will be 64 bits in size (value rate of: -9223372036854775808 through 9223372036854775807).
|
||||||
|
|
||||||
|
- `float64`: e.g. `0.0`, `3.14`.
|
||||||
|
Contains the set of all 64-bit floating-point numbers.
|
||||||
|
|
||||||
|
- `uint`: e.g. `0`, `255`.
|
||||||
|
An unsigned integer that is the same size as `int` (value range of: 0 through 4294967295 for 32 bits and 0 through 18446744073709551615 for 64 bits)
|
||||||
|
|
||||||
|
Numbers can be converted to other numeric types through Type Conversion.
|
||||||
|
|
||||||
|
## Arithmetic Operators
|
||||||
|
|
||||||
|
Go supports many standard arithmetic operators:
|
||||||
|
|
||||||
|
| Operator | Example |
|
||||||
|
| -------- | -------------- |
|
||||||
|
| `+` | `4 + 6 == 10` |
|
||||||
|
| `-` | `15 - 10 == 5` |
|
||||||
|
| `*` | `2 * 3 == 6` |
|
||||||
|
| `/` | `13 / 3 == 4` |
|
||||||
|
| `%` | `13 % 3 == 1` |
|
||||||
|
|
||||||
|
For integer division, the remainder is dropped (e.g. `5 / 2 == 2`).
|
||||||
|
|
||||||
|
Go has shorthand assignment for the operators above (e.g. `a += 5` is short for `a = a + 5`).
|
||||||
|
Go also supports the increment and decrement statements `++` and `--` (e.g. `a++`).
|
||||||
|
|
||||||
|
## Converting between types
|
||||||
|
|
||||||
|
Converting between types is done via a function with the name of the type to convert to.
|
||||||
|
For example:
|
||||||
|
|
||||||
|
```go
|
||||||
|
var x int = 42 // x has type int
|
||||||
|
f := float64(x) // f has type float64 (ie. 42.0)
|
||||||
|
var y float64 = 11.9 // y has type float64
|
||||||
|
i := int(y) // i has type int (ie. 11)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Arithmetic operations on different types
|
||||||
|
|
||||||
|
In many languages you can perform arithmetic operations on different types of variables, but in Go this gives an error.
|
||||||
|
For example:
|
||||||
|
|
||||||
|
```go
|
||||||
|
var x int = 42
|
||||||
|
|
||||||
|
// this line produces an error
|
||||||
|
value := float32(2.0) * x // invalid operation: mismatched types float32 and int
|
||||||
|
|
||||||
|
// you must convert int type to float32 before performing arithmetic operation
|
||||||
|
value := float32(2.0) * float32(x)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Instructions
|
||||||
|
|
||||||
|
In this exercise you'll be writing code to analyze the production in a car factory.
|
||||||
|
|
||||||
|
## 1. Calculate the number of working cars produced per hour
|
||||||
|
|
||||||
|
The cars are produced on an assembly line.
|
||||||
|
The assembly line has a certain speed, that can be changed.
|
||||||
|
The faster the assembly line speed is, the more cars are produced.
|
||||||
|
However, changing the speed of the assembly line also changes the number of cars that are produced successfully, that is cars without any errors in their production.
|
||||||
|
|
||||||
|
Implement a function that takes in the number of cars produced per hour and the success rate and calculates the number of successful cars made per hour.
|
||||||
|
The success rate is given as a percentage, from `0` to `100`:
|
||||||
|
|
||||||
|
```go
|
||||||
|
CalculateWorkingCarsPerHour(1547, 90)
|
||||||
|
// => 1392.3
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note:** the return value should be a `float64`.
|
||||||
|
|
||||||
|
## 2. Calculate the number of working cars produced per minute
|
||||||
|
|
||||||
|
Implement a function that takes in the number of cars produced per hour and the success rate and calculates how many cars are successfully produced each minute:
|
||||||
|
|
||||||
|
```go
|
||||||
|
CalculateWorkingCarsPerMinute(1105, 90)
|
||||||
|
// => 16
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note:** the return value should be an `int`.
|
||||||
|
|
||||||
|
## 3. Calculate the cost of production
|
||||||
|
|
||||||
|
Each car normally costs $10,000 to produce individually, regardless of whether it is successful or not.
|
||||||
|
But with a bit of planning, 10 cars can be produced together for $95,000.
|
||||||
|
|
||||||
|
For example, 37 cars can be produced in the following way:
|
||||||
|
37 = 3 x groups of ten + 7 individual cars
|
||||||
|
|
||||||
|
So the cost for 37 cars is:
|
||||||
|
3\*95,000+7\*10,000=355,000
|
||||||
|
|
||||||
|
Implement the function `CalculateCost` that calculates the cost of producing a number of cars, regardless of whether they are successful:
|
||||||
|
|
||||||
|
```go
|
||||||
|
CalculateCost(37)
|
||||||
|
// => 355000
|
||||||
|
|
||||||
|
CalculateCost(21)
|
||||||
|
// => 200000
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note:** the return value should be an `uint`.
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
### Created by
|
||||||
|
|
||||||
|
- @DavyJ0nes
|
||||||
|
- @kahgoh
|
||||||
|
|
||||||
|
### Contributed to by
|
||||||
|
|
||||||
|
- @tehsphinx
|
||||||
|
- @andrerfcsantos
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package cars
|
||||||
|
|
||||||
|
// CalculateWorkingCarsPerHour calculates how many working cars are
|
||||||
|
// produced by the assembly line every hour.
|
||||||
|
func CalculateWorkingCarsPerHour(productionRate int, successRate float64) float64 {
|
||||||
|
return float64(productionRate) * successRate/100.0
|
||||||
|
}
|
||||||
|
|
||||||
|
// CalculateWorkingCarsPerMinute calculates how many working cars are
|
||||||
|
// produced by the assembly line every minute.
|
||||||
|
func CalculateWorkingCarsPerMinute(productionRate int, successRate float64) int {
|
||||||
|
return int(float64(productionRate)/60 * successRate/100)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CalculateCost works out the cost of producing the given number of cars.
|
||||||
|
func CalculateCost(carsCount int) uint {
|
||||||
|
var numberOfBundles uint = uint(carsCount/10)
|
||||||
|
return (numberOfBundles*95000) + (uint(carsCount)-(numberOfBundles*10))*10000
|
||||||
|
}
|
||||||
@@ -0,0 +1,197 @@
|
|||||||
|
package cars
|
||||||
|
|
||||||
|
import (
|
||||||
|
"math"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
const floatEqualityThreshold = 1e-9
|
||||||
|
|
||||||
|
func floatingPointEquals(got, want float64) bool {
|
||||||
|
absoluteDifferenceBelowThreshold := math.Abs(got-want) <= floatEqualityThreshold
|
||||||
|
relativeDifferenceBelowThreshold := math.Abs(got-want)/(math.Abs(got)+math.Abs(want)) <= floatEqualityThreshold
|
||||||
|
return absoluteDifferenceBelowThreshold || relativeDifferenceBelowThreshold
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCalculateWorkingCarsPerHour(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
productionRate int
|
||||||
|
successRate float64
|
||||||
|
want float64
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "calculate working cars per hour for production rate 0",
|
||||||
|
productionRate: 0,
|
||||||
|
successRate: 100,
|
||||||
|
want: 0.0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "calculate working cars per hour for 100% success rate",
|
||||||
|
productionRate: 221,
|
||||||
|
successRate: 100,
|
||||||
|
want: 221.0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "calculate working cars per hour for 80% success rate",
|
||||||
|
productionRate: 426,
|
||||||
|
successRate: 80,
|
||||||
|
want: 340.8,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "calculate working cars per hour for 20.5% success rate",
|
||||||
|
productionRate: 6824,
|
||||||
|
successRate: 20.5,
|
||||||
|
want: 1398.92,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "calculate working cars per hour for 0% success rate",
|
||||||
|
productionRate: 8000,
|
||||||
|
successRate: 0,
|
||||||
|
want: 0,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range tests {
|
||||||
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
got := CalculateWorkingCarsPerHour(tc.productionRate, tc.successRate)
|
||||||
|
if !floatingPointEquals(got, tc.want) {
|
||||||
|
t.Errorf(
|
||||||
|
"CalculateWorkingCarsPerHour(%d, %f) = %f, want %f",
|
||||||
|
tc.productionRate,
|
||||||
|
tc.successRate,
|
||||||
|
got,
|
||||||
|
tc.want,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCalculateWorkingCarsPerMinute(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
productionRate int
|
||||||
|
successRate float64
|
||||||
|
want int
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "calculate working cars per minute for production rate 0",
|
||||||
|
productionRate: 0,
|
||||||
|
successRate: 100,
|
||||||
|
want: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "calculate working cars per minute for 100% success rate",
|
||||||
|
productionRate: 221,
|
||||||
|
successRate: 100,
|
||||||
|
want: 3,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "calculate working cars per minute for 80% success rate",
|
||||||
|
productionRate: 426,
|
||||||
|
successRate: 80,
|
||||||
|
want: 5,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "calculate working cars per minute for 20.5% success rate",
|
||||||
|
productionRate: 6824,
|
||||||
|
successRate: 20.5,
|
||||||
|
want: 23,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "calculate working cars per minute for 0% success rate",
|
||||||
|
productionRate: 8000,
|
||||||
|
successRate: 0,
|
||||||
|
want: 0,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range tests {
|
||||||
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
got := CalculateWorkingCarsPerMinute(tc.productionRate, tc.successRate)
|
||||||
|
if got != tc.want {
|
||||||
|
t.Errorf(
|
||||||
|
"CalculateWorkingCarsPerMinute(%d, %f) = %d, want %d",
|
||||||
|
tc.productionRate,
|
||||||
|
tc.successRate,
|
||||||
|
got,
|
||||||
|
tc.want,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCalculateCost(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
carsCount int
|
||||||
|
want uint
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "calculate cost to produce 0 cars",
|
||||||
|
carsCount: 0,
|
||||||
|
want: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "calculate the cost of materials to produce 1 car",
|
||||||
|
carsCount: 1,
|
||||||
|
want: 10000,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "calculate cost to produce 2 cars",
|
||||||
|
carsCount: 2,
|
||||||
|
want: 20000,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "calculate cost to produce 9 cars",
|
||||||
|
carsCount: 9,
|
||||||
|
want: 90000,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "calculate cost to produce 10 cars",
|
||||||
|
carsCount: 10,
|
||||||
|
want: 95000,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "calculate cost to produce 100 cars",
|
||||||
|
carsCount: 100,
|
||||||
|
want: 950000,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "calculate cost to produce 21 cars",
|
||||||
|
carsCount: 21,
|
||||||
|
want: 200000,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "calculate cost to produce 37 cars",
|
||||||
|
carsCount: 37,
|
||||||
|
want: 355000,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "calculate cost to produce 56 cars",
|
||||||
|
carsCount: 56,
|
||||||
|
want: 535000,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "calculate cost to produce 148 cars",
|
||||||
|
carsCount: 148,
|
||||||
|
want: 1410000,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range tests {
|
||||||
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
got := CalculateCost(tc.carsCount)
|
||||||
|
if got != tc.want {
|
||||||
|
t.Errorf(
|
||||||
|
"CalculateCost(%d) = %d, want %d",
|
||||||
|
tc.carsCount,
|
||||||
|
got,
|
||||||
|
tc.want,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
module cars
|
||||||
|
|
||||||
|
go 1.26
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://exercism.org/tracks/go
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"authors": [
|
||||||
|
"k4rtik"
|
||||||
|
],
|
||||||
|
"contributors": [
|
||||||
|
"bitfield",
|
||||||
|
"ekingery",
|
||||||
|
"ferhatelmas",
|
||||||
|
"hilary",
|
||||||
|
"kytrinyx",
|
||||||
|
"leenipper",
|
||||||
|
"petertseng",
|
||||||
|
"robphoenix",
|
||||||
|
"SebastianKristof",
|
||||||
|
"sebito91",
|
||||||
|
"tleen"
|
||||||
|
],
|
||||||
|
"files": {
|
||||||
|
"solution": [
|
||||||
|
"hello_world.go"
|
||||||
|
],
|
||||||
|
"test": [
|
||||||
|
"hello_world_test.go"
|
||||||
|
],
|
||||||
|
"example": [
|
||||||
|
".meta/example.go"
|
||||||
|
],
|
||||||
|
"invalidator": [
|
||||||
|
"go.mod"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"blurb": "The classical introductory exercise. Just say \"Hello, World!\".",
|
||||||
|
"source": "This is an exercise to introduce users to using Exercism",
|
||||||
|
"source_url": "https://en.wikipedia.org/wiki/%22Hello,_world!%22_program"
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"track":"go","exercise":"hello-world","id":"a2527b7e2191407ea00beb5991895983","url":"https://exercism.org/tracks/go/exercises/hello-world","handle":"sanctushck","is_requester":true,"auto_approve":false}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# Help
|
||||||
|
|
||||||
|
## Running the tests
|
||||||
|
|
||||||
|
To run the tests run the command `go test` from within the exercise directory.
|
||||||
|
|
||||||
|
If the test suite contains benchmarks, you can run these with the `--bench` and `--benchmem`
|
||||||
|
flags:
|
||||||
|
|
||||||
|
go test -v --bench . --benchmem
|
||||||
|
|
||||||
|
Keep in mind that each reviewer will run benchmarks on a different machine, with
|
||||||
|
different specs, so the results from these benchmark tests may vary.
|
||||||
|
|
||||||
|
## Submitting your solution
|
||||||
|
|
||||||
|
You can submit your solution using the `exercism submit hello_world.go` command.
|
||||||
|
This command will upload your solution to the Exercism website and print the solution page's URL.
|
||||||
|
|
||||||
|
It's possible to submit an incomplete solution which allows you to:
|
||||||
|
|
||||||
|
- See how others have completed the exercise
|
||||||
|
- Request help from a mentor
|
||||||
|
|
||||||
|
## Need to get help?
|
||||||
|
|
||||||
|
If you'd like help solving the exercise, check the following pages:
|
||||||
|
|
||||||
|
- The [Go track's documentation](https://exercism.org/docs/tracks/go)
|
||||||
|
- The [Go track's programming category on the forum](https://forum.exercism.org/c/programming/go)
|
||||||
|
- [Exercism's programming category on the forum](https://forum.exercism.org/c/programming/5)
|
||||||
|
- The [Frequently Asked Questions](https://exercism.org/docs/using/faqs)
|
||||||
|
|
||||||
|
Should those resources not suffice, you could submit your (incomplete) solution to request mentoring.
|
||||||
|
|
||||||
|
To get help if you're having trouble, you can use one of the following resources:
|
||||||
|
|
||||||
|
- [How to Write Go Code](https://golang.org/doc/code.html)
|
||||||
|
- [Effective Go](https://golang.org/doc/effective_go.html)
|
||||||
|
- [Go Resources](http://golang.org/help)
|
||||||
|
- [StackOverflow](http://stackoverflow.com/questions/tagged/go)
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
# Hello World
|
||||||
|
|
||||||
|
Welcome to Hello World on Exercism's Go Track.
|
||||||
|
If you need help running the tests or submitting your code, check out `HELP.md`.
|
||||||
|
|
||||||
|
## Instructions
|
||||||
|
|
||||||
|
The classical introductory exercise.
|
||||||
|
Just say "Hello, World!".
|
||||||
|
|
||||||
|
["Hello, World!"][hello-world] is the traditional first program for beginning programming in a new language or environment.
|
||||||
|
|
||||||
|
The objectives are simple:
|
||||||
|
|
||||||
|
- Modify the provided code so that it produces the string "Hello, World!".
|
||||||
|
- Run the test suite and make sure that it succeeds.
|
||||||
|
- Submit your solution and check it at the website.
|
||||||
|
|
||||||
|
If everything goes well, you will be ready to fetch your first real exercise.
|
||||||
|
|
||||||
|
[hello-world]: https://en.wikipedia.org/wiki/%22Hello,_world!%22_program
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
### Created by
|
||||||
|
|
||||||
|
- @k4rtik
|
||||||
|
|
||||||
|
### Contributed to by
|
||||||
|
|
||||||
|
- @bitfield
|
||||||
|
- @ekingery
|
||||||
|
- @ferhatelmas
|
||||||
|
- @hilary
|
||||||
|
- @kytrinyx
|
||||||
|
- @leenipper
|
||||||
|
- @petertseng
|
||||||
|
- @robphoenix
|
||||||
|
- @SebastianKristof
|
||||||
|
- @sebito91
|
||||||
|
- @tleen
|
||||||
|
|
||||||
|
### Based on
|
||||||
|
|
||||||
|
This is an exercise to introduce users to using Exercism - https://en.wikipedia.org/wiki/%22Hello,_world!%22_program
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
module greeting
|
||||||
|
|
||||||
|
go 1.18
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package greeting
|
||||||
|
|
||||||
|
// HelloWorld greets the world.
|
||||||
|
func HelloWorld() string {
|
||||||
|
return "Hello, World!"
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
package greeting
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
// Define a function named HelloWorld that takes no arguments,
|
||||||
|
// and returns a string.
|
||||||
|
// In other words, define a function with the following signature:
|
||||||
|
// HelloWorld() string
|
||||||
|
|
||||||
|
func TestHelloWorld(t *testing.T) {
|
||||||
|
expected := "Hello, World!"
|
||||||
|
if observed := HelloWorld(); observed != expected {
|
||||||
|
t.Fatalf("HelloWorld() = %v, want %v", observed, expected)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// BenchmarkHelloWorld() is a benchmarking function. These functions follow the
|
||||||
|
// form `func BenchmarkXxx(*testing.B)` and can be used to test the performance
|
||||||
|
// of your implementation. They may not be present in every exercise, but when
|
||||||
|
// they are you can run them by including the `-bench` flag with the `go test`
|
||||||
|
// command, like so: `go test -v --bench . --benchmem`
|
||||||
|
//
|
||||||
|
// You will see output similar to the following:
|
||||||
|
//
|
||||||
|
// BenchmarkHelloWorld 2000000000 0.46 ns/op
|
||||||
|
//
|
||||||
|
// This means that the loop ran 2000000000 times at a speed of 0.46 ns per loop.
|
||||||
|
//
|
||||||
|
// While benchmarking can be useful to compare different iterations of the same
|
||||||
|
// exercise, keep in mind that others will run the same benchmarks on different
|
||||||
|
// machines, with different specs, so the results from these benchmark tests may
|
||||||
|
// vary.
|
||||||
|
func BenchmarkHelloWorld(b *testing.B) {
|
||||||
|
if testing.Short() {
|
||||||
|
b.Skip("skipping benchmark in short mode.")
|
||||||
|
}
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
HelloWorld()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"authors": [
|
||||||
|
"tehsphinx"
|
||||||
|
],
|
||||||
|
"contributors": [
|
||||||
|
"ekingery",
|
||||||
|
"andrerfcsantos",
|
||||||
|
"bobtfish"
|
||||||
|
],
|
||||||
|
"files": {
|
||||||
|
"solution": [
|
||||||
|
"lasagna.go"
|
||||||
|
],
|
||||||
|
"test": [
|
||||||
|
"lasagna_test.go"
|
||||||
|
],
|
||||||
|
"exemplar": [
|
||||||
|
".meta/exemplar.go"
|
||||||
|
],
|
||||||
|
"invalidator": [
|
||||||
|
"go.mod"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"forked_from": [
|
||||||
|
"csharp/lucians-luscious-lasagna"
|
||||||
|
],
|
||||||
|
"blurb": "Learn about packages, functions, and variables by helping Gopher cook lasagna.",
|
||||||
|
"custom": {
|
||||||
|
"taskIdsEnabled": true
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"track":"go","exercise":"lasagna","id":"ff1a7a2429c741b1b4c4202a1d422002","url":"https://exercism.org/tracks/go/exercises/lasagna","handle":"sanctushck","is_requester":true,"auto_approve":false}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# Help
|
||||||
|
|
||||||
|
## Running the tests
|
||||||
|
|
||||||
|
To run the tests run the command `go test` from within the exercise directory.
|
||||||
|
|
||||||
|
If the test suite contains benchmarks, you can run these with the `--bench` and `--benchmem`
|
||||||
|
flags:
|
||||||
|
|
||||||
|
go test -v --bench . --benchmem
|
||||||
|
|
||||||
|
Keep in mind that each reviewer will run benchmarks on a different machine, with
|
||||||
|
different specs, so the results from these benchmark tests may vary.
|
||||||
|
|
||||||
|
## Submitting your solution
|
||||||
|
|
||||||
|
You can submit your solution using the `exercism submit lasagna.go` command.
|
||||||
|
This command will upload your solution to the Exercism website and print the solution page's URL.
|
||||||
|
|
||||||
|
It's possible to submit an incomplete solution which allows you to:
|
||||||
|
|
||||||
|
- See how others have completed the exercise
|
||||||
|
- Request help from a mentor
|
||||||
|
|
||||||
|
## Need to get help?
|
||||||
|
|
||||||
|
If you'd like help solving the exercise, check the following pages:
|
||||||
|
|
||||||
|
- The [Go track's documentation](https://exercism.org/docs/tracks/go)
|
||||||
|
- The [Go track's programming category on the forum](https://forum.exercism.org/c/programming/go)
|
||||||
|
- [Exercism's programming category on the forum](https://forum.exercism.org/c/programming/5)
|
||||||
|
- The [Frequently Asked Questions](https://exercism.org/docs/using/faqs)
|
||||||
|
|
||||||
|
Should those resources not suffice, you could submit your (incomplete) solution to request mentoring.
|
||||||
|
|
||||||
|
To get help if you're having trouble, you can use one of the following resources:
|
||||||
|
|
||||||
|
- [How to Write Go Code](https://golang.org/doc/code.html)
|
||||||
|
- [Effective Go](https://golang.org/doc/effective_go.html)
|
||||||
|
- [Go Resources](http://golang.org/help)
|
||||||
|
- [StackOverflow](http://stackoverflow.com/questions/tagged/go)
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
# Hints
|
||||||
|
|
||||||
|
## General
|
||||||
|
|
||||||
|
- An [integer value][integers] can be defined as one or more consecutive digits.
|
||||||
|
- If you see a `panic:` error when running the tests, this is because you have not implemented one of the functions (it should say which one) or you have left the boilerplate in place. You need to remove the `panic(...)` line from the supplied code and replace it with a real implementation.
|
||||||
|
|
||||||
|
## 1. Define the expected oven time in minutes
|
||||||
|
|
||||||
|
- You need to define a [constant][constants] and assign it the expected oven time in minutes.
|
||||||
|
- If you see an `undefined: OvenTime` error then double check that you have the constant defined.
|
||||||
|
- If you see an `invalid operation: got != tt.expected (mismatched types float64 and int)` error then you have likely put a decimal point into the `OvenTime` causing Go to infer the type as a floating point number. Remove the decimal and the type will be inferred as an `int`.
|
||||||
|
- If you see a `syntax error: non-declaration statement outside function body` error then it is likely that you forgot the `const` keyword.
|
||||||
|
- If you see a `syntax error: unexpected :=, expecting =` error then you are likely trying to assign the constant using `:=` like a variable; constants are assigned using `=` not `:=`.
|
||||||
|
|
||||||
|
## 2. Calculate the remaining oven time in minutes
|
||||||
|
|
||||||
|
- You need to define a [function][functions] with a single parameter.
|
||||||
|
- You have to [explicitly return an integer][return] from a function.
|
||||||
|
- The function's parameter is an [integer][integers].
|
||||||
|
- You can [call][calls] one of the other functions you've defined previously.
|
||||||
|
- You can use the [mathematical operator for subtraction][operators] to subtract values.
|
||||||
|
|
||||||
|
## 3. Calculate the preparation time in minutes
|
||||||
|
|
||||||
|
- You need to define a [function][functions] with a single parameter.
|
||||||
|
- You have to [explicitly return an integer][return] from a function.
|
||||||
|
- The function's parameter is an [integer][integers].
|
||||||
|
- You can use the [mathematical operator for multiplication][operators] to multiply values.
|
||||||
|
|
||||||
|
## 4. Calculate the elapsed working time in minutes
|
||||||
|
|
||||||
|
- You need to define a [function][functions] with two parameters.
|
||||||
|
- You have to [explicitly return an integer][return] from a function.
|
||||||
|
- The function's parameter is an [integer][integers].
|
||||||
|
- You can [call][calls] one of the other functions you've defined previously.
|
||||||
|
- You can use the [mathematical operator for addition][operators] to add values.
|
||||||
|
|
||||||
|
[functions]: https://tour.golang.org/basics/4
|
||||||
|
[return]: https://golang.org/ref/spec#Return_statements
|
||||||
|
[operators]: https://golang.org/ref/spec#Operators
|
||||||
|
[integers]: https://golang.org/ref/spec#Integer_literals
|
||||||
|
[calls]: https://golang.org/ref/spec#Calls
|
||||||
|
[constants]: https://tour.golang.org/basics/15
|
||||||
@@ -0,0 +1,151 @@
|
|||||||
|
# Gopher's Gorgeous Lasagna
|
||||||
|
|
||||||
|
Welcome to Gopher's Gorgeous Lasagna on Exercism's Go Track.
|
||||||
|
If you need help running the tests or submitting your code, check out `HELP.md`.
|
||||||
|
If you get stuck on the exercise, check out `HINTS.md`, but try and solve it without using those first :)
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
[Go](https://golang.org) is a statically typed, compiled programming language.
|
||||||
|
This exercise introduces three major language features: Packages, Functions, and Variables.
|
||||||
|
|
||||||
|
## Packages
|
||||||
|
|
||||||
|
Go applications are organized in packages.
|
||||||
|
A package is a collection of source files located in the same directory.
|
||||||
|
All source files in a directory must share the same package name.
|
||||||
|
When a package is imported, only entities (functions, types, variables, constants) whose names start with a capital letter can be used / accessed.
|
||||||
|
The recommended style of naming in Go is that identifiers will be named using `camelCase`, except for those meant to be accessible across packages which should be `PascalCase`.
|
||||||
|
|
||||||
|
```go
|
||||||
|
package lasagna
|
||||||
|
```
|
||||||
|
|
||||||
|
## Variables
|
||||||
|
|
||||||
|
Go is statically-typed, which means all variables [must have a defined type](https://en.wikipedia.org/wiki/Type_system) at compile-time.
|
||||||
|
|
||||||
|
Variables can be defined by explicitly specifying a type:
|
||||||
|
|
||||||
|
```go
|
||||||
|
var explicit int // Explicitly typed
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also use an initializer, and the compiler will assign the variable type to match the type of the initializer.
|
||||||
|
|
||||||
|
```go
|
||||||
|
implicit := 10 // Implicitly typed as an int
|
||||||
|
```
|
||||||
|
|
||||||
|
Once declared, variables can be assigned values using the `=` operator.
|
||||||
|
Once declared, a variable's type can never change.
|
||||||
|
|
||||||
|
```go
|
||||||
|
count := 1 // Assign initial value
|
||||||
|
count = 2 // Update to new value
|
||||||
|
|
||||||
|
count = false // This throws a compiler error due to assigning a non `int` type
|
||||||
|
```
|
||||||
|
|
||||||
|
## Constants
|
||||||
|
|
||||||
|
Constants hold a piece of data just like variables, but their value cannot change during the execution of the program.
|
||||||
|
|
||||||
|
Constants are defined using the `const` keyword and can be numbers, characters, strings or booleans:
|
||||||
|
|
||||||
|
```go
|
||||||
|
const Age = 21 // Defines a numeric constant 'Age' with the value of 21
|
||||||
|
```
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
Go functions accept zero or more parameters.
|
||||||
|
Parameters must be explicitly typed, there is no type inference.
|
||||||
|
|
||||||
|
Values are returned from functions using the `return` keyword.
|
||||||
|
|
||||||
|
A function is invoked by specifying the function name and passing arguments for each of the function's parameters.
|
||||||
|
|
||||||
|
Note that Go supports two types of comments.
|
||||||
|
Single line comments are preceded by `//` and multiline comments are inserted between `/*` and `*/`.
|
||||||
|
|
||||||
|
```go
|
||||||
|
package greeting
|
||||||
|
|
||||||
|
// Hello is a public function.
|
||||||
|
func Hello (name string) string {
|
||||||
|
return hi(name)
|
||||||
|
}
|
||||||
|
|
||||||
|
// hi is a private function.
|
||||||
|
func hi (name string) string {
|
||||||
|
return "hi " + name
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Instructions
|
||||||
|
|
||||||
|
In this exercise you're going to write some code to help you cook a brilliant lasagna from your favorite cooking book.
|
||||||
|
|
||||||
|
You have four tasks, all related to the time spent cooking the lasagna.
|
||||||
|
|
||||||
|
## 1. Define the expected oven time in minutes
|
||||||
|
|
||||||
|
Define the `OvenTime` constant with how many minutes the lasagna should be in the oven. According to the cooking book, the expected oven time in minutes is 40:
|
||||||
|
|
||||||
|
```go
|
||||||
|
OvenTime
|
||||||
|
// => 40
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2. Calculate the remaining oven time in minutes
|
||||||
|
|
||||||
|
Define the `RemainingOvenTime()` function that takes the actual minutes the lasagna has been in the oven as a parameter and returns how many minutes the lasagna still has to remain in the oven, based on the expected oven time in minutes from the previous task.
|
||||||
|
|
||||||
|
```go
|
||||||
|
func RemainingOvenTime(actual int) int {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
RemainingOvenTime(30)
|
||||||
|
// => 10
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3. Calculate the preparation time in minutes
|
||||||
|
|
||||||
|
Define the `PreparationTime` function that takes the number of layers you added to the lasagna as a parameter and returns how many minutes you spent preparing the lasagna, assuming each layer takes you 2 minutes to prepare.
|
||||||
|
|
||||||
|
```go
|
||||||
|
func PreparationTime(numberOfLayers int) int {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
PreparationTime(2)
|
||||||
|
// => 4
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4. Calculate the elapsed working time in minutes
|
||||||
|
|
||||||
|
Define the `ElapsedTime` function that takes two parameters: the first parameter is the number of layers you added to the lasagna, and the second parameter is the number of minutes the lasagna has been in the oven.
|
||||||
|
The function should return how many minutes in total you've worked on cooking the lasagna, which is the sum of the preparation time in minutes, and the time in minutes the lasagna has spent in the oven at the moment.
|
||||||
|
|
||||||
|
```go
|
||||||
|
func ElapsedTime(numberOfLayers, actualMinutesInOven int) int {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
ElapsedTime(3, 20)
|
||||||
|
// => 26
|
||||||
|
```
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
### Created by
|
||||||
|
|
||||||
|
- @tehsphinx
|
||||||
|
|
||||||
|
### Contributed to by
|
||||||
|
|
||||||
|
- @ekingery
|
||||||
|
- @andrerfcsantos
|
||||||
|
- @bobtfish
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
module lasagna
|
||||||
|
|
||||||
|
go 1.18
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package lasagna
|
||||||
|
|
||||||
|
// TODO: define the 'OvenTime' constant
|
||||||
|
const OvenTime int = 40
|
||||||
|
|
||||||
|
// RemainingOvenTime returns the remaining minutes based on the `actual` minutes already in the oven.
|
||||||
|
func RemainingOvenTime(actualMinutesInOven int) int {
|
||||||
|
return OvenTime - actualMinutesInOven
|
||||||
|
}
|
||||||
|
|
||||||
|
// PreparationTime calculates the time needed to prepare the lasagna based on the amount of layers.
|
||||||
|
func PreparationTime(numberOfLayers int) int {
|
||||||
|
return numberOfLayers * 2
|
||||||
|
}
|
||||||
|
|
||||||
|
// ElapsedTime calculates the time elapsed cooking the lasagna. This time includes the preparation time and the time the lasagna is baking in the oven.
|
||||||
|
func ElapsedTime(numberOfLayers, actualMinutesInOven int) int {
|
||||||
|
return PreparationTime(numberOfLayers) + actualMinutesInOven
|
||||||
|
}
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
package lasagna
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
type lasagnaTests struct {
|
||||||
|
name string
|
||||||
|
layers, time, expected int
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestOvenTime(t *testing.T) {
|
||||||
|
tests := []lasagnaTests{
|
||||||
|
{
|
||||||
|
name: "Calculates how many minutes the lasagna should be in the oven",
|
||||||
|
layers: 0,
|
||||||
|
time: 40,
|
||||||
|
expected: 40,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
if got := OvenTime; got != tt.expected {
|
||||||
|
t.Errorf("OvenTime(%d) = %d; want %d", tt.expected, got, tt.expected)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRemainingOvenTime(t *testing.T) {
|
||||||
|
tests := []lasagnaTests{
|
||||||
|
{
|
||||||
|
name: "Remaining minutes in oven",
|
||||||
|
layers: 0,
|
||||||
|
time: 15,
|
||||||
|
expected: 25,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
if got := RemainingOvenTime(tt.time); got != tt.expected {
|
||||||
|
t.Errorf("RemainingOvenTime(%d) = %d; want %d", tt.time, got, tt.expected)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
func TestPreparationTime(t *testing.T) {
|
||||||
|
tests := []lasagnaTests{
|
||||||
|
{
|
||||||
|
name: "Preparation time in minutes for one layer",
|
||||||
|
layers: 1,
|
||||||
|
time: 0,
|
||||||
|
expected: 2,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Preparation time in minutes for multiple layers",
|
||||||
|
layers: 4,
|
||||||
|
time: 0,
|
||||||
|
expected: 8,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
if got := PreparationTime(tt.layers); got != tt.expected {
|
||||||
|
t.Errorf("PreparationTime(%d) = %d; want %d", tt.layers, got, tt.expected)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestElapsedTime(t *testing.T) {
|
||||||
|
tests := []lasagnaTests{
|
||||||
|
{
|
||||||
|
name: "Total time in minutes for one layer",
|
||||||
|
layers: 1,
|
||||||
|
time: 30,
|
||||||
|
expected: 32,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Total time in minutes for multiple layers",
|
||||||
|
layers: 4,
|
||||||
|
time: 8,
|
||||||
|
expected: 16,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
if got := ElapsedTime(tt.layers, tt.time); got != tt.expected {
|
||||||
|
t.Errorf("ElapsedTime(%d, %d) = %d; want %d", tt.layers, tt.time, got, tt.expected)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"authors": [
|
||||||
|
"nathany"
|
||||||
|
],
|
||||||
|
"contributors": [
|
||||||
|
"alebaffa",
|
||||||
|
"bitfield",
|
||||||
|
"ekingery",
|
||||||
|
"ferhatelmas",
|
||||||
|
"hilary",
|
||||||
|
"kytrinyx",
|
||||||
|
"leenipper",
|
||||||
|
"petertseng",
|
||||||
|
"robphoenix",
|
||||||
|
"sebito91",
|
||||||
|
"soniakeys",
|
||||||
|
"tleen",
|
||||||
|
"eklatzer"
|
||||||
|
],
|
||||||
|
"files": {
|
||||||
|
"solution": [
|
||||||
|
"raindrops.go"
|
||||||
|
],
|
||||||
|
"test": [
|
||||||
|
"raindrops_test.go",
|
||||||
|
"cases_test.go"
|
||||||
|
],
|
||||||
|
"example": [
|
||||||
|
".meta/example.go"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"blurb": "Convert a number into its corresponding raindrop sounds - Pling, Plang and Plong.",
|
||||||
|
"source": "A variation on FizzBuzz, a famous technical interview question that is intended to weed out potential candidates. That question is itself derived from Fizz Buzz, a popular children's game for teaching division.",
|
||||||
|
"source_url": "https://en.wikipedia.org/wiki/Fizz_buzz"
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"track":"go","exercise":"raindrops","id":"4fc80ccd49df464995e301a419919798","url":"https://exercism.org/tracks/go/exercises/raindrops","handle":"sanctushck","is_requester":true,"auto_approve":false}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# Help
|
||||||
|
|
||||||
|
## Running the tests
|
||||||
|
|
||||||
|
To run the tests run the command `go test` from within the exercise directory.
|
||||||
|
|
||||||
|
If the test suite contains benchmarks, you can run these with the `--bench` and `--benchmem`
|
||||||
|
flags:
|
||||||
|
|
||||||
|
go test -v --bench . --benchmem
|
||||||
|
|
||||||
|
Keep in mind that each reviewer will run benchmarks on a different machine, with
|
||||||
|
different specs, so the results from these benchmark tests may vary.
|
||||||
|
|
||||||
|
## Submitting your solution
|
||||||
|
|
||||||
|
You can submit your solution using the `exercism submit raindrops.go` command.
|
||||||
|
This command will upload your solution to the Exercism website and print the solution page's URL.
|
||||||
|
|
||||||
|
It's possible to submit an incomplete solution which allows you to:
|
||||||
|
|
||||||
|
- See how others have completed the exercise
|
||||||
|
- Request help from a mentor
|
||||||
|
|
||||||
|
## Need to get help?
|
||||||
|
|
||||||
|
If you'd like help solving the exercise, check the following pages:
|
||||||
|
|
||||||
|
- The [Go track's documentation](https://exercism.org/docs/tracks/go)
|
||||||
|
- The [Go track's programming category on the forum](https://forum.exercism.org/c/programming/go)
|
||||||
|
- [Exercism's programming category on the forum](https://forum.exercism.org/c/programming/5)
|
||||||
|
- The [Frequently Asked Questions](https://exercism.org/docs/using/faqs)
|
||||||
|
|
||||||
|
Should those resources not suffice, you could submit your (incomplete) solution to request mentoring.
|
||||||
|
|
||||||
|
To get help if you're having trouble, you can use one of the following resources:
|
||||||
|
|
||||||
|
- [How to Write Go Code](https://golang.org/doc/code.html)
|
||||||
|
- [Effective Go](https://golang.org/doc/effective_go.html)
|
||||||
|
- [Go Resources](http://golang.org/help)
|
||||||
|
- [StackOverflow](http://stackoverflow.com/questions/tagged/go)
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
# Raindrops
|
||||||
|
|
||||||
|
Welcome to Raindrops on Exercism's Go Track.
|
||||||
|
If you need help running the tests or submitting your code, check out `HELP.md`.
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
Raindrops is a slightly more complex version of the FizzBuzz challenge, a classic interview question.
|
||||||
|
|
||||||
|
## Instructions
|
||||||
|
|
||||||
|
Your task is to convert a number into its corresponding raindrop sounds.
|
||||||
|
|
||||||
|
If a given number:
|
||||||
|
|
||||||
|
- is divisible by 3, add "Pling" to the result.
|
||||||
|
- is divisible by 5, add "Plang" to the result.
|
||||||
|
- is divisible by 7, add "Plong" to the result.
|
||||||
|
- **is not** divisible by 3, 5, or 7, the result should be the number as a string.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
- 28 is divisible by 7, but not 3 or 5, so the result would be `"Plong"`.
|
||||||
|
- 30 is divisible by 3 and 5, but not 7, so the result would be `"PlingPlang"`.
|
||||||
|
- 34 is not divisible by 3, 5, or 7, so the result would be `"34"`.
|
||||||
|
|
||||||
|
~~~~exercism/note
|
||||||
|
A common way to test if one number is evenly divisible by another is to compare the [remainder][remainder] or [modulus][modulo] to zero.
|
||||||
|
Most languages provide operators or functions for one (or both) of these.
|
||||||
|
|
||||||
|
[remainder]: https://exercism.org/docs/programming/operators/remainder
|
||||||
|
[modulo]: https://en.wikipedia.org/wiki/Modulo_operation
|
||||||
|
~~~~
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
### Created by
|
||||||
|
|
||||||
|
- @nathany
|
||||||
|
|
||||||
|
### Contributed to by
|
||||||
|
|
||||||
|
- @alebaffa
|
||||||
|
- @bitfield
|
||||||
|
- @ekingery
|
||||||
|
- @ferhatelmas
|
||||||
|
- @hilary
|
||||||
|
- @kytrinyx
|
||||||
|
- @leenipper
|
||||||
|
- @petertseng
|
||||||
|
- @robphoenix
|
||||||
|
- @sebito91
|
||||||
|
- @soniakeys
|
||||||
|
- @tleen
|
||||||
|
- @eklatzer
|
||||||
|
|
||||||
|
### Based on
|
||||||
|
|
||||||
|
A variation on FizzBuzz, a famous technical interview question that is intended to weed out potential candidates. That question is itself derived from Fizz Buzz, a popular children's game for teaching division. - https://en.wikipedia.org/wiki/Fizz_buzz
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
package raindrops
|
||||||
|
|
||||||
|
// This is an auto-generated file. Do not change it manually. Run the generator to update the file.
|
||||||
|
// See https://github.com/exercism/go#synchronizing-tests-and-instructions
|
||||||
|
// Source: exercism/problem-specifications
|
||||||
|
// Commit: 25c2ae5 build(deps): bump fast-uri from 3.1.0 to 3.1.2 (#2653)
|
||||||
|
|
||||||
|
type testCase struct {
|
||||||
|
description string
|
||||||
|
input int
|
||||||
|
expected string
|
||||||
|
}
|
||||||
|
|
||||||
|
var testCases = []testCase{
|
||||||
|
{
|
||||||
|
description: "the sound for 1 is 1",
|
||||||
|
input: 1,
|
||||||
|
expected: "1",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "the sound for 3 is Pling",
|
||||||
|
input: 3,
|
||||||
|
expected: "Pling",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "the sound for 5 is Plang",
|
||||||
|
input: 5,
|
||||||
|
expected: "Plang",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "the sound for 7 is Plong",
|
||||||
|
input: 7,
|
||||||
|
expected: "Plong",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "the sound for 6 is Pling as it has a factor 3",
|
||||||
|
input: 6,
|
||||||
|
expected: "Pling",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "2 to the power 3 does not make a raindrop sound as 3 is the exponent not the base",
|
||||||
|
input: 8,
|
||||||
|
expected: "8",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "the sound for 9 is Pling as it has a factor 3",
|
||||||
|
input: 9,
|
||||||
|
expected: "Pling",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "the sound for 10 is Plang as it has a factor 5",
|
||||||
|
input: 10,
|
||||||
|
expected: "Plang",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "the sound for 14 is Plong as it has a factor of 7",
|
||||||
|
input: 14,
|
||||||
|
expected: "Plong",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "the sound for 15 is PlingPlang as it has factors 3 and 5",
|
||||||
|
input: 15,
|
||||||
|
expected: "PlingPlang",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "the sound for 21 is PlingPlong as it has factors 3 and 7",
|
||||||
|
input: 21,
|
||||||
|
expected: "PlingPlong",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "the sound for 25 is Plang as it has a factor 5",
|
||||||
|
input: 25,
|
||||||
|
expected: "Plang",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "the sound for 27 is Pling as it has a factor 3",
|
||||||
|
input: 27,
|
||||||
|
expected: "Pling",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "the sound for 35 is PlangPlong as it has factors 5 and 7",
|
||||||
|
input: 35,
|
||||||
|
expected: "PlangPlong",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "the sound for 49 is Plong as it has a factor 7",
|
||||||
|
input: 49,
|
||||||
|
expected: "Plong",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "the sound for 52 is 52",
|
||||||
|
input: 52,
|
||||||
|
expected: "52",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "the sound for 105 is PlingPlangPlong as it has factors 3, 5 and 7",
|
||||||
|
input: 105,
|
||||||
|
expected: "PlingPlangPlong",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "the sound for 3125 is Plang as it has a factor 5",
|
||||||
|
input: 3125,
|
||||||
|
expected: "Plang",
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
module raindrops
|
||||||
|
|
||||||
|
go 1.26
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package raindrops
|
||||||
|
|
||||||
|
func Convert(number int) string {
|
||||||
|
var NumberAsString = ""
|
||||||
|
var OutputString = ""
|
||||||
|
if ()
|
||||||
|
panic("Please implement the Convert function")
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package raindrops
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
func TestConvert(t *testing.T) {
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.description, func(t *testing.T) {
|
||||||
|
if actual := Convert(tc.input); actual != tc.expected {
|
||||||
|
t.Fatalf("Convert(%d) = %q, want: %q", tc.input, actual, tc.expected)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func BenchmarkConvert(b *testing.B) {
|
||||||
|
for b.Loop() {
|
||||||
|
for _, test := range testCases {
|
||||||
|
Convert(test.input)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"authors": [
|
||||||
|
"nikimanoledaki",
|
||||||
|
"micuffaro"
|
||||||
|
],
|
||||||
|
"files": {
|
||||||
|
"solution": [
|
||||||
|
"weather_forecast.go"
|
||||||
|
],
|
||||||
|
"test": [
|
||||||
|
"weather_forecast_test.go"
|
||||||
|
],
|
||||||
|
"exemplar": [
|
||||||
|
".meta/exemplar.go"
|
||||||
|
],
|
||||||
|
"invalidator": [
|
||||||
|
"go.mod"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"blurb": "Learn about comments by helping a weather station manage their weather forecasting program.",
|
||||||
|
"custom": {
|
||||||
|
"taskIdsEnabled": false
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"track":"go","exercise":"weather-forecast","id":"a9e0603772514be1b32ccb5505fce949","url":"https://exercism.org/tracks/go/exercises/weather-forecast","handle":"sanctushck","is_requester":true,"auto_approve":false}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# Help
|
||||||
|
|
||||||
|
## Running the tests
|
||||||
|
|
||||||
|
To run the tests run the command `go test` from within the exercise directory.
|
||||||
|
|
||||||
|
If the test suite contains benchmarks, you can run these with the `--bench` and `--benchmem`
|
||||||
|
flags:
|
||||||
|
|
||||||
|
go test -v --bench . --benchmem
|
||||||
|
|
||||||
|
Keep in mind that each reviewer will run benchmarks on a different machine, with
|
||||||
|
different specs, so the results from these benchmark tests may vary.
|
||||||
|
|
||||||
|
## Submitting your solution
|
||||||
|
|
||||||
|
You can submit your solution using the `exercism submit weather_forecast.go` command.
|
||||||
|
This command will upload your solution to the Exercism website and print the solution page's URL.
|
||||||
|
|
||||||
|
It's possible to submit an incomplete solution which allows you to:
|
||||||
|
|
||||||
|
- See how others have completed the exercise
|
||||||
|
- Request help from a mentor
|
||||||
|
|
||||||
|
## Need to get help?
|
||||||
|
|
||||||
|
If you'd like help solving the exercise, check the following pages:
|
||||||
|
|
||||||
|
- The [Go track's documentation](https://exercism.org/docs/tracks/go)
|
||||||
|
- The [Go track's programming category on the forum](https://forum.exercism.org/c/programming/go)
|
||||||
|
- [Exercism's programming category on the forum](https://forum.exercism.org/c/programming/5)
|
||||||
|
- The [Frequently Asked Questions](https://exercism.org/docs/using/faqs)
|
||||||
|
|
||||||
|
Should those resources not suffice, you could submit your (incomplete) solution to request mentoring.
|
||||||
|
|
||||||
|
To get help if you're having trouble, you can use one of the following resources:
|
||||||
|
|
||||||
|
- [How to Write Go Code](https://golang.org/doc/code.html)
|
||||||
|
- [Effective Go](https://golang.org/doc/effective_go.html)
|
||||||
|
- [Go Resources](http://golang.org/help)
|
||||||
|
- [StackOverflow](http://stackoverflow.com/questions/tagged/go)
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# Hints
|
||||||
|
|
||||||
|
## General
|
||||||
|
|
||||||
|
- A [documentation comment][comment] should be written directly before the entity that it is describing, start with the name of what it is describing, take the form of a sentence, and end with a period.
|
||||||
|
|
||||||
|
## 1. Document package weather
|
||||||
|
|
||||||
|
- The [package comment][comment] should be written directly before the package, start with `Package x`, and end with a period.
|
||||||
|
|
||||||
|
## 2. Document the CurrentCondition and CurrentLocation variables
|
||||||
|
|
||||||
|
- The [variable comment][variable comment] should be written right before the variable that it is describing, start with its name, and end with a period.
|
||||||
|
|
||||||
|
## 3. Document the Forecast() function
|
||||||
|
|
||||||
|
- The [function comment][comment] should come directly before the function, start with the name of the function and end with a period.
|
||||||
|
|
||||||
|
[comment]: https://golang.org/doc/effective_go.html#commentary
|
||||||
|
[variable comment]: https://dave.cheney.net/practical-go/presentations/qcon-china.html#_comments
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
# Weather Forecast
|
||||||
|
|
||||||
|
Welcome to Weather Forecast on Exercism's Go Track.
|
||||||
|
If you need help running the tests or submitting your code, check out `HELP.md`.
|
||||||
|
If you get stuck on the exercise, check out `HINTS.md`, but try and solve it without using those first :)
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
In the previous exercise, we saw that there are two ways to write comments in Go: single-line comments that are preceded by `//`, and multiline comment blocks that are wrapped with `/*` and `*/`.
|
||||||
|
|
||||||
|
## Documentation comments
|
||||||
|
|
||||||
|
In Go, comments play an important role in documenting code. They are used by the `godoc` command, which extracts these comments to create documentation about Go packages. A documentation comment should be a complete sentence that starts with the name of the thing being described and ends with a period.
|
||||||
|
|
||||||
|
Comments should precede packages as well as exported identifiers, for example exported functions, methods, package variables, constants, and structs, which you will learn more about in the next exercises.
|
||||||
|
|
||||||
|
A package-level variable can look like this:
|
||||||
|
|
||||||
|
```go
|
||||||
|
// TemperatureCelsius represents a certain temperature in degrees Celsius.
|
||||||
|
var TemperatureCelsius float64
|
||||||
|
```
|
||||||
|
|
||||||
|
## Package comments
|
||||||
|
|
||||||
|
Package comments should be written directly before a package clause (`package x`) and begin with `Package x ...` like this:
|
||||||
|
|
||||||
|
```go
|
||||||
|
// Package kelvin provides tools to convert
|
||||||
|
// temperatures to and from Kelvin.
|
||||||
|
package kelvin
|
||||||
|
```
|
||||||
|
|
||||||
|
## Function comments
|
||||||
|
|
||||||
|
A function comment should be written directly before the function declaration. It should be a full sentence that starts with the function name. For example, an exported comment for the function `Calculate` should take the form `Calculate ...`. It should also explain what arguments the function takes, what it does with them, and what its return values mean, ending in a period):
|
||||||
|
|
||||||
|
```go
|
||||||
|
// CelsiusFreezingTemp returns an integer value equal to the temperature at which water freezes in degrees Celsius.
|
||||||
|
func CelsiusFreezingTemp() int {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Instructions
|
||||||
|
|
||||||
|
Goblinocus is a country that takes its weather forecast very seriously. Since you are a renowned, responsible and proficient developer, they asked you to write a program that can forecast the current weather condition of various cities in Goblinocus. You were busy at the time and asked one of your friends to do the job instead. After a while, the president of Goblinocus contacted you and said they do not understand your friend's code. When you check the code, you discover that your friend did not act as a responsible programmer and there are no comments in the code. You feel obligated to clarify the program so goblins can understand them as well.
|
||||||
|
|
||||||
|
## 1. Document package weather
|
||||||
|
|
||||||
|
Since goblins are not as smart as you are, they forgot what the package should do for them. Please write a comment for `package weather` that describes its contents. The package comment should introduce the package and provide information relevant to the package as a whole.
|
||||||
|
|
||||||
|
## 2. Document the CurrentCondition and CurrentLocation variables
|
||||||
|
|
||||||
|
The president of Goblinocus is a bit paranoid and fears uncommented variables are used to destroy their country. Please clarify the usage of the package variables `CurrentCondition` and `CurrentLocation` and put the president's mind at ease. This should tell any user of the package what information the variables store, and what they can do with it.
|
||||||
|
|
||||||
|
## 3. Document the Forecast() function
|
||||||
|
|
||||||
|
Goblinocus forecast operators want to know what the `Forecast()` function does (but do not tell them how it works, since unfortunately, they will get more confused). Please write a comment for this function that describes what the function does, but not how it does it.
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
### Created by
|
||||||
|
|
||||||
|
- @nikimanoledaki
|
||||||
|
- @micuffaro
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
module weather
|
||||||
|
|
||||||
|
go 1.18
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
// Package weather provides tools to help in weather forecast.
|
||||||
|
package weather
|
||||||
|
|
||||||
|
// CurrentCondition represents the current weather condition.
|
||||||
|
var CurrentCondition string
|
||||||
|
// CurrentLocation represents the current location to get weather information.
|
||||||
|
var CurrentLocation string
|
||||||
|
|
||||||
|
// Forecast returns information about the weather in the given location.
|
||||||
|
func Forecast(city, condition string) string {
|
||||||
|
CurrentLocation, CurrentCondition = city, condition
|
||||||
|
return CurrentLocation + " - current weather condition: " + CurrentCondition
|
||||||
|
}
|
||||||
@@ -0,0 +1,140 @@
|
|||||||
|
package weather
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"go/ast"
|
||||||
|
"go/parser"
|
||||||
|
"go/token"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestComments(t *testing.T) {
|
||||||
|
filename := "weather_forecast.go"
|
||||||
|
|
||||||
|
fs := token.NewFileSet()
|
||||||
|
f, err := parser.ParseFile(fs, filename, nil, parser.ParseComments)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
wantedComments := 4
|
||||||
|
got := len(f.Comments)
|
||||||
|
if got != wantedComments {
|
||||||
|
t.Errorf("Incorrect number of comments: got %d, want %d", got, wantedComments)
|
||||||
|
}
|
||||||
|
|
||||||
|
testPackageComment(t, f)
|
||||||
|
|
||||||
|
ast.Inspect(f, func(node ast.Node) bool {
|
||||||
|
switch n := node.(type) {
|
||||||
|
case *ast.GenDecl:
|
||||||
|
if n.Lparen.IsValid() {
|
||||||
|
for _, v := range n.Specs {
|
||||||
|
testBlockIdentifierComment(t, v.(*ast.ValueSpec))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
testIdentifierComment(t, n)
|
||||||
|
}
|
||||||
|
case *ast.FuncDecl:
|
||||||
|
testFunctionComment(t, n)
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func testPackageComment(t *testing.T, node *ast.File) {
|
||||||
|
t.Helper()
|
||||||
|
if node.Doc == nil {
|
||||||
|
t.Errorf("Package weather should have a comment")
|
||||||
|
}
|
||||||
|
|
||||||
|
packageName := node.Name.Name
|
||||||
|
want := "Package " + packageName
|
||||||
|
packageComment := node.Doc.Text()
|
||||||
|
|
||||||
|
if ok, errStr := testComment("Package", packageName, packageComment, want); !ok {
|
||||||
|
t.Error(errStr)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
func testIdentifierComment(t *testing.T, node *ast.GenDecl) {
|
||||||
|
t.Helper()
|
||||||
|
|
||||||
|
identifierName := node.Specs[0].(*ast.ValueSpec).Names[0].Name
|
||||||
|
if node.Doc == nil {
|
||||||
|
t.Errorf("Exported identifier %s should have a comment", identifierName)
|
||||||
|
}
|
||||||
|
|
||||||
|
identifierComment := node.Doc.Text()
|
||||||
|
want := identifierName
|
||||||
|
|
||||||
|
if ok, errStr := testComment("Variable", identifierName, identifierComment, want); !ok {
|
||||||
|
t.Error(errStr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func testBlockIdentifierComment(t *testing.T, node *ast.ValueSpec) {
|
||||||
|
t.Helper()
|
||||||
|
|
||||||
|
identifierName := node.Names[0].Name
|
||||||
|
if node.Doc == nil {
|
||||||
|
t.Errorf("Exported identifier %s should have a comment", identifierName)
|
||||||
|
}
|
||||||
|
|
||||||
|
identifierComment := node.Doc.Text()
|
||||||
|
want := identifierName
|
||||||
|
|
||||||
|
if ok, errStr := testComment("Variable", identifierName, identifierComment, want); !ok {
|
||||||
|
t.Error(errStr)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func testFunctionComment(t *testing.T, node *ast.FuncDecl) {
|
||||||
|
t.Helper()
|
||||||
|
funcName := node.Name.Name
|
||||||
|
if node.Doc == nil {
|
||||||
|
t.Errorf("Exported function %s() should have a comment", funcName)
|
||||||
|
}
|
||||||
|
|
||||||
|
funcComment := node.Doc.Text()
|
||||||
|
want := funcName
|
||||||
|
|
||||||
|
if ok, errStr := testComment("Function", funcName, funcComment, want); !ok {
|
||||||
|
t.Error(errStr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func testComment(entityKind, entityName, comment, wantedPrefix string) (ok bool, errString string) {
|
||||||
|
|
||||||
|
trimmedComment := strings.TrimSpace(comment)
|
||||||
|
lowerEntity := strings.ToLower(entityKind)
|
||||||
|
|
||||||
|
// Check if comment has wanted prefix
|
||||||
|
if !strings.HasPrefix(trimmedComment, wantedPrefix) {
|
||||||
|
errorString := fmt.Sprintf("%s comment for %s '%s' should start with '// %s ...': got '// %s'",
|
||||||
|
entityKind, lowerEntity, entityName, wantedPrefix, trimmedComment)
|
||||||
|
return false, errorString
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if comment content is empty
|
||||||
|
commentContent := strings.TrimPrefix(trimmedComment, wantedPrefix)
|
||||||
|
commentContent = strings.TrimSpace(commentContent)
|
||||||
|
commentContent = strings.TrimSuffix(commentContent, ".")
|
||||||
|
|
||||||
|
if commentContent == "" {
|
||||||
|
lowerEntity := strings.ToLower(entityKind)
|
||||||
|
errorString := fmt.Sprintf("%s comment of '%s' should provide a description of the %s, e.g '// %s <%s_description>'",
|
||||||
|
entityKind, entityName, lowerEntity, wantedPrefix, lowerEntity)
|
||||||
|
return false, errorString
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if comment ends in a period
|
||||||
|
if !strings.HasSuffix(trimmedComment, ".") {
|
||||||
|
return false, fmt.Sprintf("%s comment for %s '%s' should end with a period (.)",
|
||||||
|
entityKind, lowerEntity, entityName)
|
||||||
|
}
|
||||||
|
|
||||||
|
return true, ""
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"authors": [],
|
||||||
|
"contributors": [
|
||||||
|
"behrtam",
|
||||||
|
"cmccandless",
|
||||||
|
"crazymykl",
|
||||||
|
"Dog",
|
||||||
|
"dotrungkien",
|
||||||
|
"henrik",
|
||||||
|
"ikhadykin",
|
||||||
|
"kytrinyx",
|
||||||
|
"lowks",
|
||||||
|
"markijbema",
|
||||||
|
"N-Parsons",
|
||||||
|
"n1k0",
|
||||||
|
"pheanex",
|
||||||
|
"roadfoodr",
|
||||||
|
"sjakobi",
|
||||||
|
"thomasjpfan",
|
||||||
|
"tqa236",
|
||||||
|
"vgerak",
|
||||||
|
"yawpitch"
|
||||||
|
],
|
||||||
|
"files": {
|
||||||
|
"solution": [
|
||||||
|
"anagram.py"
|
||||||
|
],
|
||||||
|
"test": [
|
||||||
|
"anagram_test.py"
|
||||||
|
],
|
||||||
|
"example": [
|
||||||
|
".meta/example.py"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"blurb": "Given a word and a list of possible anagrams, select the correct sublist.",
|
||||||
|
"source": "Inspired by the Extreme Startup game",
|
||||||
|
"source_url": "https://github.com/rchatley/extreme_startup"
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"track":"python","exercise":"anagram","id":"7031d739171c414490bfc8ee0955d6e0","url":"https://exercism.org/tracks/python/exercises/anagram","handle":"sanctushck","is_requester":true,"auto_approve":false}
|
||||||
@@ -0,0 +1,130 @@
|
|||||||
|
# Help
|
||||||
|
|
||||||
|
## Running the tests
|
||||||
|
|
||||||
|
We use [pytest][pytest: Getting Started Guide] as our website test runner.
|
||||||
|
You will need to install `pytest` on your development machine if you want to run tests for the Python track locally.
|
||||||
|
You should also install the following `pytest` plugins:
|
||||||
|
|
||||||
|
- [pytest-cache][pytest-cache]
|
||||||
|
- [pytest-subtests][pytest-subtests]
|
||||||
|
|
||||||
|
Extended information can be found in our website [Python testing guide][Python track tests page].
|
||||||
|
|
||||||
|
|
||||||
|
### Running Tests
|
||||||
|
|
||||||
|
To run the included tests, navigate to the folder where the exercise is stored using `cd` in your terminal (_replace `{exercise-folder-location}` below with your path_).
|
||||||
|
Test files usually end in `_test.py`, and are the same tests that run on the website when a solution is uploaded.
|
||||||
|
|
||||||
|
Linux/MacOS
|
||||||
|
```bash
|
||||||
|
$ cd {path/to/exercise-folder-location}
|
||||||
|
```
|
||||||
|
|
||||||
|
Windows
|
||||||
|
```powershell
|
||||||
|
PS C:\Users\foobar> cd {path\to\exercise-folder-location}
|
||||||
|
```
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
Next, run the `pytest` command in your terminal, replacing `{exercise_test.py}` with the name of the test file:
|
||||||
|
|
||||||
|
Linux/MacOS
|
||||||
|
```bash
|
||||||
|
$ python3 -m pytest -o markers=task {exercise_test.py}
|
||||||
|
==================== 7 passed in 0.08s ====================
|
||||||
|
```
|
||||||
|
|
||||||
|
Windows
|
||||||
|
```powershell
|
||||||
|
PS C:\Users\foobar> py -m pytest -o markers=task {exercise_test.py}
|
||||||
|
==================== 7 passed in 0.08s ====================
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Common options
|
||||||
|
- `-o` : override default `pytest.ini` (_you can use this to avoid marker warnings_)
|
||||||
|
- `-v` : enable verbose output.
|
||||||
|
- `-x` : stop running tests on first failure.
|
||||||
|
- `--ff` : run failures from previous test before running other test cases.
|
||||||
|
|
||||||
|
For additional options, use `python3 -m pytest -h` or `py -m pytest -h`.
|
||||||
|
|
||||||
|
|
||||||
|
### Fixing warnings
|
||||||
|
|
||||||
|
If you do not use `pytest -o markers=task` when invoking `pytest`, you might receive a `PytestUnknownMarkWarning` for tests that use our new syntax:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
PytestUnknownMarkWarning: Unknown pytest.mark.task - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
|
||||||
|
```
|
||||||
|
|
||||||
|
To avoid typing `pytest -o markers=task` for every test you run, you can use a `pytest.ini` configuration file.
|
||||||
|
We have made one that can be downloaded from the top level of the Python track directory: [pytest.ini][pytest.ini].
|
||||||
|
|
||||||
|
You can also create your own `pytest.ini` file with the following content:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[pytest]
|
||||||
|
markers =
|
||||||
|
task: A concept exercise task.
|
||||||
|
```
|
||||||
|
|
||||||
|
Placing the `pytest.ini` file in the _root_ or _working_ directory for your Python track exercises will register the marks and stop the warnings.
|
||||||
|
More information on pytest marks can be found in the `pytest` documentation on [marking test functions][pytest: marking test functions with attributes] and the `pytest` documentation on [working with custom markers][pytest: working with custom markers].
|
||||||
|
|
||||||
|
Information on customizing pytest configurations can be found in the `pytest` documentation on [configuration file formats][pytest: configuration file formats].
|
||||||
|
|
||||||
|
|
||||||
|
### Extending your IDE or Code Editor
|
||||||
|
|
||||||
|
Many IDEs and code editors have built-in support for using `pytest` and other code quality tools.
|
||||||
|
Some community-sourced options can be found on our [Python track tools page][Python track tools page].
|
||||||
|
|
||||||
|
[Pytest: Getting Started Guide]: https://docs.pytest.org/en/latest/getting-started.html
|
||||||
|
[Python track tools page]: https://exercism.org/docs/tracks/python/tools
|
||||||
|
[Python track tests page]: https://exercism.org/docs/tracks/python/tests
|
||||||
|
[pytest-cache]:http://pythonhosted.org/pytest-cache/
|
||||||
|
[pytest-subtests]:https://github.com/pytest-dev/pytest-subtests
|
||||||
|
[pytest.ini]: https://github.com/exercism/python/blob/main/pytest.ini
|
||||||
|
[pytest: configuration file formats]: https://docs.pytest.org/en/6.2.x/customize.html#configuration-file-formats
|
||||||
|
[pytest: marking test functions with attributes]: https://docs.pytest.org/en/6.2.x/mark.html#raising-errors-on-unknown-marks
|
||||||
|
[pytest: working with custom markers]: https://docs.pytest.org/en/6.2.x/example/markers.html#working-with-custom-markers
|
||||||
|
|
||||||
|
## Submitting your solution
|
||||||
|
|
||||||
|
You can submit your solution using the `exercism submit anagram.py` command.
|
||||||
|
This command will upload your solution to the Exercism website and print the solution page's URL.
|
||||||
|
|
||||||
|
It's possible to submit an incomplete solution which allows you to:
|
||||||
|
|
||||||
|
- See how others have completed the exercise
|
||||||
|
- Request help from a mentor
|
||||||
|
|
||||||
|
## Need to get help?
|
||||||
|
|
||||||
|
If you'd like help solving the exercise, check the following pages:
|
||||||
|
|
||||||
|
- The [Python track's documentation](https://exercism.org/docs/tracks/python)
|
||||||
|
- The [Python track's programming category on the forum](https://forum.exercism.org/c/programming/python)
|
||||||
|
- [Exercism's programming category on the forum](https://forum.exercism.org/c/programming/5)
|
||||||
|
- The [Frequently Asked Questions](https://exercism.org/docs/using/faqs)
|
||||||
|
|
||||||
|
Should those resources not suffice, you could submit your (incomplete) solution to request mentoring.
|
||||||
|
|
||||||
|
Below are some resources for getting help if you run into trouble:
|
||||||
|
|
||||||
|
- [The PSF](https://www.python.org) hosts Python downloads, documentation, and community resources.
|
||||||
|
- [The Exercism Community on Discord](https://exercism.org/r/discord)
|
||||||
|
- [Python Community on Discord](https://pythondiscord.com/) is a very helpful and active community.
|
||||||
|
- [/r/learnpython/](https://www.reddit.com/r/learnpython/) is a subreddit designed for Python learners.
|
||||||
|
- [#python on Libera.chat](https://www.python.org/community/irc/) this is where the core developers for the language hang out and get work done.
|
||||||
|
- [Python Community Forums](https://discuss.python.org/)
|
||||||
|
- [Free Code Camp Community Forums](https://forum.freecodecamp.org/)
|
||||||
|
- [CodeNewbie Community Help Tag](https://community.codenewbie.org/t/help)
|
||||||
|
- [Pythontutor](http://pythontutor.com/) for stepping through small code snippets visually.
|
||||||
|
|
||||||
|
Additionally, [StackOverflow](http://stackoverflow.com/questions/tagged/python) is a good spot to search for your problem/question to see if it has been answered already.
|
||||||
|
If not - you can always [ask](https://stackoverflow.com/help/how-to-ask) or [answer](https://stackoverflow.com/help/how-to-answer) someone else's question.
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
# Anagram
|
||||||
|
|
||||||
|
Welcome to Anagram on Exercism's Python Track.
|
||||||
|
If you need help running the tests or submitting your code, check out `HELP.md`.
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
At a garage sale, you find a lovely vintage typewriter at a bargain price!
|
||||||
|
Excitedly, you rush home, insert a sheet of paper, and start typing away.
|
||||||
|
However, your excitement wanes when you examine the output: all words are garbled!
|
||||||
|
For example, it prints "stop" instead of "post" and "least" instead of "stale."
|
||||||
|
Carefully, you try again, but now it prints "spot" and "slate."
|
||||||
|
After some experimentation, you find there is a random delay before each letter is printed, which messes up the order.
|
||||||
|
You now understand why they sold it for so little money!
|
||||||
|
|
||||||
|
You realize this quirk allows you to generate anagrams, which are words formed by rearranging the letters of another word.
|
||||||
|
Pleased with your finding, you spend the rest of the day generating hundreds of anagrams.
|
||||||
|
|
||||||
|
## Instructions
|
||||||
|
|
||||||
|
Given a target word and one or more candidate words, your task is to find the candidates that are anagrams of the target.
|
||||||
|
|
||||||
|
An anagram is a rearrangement of letters to form a new word: for example `"owns"` is an anagram of `"snow"`.
|
||||||
|
A word is _not_ its own anagram: for example, `"stop"` is not an anagram of `"stop"`.
|
||||||
|
|
||||||
|
The target word and candidate words are made up of one or more ASCII alphabetic characters (`A`-`Z` and `a`-`z`).
|
||||||
|
Lowercase and uppercase characters are equivalent: for example, `"PoTS"` is an anagram of `"sTOp"`, but `"StoP"` is not an anagram of `"sTOp"`.
|
||||||
|
The words you need to find should be taken from the candidate words, using the same letter case.
|
||||||
|
|
||||||
|
Given the target `"stone"` and the candidate words `"stone"`, `"tones"`, `"banana"`, `"tons"`, `"notes"`, and `"Seton"`, the anagram words you need to find are `"tones"`, `"notes"`, and `"Seton"`.
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
### Contributed to by
|
||||||
|
|
||||||
|
- @behrtam
|
||||||
|
- @cmccandless
|
||||||
|
- @crazymykl
|
||||||
|
- @Dog
|
||||||
|
- @dotrungkien
|
||||||
|
- @henrik
|
||||||
|
- @ikhadykin
|
||||||
|
- @kytrinyx
|
||||||
|
- @lowks
|
||||||
|
- @markijbema
|
||||||
|
- @N-Parsons
|
||||||
|
- @n1k0
|
||||||
|
- @pheanex
|
||||||
|
- @roadfoodr
|
||||||
|
- @sjakobi
|
||||||
|
- @thomasjpfan
|
||||||
|
- @tqa236
|
||||||
|
- @vgerak
|
||||||
|
- @yawpitch
|
||||||
|
|
||||||
|
### Based on
|
||||||
|
|
||||||
|
Inspired by the Extreme Startup game - https://github.com/rchatley/extreme_startup
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,12 @@
|
|||||||
|
def find_anagrams(word, candidates):
|
||||||
|
anagrams_list: list[str] = []
|
||||||
|
for candidate in candidates:
|
||||||
|
if word.lower() != candidate.lower() and len(word) == len(candidate):
|
||||||
|
is_anagram_flag: bool = True
|
||||||
|
for letter in word.lower():
|
||||||
|
if word.lower().count(letter) != candidate.lower().count(letter):
|
||||||
|
is_anagram_flag = False
|
||||||
|
break
|
||||||
|
if is_anagram_flag:
|
||||||
|
anagrams_list.append(candidate)
|
||||||
|
return anagrams_list
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
# These tests are auto-generated with test data from:
|
||||||
|
# https://github.com/exercism/problem-specifications/tree/main/exercises/anagram/canonical-data.json
|
||||||
|
# File last updated on 2024-02-28
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
from anagram import (
|
||||||
|
find_anagrams,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class AnagramTest(unittest.TestCase):
|
||||||
|
def test_no_matches(self):
|
||||||
|
candidates = ["hello", "world", "zombies", "pants"]
|
||||||
|
expected = []
|
||||||
|
self.assertCountEqual(find_anagrams("diaper", candidates), expected)
|
||||||
|
|
||||||
|
def test_detects_two_anagrams(self):
|
||||||
|
candidates = ["lemons", "cherry", "melons"]
|
||||||
|
expected = ["lemons", "melons"]
|
||||||
|
self.assertCountEqual(find_anagrams("solemn", candidates), expected)
|
||||||
|
|
||||||
|
def test_does_not_detect_anagram_subsets(self):
|
||||||
|
candidates = ["dog", "goody"]
|
||||||
|
expected = []
|
||||||
|
self.assertCountEqual(find_anagrams("good", candidates), expected)
|
||||||
|
|
||||||
|
def test_detects_anagram(self):
|
||||||
|
candidates = ["enlists", "google", "inlets", "banana"]
|
||||||
|
expected = ["inlets"]
|
||||||
|
self.assertCountEqual(find_anagrams("listen", candidates), expected)
|
||||||
|
|
||||||
|
def test_detects_three_anagrams(self):
|
||||||
|
candidates = ["gallery", "ballerina", "regally", "clergy", "largely", "leading"]
|
||||||
|
expected = ["gallery", "regally", "largely"]
|
||||||
|
self.assertCountEqual(find_anagrams("allergy", candidates), expected)
|
||||||
|
|
||||||
|
def test_detects_multiple_anagrams_with_different_case(self):
|
||||||
|
candidates = ["Eons", "ONES"]
|
||||||
|
expected = ["Eons", "ONES"]
|
||||||
|
self.assertCountEqual(find_anagrams("nose", candidates), expected)
|
||||||
|
|
||||||
|
def test_does_not_detect_non_anagrams_with_identical_checksum(self):
|
||||||
|
candidates = ["last"]
|
||||||
|
expected = []
|
||||||
|
self.assertCountEqual(find_anagrams("mass", candidates), expected)
|
||||||
|
|
||||||
|
def test_detects_anagrams_case_insensitively(self):
|
||||||
|
candidates = ["cashregister", "Carthorse", "radishes"]
|
||||||
|
expected = ["Carthorse"]
|
||||||
|
self.assertCountEqual(find_anagrams("Orchestra", candidates), expected)
|
||||||
|
|
||||||
|
def test_detects_anagrams_using_case_insensitive_subject(self):
|
||||||
|
candidates = ["cashregister", "carthorse", "radishes"]
|
||||||
|
expected = ["carthorse"]
|
||||||
|
self.assertCountEqual(find_anagrams("Orchestra", candidates), expected)
|
||||||
|
|
||||||
|
def test_detects_anagrams_using_case_insensitive_possible_matches(self):
|
||||||
|
candidates = ["cashregister", "Carthorse", "radishes"]
|
||||||
|
expected = ["Carthorse"]
|
||||||
|
self.assertCountEqual(find_anagrams("orchestra", candidates), expected)
|
||||||
|
|
||||||
|
def test_does_not_detect_an_anagram_if_the_original_word_is_repeated(self):
|
||||||
|
candidates = ["goGoGO"]
|
||||||
|
expected = []
|
||||||
|
self.assertCountEqual(find_anagrams("go", candidates), expected)
|
||||||
|
|
||||||
|
def test_anagrams_must_use_all_letters_exactly_once(self):
|
||||||
|
candidates = ["patter"]
|
||||||
|
expected = []
|
||||||
|
self.assertCountEqual(find_anagrams("tapper", candidates), expected)
|
||||||
|
|
||||||
|
def test_words_are_not_anagrams_of_themselves(self):
|
||||||
|
candidates = ["BANANA"]
|
||||||
|
expected = []
|
||||||
|
self.assertCountEqual(find_anagrams("BANANA", candidates), expected)
|
||||||
|
|
||||||
|
def test_words_are_not_anagrams_of_themselves_even_if_letter_case_is_partially_different(
|
||||||
|
self,
|
||||||
|
):
|
||||||
|
candidates = ["Banana"]
|
||||||
|
expected = []
|
||||||
|
self.assertCountEqual(find_anagrams("BANANA", candidates), expected)
|
||||||
|
|
||||||
|
def test_words_are_not_anagrams_of_themselves_even_if_letter_case_is_completely_different(
|
||||||
|
self,
|
||||||
|
):
|
||||||
|
candidates = ["banana"]
|
||||||
|
expected = []
|
||||||
|
self.assertCountEqual(find_anagrams("BANANA", candidates), expected)
|
||||||
|
|
||||||
|
def test_words_other_than_themselves_can_be_anagrams(self):
|
||||||
|
candidates = ["LISTEN", "Silent"]
|
||||||
|
expected = ["Silent"]
|
||||||
|
self.assertCountEqual(find_anagrams("LISTEN", candidates), expected)
|
||||||
|
|
||||||
|
def test_handles_case_of_greek_letters(self):
|
||||||
|
candidates = ["ΒΓΑ", "ΒΓΔ", "γβα", "αβγ"]
|
||||||
|
expected = ["ΒΓΑ", "γβα"]
|
||||||
|
self.assertCountEqual(find_anagrams("ΑΒΓ", candidates), expected)
|
||||||
|
|
||||||
|
def test_different_characters_may_have_the_same_bytes(self):
|
||||||
|
candidates = ["€a"]
|
||||||
|
expected = []
|
||||||
|
self.assertCountEqual(find_anagrams("a⬂", candidates), expected)
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"authors": [
|
||||||
|
"pheanex"
|
||||||
|
],
|
||||||
|
"contributors": [
|
||||||
|
"BethanyG",
|
||||||
|
"cmccandless",
|
||||||
|
"Dog",
|
||||||
|
"K4cePhoenix",
|
||||||
|
"sukovanej",
|
||||||
|
"tqa236"
|
||||||
|
],
|
||||||
|
"files": {
|
||||||
|
"solution": [
|
||||||
|
"armstrong_numbers.py"
|
||||||
|
],
|
||||||
|
"test": [
|
||||||
|
"armstrong_numbers_test.py"
|
||||||
|
],
|
||||||
|
"example": [
|
||||||
|
".meta/example.py"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"blurb": "Determine if a number is an Armstrong number.",
|
||||||
|
"source": "Wikipedia",
|
||||||
|
"source_url": "https://en.wikipedia.org/wiki/Narcissistic_number"
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"track":"python","exercise":"armstrong-numbers","id":"638a18575d6e4c5cb072d8f6d5dfe702","url":"https://exercism.org/tracks/python/exercises/armstrong-numbers","handle":"sanctushck","is_requester":true,"auto_approve":false}
|
||||||
@@ -0,0 +1,130 @@
|
|||||||
|
# Help
|
||||||
|
|
||||||
|
## Running the tests
|
||||||
|
|
||||||
|
We use [pytest][pytest: Getting Started Guide] as our website test runner.
|
||||||
|
You will need to install `pytest` on your development machine if you want to run tests for the Python track locally.
|
||||||
|
You should also install the following `pytest` plugins:
|
||||||
|
|
||||||
|
- [pytest-cache][pytest-cache]
|
||||||
|
- [pytest-subtests][pytest-subtests]
|
||||||
|
|
||||||
|
Extended information can be found in our website [Python testing guide][Python track tests page].
|
||||||
|
|
||||||
|
|
||||||
|
### Running Tests
|
||||||
|
|
||||||
|
To run the included tests, navigate to the folder where the exercise is stored using `cd` in your terminal (_replace `{exercise-folder-location}` below with your path_).
|
||||||
|
Test files usually end in `_test.py`, and are the same tests that run on the website when a solution is uploaded.
|
||||||
|
|
||||||
|
Linux/MacOS
|
||||||
|
```bash
|
||||||
|
$ cd {path/to/exercise-folder-location}
|
||||||
|
```
|
||||||
|
|
||||||
|
Windows
|
||||||
|
```powershell
|
||||||
|
PS C:\Users\foobar> cd {path\to\exercise-folder-location}
|
||||||
|
```
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
Next, run the `pytest` command in your terminal, replacing `{exercise_test.py}` with the name of the test file:
|
||||||
|
|
||||||
|
Linux/MacOS
|
||||||
|
```bash
|
||||||
|
$ python3 -m pytest -o markers=task {exercise_test.py}
|
||||||
|
==================== 7 passed in 0.08s ====================
|
||||||
|
```
|
||||||
|
|
||||||
|
Windows
|
||||||
|
```powershell
|
||||||
|
PS C:\Users\foobar> py -m pytest -o markers=task {exercise_test.py}
|
||||||
|
==================== 7 passed in 0.08s ====================
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Common options
|
||||||
|
- `-o` : override default `pytest.ini` (_you can use this to avoid marker warnings_)
|
||||||
|
- `-v` : enable verbose output.
|
||||||
|
- `-x` : stop running tests on first failure.
|
||||||
|
- `--ff` : run failures from previous test before running other test cases.
|
||||||
|
|
||||||
|
For additional options, use `python3 -m pytest -h` or `py -m pytest -h`.
|
||||||
|
|
||||||
|
|
||||||
|
### Fixing warnings
|
||||||
|
|
||||||
|
If you do not use `pytest -o markers=task` when invoking `pytest`, you might receive a `PytestUnknownMarkWarning` for tests that use our new syntax:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
PytestUnknownMarkWarning: Unknown pytest.mark.task - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
|
||||||
|
```
|
||||||
|
|
||||||
|
To avoid typing `pytest -o markers=task` for every test you run, you can use a `pytest.ini` configuration file.
|
||||||
|
We have made one that can be downloaded from the top level of the Python track directory: [pytest.ini][pytest.ini].
|
||||||
|
|
||||||
|
You can also create your own `pytest.ini` file with the following content:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[pytest]
|
||||||
|
markers =
|
||||||
|
task: A concept exercise task.
|
||||||
|
```
|
||||||
|
|
||||||
|
Placing the `pytest.ini` file in the _root_ or _working_ directory for your Python track exercises will register the marks and stop the warnings.
|
||||||
|
More information on pytest marks can be found in the `pytest` documentation on [marking test functions][pytest: marking test functions with attributes] and the `pytest` documentation on [working with custom markers][pytest: working with custom markers].
|
||||||
|
|
||||||
|
Information on customizing pytest configurations can be found in the `pytest` documentation on [configuration file formats][pytest: configuration file formats].
|
||||||
|
|
||||||
|
|
||||||
|
### Extending your IDE or Code Editor
|
||||||
|
|
||||||
|
Many IDEs and code editors have built-in support for using `pytest` and other code quality tools.
|
||||||
|
Some community-sourced options can be found on our [Python track tools page][Python track tools page].
|
||||||
|
|
||||||
|
[Pytest: Getting Started Guide]: https://docs.pytest.org/en/latest/getting-started.html
|
||||||
|
[Python track tools page]: https://exercism.org/docs/tracks/python/tools
|
||||||
|
[Python track tests page]: https://exercism.org/docs/tracks/python/tests
|
||||||
|
[pytest-cache]:http://pythonhosted.org/pytest-cache/
|
||||||
|
[pytest-subtests]:https://github.com/pytest-dev/pytest-subtests
|
||||||
|
[pytest.ini]: https://github.com/exercism/python/blob/main/pytest.ini
|
||||||
|
[pytest: configuration file formats]: https://docs.pytest.org/en/6.2.x/customize.html#configuration-file-formats
|
||||||
|
[pytest: marking test functions with attributes]: https://docs.pytest.org/en/6.2.x/mark.html#raising-errors-on-unknown-marks
|
||||||
|
[pytest: working with custom markers]: https://docs.pytest.org/en/6.2.x/example/markers.html#working-with-custom-markers
|
||||||
|
|
||||||
|
## Submitting your solution
|
||||||
|
|
||||||
|
You can submit your solution using the `exercism submit armstrong_numbers.py` command.
|
||||||
|
This command will upload your solution to the Exercism website and print the solution page's URL.
|
||||||
|
|
||||||
|
It's possible to submit an incomplete solution which allows you to:
|
||||||
|
|
||||||
|
- See how others have completed the exercise
|
||||||
|
- Request help from a mentor
|
||||||
|
|
||||||
|
## Need to get help?
|
||||||
|
|
||||||
|
If you'd like help solving the exercise, check the following pages:
|
||||||
|
|
||||||
|
- The [Python track's documentation](https://exercism.org/docs/tracks/python)
|
||||||
|
- The [Python track's programming category on the forum](https://forum.exercism.org/c/programming/python)
|
||||||
|
- [Exercism's programming category on the forum](https://forum.exercism.org/c/programming/5)
|
||||||
|
- The [Frequently Asked Questions](https://exercism.org/docs/using/faqs)
|
||||||
|
|
||||||
|
Should those resources not suffice, you could submit your (incomplete) solution to request mentoring.
|
||||||
|
|
||||||
|
Below are some resources for getting help if you run into trouble:
|
||||||
|
|
||||||
|
- [The PSF](https://www.python.org) hosts Python downloads, documentation, and community resources.
|
||||||
|
- [The Exercism Community on Discord](https://exercism.org/r/discord)
|
||||||
|
- [Python Community on Discord](https://pythondiscord.com/) is a very helpful and active community.
|
||||||
|
- [/r/learnpython/](https://www.reddit.com/r/learnpython/) is a subreddit designed for Python learners.
|
||||||
|
- [#python on Libera.chat](https://www.python.org/community/irc/) this is where the core developers for the language hang out and get work done.
|
||||||
|
- [Python Community Forums](https://discuss.python.org/)
|
||||||
|
- [Free Code Camp Community Forums](https://forum.freecodecamp.org/)
|
||||||
|
- [CodeNewbie Community Help Tag](https://community.codenewbie.org/t/help)
|
||||||
|
- [Pythontutor](http://pythontutor.com/) for stepping through small code snippets visually.
|
||||||
|
|
||||||
|
Additionally, [StackOverflow](http://stackoverflow.com/questions/tagged/python) is a good spot to search for your problem/question to see if it has been answered already.
|
||||||
|
If not - you can always [ask](https://stackoverflow.com/help/how-to-ask) or [answer](https://stackoverflow.com/help/how-to-answer) someone else's question.
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# Armstrong Numbers
|
||||||
|
|
||||||
|
Welcome to Armstrong Numbers on Exercism's Python Track.
|
||||||
|
If you need help running the tests or submitting your code, check out `HELP.md`.
|
||||||
|
|
||||||
|
## Instructions
|
||||||
|
|
||||||
|
An [Armstrong number][armstrong-number] is a number that is the sum of its own digits each raised to the power of the number of digits.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
- 9 is an Armstrong number, because `9 = 9^1 = 9`
|
||||||
|
- 10 is _not_ an Armstrong number, because `10 != 1^2 + 0^2 = 1`
|
||||||
|
- 153 is an Armstrong number, because: `153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153`
|
||||||
|
- 154 is _not_ an Armstrong number, because: `154 != 1^3 + 5^3 + 4^3 = 1 + 125 + 64 = 190`
|
||||||
|
|
||||||
|
Write some code to determine whether a number is an Armstrong number.
|
||||||
|
|
||||||
|
[armstrong-number]: https://en.wikipedia.org/wiki/Narcissistic_number
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
### Created by
|
||||||
|
|
||||||
|
- @pheanex
|
||||||
|
|
||||||
|
### Contributed to by
|
||||||
|
|
||||||
|
- @BethanyG
|
||||||
|
- @cmccandless
|
||||||
|
- @Dog
|
||||||
|
- @K4cePhoenix
|
||||||
|
- @sukovanej
|
||||||
|
- @tqa236
|
||||||
|
|
||||||
|
### Based on
|
||||||
|
|
||||||
|
Wikipedia - https://en.wikipedia.org/wiki/Narcissistic_number
|
||||||
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -0,0 +1,7 @@
|
|||||||
|
def is_armstrong_number(number):
|
||||||
|
literal: str = str(number)
|
||||||
|
nr_digits: int = len(literal)
|
||||||
|
sum_of_digits: int = 0
|
||||||
|
for pos in range(nr_digits):
|
||||||
|
sum_of_digits += int(literal[pos]) ** nr_digits
|
||||||
|
return sum_of_digits == number
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user