Mercurial > vim
view src/memfile_test.c @ 34136:36843e079f64 v9.1.0030
patch 9.1.0030: Cannot use terminal alternate font
Commit: https://github.com/vim/vim/commit/a606f3ac036e5f3dc313f620e6b4bc00812314f9
Author: PMunch <peterme@peterme.net>
Date: Wed Nov 15 15:35:49 2023 +0100
patch 9.1.0030: Cannot use terminal alternate font
Problem: Cannot use terminal alternate fonts (PMunch)
Solution: Support terminal alternate fonts using
CSI SGR 10-20 and t_CF code (PMunch)
Add support for alternate font highlighting
This adds support for alternate font highlighting using CSI SGR 10-20.
Few terminals currently support this, but with added tool support this
should improve over time. The change here is more or less taken from how
colors are configured and applied, but there might be some parts I
missed while implementing it. Changing fonts is done through the new
`:hi ctermfont` attribute which takes a number, 0 is the normal font, and
the numbers 1-9 select an "alternative" font. Which fonts are in use is
up to the terminal.
fixes: #13513
closes: #13537
Signed-off-by: PMunch <peterme@peterme.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Mon, 15 Jan 2024 22:30:03 +0100 |
parents | f41b55f9357c |
children |
line wrap: on
line source
/* vi:set ts=8 sts=4 sw=4 noet: * * VIM - Vi IMproved by Bram Moolenaar * * Do ":help uganda" in Vim to read copying and usage conditions. * Do ":help credits" in Vim to see a list of people who contributed. * See README.txt for an overview of the Vim source code. */ /* * memfile_test.c: Unittests for memfile.c * Mostly by Ivan Krasilnikov. */ #undef NDEBUG #include <assert.h> // Must include main.c because it contains much more than just main() #define NO_VIM_MAIN #include "main.c" // This file has to be included because the tested functions are static #include "memfile.c" #define index_to_key(i) ((i) ^ 15167) #define TEST_COUNT 50000 /* * Test mf_hash_*() functions. */ static void test_mf_hash(void) { mf_hashtab_T ht; mf_hashitem_T *item; blocknr_T key; long_u i; long_u num_buckets; mf_hash_init(&ht); // insert some items and check invariants for (i = 0; i < TEST_COUNT; i++) { assert(ht.mht_count == i); // check that number of buckets is a power of 2 num_buckets = ht.mht_mask + 1; assert(num_buckets > 0 && (num_buckets & (num_buckets - 1)) == 0); // check load factor assert(ht.mht_count <= (num_buckets << MHT_LOG_LOAD_FACTOR)); if (i < (MHT_INIT_SIZE << MHT_LOG_LOAD_FACTOR)) { // first expansion shouldn't have occurred yet assert(num_buckets == MHT_INIT_SIZE); assert(ht.mht_buckets == ht.mht_small_buckets); } else { assert(num_buckets > MHT_INIT_SIZE); assert(ht.mht_buckets != ht.mht_small_buckets); } key = index_to_key(i); assert(mf_hash_find(&ht, key) == NULL); // allocate and add new item item = LALLOC_CLEAR_ONE(mf_hashitem_T); assert(item != NULL); item->mhi_key = key; mf_hash_add_item(&ht, item); assert(mf_hash_find(&ht, key) == item); if (ht.mht_mask + 1 != num_buckets) { // hash table was expanded assert(ht.mht_mask + 1 == num_buckets * MHT_GROWTH_FACTOR); assert(i + 1 == (num_buckets << MHT_LOG_LOAD_FACTOR)); } } // check presence of inserted items for (i = 0; i < TEST_COUNT; i++) { key = index_to_key(i); item = mf_hash_find(&ht, key); assert(item != NULL); assert(item->mhi_key == key); } // delete some items for (i = 0; i < TEST_COUNT; i++) { if (i % 100 < 70) { key = index_to_key(i); item = mf_hash_find(&ht, key); assert(item != NULL); assert(item->mhi_key == key); mf_hash_rem_item(&ht, item); assert(mf_hash_find(&ht, key) == NULL); mf_hash_add_item(&ht, item); assert(mf_hash_find(&ht, key) == item); mf_hash_rem_item(&ht, item); assert(mf_hash_find(&ht, key) == NULL); vim_free(item); } } // check again for (i = 0; i < TEST_COUNT; i++) { key = index_to_key(i); item = mf_hash_find(&ht, key); if (i % 100 < 70) { assert(item == NULL); } else { assert(item != NULL); assert(item->mhi_key == key); } } // free hash table and all remaining items mf_hash_free_all(&ht); } int main(void) { test_mf_hash(); return 0; }