Skip to content

Commit

Permalink
Add nix::isASCII*, locale-independent
Browse files Browse the repository at this point in the history
  • Loading branch information
roberth committed Dec 11, 2023
1 parent 1fa958d commit 79eb292
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 0 deletions.
17 changes: 17 additions & 0 deletions src/libutil/string.hh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#pragma once

namespace nix {

/** Locale-independent version of std::islower(). */
inline bool isASCIILower(char c) { return c >= 'a' && c <= 'z'; };

/** Locale-independent version of std::isupper(). */
inline bool isASCIIUpper(char c) { return c >= 'A' && c <= 'Z'; };

/** Locale-independent version of std::isalpha(). */
inline bool isASCIIAlpha(char c) { return isASCIILower(c) || isASCIIUpper(c); };

/** Locale-independent version of std::isdigit(). */
inline bool isASCIIDigit(char c) { return c >= '0' && c <= '9'; };

}
59 changes: 59 additions & 0 deletions tests/unit/libutil/string.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#include <gtest/gtest.h>
#include "string.hh"

namespace nix {

TEST(string, isASCIILower) {
ASSERT_TRUE(isASCIILower('a'));
ASSERT_TRUE(isASCIILower('z'));
ASSERT_FALSE(isASCIILower('A'));
ASSERT_FALSE(isASCIILower('Z'));
ASSERT_FALSE(isASCIILower('0'));
ASSERT_FALSE(isASCIILower('9'));
ASSERT_FALSE(isASCIILower(' '));
ASSERT_FALSE(isASCIILower('\n'));
ASSERT_FALSE(isASCIILower('\t'));
ASSERT_FALSE(isASCIILower(':'));
}

TEST(string, isASCIIUpper) {
ASSERT_FALSE(isASCIIUpper('a'));
ASSERT_FALSE(isASCIIUpper('z'));
ASSERT_TRUE(isASCIIUpper('A'));
ASSERT_TRUE(isASCIIUpper('Z'));
ASSERT_FALSE(isASCIIUpper('0'));
ASSERT_FALSE(isASCIIUpper('9'));
ASSERT_FALSE(isASCIIUpper(' '));
ASSERT_FALSE(isASCIIUpper('\n'));
ASSERT_FALSE(isASCIIUpper('\t'));
ASSERT_FALSE(isASCIIUpper(':'));
}

TEST(string, isASCIIAlpha) {
ASSERT_TRUE(isASCIIAlpha('a'));
ASSERT_TRUE(isASCIIAlpha('z'));
ASSERT_TRUE(isASCIIAlpha('A'));
ASSERT_TRUE(isASCIIAlpha('Z'));
ASSERT_FALSE(isASCIIAlpha('0'));
ASSERT_FALSE(isASCIIAlpha('9'));
ASSERT_FALSE(isASCIIAlpha(' '));
ASSERT_FALSE(isASCIIAlpha('\n'));
ASSERT_FALSE(isASCIIAlpha('\t'));
ASSERT_FALSE(isASCIIAlpha(':'));
}

TEST(string, isASCIIDigit) {
ASSERT_FALSE(isASCIIDigit('a'));
ASSERT_FALSE(isASCIIDigit('z'));
ASSERT_FALSE(isASCIIDigit('A'));
ASSERT_FALSE(isASCIIDigit('Z'));
ASSERT_TRUE(isASCIIDigit('0'));
ASSERT_TRUE(isASCIIDigit('1'));
ASSERT_TRUE(isASCIIDigit('9'));
ASSERT_FALSE(isASCIIDigit(' '));
ASSERT_FALSE(isASCIIDigit('\n'));
ASSERT_FALSE(isASCIIDigit('\t'));
ASSERT_FALSE(isASCIIDigit(':'));
}

}

0 comments on commit 79eb292

Please sign in to comment.